145 lines
5.7 KiB
TypeScript

import { AppComponent } from './app.component';
import { BrowserModule } from '@angular/platform-browser';
/* Routing */
import { AppRoutingModule } from './app-routing.module';
/* Angular Material */
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { AngularMaterialModule } from '@app_core/components/angular-material.module';
import { APPICON4LIVE_TOKEN, APPICON4NAVBAR_TOKEN, APPICON4TEST_TOKEN, ENVIRONMENT_TOKEN, IENVIRONMENT, SUPPORTED_CULTURES_TOKEN, SUPPORTED_LANGUAGES_TOKEN } from '@app_core/injection-tokens';
import { NgModule, CUSTOM_ELEMENTS_SCHEMA, Injectable } from '@angular/core';
/* FormsModule */
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
/* Components */
import { LayoutModule } from '@app_core/components/layout/layout.module';
import { NgxSpinnerModule } from 'ngx-spinner';
/* data acess */
import { HttpInterceptorService } from '@app_core/services/http/http-interceptor.service';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
/* Globals */
import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';
import { DxFormModule, DxButtonModule, DxTemplateHost, DxTemplateModule, DxChartModule, DxDataGridModule } from 'devextreme-angular';
import { NgxMaskDirective, NgxMaskPipe, optionsConfig, provideNgxMask } from 'ngx-mask';
import { Router } from '@angular/router';
import { ServiceWorkerModule } from '@angular/service-worker';
import { MessageBoxModule } from '@app_core/components/message-box/message-box.module';
import { ClipboardModule } from 'ngx-clipboard';
/* Localisaton */
import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { LocaleProvider } from '@app_core/services/localization/locale.provider';
import { HenselTranslateService } from '@app_core/services/localization/hensel-translate.service';
import { registerLocaleData } from '@angular/common';
import { loadMessages } from 'devextreme/localization';
import localeDe from '@angular/common/locales/de';
import localeUs from '@angular/common/locales/en';
import localeFr from '@angular/common/locales/fr';
import localeGb from '@angular/common/locales/en-GB';
export const SUPPORTED_CULTURES = ['de-DE', 'en-GB', 'en-US', 'fr-FR'];
registerLocaleData(localeDe, 'de-DE');
registerLocaleData(localeUs, 'en-US');
registerLocaleData(localeFr, 'fr-FR');
registerLocaleData(localeGb, 'en-GB');
import * as deMessages from 'devextreme/localization/messages/de.json';
loadMessages(deMessages);
// import { HammerGestureConfig, HAMMER_GESTURE_CONFIG, HammerModule } from '@angular/platform-browser';
// AoT requires an exported function for factories
// export class MyHammerConfig extends HammerGestureConfig {
// // tslint:disable-next-line:no-angle-bracket-type-assertion
// overrides = <any>{
// swipe: { direction: Hammer.DIRECTION_ALL },
// };
// }
/* Sentry */
import { APP_INITIALIZER, ErrorHandler } from '@angular/core';
import * as Sentry from '@sentry/angular';
import { SUPPORTED_LANGUAGES } from '@app_consts';
import { TranslateLoaderProvider } from '@app_core/services/localization/translation-loader.provider';
import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@app_core/components/angular-material-index';
/* important to use mask functionality */
const maskConfig: optionsConfig = {
validation: false,
};
declare const environment: IENVIRONMENT;
declare const appVersion: string;
declare const appBuild: string;
environment['appVersion'] = appVersion;
environment['appBuild'] = appBuild;
@Injectable()
export class SentryErrorHandler implements ErrorHandler {
handleError(error) {
Sentry.captureException(error.originalError || error);
}
}
@NgModule({
declarations: [
AppComponent,
],
imports: [
HttpClientModule,
BrowserModule,
BrowserAnimationsModule,
AngularMaterialModule,
ReactiveFormsModule,
FormsModule,
DxFormModule,
DxTemplateModule,
DxDataGridModule,
DxChartModule,
DxButtonModule,
MessageBoxModule,
ClipboardModule,
NgxSpinnerModule,
NgxMaskDirective,
NgxMaskPipe,
TranslateModule.forRoot({loader: TranslateLoaderProvider}),
ServiceWorkerModule.register('ngsw-worker.js', {
enabled: true, //environment.production,
// Register the ServiceWorker as soon as the application is stable
// or after 30 seconds (whichever comes first).
registrationStrategy: 'registerWhenStable:30000'
}),
LayoutModule,
AppRoutingModule, // must be the last!!!
],
providers: [
DxTemplateHost,
LocaleProvider,
{ provide: ENVIRONMENT_TOKEN, useValue: environment },
{ provide: SUPPORTED_LANGUAGES_TOKEN, useValue: SUPPORTED_LANGUAGES},
{ provide: SUPPORTED_CULTURES_TOKEN, useValue: SUPPORTED_CULTURES},
{ provide: APPICON4TEST_TOKEN, useValue: 'assets/icons/develop/dhr-icon-48x48.png'},
{ provide: APPICON4LIVE_TOKEN, useValue: 'assets/icons/production/dhr-icon-48x48.png'},
{ provide: APPICON4NAVBAR_TOKEN, useValue: 'assets/icons/main_48x48.png'},
{ provide: TranslateService, useClass: HenselTranslateService },
{ provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true },
{ provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { floatLabel: 'auto' } },
{ provide: ErrorStateMatcher, useClass: ShowOnDirtyErrorStateMatcher },
/* Sentry */
{ provide: ErrorHandler, useClass: SentryErrorHandler/*, useValue: Sentry.createErrorHandler({showDialog: false, })*/ },
{ provide: Sentry.TraceService, deps: [Router] },
{ provide: APP_INITIALIZER, useFactory: () => () => {}, deps: [Sentry.TraceService], multi: true },
provideNgxMask(maskConfig)
],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule { }