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 'ng-qrcode'; import { DatePipe } from '@angular/common'; import { ClipboardModule } from '@angular/cdk/clipboard'; import { AutofocusDirective } from './material/autofocus'; import { I18nPipe, I18nEmptyPipe } from './utils/i18n.pipe'; import { MomentPipe } from './utils/moment.pipe'; import { MainComponent } from './ui/main/main.component'; import { AccountComponent } from './pages/account/account.component'; import { ServicesComponent } from './pages/services/services.component'; import { AppComponent } from './app.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 { ServicesGridComponent } from './ui/servicesgrid/servicesgrid.component'; import { ServicesTableComponent } from './ui/servicestable/servicestable.component'; import { ProfileFieldPgpBlob } from './ui/profilefields/binary/pgp/profilefield.pgp-blob'; import { QuotasComponent } from './ui/quotas/quotas.component'; import { SecurityComponent, SecurityKeyDialog, 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 { DyndnsComponent } from './pages/account/dyndns/dyndns.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, JitsiEditDialog, JitsiShareDialog } from './pages/jitsi/jitsi.component'; import { ParteyComponent } from './pages/partey/partey.component'; import { ParteyTimeslotsComponent, ParteyTimeslotDialog } from './pages/partey/timeslots/timeslots.compontent'; import { UrlShortenerComponent, UrlShortenerPasswordComponent, UrlShortenerShareDialog, UrlShortenerEditDialog } from './pages/urlshortener/urlshortener.component'; import { BorrowItemEditComponent, BorrowItemsComponent } from './pages/borrow/items/items.component'; import { BorrowRequestEditComponent, BorrowRequestsComponent } from './pages/borrow/requests/requests.component'; import { BorrowProvingComponent, BorrowProvingResultDialog } from './pages/borrow/proving/proving.component'; import { DividerComponent } from './ui/divider/divider.component'; import { DividertestComponent } from './pages/dividertest/dividertest.component'; import { I18nService, I18nPaginatorIntl } from './services/i18n.service'; import { MinetestAccountsComponent } from './pages/minetest/accounts/accounts.component'; import { BorrowComponent } from './pages/borrow/borrow.component'; import { DurationpickerComponent } from './ui/durationpicker/durationpicker.component'; import { InviteCodeComponent } from './pages/invites/code/code.component'; import { InviteEditComponent } from './pages/invites/edit/invite.edit'; import { MatPaginatorIntl } from '@angular/material/paginator'; import { JukeboxComponent } from './pages/jukebox/jukebox.compontent'; import { FormLoginOidcComponent } from './pages/form-login-oidc/form-login-oidc.component'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MomentDateModule } from '@angular/material-moment-adapter'; import { MAT_DATE_FORMATS } from '@angular/material/core'; import { DatetimepickerComponent } from './ui/datetimepicker/datetimepicker.component'; import { AdminComponent } from './pages/admin/admin.component'; import { AdminUsersComponent } from './pages/admin/users/users.component'; import { AdminUserEditDialog } from './pages/admin/users/user.edit'; import { AdminPermissionEditDialog } from './pages/admin/permissions/permission.edit'; import { AdminQuotaEditDialog } from './pages/admin/quotas/quota.edit'; import { AdminServiceEditDialog } from './pages/admin/services/service.edit'; import { AdminPermissionMappingEditDialog } from './pages/admin/permission-mappings/permission-mapping.edit'; import { AdminQuotaMappingEditDialog } from './pages/admin/quota-mappings/quota-mapping.edit'; import { AdminServicesComponent } from './pages/admin/services/services.component'; import { AdminPermissionsComponent } from './pages/admin/permissions/permissions.component'; import { AdminQuotasComponent } from './pages/admin/quotas/quotas.component'; import { AdminJitsiRoomsComponent } from './pages/admin/jitsi-rooms/jitsi-rooms.component'; import { AdminMinetestAccountsComponent } from './pages/admin/minetest-accounts/minetest-accounts.component'; import { AdminShortenedUrlsComponent } from './pages/admin/shortened-urls/shortened-urls.component'; import { AdminShortenedUrlEditDialog } from './pages/admin/shortened-urls/shortened-url.edit'; import { AdminJukeboxComponent } from './pages/admin/jukebox/jukebox.component'; import { AdminParteyMapsComponent } from './pages/admin/partey-maps/partey-maps.component'; import { AdminParteyTagsComponent } from './pages/admin/partey-tags/partey-tags.component'; import { AdminParteyReportsComponent } from './pages/admin/partey-reports/partey-reports.component'; import { AdminTimeslotsComponent } from './pages/admin/timeslots/timeslots.component'; import { AdminSystemPropertiesComponent } from './pages/admin/system-properties/system-properties.component'; import { AdminPermissionMappingsComponent } from './pages/admin/permission-mappings/permission-mappings.component'; import { AdminQuotaMappingsComponent } from './pages/admin/quota-mappings/quota-mappings.component'; import { AdminVoucherMappingsComponent } from './pages/admin/voucher-mappings/voucher-mappings.component'; import { AdminSystemProfileFieldsComponent } from './pages/admin/system-profile-fields/system-profile-fields.component'; import { AdminUserAliasesComponent } from './pages/admin/user-aliases/user-aliases.component'; import { AdminOidcClientsComponent } from './pages/admin/oidc-clients/oidc-clients.component'; import { AdminOidcClientEditDialog } from './pages/admin/oidc-clients/oidc-client.edit'; import { AdminI18nComponent } from './pages/admin/i18n/i18n.component'; import { AdminI18nEditDialog } from './pages/admin/i18n/i18n.edit'; import { AdminVoucherMappingEditDialog } from './pages/admin/voucher-mappings/voucher-mapping.edit'; import { AdminSystemPropertyEditDialog } from './pages/admin/system-properties/system-property.edit'; import { AdminSystemProfileFieldEditDialog } from './pages/admin/system-profile-fields/system-profile-field.edit'; import { AdminUserAliasEditDialog } from './pages/admin/user-aliases/user-alias.edit'; import { AdminJitsiRoomEditDialog } from './pages/admin/jitsi-rooms/jitsi-room.edit'; export function init_app(i18n: I18nService) { return () => i18n.fetch() } @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, I18nEmptyPipe, MomentPipe, MainComponent, AppComponent, AccountComponent, FormLoginComponent, FormLogin2FAComponent, FormLoginOidcComponent, TokensComponent, InvitesComponent, InviteCodeComponent, InviteEditComponent, ServicesComponent, PermissionsComponent, ProfileFieldsComponent, ProfileFieldDialog, ProfileFieldBlob, ProfileFieldPgpBlob, ServicesGridComponent, ServicesTableComponent, QuotasComponent, SecurityComponent, SecurityTotpDialog, SecurityKeyDialog, VoucherComponent, VoucherDialog, InfoComponent, AliasesComponent, DomainsComponent, DyndnsComponent, ProfileComponent, PasswordComponent, PasswordResetComponent, RegisterComponent, RegisterDialog, UsernameDialog, UnavailableComponent, NotfoundComponent, HtmlComponent, ConfirmDialog, UserComponent, JitsiComponent, JitsiEditDialog, JitsiShareDialog, ParteyComponent, ParteyTimeslotsComponent, ParteyTimeslotDialog, MinetestAccountsComponent, UrlShortenerComponent, UrlShortenerShareDialog, UrlShortenerEditDialog, UrlShortenerPasswordComponent, BorrowComponent, BorrowItemsComponent, BorrowItemEditComponent, BorrowRequestsComponent, BorrowRequestEditComponent, BorrowProvingComponent, BorrowProvingResultDialog, DividerComponent, DividertestComponent, DatetimepickerComponent, DurationpickerComponent, JukeboxComponent, AdminComponent, AdminUsersComponent, AdminUserEditDialog, AdminPermissionEditDialog, AdminQuotaEditDialog, AdminServiceEditDialog, AdminPermissionMappingEditDialog, AdminQuotaMappingEditDialog, AdminOidcClientEditDialog, AdminVoucherMappingEditDialog, AdminSystemPropertyEditDialog, AdminSystemProfileFieldEditDialog, AdminUserAliasEditDialog, AdminJitsiRoomEditDialog, AdminServicesComponent, AdminPermissionsComponent, AdminQuotasComponent, AdminJitsiRoomsComponent, AdminMinetestAccountsComponent, AdminShortenedUrlsComponent, AdminShortenedUrlEditDialog, AdminJukeboxComponent, AdminParteyMapsComponent, AdminParteyTagsComponent, AdminParteyReportsComponent, AdminTimeslotsComponent, AdminSystemPropertiesComponent, AdminPermissionMappingsComponent, AdminQuotaMappingsComponent, AdminVoucherMappingsComponent, AdminSystemProfileFieldsComponent, AdminUserAliasesComponent, AdminOidcClientsComponent, AdminI18nComponent, AdminI18nEditDialog ], imports: [ BrowserModule, ClipboardModule, AppRoutingModule, BrowserAnimationsModule, MaterialModule, HttpClientModule, FormsModule, ReactiveFormsModule, QrCodeModule, MatDatepickerModule, MomentDateModule ], exports: [MaterialModule], providers: [{ provide: APP_INITIALIZER, useFactory: init_app, 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] }, { provide: MAT_DATE_FORMATS, useFactory: (i18n: I18nService) => { const datetimeformat = i18n.get('format.datetime', []); return { parse: { dateInput: datetimeformat }, display: { dateInput: datetimeformat, monthYearLabel: 'MMM YYYY', dateA11yLabel: 'LL', monthYearA11yLabel: 'MMMM YYYY' } }; }, deps: [I18nService] }], bootstrap: [AppComponent], }) export class AppModule { }