Skip to content
Snippets Groups Projects
app.module.ts 2.67 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { BrowserModule } from '@angular/platform-browser';
    import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
    
    import { NgModule, APP_INITIALIZER } from '@angular/core';
    
    import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';
    
    
    import { AppComponent } from './app.component';
    
    import { AppRoutingModule } from './app-routing.module';
    import { CoreModule } from './core/core.module';
    
    import { EditorialisationModule } from './editorialisation/editorialisation.module';
    
    import { UserModule } from './user/user.module';
    
    import { UserService } from './user/services';
    
    Matthieu Benoist's avatar
    Matthieu Benoist committed
    import { AppConfigService, NotificationService, TarteAuCitronService } from './core/services';
    
    import { timeout } from 'rxjs/operators';
    import { notificationMessages } from '../i18n/traductions';
    
    
    // Function used by APP_INITIALIZER before the app start: init user info / statut (expect a promise)
    
    export function initUserService(authService: UserService, notificationService: NotificationService) {
    
      return (): Promise<any> => {
    
        return new Promise<void>((resolve, reject) => {
    
          authService.initializeService().pipe(timeout(3000)).subscribe(
    
            (err) => {
              if (err.status !== 401) {
                notificationService.notify({
                  type: 'error',
                  message: notificationMessages.userInfo.userInit,
                });
              }
    
    Matthieu Benoist's avatar
    Matthieu Benoist committed
    export function initTarteaucitronService(tarteaucitronService: TarteAuCitronService) {
      return (): Promise<void> => {
    
    Dimitri DI GUSTO's avatar
    Dimitri DI GUSTO committed
        return new Promise((resolve, reject) => {
    
    Matthieu Benoist's avatar
    Matthieu Benoist committed
          tarteaucitronService.load();
          resolve();
        });
    
    Dimitri DI GUSTO's avatar
    Dimitri DI GUSTO committed
      };
    
    Matthieu Benoist's avatar
    Matthieu Benoist committed
    }
    
    
    export function initAppConfig(appConfigService: AppConfigService) {
    
      return (): Promise<any> => {
    
        return new Promise<void>((resolve, reject) => {
    
    @NgModule({
      declarations: [
    
      ],
      imports: [
        BrowserModule,
        BrowserAnimationsModule,
    
        HttpClientModule,
    
        AppRoutingModule,
    
        // The order is important as the InitUserService require the configuration of the app
    
        {
          provide: APP_INITIALIZER,
    
          useFactory: initAppConfig,
          deps: [AppConfigService],
    
    Matthieu Benoist's avatar
    Matthieu Benoist committed
        {
          provide: APP_INITIALIZER,
          useFactory: initTarteaucitronService,
          deps: [TarteAuCitronService],
          multi: true,
        },
    
          deps: [UserService, NotificationService],
    
      bootstrap: [AppComponent],
    
    })
    export class AppModule { }