agmission/Development/client/src/app/app.module.ts

161 lines
6.6 KiB
TypeScript

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);
}
}