mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-18 15:42:54 +00:00
172 lines
5.3 KiB
TypeScript
172 lines
5.3 KiB
TypeScript
/*
|
|
* Copyright (C) 2018-2020 StApps
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the Free
|
|
* Software Foundation, version 3.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
import {
|
|
CommonModule,
|
|
LocationStrategy,
|
|
PathLocationStrategy,
|
|
registerLocaleData,
|
|
} from '@angular/common';
|
|
import {HttpClient} from '@angular/common/http';
|
|
import localeDe from '@angular/common/locales/de';
|
|
import {APP_INITIALIZER, NgModule, Provider} from '@angular/core';
|
|
import {BrowserModule} from '@angular/platform-browser';
|
|
import {RouteReuseStrategy} from '@angular/router';
|
|
import {Diagnostic} from '@ionic-native/diagnostic/ngx';
|
|
import {SplashScreen} from '@ionic-native/splash-screen/ngx';
|
|
import {StatusBar} from '@ionic-native/status-bar/ngx';
|
|
import {IonicModule, IonicRouteStrategy} from '@ionic/angular';
|
|
import {
|
|
TranslateLoader,
|
|
TranslateModule,
|
|
TranslateService,
|
|
} from '@ngx-translate/core';
|
|
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
|
|
import moment from 'moment';
|
|
import 'moment/min/locales';
|
|
import {LoggerModule, NGXLogger, NgxLoggerLevel} from 'ngx-logger';
|
|
import {environment} from '../environments/environment';
|
|
import {AppRoutingModule} from './app-routing.module';
|
|
import {AppComponent} from './app.component';
|
|
import {ConfigModule} from './modules/config/config.module';
|
|
import {ConfigProvider} from './modules/config/config.provider';
|
|
import {DataModule} from './modules/data/data.module';
|
|
import {MapModule} from './modules/map/map.module';
|
|
import {MenuModule} from './modules/menu/menu.module';
|
|
import {NewsModule} from './modules/news/news.module';
|
|
import {ScheduleModule} from './modules/schedule/schedule.module';
|
|
import {SettingsModule} from './modules/settings/settings.module';
|
|
import {SettingsProvider} from './modules/settings/settings.provider';
|
|
import {StorageModule} from './modules/storage/storage.module';
|
|
import {ThingTranslateModule} from './translation/thing-translate.module';
|
|
import {fakeBackendProvider} from './_helpers/fake-backend.interceptor';
|
|
import {UtilModule} from './util/util.module';
|
|
import {initLogger} from './_helpers/ts-logger';
|
|
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
|
|
import {FavoritesModule} from './modules/favorites/favorites.module';
|
|
|
|
registerLocaleData(localeDe);
|
|
|
|
/**
|
|
* Initializes settings from Config before other components
|
|
*
|
|
* @param logger TODO
|
|
* @param settingsProvider provider of settings (e.g. language that has been set)
|
|
* @param configProvider TODO
|
|
* @param translateService TODO
|
|
*/
|
|
export function initSettingsFactory(
|
|
logger: NGXLogger,
|
|
settingsProvider: SettingsProvider,
|
|
configProvider: ConfigProvider,
|
|
translateService: TranslateService,
|
|
) {
|
|
return async () => {
|
|
initLogger(logger);
|
|
await settingsProvider.init();
|
|
try {
|
|
// set language from settings
|
|
if (configProvider.firstSession) {
|
|
await settingsProvider.setSettingValue(
|
|
'profile',
|
|
'language',
|
|
translateService.getBrowserLang(),
|
|
);
|
|
}
|
|
const languageCode = (await settingsProvider.getValue(
|
|
'profile',
|
|
'language',
|
|
)) as string;
|
|
// this language will be used as a fallback when a translation isn't found in the current language
|
|
translateService.setDefaultLang('en');
|
|
translateService.use(languageCode);
|
|
moment.locale(languageCode);
|
|
} catch (error) {
|
|
logger.warn(error);
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* TODO
|
|
*
|
|
* @param http TODO
|
|
*/
|
|
export function createTranslateLoader(http: HttpClient) {
|
|
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
|
|
}
|
|
|
|
const providers: Provider[] = [
|
|
StatusBar,
|
|
SplashScreen,
|
|
Diagnostic,
|
|
{
|
|
provide: RouteReuseStrategy,
|
|
useClass: IonicRouteStrategy,
|
|
},
|
|
{
|
|
provide: LocationStrategy,
|
|
useClass: PathLocationStrategy,
|
|
},
|
|
{
|
|
provide: APP_INITIALIZER,
|
|
multi: true,
|
|
deps: [NGXLogger, SettingsProvider, ConfigProvider, TranslateService],
|
|
useFactory: initSettingsFactory,
|
|
},
|
|
];
|
|
|
|
/**
|
|
* TODO
|
|
*/
|
|
@NgModule({
|
|
bootstrap: [AppComponent],
|
|
declarations: [AppComponent],
|
|
imports: [
|
|
AppRoutingModule,
|
|
BrowserModule,
|
|
BrowserAnimationsModule,
|
|
CommonModule,
|
|
ConfigModule,
|
|
DataModule,
|
|
IonicModule.forRoot(),
|
|
FavoritesModule,
|
|
MapModule,
|
|
MenuModule,
|
|
NewsModule,
|
|
ScheduleModule,
|
|
SettingsModule,
|
|
StorageModule,
|
|
ThingTranslateModule.forRoot(),
|
|
TranslateModule.forRoot({
|
|
loader: {
|
|
deps: [HttpClient],
|
|
provide: TranslateLoader,
|
|
useFactory: createTranslateLoader,
|
|
},
|
|
}),
|
|
UtilModule,
|
|
// use maximal logging level when not in production, minimal (log only fatal errors) in production
|
|
LoggerModule.forRoot({
|
|
level: environment.production
|
|
? NgxLoggerLevel.FATAL
|
|
: NgxLoggerLevel.TRACE,
|
|
}),
|
|
],
|
|
providers: environment.use_fake_backend
|
|
? [providers, fakeBackendProvider]
|
|
: providers,
|
|
})
|
|
export class AppModule {}
|