import { APP_INITIALIZER, NgModule, TRANSLATIONS, LOCALE_ID, TRANSLATIONS_FORMAT, Injector } from '@angular/core'; import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { MessagesModule } from 'primeng/messages'; import { DropdownModule } from 'primeng/dropdown'; import { InputTextModule } from 'primeng/inputtext'; import { ButtonModule } from 'primeng/button'; import { MenuModule } from 'primeng/menu'; import { ProgressSpinnerModule } from 'primeng/progressspinner'; import { ConfirmDialogModule } from 'primeng/confirmdialog'; import { DynamicDialogRef, DynamicDialogConfig } from 'primeng/dynamicdialog'; import { ConfirmationService, MessageService } from 'primeng/api'; import { ToastModule } from 'primeng/toast'; import { ScrollPanelModule } from 'primeng/scrollpanel'; import { CheckboxModule } from 'primeng/checkbox'; import { AppComponent } from './app.component'; import { AppMainComponent } from './app.main.component'; import { AppMenuComponent } from './app.menu.component'; import { AppMenuitemComponent } from './app.menuitem.component'; import { AppTopbarComponent } from './app.topbar.component'; import { AppFooterComponent } from './app.footer.component'; import { AppInlineProfileComponent } from './app.profile.component'; import { DashboardComponent } from './dashboard/dashboard.component'; import { ReportComponent } from './report.component'; import { PageNotFoundComponent } from './page-not-found.component'; import { StoreModule, ActionsSubject } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; import { AppDispatcher } from './app-actions'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { reducers, metaReducers } from './reducers'; import { MenuService } from './app.menu.service'; import { JobService } from './domain/services/job.service'; import { ClientService } from './domain/services/client.service'; import { PilotService } from './domain/services/pilot.service'; import { ProductService } from './domain/services/product.service'; import { VehicleService } from './domain/services/vehicle.service'; import { CustomerService } from './domain/services/customer.service'; import { UserService } from './domain/services/user.service'; import { GeocodeService } from './shared/geocode.service'; import { TrackService } from './domain/services/track.service'; import { AppRoutingModule } from './app-routing.module'; import { environment } from '@environments/environment'; import { AppConfigService } from './domain/services/app-config.service'; import { AuthInterceptor } from './domain/services/auth-interceptor.service'; import { SettingsGuard } from './domain/guards/settings-guard.service'; import { LanguageSwicherComponent } from './language-swicher.component'; import { AppEffects } from './effects/app.effects'; import { SubPlansEffects } from './effects/sub-plans.effects'; import { Utils } from './shared/utils'; import { AppInjector } from './app-injector'; import { BaseComp } from './shared/base/base.component'; import { MapBaseComp } from './shared/base/map-base.component'; import { MapEditBaseComp } from './shared/base/mapedit-base.component'; import { BillingService } from './domain/services/billing.service'; import { AppPasswordResetComp } from './pages/app.password-reset.component'; import { GlobalModule } from './shared/global.module'; import { HttpCancelService } from './domain/services/httpcancel.service'; import { ManageHttpInterceptor } from './domain/services/managehttp.interceptor.service'; import { InvoiceService } from '@app/domain/services/invoice.service'; import '@app/shared/number.extension'; import { RoutingEffects } from './effects/routing.effects'; import { SubscriptionEffects } from './effects/subscription.effects'; import { AppSharedModule } from './shared/app-shared.module'; import { GlobalErrorInterceptor } from './domain/services/global-error.interceptor'; // Use the require method provided by webpack declare const require; export function translationsFactory(locale: string) { locale = Utils.getLang(locale) if (locale === 'en') // default, does not need to load translation file return ''; else return require(`raw-loader!../locale/messages.${locale}.xlf`).default; } @NgModule({ imports: [ BrowserModule, BrowserAnimationsModule, HttpClientModule, GlobalModule, InputTextModule, ButtonModule, MenuModule, ProgressSpinnerModule, ScrollPanelModule, MessagesModule, ToastModule, ConfirmDialogModule, DropdownModule, CheckboxModule, AppSharedModule, // The store that defines our app state StoreModule.forRoot(reducers, { metaReducers, runtimeChecks: { strictStateImmutability: false, strictActionImmutability: false, // disabled until https://github.com/ngrx/platform/issues/2109 is resolved /* strictActionImmutability: true, */ }, }), // Must instrument after importing StoreModule StoreDevtoolsModule.instrument({ name: 'AgMission', maxAge: 15, logOnly: environment.production }), AppRoutingModule, EffectsModule.forRoot([AppEffects, SubPlansEffects, RoutingEffects, SubscriptionEffects]), ], declarations: [ BaseComp, MapBaseComp, MapEditBaseComp, PageNotFoundComponent, DashboardComponent, AppComponent, AppMainComponent, AppMenuComponent, AppMenuitemComponent, AppInlineProfileComponent, AppTopbarComponent, AppFooterComponent, LanguageSwicherComponent, ReportComponent, AppPasswordResetComp, ], providers: [ { provide: TRANSLATIONS, useFactory: translationsFactory, deps: [LOCALE_ID] }, { provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }, AppConfigService, HttpCancelService, { provide: HTTP_INTERCEPTORS, useClass: ManageHttpInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: GlobalErrorInterceptor, multi: true }, { provide: ActionsSubject, useClass: AppDispatcher }, MenuService, MessageService, ConfirmationService, DynamicDialogRef, DynamicDialogConfig, SettingsGuard, UserService, CustomerService, ClientService, JobService, ProductService, PilotService, TrackService, VehicleService, GeocodeService, BillingService, InvoiceService ], bootstrap: [AppComponent], exports: [], entryComponents: [] }) export class AppModule { constructor(private readonly injector: Injector) { AppInjector.setInjector(injector); } }