--- /dev/null
+/*
+ Copyright 2020 TATA ELXSI
+
+ Licensed under the Apache License, Version 2.0 (the 'License');
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
+*/
+
+/**
+ * @file App Components
+ */
+import { Component, HostListener, Injector } from '@angular/core';
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
+import { DEFAULT_INTERRUPTSOURCES, Idle } from '@ng-idle/core';
+import { AuthenticationService } from 'AuthenticationService';
+import { DeviceCheckService } from 'DeviceCheckService';
+import { SharedService } from 'SharedService';
+import { isNullOrUndefined } from 'util';
+
+/**
+ * Creating component
+ * @Component takes AppComponent.html as template url
+ */
+@Component({
+ selector: 'app-root',
+ templateUrl: './AppComponent.html',
+ styleUrls: ['./AppComponent.scss']
+})
+/** Exporting a class @exports AppComponent */
+export class AppComponent {
+ /** To inject services @public */
+ public injector: Injector;
+ /** Instance for modal service @public */
+ public modalService: NgbModal;
+ /** Device Check service @private */
+ private deviceCheckService: DeviceCheckService;
+ /** Utilizes auth service for any auth operations @private */
+ private authService: AuthenticationService;
+ /** Handle idle time out service @private */
+ private idle: Idle;
+ /** Contains all methods related to shared @private */
+ private sharedService: SharedService;
+
+ constructor(injector: Injector) {
+ this.injector = injector;
+ this.idle = this.injector.get(Idle);
+ this.authService = this.injector.get(AuthenticationService);
+ this.modalService = this.injector.get(NgbModal);
+ this.deviceCheckService = this.injector.get(DeviceCheckService);
+ this.handleIdle();
+ this.sharedService = this.injector.get(SharedService);
+ }
+
+ /**
+ * Lifecyle Hooks the trigger before component is instantiate
+ */
+ public ngOnInit(): void {
+ this.sharedService.fetchOSMVersion();
+ }
+
+ /** To handle handleIdle @public */
+ public handleIdle(): void {
+ const idleTime: number = 1200;
+ const idleTimeOutWarning: number = 5;
+ // sets an idle timeout in seconds.
+ this.idle.setIdle(idleTime);
+ //sets a timeout period in seconds. after idleTime seconds of inactivity, the user will be considered timed out.
+ this.idle.setTimeout(idleTimeOutWarning);
+ // sets the default interrupts, in this case, things like clicks, scrolls, touches to the document
+ this.idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);
+ this.idle.watch(true);
+ this.idleTimeOut();
+ }
+
+ /** Method to capture idle time out event @public */
+ public idleTimeOut(): void {
+ this.idle.onTimeout.subscribe(() => {
+ this.idle.stop();
+ if (localStorage.getItem('id_token') !== null) {
+ this.authService.logout();
+ }
+ });
+ }
+
+ /** Handling Window's Storage Hostlistener @public */
+ @HostListener('window:storage', ['$event'])
+ public handleLocalStorageEvent(evt: StorageEvent): void {
+ // On Token Change
+ if (evt.key === 'token_state' && !isNullOrUndefined(evt.key)) {
+ if (evt.oldValue !== evt.newValue) {
+ window.location.reload();
+ }
+ }
+ // On Langauges Change
+ if (evt.key === 'languageCode' && !isNullOrUndefined(evt.key)) {
+ if (evt.oldValue !== evt.newValue) {
+ window.location.reload();
+ }
+ }
+ }
+
+ /** Handling Window's POP State Hostlistener @public */
+ @HostListener('window:popstate', ['$event'])
+ public handleOnPOPState(evt: PopStateEvent): void {
+ this.modalService.dismissAll();
+ }
+
+ /** Handling Window's orientationchange Hostlistener @public */
+ @HostListener('window:resize', ['$event'])
+ public onResize(event: Event): void {
+ this.deviceCheckService.checkDeviceType();
+ }
+}