* Refractor settings component. * Improve responsiveness of settings component. * Add comments. Fixes #292
119 lines
3.5 KiB
TypeScript
119 lines
3.5 KiB
TypeScript
/** Angular Imports */
|
|
import { Component, OnInit } from '@angular/core';
|
|
import { Router, NavigationEnd, ActivatedRoute } from '@angular/router';
|
|
import { Title } from '@angular/platform-browser';
|
|
import { MatSnackBar } from '@angular/material';
|
|
|
|
/** rxjs Imports */
|
|
import { merge } from 'rxjs';
|
|
import { filter, map, mergeMap } from 'rxjs/operators';
|
|
|
|
/** Translation Imports */
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
|
|
/** Environment Configuration */
|
|
import { environment } from 'environments/environment';
|
|
|
|
/** Custom Services */
|
|
import { Logger } from './core/logger/logger.service';
|
|
import { I18nService } from './core/i18n/i18n.service';
|
|
import { ThemeStorageService } from './shared/theme-picker/theme-storage.service';
|
|
import { AlertService } from './core/alert/alert.service';
|
|
|
|
/** Custom Models */
|
|
import { Alert } from './core/alert/alert.model';
|
|
|
|
/** Initialize Logger */
|
|
const log = new Logger('MifosX');
|
|
|
|
/**
|
|
* Main web app component.
|
|
*/
|
|
@Component({
|
|
selector: 'mifosx-web-app',
|
|
templateUrl: './web-app.component.html',
|
|
styleUrls: ['./web-app.component.scss']
|
|
})
|
|
export class WebAppComponent implements OnInit {
|
|
|
|
/**
|
|
* @param {Router} router Router for navigation.
|
|
* @param {ActivatedRoute} activatedRoute Activated Route.
|
|
* @param {Title} titleService Title Service.
|
|
* @param {TranslateService} translateService Translate Service.
|
|
* @param {I18nService} i18nService I18n Service.
|
|
* @param {ThemeStorageService} themeStorageService Theme Storage Service.
|
|
* @param {MatSnackBar} snackBar Material Snackbar for notifications.
|
|
* @param {AlertService} alertService Alert Service.
|
|
*/
|
|
constructor(private router: Router,
|
|
private activatedRoute: ActivatedRoute,
|
|
private titleService: Title,
|
|
private translateService: TranslateService,
|
|
private i18nService: I18nService,
|
|
private themeStorageService: ThemeStorageService,
|
|
public snackBar: MatSnackBar,
|
|
private alertService: AlertService) { }
|
|
|
|
/**
|
|
* Initial Setup:
|
|
*
|
|
* 1) Logger
|
|
*
|
|
* 2) Language and Translations
|
|
*
|
|
* 3) Page Title
|
|
*
|
|
* 4) Theme
|
|
*
|
|
* 5) Alerts
|
|
*/
|
|
ngOnInit() {
|
|
// Setup logger
|
|
if (environment.production) {
|
|
Logger.enableProductionMode();
|
|
}
|
|
log.debug('init');
|
|
|
|
// Setup translations
|
|
this.i18nService.init(environment.defaultLanguage, environment.supportedLanguages);
|
|
|
|
// Change page title on navigation or language change, based on route data
|
|
const onNavigationEnd = this.router.events.pipe(filter(event => event instanceof NavigationEnd));
|
|
merge(this.translateService.onLangChange, onNavigationEnd)
|
|
.pipe(
|
|
map(() => {
|
|
let route = this.activatedRoute;
|
|
while (route.firstChild) {
|
|
route = route.firstChild;
|
|
}
|
|
return route;
|
|
}),
|
|
filter(route => route.outlet === 'primary'),
|
|
mergeMap(route => route.data)
|
|
)
|
|
.subscribe(event => {
|
|
const title = event['title'];
|
|
if (title) {
|
|
this.titleService.setTitle(`${this.translateService.instant(title)} | Mifos X`);
|
|
}
|
|
});
|
|
|
|
// Setup theme
|
|
const theme = this.themeStorageService.getTheme();
|
|
if (theme) {
|
|
this.themeStorageService.installTheme(theme);
|
|
}
|
|
|
|
// Setup alerts
|
|
this.alertService.alertEvent.subscribe((alertEvent: Alert) => {
|
|
this.snackBar.open(`${alertEvent.message}`, 'Close', {
|
|
duration: 2000,
|
|
horizontalPosition: 'right',
|
|
verticalPosition: 'top'
|
|
});
|
|
});
|
|
}
|
|
|
|
}
|