packages/router-plugin/src/router.module.ts

Summary

Maintainability
A
0 mins
Test Coverage
B
88%
import {
  EnvironmentProviders,
  ModuleWithProviders,
  NgModule,
  makeEnvironmentProviders
} from '@angular/core';
import { NgxsModule, provideStates } from '@ngxs/store';
import {
  NgxsRouterPluginOptions,
  ɵcreateRouterPluginOptions,
  ɵNGXS_ROUTER_PLUGIN_OPTIONS,
  ɵUSER_OPTIONS
} from '@ngxs/router-plugin/internals';

import { RouterState } from './router.state';
import { DefaultRouterStateSerializer, RouterStateSerializer } from './serializer';

@NgModule({
  imports: [NgxsModule.forFeature([RouterState])]
})
export class NgxsRouterPluginModule {
  static forRoot(
    options?: NgxsRouterPluginOptions
  ): ModuleWithProviders<NgxsRouterPluginModule> {
    return {
      ngModule: NgxsRouterPluginModule,
      providers: [
        { provide: ɵUSER_OPTIONS, useValue: options },
        {
          provide: ɵNGXS_ROUTER_PLUGIN_OPTIONS,
          useFactory: ɵcreateRouterPluginOptions,
          deps: [ɵUSER_OPTIONS]
        },
        { provide: RouterStateSerializer, useClass: DefaultRouterStateSerializer }
      ]
    };
  }
}

export function withNgxsRouterPlugin(options?: NgxsRouterPluginOptions): EnvironmentProviders {
  return makeEnvironmentProviders([
    provideStates([RouterState]),
    { provide: ɵUSER_OPTIONS, useValue: options },
    {
      provide: ɵNGXS_ROUTER_PLUGIN_OPTIONS,
      useFactory: ɵcreateRouterPluginOptions,
      deps: [ɵUSER_OPTIONS]
    },
    { provide: RouterStateSerializer, useClass: DefaultRouterStateSerializer }
  ]);
}