import { NgModule, Optional, SkipSelf } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule } from '@angular/router'; // NgRx import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; // Module stuff import { MwUserApiService, MwCompanyGuard, MwAuthGuard, AnonymousGuard, ModuleAccessGuard, MwUserService, UserActionGuard, MwUserAccessService, MwAuthService, } from './services'; import { UserEffects } from './@store/user.effects'; import { userReducer, userFeatureKey } from './@store/user.reducer'; import { companyReducer, companyFeatureKey } from './@store/company.reducer'; import { MwUserEffectsService } from './@store/user.effects.service'; import { OIDCEffects } from './@store/oidc.effects'; import { MwPreferenceLoadedGuard } from './services/guards/preference-loaded.guard'; import { MwCompanyApiService } from './services/company-api.service'; import { MwCompanyService } from './services/company.service'; import { CompanyEffects } from './@store/company.effects'; @NgModule({ imports: [ CommonModule, RouterModule, StoreModule.forFeature(userFeatureKey, userReducer), StoreModule.forFeature(companyFeatureKey, companyReducer), EffectsModule.forFeature([UserEffects, OIDCEffects, CompanyEffects]), ], providers: [ MwAuthGuard, MwCompanyGuard, UserActionGuard, ModuleAccessGuard, AnonymousGuard, MwPreferenceLoadedGuard, MwUserApiService, MwUserEffectsService, MwUserService, MwUserAccessService, MwCompanyApiService, MwCompanyService, { provide: 'AuthGuard', useClass: MwAuthGuard, }, ], }) export class MwAuthModule { constructor(@Optional() @SkipSelf() parentModule: MwAuthModule) { if (parentModule) { throw new Error( 'MwAuthModule is already loaded. Import it in the AppModule only' ); } } }