bstlboard-front/src/app/app.module.ts

115 lines
3.7 KiB
TypeScript

import { NgModule, Injectable, APP_INITIALIZER } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule, HttpInterceptor, HttpHandler, HttpRequest, HTTP_INTERCEPTORS } from '@angular/common/http';
import { MaterialModule } from './material/material.module';
import { QRCodeModule } from 'angularx-qrcode';
import { DatePipe } from '@angular/common';
import { MatPaginatorIntl } from '@angular/material/paginator';
import { MAT_DATE_LOCALE } from '@angular/material/core';
import * as moment from 'moment';
import { AutofocusDirective } from './material/autofocus';
import { I18nPipe } from './utils/i18n.pipe';
import { MomentPipe } from './utils/moment.pipe';
import { AppComponent } from './app.component';
import { PageEntry } from './pages/entry/entry.page';
import { PageLogin } from './pages/login/login.page';
import { PageNew } from './pages/new/new.page';
import { PageNotFound } from './pages/notfound/notfound.page'
import { PageSettings } from './pages/settings/settings.page';
import { PageSubmission } from './pages/submission/submission.page';
import { PageTop } from './pages/top/top.page';
import { PageUnavailable } from './pages/unavailable/unavailable.page'
import { UiComment } from './ui/comment/comment.ui';
import { UiCommentCount } from './ui/commentcount/commentcount.ui';
import { UiCommentForm } from './ui/commentform/commentform.ui';
import { UiComments } from './ui/comments/comments.ui';
import { UiEntries } from './ui/entries/entries.ui';
import { UiEntry } from './ui/entry/entry.ui';
import { UiMain } from './ui/main/main.ui';
import { UiPoints } from './ui/points/points.ui';
import { ConfirmDialog } from './ui/confirm/confirm.component'
import { I18nService, I18nPaginatorIntl } from './services/i18n.service';
export function fetchI18n(i18n: I18nService) {
return () => i18n.fetch().then(response => { }, error => { });
}
export function setMaterialDate(i18n: I18nService) {
let locale = i18n.getLocale();
if (locale == 'de-informal') {
locale = 'de';
}
moment.locale(locale);
return locale;
}
@Injectable()
export class XhrInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler) {
const xhr = req.clone({
headers: req.headers.set('X-Requested-With', 'XMLHttpRequest').set('Content-Type', 'application/json;charset=UTF-8'), withCredentials: true
});
return next.handle(xhr);
}
}
@NgModule({
declarations: [
AutofocusDirective,
I18nPipe,
MomentPipe,
AppComponent,
PageEntry,
PageLogin,
PageNew,
PageNotFound,
PageSettings,
PageSubmission,
PageTop,
PageUnavailable,
UiComment,
UiCommentCount,
UiCommentForm,
UiComments,
UiEntries,
UiEntry,
UiMain,
UiPoints,
ConfirmDialog,
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
MaterialModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule,
QRCodeModule,
],
exports: [ MaterialModule ],
providers: [ { provide: APP_INITIALIZER, useFactory: fetchI18n, deps: [ I18nService ], multi: true }, { provide: MAT_DATE_LOCALE, useFactory: setMaterialDate, deps: [ I18nService ], multi: true }, { provide: HTTP_INTERCEPTORS, useClass: XhrInterceptor, multi: true }, DatePipe,
{
provide: MatPaginatorIntl, useFactory: (i18n) => {
const service = new I18nPaginatorIntl();
service.injectI18n(i18n)
return service;
}, deps: [ I18nService ]
} ],
bootstrap: [ AppComponent ],
})
export class AppModule {
}