import { NgModule, Inject, APP_BOOTSTRAP_LISTENER, InjectionToken, Type, } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppCommonModule,AppCommonServiceModule,AuthConfigFactory } from '@farmmaps/common'; import { AppCommonMapModule} from '@farmmaps/common-map'; import {AppRootComponent} from './app.component'; import {StoreModule, ActionReducer,MetaReducer} from '@ngrx/store'; import {EffectsModule, EffectSources} from '@ngrx/effects'; import { StoreRouterConnectingModule} from '@ngrx/router-store'; import {AppRoutingModule} from './app-routing.module'; import { LogoComponent } from './logo/logo.component'; import { MenuComponent } from './menu/menu.component'; import {RegisterDeviceComponent} from './registerdevice/registerdevice.component'; import { SecureOAuthStorage} from '@farmmaps/common'; import { OAuthStorage } from 'angular-oauth2-oidc'; import {Id4AuthconfigFactory} from './id4AuthconfigFactory'; export const BOOTSTRAP_EFFECTS = new InjectionToken('Bootstrap Effects'); export function bootstrapEffects(effects: Type[], sources: EffectSources) { return () => { effects.forEach(effect => sources.addEffects(effect)); }; } export function createInstances(...instances: any[]) { return instances; } export function provideBootstrapEffects(effects: Type[]) { return [ effects, {provide: BOOTSTRAP_EFFECTS, deps: effects, useFactory: createInstances}, { provide: APP_BOOTSTRAP_LISTENER, multi: true, useFactory: bootstrapEffects, deps: [[new Inject(BOOTSTRAP_EFFECTS)], EffectSources], }, ]; } // console.log all actions export function debug(reducer: ActionReducer): ActionReducer { return function(state, action) { console.debug('-- State', state); console.debug('-- Action', action); return reducer(state, action); }; } export const metaReducers: MetaReducer[] = [debug]; @NgModule({ declarations: [ AppRootComponent, LogoComponent, MenuComponent, RegisterDeviceComponent ], imports: [ AppRoutingModule, AppCommonModule, AppCommonServiceModule.forRoot(), AppCommonMapModule.forRoot(), BrowserModule, StoreModule.forRoot({},{metaReducers,runtimeChecks: { // TODO fix this should all be true strictStateImmutability: false, strictActionImmutability: false, strictStateSerializability: false, strictActionSerializability: false }}), EffectsModule.forRoot([]) ], providers: [ AuthConfigFactory, { provide:AuthConfigFactory, useClass:Id4AuthconfigFactory } ], bootstrap: [AppRootComponent] }) export class AppModule { }