feat(core): create replaceable components state

#2404
pull/2522/head
mehmet-erim 6 years ago
parent 4d44e3b4a2
commit b9cdc461fe

@ -1,5 +1,6 @@
export * from './config.actions';
export * from './loader.actions';
export * from './profile.actions';
export * from './replaceable-components.actions';
export * from './rest.actions';
export * from './session.actions';
export * from './session.actions';

@ -0,0 +1,6 @@
import { ReplaceableComponents } from '../models/replaceable-components';
export class AddReplaceableComponent {
static readonly type = '[ReplaceableComponents] Add';
constructor(public payload: ReplaceableComponents.Data | ReplaceableComponents.Data[]) {}
}

@ -30,10 +30,11 @@ import { SessionState } from './states/session.state';
import { getInitialData, localeInitializer } from './utils/initial-utils';
import './utils/date-extensions';
import { ReplaceableRouteContainerComponent } from './components/replaceable-route-container.component';
import { ReplaceableComponentsState } from './states/replaceable-components.state';
@NgModule({
imports: [
NgxsModule.forFeature([ProfileState, SessionState, ConfigState]),
NgxsModule.forFeature([ReplaceableComponentsState, ProfileState, SessionState, ConfigState]),
NgxsRouterPluginModule.forRoot(),
NgxsStoragePluginModule.forRoot({ key: ['SessionState'] }),
OAuthModule.forRoot(),

@ -1,6 +1,7 @@
export * from './application-configuration';
export * from './common';
export * from './config';
export * from './rest';
export * from './session';
export * from './profile';
export * from './replaceable-components';
export * from './rest';
export * from './session';

@ -0,0 +1,12 @@
import { Type } from '@angular/core';
export namespace ReplaceableComponents {
export interface State {
replaceableComponents: Data[];
}
export interface Data {
component: Type<any>;
key: string;
}
}

@ -1,3 +1,4 @@
export * from './profile.state';
export * from "./replaceable-components.state";
export * from './config.state';
export * from './session.state';
export * from './profile.state';
export * from './session.state';

@ -0,0 +1,44 @@
import { State, Action, StateContext, Selector, createSelector } from '@ngxs/store';
import { AddReplaceableComponent } from '../actions/replaceable-components.actions';
import { ReplaceableComponents } from '../models/replaceable-components';
import snq from 'snq';
@State<ReplaceableComponents.State>({
name: 'ReplaceableComponentsState',
defaults: { replaceableComponents: [] } as ReplaceableComponents.State,
})
export class ReplaceableComponentsState {
@Selector()
static getAll({
replaceableComponents,
}: ReplaceableComponents.State): ReplaceableComponents.Data[] {
return replaceableComponents || [];
}
static getOne(key: string) {
const selector = createSelector(
[ReplaceableComponentsState],
({ replaceableComponents }: ReplaceableComponents.State) => {
return snq(() => replaceableComponents.find(component => component.key === key));
},
);
return selector;
}
@Action(AddReplaceableComponent)
replaceableComponentsAction(
{ getState, patchState }: StateContext<ReplaceableComponents.State>,
{ payload }: AddReplaceableComponent,
) {
if (!Array.isArray(payload)) {
payload = [payload];
}
const { replaceableComponents } = getState();
patchState({
replaceableComponents: [...replaceableComponents, ...payload],
});
}
}
Loading…
Cancel
Save