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 {AutofocusDirective} from './material/autofocus'; import {I18nPipe} from './utils/i18n.pipe'; import {ImprintComponent, PrivacyPolicyComponent, TermsOfServiceComponent} from './pages/general/general.component'; import {AccountComponent} from './pages/account/account.component'; import {ServicesComponent} from './pages/services/services.component'; import {AppComponent} from './app.component'; import {LoginComponent} from './pages/login/login.component'; import {FormLoginComponent} from './pages/form-login/form-login.component'; import {FormLogin2FAComponent} from './pages/form-login-2fa/form-login-2fa.component'; import {TokensComponent} from './pages/tokens/tokens.component'; import {InvitesComponent} from './pages/invites/invites.component'; import {PermissionsComponent} from './ui/permissions/permissions.component'; import {ProfileFieldDialog, ProfileFieldsComponent, ProfileFieldBlob} from './ui/profilefields/profilefields.component'; import {ProfileFieldPgpBlob} from './ui/profilefields/binary/pgp/profilefield.pgp-blob'; import {QuotasComponent} from './ui/quotas/quotas.component'; import {SecurityComponent, SecurityTotpDialog} from './pages/account/security/security.component'; import {VoucherComponent} from './pages/account/voucher/voucher.component'; import {VoucherDialog} from './pages/account/voucher/voucher.component'; import {InfoComponent} from './pages/account/info/info.component'; import {AliasesComponent} from './pages/account/aliases/aliases.component'; import {DomainsComponent} from './pages/account/domains/domains.component'; import {ProfileComponent} from './pages/account/profile/profile.component'; import {PasswordComponent} from './pages/password/password.component'; import {PasswordResetComponent} from './pages/password-reset/password-reset.component'; import {RegisterComponent, RegisterDialog} from './pages/register/register.component'; import {UsernameDialog} from './pages/register/username-dialog/username.dialog'; import {UnavailableComponent} from './pages/unavailable/unavailable.component'; import {NotfoundComponent} from './pages/notfound/notfound.component'; import {HtmlComponent} from './utils/html/html.component'; import {ConfirmDialog} from './ui/confirm/confirm.component' import {UserComponent} from './pages/user/user.component' import {JitsiComponent, JitsiShareDialog} from './pages/jitsi/jitsi.component' import {ParteyTimeslotsComponent, ParteyTimeslotDialog} from './pages/partey/timeslots/timeslots.compontent' import {UrlShortenerComponent, UrlShortenerPasswordComponent, UrlShortenerShareDialog} from './pages/urlshortener/urlshortener.component' import {I18nService} from './services/i18n.service'; import {MinetestAccountsComponent} from './pages/minetest/accounts/accounts.component'; export function init_app(i18n: I18nService) { return () => i18n.fetch().then(response => {}, error => {}); } @Injectable() export class XhrInterceptor implements HttpInterceptor { intercept(req: HttpRequest, 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, AppComponent, ImprintComponent, PrivacyPolicyComponent, TermsOfServiceComponent, AccountComponent, LoginComponent, FormLoginComponent, FormLogin2FAComponent, TokensComponent, InvitesComponent, ServicesComponent, PermissionsComponent, ProfileFieldsComponent, ProfileFieldDialog, ProfileFieldBlob, ProfileFieldPgpBlob, QuotasComponent, SecurityComponent, SecurityTotpDialog, VoucherComponent, VoucherDialog, InfoComponent, AliasesComponent, DomainsComponent, ProfileComponent, PasswordComponent, PasswordResetComponent, RegisterComponent, RegisterDialog, UsernameDialog, UnavailableComponent, NotfoundComponent, HtmlComponent, ConfirmDialog, UserComponent, JitsiComponent, JitsiShareDialog, ParteyTimeslotsComponent, ParteyTimeslotDialog, MinetestAccountsComponent, UrlShortenerComponent, UrlShortenerShareDialog, UrlShortenerPasswordComponent ], imports: [ BrowserModule, AppRoutingModule, BrowserAnimationsModule, MaterialModule, HttpClientModule, FormsModule, ReactiveFormsModule, QRCodeModule, ], exports: [MaterialModule], providers: [{provide: APP_INITIALIZER, useFactory: init_app, deps: [I18nService], multi: true}, {provide: HTTP_INTERCEPTORS, useClass: XhrInterceptor, multi: true}, DatePipe], bootstrap: [AppComponent], }) export class AppModule { }