import { Component, OnInit, OnDestroy, Inject, ViewEncapsulation, RendererFactory2, PLATFORM_ID, ChangeDetectionStrategy, HostListener, Input } from '@angular/core'; import { Router, NavigationStart, NavigationEnd, RouteConfigLoadStart, RouteConfigLoadEnd, ActivatedRoute, PRIMARY_OUTLET } from '@angular/router'; import { Meta, Title, MetaDefinition } from '@angular/platform-browser';import { DOCUMENT } from "@angular/common"; import { Subscription , Observable } from 'rxjs'; import { Store, Action } from '@ngrx/store'; import { IUser } from '../../models/user'; //AppCommon import { IEventMessage } from '../../models/event.message'; import { IListItem} from '../../models/list.item'; import { EventService } from '../../services/event.service'; import * as commonActions from '../../actions/app-common.actions'; import * as appReducers from '../../reducers/app-common.reducer'; @Component({ selector: 'fm-app', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }) export class AppComponent implements OnInit, OnDestroy { // This will go at the END of your title for example "Home - Angular Universal..." <-- after the dash (-) private endPageTitle: string = 'Farmmaps'; // If no Title is provided, we'll use a default one before the dash(-) private defaultPageTitle: string = 'Farmmaps'; private routerSub$: Subscription; private eventSub$: Subscription; public currentFolder: Observable; public folderParents: Observable; public fullScreen: Observable; public routeLoading: Observable; public menuVisible: Observable; public accountMenuVisible: Observable; public user:Observable; @Input() showUploadProgress: boolean =true; constructor( private router: Router, private activatedRoute: ActivatedRoute, private title: Title, private meta: Meta, private store: Store, private eventService: EventService, ) { var connection = navigator['connection'] || navigator['mozConnection'] || navigator['webkitConnection']; if(connection) { this.setOnOffline(connection); connection.addEventListener('change', () => { this.setOnOffline(connection); }); } } setOnOffline(connection:any) { console.debug(connection); if(connection.downlink == 0) { this.store.dispatch(new commonActions.Offline()); } else { this.store.dispatch(new commonActions.Online()); } } getActionFromEvent(event: IEventMessage): Action { var action: Action = null; console.debug(`${event.eventType} Event received`); switch (event.eventType) { case "ItemChanged": { action = new commonActions.ItemChangedEvent(event.itemCode, event.attributes); break; } case "ItemAdded": { action = new commonActions.ItemAddedEvent(event.itemCode, event.attributes); break; } case "ItemDeleted": { action = new commonActions.ItemDeletedEvent(event.itemCode, event.attributes); break; } case "taskStart": { action = new commonActions.TaskStartEvent(event.itemCode, event.attributes); break; } case "taskEnd": { action = new commonActions.TaskEndEvent(event.itemCode, event.attributes); break; } case "taskError": { action = new commonActions.TaskErrorEvent(event.itemCode, event.attributes); break; } case "deviceUpdate": { action = new commonActions.DeviceUpdateEvent(event.itemCode, event.attributes); break; } } return action; } ngOnInit() { this.fullScreen = this.store.select(appReducers.selectGetFullScreen); this.routeLoading = this.store.select(appReducers.selectGetRouteLoading); this.menuVisible = this.store.select(appReducers.SelectGetMenuVisible); this.accountMenuVisible = this.store.select(appReducers.SelectGetAccountMenuVisible); this.user = this.store.select(appReducers.SelectGetUser); this.InstallRouteEventHandler(); this.InstallEventServiceEventHandler(); } @HostListener('document:keyup', ['$event']) onKeyUp(event: KeyboardEvent) { let x = event.keyCode; if (x === 27) { this.store.dispatch(new commonActions.Escape(true,false)); } } ngOnDestroy() { // Subscription clean-up if(this.routerSub$) this.routerSub$.unsubscribe(); if(this.eventSub$) this.eventSub$.unsubscribe(); } private InstallRouteEventHandler() { var other = this; this.routerSub$ = this.router.events.subscribe(event => { if (event instanceof RouteConfigLoadStart) { other.store.dispatch(new commonActions.StartRouteLoading()); } if (event instanceof RouteConfigLoadEnd) { other.store.dispatch(new commonActions.EndRouteLoading()); } if(event instanceof NavigationStart) { other.store.dispatch(new commonActions.SetMenuVisible(false)); } }); } private InstallEventServiceEventHandler() { var other = this; this.eventSub$ = this.eventService.event.subscribe(event => { var action = other.getActionFromEvent(event); if (action) other.store.dispatch(action); }); } handleClick(event: MouseEvent) { this.store.dispatch(new commonActions.Escape(false,true)); } handleStopBubble(event: MouseEvent) { event.stopPropagation(); } handleToggleMenu(event:MouseEvent) { event.stopPropagation(); this.store.dispatch(new commonActions.ToggleMenu()); } }