60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import { Type } from '@angular/core';
|
|
import { Action, combineReducers, Selector, createSelector } from '@ngrx/store';
|
|
|
|
import * as InitStore from './init';
|
|
import * as OptionStore from './option';
|
|
import * as QueryStore from './query';
|
|
import * as VersionInfoStore from './version-info';
|
|
|
|
export interface State {
|
|
init: InitStore.State;
|
|
option: OptionStore.State;
|
|
query: QueryStore.State;
|
|
versionInfo: VersionInfoStore.State;
|
|
}
|
|
|
|
export const effects: Type<any>[] = [
|
|
InitStore.Effects,
|
|
OptionStore.Effects,
|
|
QueryStore.Effects,
|
|
VersionInfoStore.Effects
|
|
];
|
|
|
|
export function reducers(state: State | undefined, action: Action) {
|
|
return combineReducers({
|
|
init: InitStore.reducer,
|
|
option: OptionStore.reducer,
|
|
query: QueryStore.reducer,
|
|
versionInfo: VersionInfoStore.reducer
|
|
})(state, action);
|
|
}
|
|
|
|
export function selectors<S>(selector: Selector<any, State>) {
|
|
return {
|
|
InitSelector: InitStore.selectors(
|
|
createSelector(
|
|
selector,
|
|
(state: State) => state.init
|
|
)
|
|
),
|
|
OptionSelector: OptionStore.selectors(
|
|
createSelector(
|
|
selector,
|
|
(state: State) => state.option
|
|
)
|
|
),
|
|
QuerySelector: QueryStore.selectors(
|
|
createSelector(
|
|
selector,
|
|
(state: State) => state.query
|
|
)
|
|
),
|
|
VersionInfoSelector: VersionInfoStore.selectors(
|
|
createSelector(
|
|
selector,
|
|
(state: State) => state.versionInfo
|
|
)
|
|
)
|
|
};
|
|
}
|