2018-08-29 13:21:25 +02:00
|
|
|
import { Component, NgModuleRef } from '@angular/core';
|
2018-06-29 17:24:44 +02:00
|
|
|
import { TranslateService } from '@ngx-translate/core';
|
2018-08-28 11:07:10 +02:00
|
|
|
import { OperatorService } from './core/services/operator.service';
|
|
|
|
import { Subject } from 'rxjs';
|
|
|
|
import { AppModule } from './app.module';
|
|
|
|
import { OpenSlidesComponent } from './openslides.component';
|
|
|
|
import { OpenSlidesService } from './core/services/openslides.service';
|
2018-06-13 18:34:10 +02:00
|
|
|
|
2018-07-12 14:11:31 +02:00
|
|
|
/**
|
|
|
|
* Angular's global App Component
|
|
|
|
*/
|
2018-06-13 18:34:10 +02:00
|
|
|
@Component({
|
2018-09-03 17:57:20 +02:00
|
|
|
selector: 'os-root',
|
2018-06-19 16:55:50 +02:00
|
|
|
templateUrl: './app.component.html',
|
2018-08-28 09:33:50 +02:00
|
|
|
styleUrls: ['./app.component.scss']
|
2018-06-13 18:34:10 +02:00
|
|
|
})
|
2018-07-06 09:38:25 +02:00
|
|
|
export class AppComponent {
|
2018-07-12 14:11:31 +02:00
|
|
|
/**
|
2018-08-28 11:07:10 +02:00
|
|
|
* This subject gets called, when the bootstrapping of the hole application is done.
|
|
|
|
*/
|
|
|
|
private static bootstrapDoneSubject: Subject<NgModuleRef<AppModule>> = new Subject<NgModuleRef<AppModule>>();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This function should only be called, when the bootstrapping is done with a reference to
|
|
|
|
* the bootstrapped module.
|
|
|
|
* @param moduleRef Reference to the bootstrapped AppModule
|
|
|
|
*/
|
2018-09-07 13:12:59 +02:00
|
|
|
public static bootstrapDone(moduleRef: NgModuleRef<AppModule>): void {
|
2018-08-28 11:07:10 +02:00
|
|
|
AppComponent.bootstrapDoneSubject.next(moduleRef);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initialises the translation unit.
|
2018-08-23 15:28:57 +02:00
|
|
|
* @param autoupdateService
|
|
|
|
* @param notifyService
|
2018-07-12 14:11:31 +02:00
|
|
|
* @param translate
|
|
|
|
*/
|
2018-08-29 13:21:25 +02:00
|
|
|
public constructor(
|
|
|
|
translate: TranslateService,
|
2018-08-28 11:07:10 +02:00
|
|
|
private operator: OperatorService,
|
|
|
|
private OpenSlides: OpenSlidesService
|
2018-08-23 15:28:57 +02:00
|
|
|
) {
|
2018-06-29 17:24:44 +02:00
|
|
|
// manually add the supported languages
|
|
|
|
translate.addLangs(['en', 'de', 'fr']);
|
|
|
|
// this language will be used as a fallback when a translation isn't found in the current language
|
|
|
|
translate.setDefaultLang('en');
|
|
|
|
// get the browsers default language
|
|
|
|
const browserLang = translate.getBrowserLang();
|
|
|
|
// try to use the browser language if it is available. If not, uses english.
|
|
|
|
translate.use(translate.getLangs().includes(browserLang) ? browserLang : 'en');
|
2018-08-28 11:07:10 +02:00
|
|
|
|
|
|
|
AppComponent.bootstrapDoneSubject.asObservable().subscribe(this.setup.bind(this));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets called, when bootstrapping is done. Gets the root injector, sets up the operator and starts OpenSlides.
|
|
|
|
* @param moduleRef
|
|
|
|
*/
|
|
|
|
private setup(moduleRef: NgModuleRef<AppModule>): void {
|
|
|
|
OpenSlidesComponent.injector = moduleRef.injector;
|
|
|
|
|
|
|
|
// Setup the operator after the root injector is known.
|
|
|
|
this.operator.setupSubscription();
|
|
|
|
|
|
|
|
this.OpenSlides.bootup(); // Yeah!
|
2018-06-29 17:24:44 +02:00
|
|
|
}
|
2018-06-13 18:34:10 +02:00
|
|
|
}
|