app.module.ts 4.79 KiB
import {BrowserModule} from '@angular/platform-browser';
import {APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, NgModule} from '@angular/core';
import {FormsModule} from '@angular/forms';
import {JWT_OPTIONS, JwtModule} from '@auth0/angular-jwt';
import {routing} from './app.routes';
import {AppComponent} from './app.component';
import {AppConfigService} from './service';
import {WelcomeModule} from './welcome/welcome.module';
import {AppMarketModule} from './appmarket';
import {SharedModule} from './shared';
import {AuthGuard} from './auth/auth.guard';
import {AuthService} from './auth/auth.service';
import {MissingTranslationHandler, TranslateLoader, TranslateModule, TranslateService} from '@ngx-translate/core';
import {HttpClient, HttpClientModule} from '@angular/common/http';
import {CustomMissingTranslationService} from './i18n/custommissingtranslation.service';
import {TranslateLoaderImpl} from './i18n/translate-loader-impl.service';
import {ServiceUnavailableModule} from './service-unavailable/service-unavailable.module';
import {ServiceUnavailableService} from './service-unavailable/service-unavailable.service';
import {NgTerminalModule} from 'ng-terminal';
import { provideZxvbnServiceForPSM } from 'angular-password-strength-meter/zxcvbn';
import { FormioModule } from '@formio/angular';
import { LeftMenuComponent } from './shared/left-menu/left-menu.component';
import { ToastContainerComponent, ToastMode } from './shared/toast-container/toast-container.component';
import { MessageService } from 'primeng/api';
import { ToastModule } from 'primeng/toast';
import {SplitButtonModule} from 'primeng/splitbutton';
import {MenuModule} from 'primeng/menu';
import { AdminLeftMenuComponent } from './shared/admin-left-menu/admin-left-menu.component';
import {AccordionModule} from 'primeng/accordion';
import { RecaptchaVisibilityService } from './service/recaptcha-visibility.service';
export function appConfigFactory(config: AppConfigService) {
return function create() {
return config.load();
}
}
export function serviceAvailableFactory(config: AppConfigService, http: HttpClient, provider: ServiceUnavailableService) {
return function create() {
return config.load().then(() => {
console.log('App Config', config.config)
return provider.validateServicesAvailability();
});
}
}
export const jwtOptionsFactory = (appConfig: AppConfigService) => ({
tokenGetter: () => {
return localStorage.getItem('token'); // TODO: change this to be able to replace 'token' with definied name
},
allowedDomains: appConfig.jwtAllowedDomains
});
@NgModule({
declarations: [
AppComponent,
LeftMenuComponent,
ToastContainerComponent,
AdminLeftMenuComponent
],
imports: [
BrowserModule,
FormsModule,
HttpClientModule,
JwtModule.forRoot({
jwtOptionsProvider: {
provide: JWT_OPTIONS,
deps: [AppConfigService],
useFactory: jwtOptionsFactory
}
}),
AppMarketModule,
SharedModule,
WelcomeModule,
ServiceUnavailableModule,
routing,
TranslateModule.forRoot({
missingTranslationHandler: {provide: MissingTranslationHandler, useClass: CustomMissingTranslationService},
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient, AppConfigService, ServiceUnavailableService]
}
}),
NgTerminalModule,
FormioModule,
ToastModule,
SplitButtonModule,
MenuModule,
AccordionModule,
],
providers: [
AuthGuard,
AuthService,
RecaptchaVisibilityService,
AppConfigService,
provideZxvbnServiceForPSM(),
{
provide: APP_INITIALIZER,
useFactory: appConfigFactory,
deps: [AppConfigService],
multi: true,
},
TranslateService,
ServiceUnavailableService,
{
provide: APP_INITIALIZER,
useFactory: serviceAvailableFactory,
deps: [AppConfigService, HttpClient, ServiceUnavailableService],
multi: true,
},
MessageService
],
exports: [
TranslateModule
],
bootstrap: [AppComponent],
schemas: [
CUSTOM_ELEMENTS_SCHEMA,
NO_ERRORS_SCHEMA
]
})
export class AppModule {
}
export function HttpLoaderFactory(httpClient: HttpClient, appConfig: AppConfigService, serviceAvailability: ServiceUnavailableService) {
// return new TranslateHttpLoader(httpClient);// Use this if you want to get the language json from local asset folder
return new TranslateLoaderImpl(httpClient, appConfig, serviceAvailability);
}