import { OnInit } from '@angular/core'; import { IConfigurationService } from '../../configuration/config.interface'; import { ConfigService } from '../../configuration/config.service'; import { ConfigData } from '../../configuration/config.modal'; import { LoggerService } from '../../logger/log.service'; import { ILogger } from '../../logger/log.interface'; import { BroadcastService } from '../../broadcast/broadcast.service'; import { IBroadcastService } from '../../broadcast/broadcast.interface'; export abstract class BasePage implements OnInit { private configurationData: ConfigData; private configService: IConfigurationService; private broadcastService: IBroadcastService; private logger: ILogger; constructor( configService: ConfigService, broadcastService: BroadcastService, logger: LoggerService ) { this.configService = configService; this.broadcastService = broadcastService; this.logger = logger; } /// Contains configuration data provided by each Client. /// This is maintained by Global Nav. protected get configData(): ConfigData { return this.configurationData; } protected get loggerSvc(): ILogger { return this.logger; } /// Use the broadcast service to send messages between Components. /// Works similar to Angular 1.x $scope.broadcast, but different syntax. protected get broadcastSvc(): IBroadcastService { return this.broadcastService; } private initializeConfigurationData(): void { this.configService.retrieveConfigData().subscribe((response: ConfigData) => { let that: BasePage = this; this.configurationData = response; console.log(`Configuration Data File is ${(that.configService.isLoaded === true) ? 'loaded' : 'not loaded'}`); this.initialize(); }); } public abstract initialize(): void; public ngOnInit(): void { this.initializeConfigurationData(); } }