import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule } from '@ngrx/store'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { StoreRouterConnectingModule, RouterStateSerializer, } from '@ngrx/router-store'; import { EffectsModule } from '@ngrx/effects'; import { environment } from '../environments/environment'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { MaterialModule } from './commons/ui/material/material.module'; import { SimpleRouterStateSerializer } from './commons/router/state/serializer/simple-router-state-serializer'; import { reducers } from './app.reducers'; @NgModule({ declarations: [ AppComponent, ], imports: [ BrowserModule, BrowserAnimationsModule, AppRoutingModule, StoreModule.forRoot(reducers), /** * @ngrx/router-store keeps router state up-to-date in the store. */ StoreRouterConnectingModule.forRoot({ /* They stateKey defines the name of the state used by the router-store reducer. This matches the key defined in the map of reducers */ stateKey: 'router', }), /** * Store devtools instrument the store retaining past versions of state * and recalculating new states. This enables powerful time-travel * debugging. * * To use the debugger, install the Redux Devtools extension for either * Chrome or Firefox * * See: https://github.com/zalmoxisus/redux-devtools-extension */ StoreDevtoolsModule.instrument({ name: 'overFlow WebApp DevTools', logOnly: environment.production, }), EffectsModule.forRoot([]), MaterialModule, ], providers: [ /** * The `RouterStateSnapshot` provided by the `Router` is a large complex structure. * A custom RouterStateSerializer is used to parse the `RouterStateSnapshot` provided * by `@ngrx/router-store` to include only the desired pieces of the snapshot. */ { provide: RouterStateSerializer, useClass: SimpleRouterStateSerializer }, ], bootstrap: [AppComponent] }) export class AppModule { }