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[] = [ 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(selector: Selector) { 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 ) ) }; }