import { ViewChild, ChangeDetectorRef, HostListener } from '@angular/core'; import { Router, NavigationEnd, NavigationStart, NavigationCancel, NavigationError } from '@angular/router'; import { Title } from '@angular/platform-browser'; import { RdUser } from './base/rdUser'; import { RdMain } from './base/rdMain'; import { RdLib } from './base/rdLib'; import { ModalInstance } from './components/predefinedPages/modalInstance'; import { PopoverInstance } from './components/predefinedPages/popoverInstance'; import { SweetAlertInstance } from './components/predefinedPages/sweetAlertInstance'; import { Sidebar } from './components/regions/default/sidebar'; import { BlockPage } from './components/misc/block'; declare const jQuery; declare const mApp: any; declare const mUtil: any; // @dynamic export class AppComponent { @ViewChild(ModalInstance) modalInstance: ModalInstance; @ViewChild(PopoverInstance) popoverInstance: PopoverInstance; @ViewChild(SweetAlertInstance) sweetAlertInstance: SweetAlertInstance; @ViewChild("sidebar") sidebar: Sidebar; static instance: AppComponent; static client: RdMain; // Modules static user: RdUser = new RdUser(); AppComponent = AppComponent; customPage: any; loginPage = AppComponent.client.loginPage; pageNotFoundComponent = AppComponent.client.pageNotFoundComponent; blockInstance = new BlockPage(); isPageNotFound = false; isCustomPage = false; @HostListener('window:keyup', ['$event']) keyupEvent(event: KeyboardEvent) { RdLib.keyboard.onKeyUp(event) } @HostListener('window:keydown', ['$event']) keydownEvent(event: KeyboardEvent) { RdLib.keyboard.onKeydown(event) } constructor( public router: Router, private titleService: Title, private changeDetector: ChangeDetectorRef) { AppComponent.instance = this; this.router.events.subscribe(navigate => { this.changeDetector.detectChanges(); if (navigate instanceof NavigationStart) AppComponent.instance.blockInstance.blockPage(true); if (navigate instanceof NavigationEnd) { // AppComponent.client.checkLoginDelegate(loggedIn => { // back-end controls // if (!loggedIn) AppComponent.user.loggedIn = false; // }); AppComponent.instance.blockInstance.blockPage(false); // RdLib.keyboard.onRouteChange(); mApp.init(); mUtil.init(); let routeConfig = this.getRouteConfig(this.router.routerState.root); let customPageItem = AppComponent.client.customPages.find(x => x.path == routeConfig.path); if (customPageItem) { this.customPage = customPageItem.component; this.isCustomPage = true; } else this.isCustomPage = false; if (routeConfig.path == "**") this.isPageNotFound = true; else { jQuery('.m-error-3').remove(); this.isPageNotFound = false; } this.titleService.setTitle(RdLib.localization.translate(routeConfig.data.title)); let animation = 'm-animate-fade-in-up'; jQuery('.m-wrapper').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', (e) => { jQuery('.m-wrapper').removeClass(animation); }).removeClass(animation).addClass(animation); } if (navigate instanceof NavigationCancel) AppComponent.instance.blockInstance.blockPage(false); if (navigate instanceof NavigationError) { AppComponent.instance.blockInstance.blockPage(false); AppComponent.user.loggedIn = false; RdLib.screenOperations.toastr.error(RdLib.localization.translateEn("Unexpected System Error. Please Login Again")); } }) } ngAfterViewInit() { AppComponent.client.sideBarDelegateOnNewTabOrReload(); } getRouteConfig(root) { if (!root.children.length) return root.routeConfig; else return this.getRouteConfig(root.children[0]); } /* functions for client */ public login(name, password, rememberMe, moduleName, captcha?) { AppComponent.instance.blockInstance.blockPage(true); return new Promise((resolve, reject) => { AppComponent.client.loginDelegate(name, password, rememberMe, captcha, (loggedIn, err?) => { if (err) reject(err); this.sideBarAuthControl(loggedIn, moduleName, resolve); }); }); } public loginCustomer(name, password, rememberMe, moduleName, captcha, token) { AppComponent.instance.blockInstance.blockPage(true); return new Promise((resolve, reject) => { AppComponent.client.loginCustomerDelegate(name, password, rememberMe, captcha, token, (loggedIn, err?) => { if (err) reject(err); if ((loggedIn.IsTwoFactorAutEnable && token) || !loggedIn.IsTwoFactorAutEnable) this.sideBarAuthControl(loggedIn, moduleName, resolve); else { AppComponent.instance.blockInstance.blockPage(false); resolve(loggedIn); } }); }); } public loginCustomerSec(referansNo, identifierSec, password, rememberMe, moduleName, captcha, token) { AppComponent.instance.blockInstance.blockPage(true); return new Promise((resolve, reject) => { AppComponent.client.loginCustomerSecDelegate(referansNo, identifierSec, password, rememberMe, captcha, token, (loggedIn, err?) => { if (err) reject(err); if ((loggedIn.IsTwoFactorAutEnable && token) || !loggedIn.IsTwoFactorAutEnable) this.sideBarAuthControl(loggedIn, moduleName, resolve); else { AppComponent.instance.blockInstance.blockPage(false); resolve(loggedIn); } }); }); } public loginSupplier(etso, email, token, rememberMe, moduleName, captcha) { AppComponent.instance.blockInstance.blockPage(true); return new Promise((resolve, reject) => { AppComponent.client.loginSupplierDelegate(etso, email, token, rememberMe, captcha, (loggedIn, err?) => { if (err) reject(err); if (token) this.sideBarAuthControl(loggedIn, moduleName, resolve); else { AppComponent.instance.blockInstance.blockPage(false); resolve(loggedIn); } }) }) } private sideBarAuthControl(loggedIn, moduleName, resolve) { if (loggedIn && AppComponent.client.getSidebarAuthControl(moduleName)) { AppComponent.client.sideBarDelegateOnLogin(loggedIn, (items) => { this.sidebar.setDynamicSidebar(items); }) } AppComponent.instance.blockInstance.blockPage(false); if (loggedIn) { AppComponent.user.loggedIn = true; } resolve(loggedIn); } public logout() { AppComponent.instance.blockInstance.blockPage(true); return new Promise((resolve, reject) => { AppComponent.client.logoutDelegate((loggedOut) => { AppComponent.instance.blockInstance.blockPage(false); if (loggedOut) AppComponent.user.loggedIn = false; resolve(loggedOut); }); }); } public export(params) { AppComponent.instance.blockInstance.blockPage(true); AppComponent.client.exportDelegate(params, () => { AppComponent.instance.blockInstance.blockPage(false); }); } /* end */ }