mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-09 11:12:52 +00:00
refactor: use APP_INITIALIZER for settings init
This commit is contained in:
@@ -16,14 +16,10 @@ import {Component} from '@angular/core';
|
||||
import {SplashScreen} from '@ionic-native/splash-screen/ngx';
|
||||
import {StatusBar} from '@ionic-native/status-bar/ngx';
|
||||
import {Platform} from '@ionic/angular';
|
||||
import {TranslateService} from '@ngx-translate/core';
|
||||
import {SCLanguageCode} from '@openstapps/core';
|
||||
import {NGXLogger} from 'ngx-logger';
|
||||
import {ConfigProvider} from './modules/config/config.provider';
|
||||
import {SettingsProvider} from './modules/settings/settings.provider';
|
||||
import {ThingTranslateService} from './translation/thing-translate.service';
|
||||
|
||||
import {initLogger} from './_helpers/ts-logger';
|
||||
/**
|
||||
* TODO
|
||||
*/
|
||||
@@ -60,14 +56,9 @@ export class AppComponent {
|
||||
constructor(private readonly platform: Platform,
|
||||
private readonly statusBar: StatusBar,
|
||||
private readonly splashScreen: SplashScreen,
|
||||
private readonly translateService: TranslateService,
|
||||
private readonly thingTranslateService: ThingTranslateService,
|
||||
private readonly settingsProvider: SettingsProvider,
|
||||
private readonly configProvider: ConfigProvider,
|
||||
private readonly logger: NGXLogger) {
|
||||
initLogger(logger);
|
||||
// this language will be used as a fallback when a translation isn't found in the current language
|
||||
this.translateService.setDefaultLang('en');
|
||||
this.initializeApp();
|
||||
}
|
||||
|
||||
@@ -102,18 +93,6 @@ export class AppComponent {
|
||||
'credentials',
|
||||
'others',
|
||||
]);
|
||||
|
||||
try {
|
||||
// set language from settings
|
||||
if (this.configProvider.firstSession) {
|
||||
await this.settingsProvider.setSettingValue('profile', 'language', this.translateService.getBrowserLang());
|
||||
}
|
||||
const languageCode = (await this.settingsProvider.getValue('profile', 'language')) as string;
|
||||
this.thingTranslateService.translator.language = languageCode as SCLanguageCode;
|
||||
this.translateService.use(languageCode);
|
||||
} catch (error) {
|
||||
this.logger.warn(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,31 +15,63 @@
|
||||
import {CommonModule, HashLocationStrategy, LocationStrategy, registerLocaleData} from '@angular/common';
|
||||
import {HttpClient} from '@angular/common/http';
|
||||
import localeDe from '@angular/common/locales/de';
|
||||
import {NgModule, Provider} from '@angular/core';
|
||||
import {APP_INITIALIZER, NgModule, Provider} from '@angular/core';
|
||||
import {BrowserModule} from '@angular/platform-browser';
|
||||
import {RouteReuseStrategy} from '@angular/router';
|
||||
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} from '@ngx-translate/core';
|
||||
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, NgxLoggerLevel} from 'ngx-logger';
|
||||
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 {MenuModule} from './modules/menu/menu.module';
|
||||
import {NewsModule} from './modules/news/news.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 {initLogger} from './_helpers/ts-logger';
|
||||
|
||||
registerLocaleData(localeDe);
|
||||
|
||||
/**
|
||||
* Initializes settings from Config before other components
|
||||
*
|
||||
* @param settingsProvider provider of settings (e.g. language that has been set)
|
||||
*/
|
||||
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
|
||||
*
|
||||
@@ -60,6 +92,12 @@ const providers : Provider[] = [
|
||||
provide: LocationStrategy,
|
||||
useClass: HashLocationStrategy,
|
||||
},
|
||||
{
|
||||
provide: APP_INITIALIZER,
|
||||
multi: true,
|
||||
deps: [NGXLogger,SettingsProvider,ConfigProvider,TranslateService],
|
||||
useFactory: initSettingsFactory,
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,7 +40,7 @@ export class ThingTranslateService implements OnDestroy {
|
||||
*/
|
||||
constructor(private readonly translateService: TranslateService,
|
||||
public parser: ThingTranslateParser){
|
||||
this.translator = new SCThingTranslator(this.translateService.getBrowserLang() as SCLanguageCode ?? 'en');
|
||||
this.translator = new SCThingTranslator((translateService.currentLang ?? translateService.defaultLang) as SCLanguageCode);
|
||||
/** set the default language from configuration */
|
||||
this.onLangChange = this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {
|
||||
this.translator.language = event.lang as keyof SCTranslations<SCLanguage>;
|
||||
|
||||
Reference in New Issue
Block a user