UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

881 lines (880 loc) 68.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Component, ViewChild } from '@angular/core'; import { Router } from '@angular/router'; import { PhloxAppInfoService } from '../service/PhloxAppInfoService.service'; import { PhloxAppService } from '../service/PhloxAppService.service'; import { ObservableManager } from '../service/ObservableManager.service'; import { NeedFocusService } from '../service/NeedFocusService.service'; import { DialogService } from '../service/DialogService.service'; import { BackgroundProcessManager } from '../service/BackgroundProcessManager.service'; import { AbstractNavLeftLayout } from './AbstractNavLeftLayout'; import { MaterialBarLoader } from '../theme/material/component/MaterialBarLoader.component'; var /** @type {?} */ TYPE_NAME = "phx-app"; /** * <p style="text-indent: 2em;"> * A main bootstrap component class for <code>PhloxUI</code> application. This class implements the [[INavigator]] interface having pages ([[AbstractPage]]) * as <code>navigatee</code> items ([[INavigatee]]). An <code>application</code> may consist of various pages, for example, it may have a login page to allow the user to * login, once the user is logged on, it will navigate the user to the main page, etc. * </p> * * @author shiorin, tee4cute */ var PhloxApp = /** @class */ (function () { function PhloxApp(router, appInfoService, appSvc, observableMgr, needFocusService, dialogService, bgProcessMgr) { var _this = this; this.curRouterLoading = { "path": null, "resolve": null, "reject": null }; this.pages = []; this.router = router; this.appInfoService = appInfoService; this.observableMgr = observableMgr; this.needFocusService = needFocusService; this.reloadAppInfo(); this.dialogService = dialogService; this.bgProcessMgr = bgProcessMgr; this._showLoader = false; // Set app instance to PhloxAppService to allow others to access this instance. appSvc.setInstance(this); // init dialog service this.dialogService.init(this); this.observableMgr.subscribe(BackgroundProcessManager.PROCESS_START_TOPIC_NAME, function (startBGProcess) { if (startBGProcess.type === 'connection.page') { _this.runPageLoader(); } }); this.observableMgr.subscribe(BackgroundProcessManager.PROCESS_END_TOPIC_NAME, function (endBGProcess) { if (endBGProcess.type === 'connection.page') { if (_this.bgProcessMgr.getRunningProcessesCount('connection.page', null) <= 0) { _this.stopPageLoader(); } } }); this.observableMgr.subscribe(BackgroundProcessManager.PROCESS_ERROR_TOPIC_NAME, function (errorBGProcess) { if (errorBGProcess.type === 'connection.page') { if (_this.bgProcessMgr.getRunningProcessesCount('connection.page', null) <= 0) { _this.stopPageLoader(); } } }); } /** * @return {?} */ PhloxApp.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.observableMgr.subscribe(AbstractNavLeftLayout.FIXED_CHANGE_TOPIC_NAME, function (layout) { console.log('Nav left "' + layout.getSubTopicName() + '" fixed: ' + layout.fixed); }); this.observableMgr.subscribe(AbstractNavLeftLayout.TOGGLED_CHANGE_TOPIC_NAME, function (layout) { console.log('Nav left "' + layout.getSubTopicName() + '" toggled: ' + layout.toggled); }); // fixed=false, toggled=true setTimeout(function () { _this.observableMgr.publish(AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME, true); }, 1500); // fixed=false, toggled=false setTimeout(function () { _this.observableMgr.publish(AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME, false); }, 3000); // fixed=true, toggled=false setTimeout(function () { _this.observableMgr.publish(AbstractNavLeftLayout.FIXED_CMD_TOPIC_NAME, true); }, 3500); // fixed=true, toggled=true setTimeout(function () { _this.observableMgr.publish(AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME, true); }, 4500); // fixed=true, toggled=false setTimeout(function () { _this.observableMgr.publish(AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME, false); }, 6000); // fixed=false, toggled=false setTimeout(function () { _this.observableMgr.publish(AbstractNavLeftLayout.FIXED_CMD_TOPIC_NAME, false); }, 6500); }; /** * @return {?} */ PhloxApp.prototype.isShowLoader = /** * @return {?} */ function () { return this._showLoader; }; /** * <p style="text-indent: 1em;"> * Get app info of currently opened <code>application</code>. * </p> * @return {?} */ PhloxApp.prototype.getAppInfo = /** * <p style="text-indent: 1em;"> * Get app info of currently opened <code>application</code>. * </p> * @return {?} */ function () { return this.appInfo; }; /** * <p style="text-indent: 1em;"> * Reload the app info from <code>PhloxAppInfoService</code>. * </p> * @return {?} */ PhloxApp.prototype.reloadAppInfo = /** * <p style="text-indent: 1em;"> * Reload the app info from <code>PhloxAppInfoService</code>. * </p> * @return {?} */ function () { var _this = this; return this.appInfoService.reload().then(function (result) { _this.appInfo = result; return Promise.resolve(_this.appInfo); }); }; /** * @return {?} */ PhloxApp.prototype.getRouter = /** * @return {?} */ function () { return this.router; }; /** * <p style="text-indent: 1em;"> * Get all available <code>pages</code> ([[AbstractPage]]) in this <code>application</code>. * </p> * * @see [[INavigator.getItems]] * @return {?} */ PhloxApp.prototype.getItems = /** * <p style="text-indent: 1em;"> * Get all available <code>pages</code> ([[AbstractPage]]) in this <code>application</code>. * </p> * * @see [[INavigator.getItems]] * @return {?} */ function () { return this.pages; }; /** * <p style="text-indent: 1em;"> * Get all available <code>page</code> count ([[AbstractPage]]) in this <code>application</code>. * </p> * * @see [[INavigator.getItemCount]] * @return {?} */ PhloxApp.prototype.getItemCount = /** * <p style="text-indent: 1em;"> * Get all available <code>page</code> count ([[AbstractPage]]) in this <code>application</code>. * </p> * * @see [[INavigator.getItemCount]] * @return {?} */ function () { return this.pages.length; }; /** * <p style="text-indent: 1em;"> * Get current active <code>page</code> ([[AbstractPage]]) index in the array returned from [[getItems]] method. * </p> * * @see [[INavigator.getActiveIndex]] * @return {?} Returns <code>-1</code> if there is no current active <code>page</code>. */ PhloxApp.prototype.getActiveIndex = /** * <p style="text-indent: 1em;"> * Get current active <code>page</code> ([[AbstractPage]]) index in the array returned from [[getItems]] method. * </p> * * @see [[INavigator.getActiveIndex]] * @return {?} Returns <code>-1</code> if there is no current active <code>page</code>. */ function () { for (var /** @type {?} */ i = 0; i < this.pages.length; i++) { if (this.pages[i].isActive()) { return i; } } return -1; }; /** * <p style="text-indent: 1em;"> * Get current active <code>page</code> ([[AbstractPage]]) object instance. * </p> * * @see [[INavigator.getActiveItem]] * @return {?} Returns <code>null</code> if there is no current active <code>page</code>. */ PhloxApp.prototype.getActiveItem = /** * <p style="text-indent: 1em;"> * Get current active <code>page</code> ([[AbstractPage]]) object instance. * </p> * * @see [[INavigator.getActiveItem]] * @return {?} Returns <code>null</code> if there is no current active <code>page</code>. */ function () { var /** @type {?} */ idx = this.getActiveIndex(); if (idx < 0) { return null; } return this.pages[idx]; }; /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.setItems]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.setItems]] * @param {?} items * @return {?} */ PhloxApp.prototype.setItems = /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.setItems]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.setItems]] * @param {?} items * @return {?} */ function (items) { this.pages = items; }; /** * <p style="text-indent: 1em;"> * Add a new <code>page</code> ([[AbstractPage]]) into this <code>application</code>. If the <code>page</code> (<code><b>item</b></code>) being added is the * first <code>page</code> of this <code>application</code>, this method will automatically show the given <code>page</code> and set its <code>active</code> * flag to <code>true</code>. * </p> * * @see [[INavigator.addItem]] * @param {?} item * @return {?} */ PhloxApp.prototype.addItem = /** * <p style="text-indent: 1em;"> * Add a new <code>page</code> ([[AbstractPage]]) into this <code>application</code>. If the <code>page</code> (<code><b>item</b></code>) being added is the * first <code>page</code> of this <code>application</code>, this method will automatically show the given <code>page</code> and set its <code>active</code> * flag to <code>true</code>. * </p> * * @see [[INavigator.addItem]] * @param {?} item * @return {?} */ function (item) { if (this.containsItem(item)) { return false; } this.pages.push(item); if (this.pages.length === 1) { // This is the first one. So, it should be active! item.active = true; } return true; }; /** * <p style="text-indent: 1em;"> * Remove the given <code>page</code> ([[AbstractPage]]) from this <code>application</code>. If the <code>page</code> (<code><b>item</b></code>) being removed is * currently active, this method will automatically unset its <code>active</code> flag and show the first <code>page</code> (if available) in the array returned from * [[getItems]] method instead. * </p> * * @see [[INavigator.removeItem]] * @param {?} item * @return {?} */ PhloxApp.prototype.removeItem = /** * <p style="text-indent: 1em;"> * Remove the given <code>page</code> ([[AbstractPage]]) from this <code>application</code>. If the <code>page</code> (<code><b>item</b></code>) being removed is * currently active, this method will automatically unset its <code>active</code> flag and show the first <code>page</code> (if available) in the array returned from * [[getItems]] method instead. * </p> * * @see [[INavigator.removeItem]] * @param {?} item * @return {?} */ function (item) { var /** @type {?} */ idx = this.pages.indexOf(item); if (idx < 0) { return false; } this.pages = this.pages.slice(idx, 1); if (item.active) { // Set page active to false. item.active = false; // If it is currently active page, we've to navigate to another one. this.navigateToIndex(0); } return true; }; /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.containsItem]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.containsItem]] * @param {?} item * @return {?} */ PhloxApp.prototype.containsItem = /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.containsItem]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.containsItem]] * @param {?} item * @return {?} */ function (item) { return this.pages.indexOf(item) >= 0; }; /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.getItemByIndex]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.getItemByIndex]] * @param {?} idx * @return {?} */ PhloxApp.prototype.getItemByIndex = /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.getItemByIndex]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.getItemByIndex]] * @param {?} idx * @return {?} */ function (idx) { if (idx < 0 || idx >= this.pages.length) { return null; } return this.pages[idx]; }; /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.getItemByName]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.getItemByName]] * @param {?} name * @return {?} */ PhloxApp.prototype.getItemByName = /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.getItemByName]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.getItemByName]] * @param {?} name * @return {?} */ function (name) { var /** @type {?} */ idx = this.getItemIndexByName(name); if (idx < 0) { return null; } return this.pages[idx]; }; /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.getItemIndex]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.getItemIndex]] * @param {?} item * @return {?} */ PhloxApp.prototype.getItemIndex = /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.getItemIndex]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.getItemIndex]] * @param {?} item * @return {?} */ function (item) { return this.pages.indexOf(item); }; /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.getItemIndexByName]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.getItemIndexByName]] * @param {?} name * @return {?} */ PhloxApp.prototype.getItemIndexByName = /** * <p style="text-indent: 1em;"> * An implementation of [[INavigator.getItemIndexByName]] method. Please see the documentation of super class or super interface for more details. * </p> * * @see [[INavigator.getItemIndexByName]] * @param {?} name * @return {?} */ function (name) { for (var /** @type {?} */ i = 0; i < this.pages.length; i++) { if (this.pages[i].getName() === name) { return i; } } return -1; }; /** * <p style="text-indent: 1em;"> * An alias method of [[navigateToName]] passing <code>page</code>'s name ([[AbstractPage.getName]]) as a parameter. * </p> * * @see [[INavigator.navigateTo]] * @see [[navigateToName]] * @param {?} item * @param {?=} options * @return {?} */ PhloxApp.prototype.navigateTo = /** * <p style="text-indent: 1em;"> * An alias method of [[navigateToName]] passing <code>page</code>'s name ([[AbstractPage.getName]]) as a parameter. * </p> * * @see [[INavigator.navigateTo]] * @see [[navigateToName]] * @param {?} item * @param {?=} options * @return {?} */ function (item, options) { return this.navigateToName(item.getName(), options); }; /** * <p style="text-indent: 1em;"> * An alias method of [[navigateTo]] passing <code>page</code> instance at the given index (<code><b>idx</b></code>) as a parameter. * </p> * * @see [[INavigator.navigateToIndex]] * @see [[navigateTo]] * @param {?} idx * @param {?=} options * @return {?} */ PhloxApp.prototype.navigateToIndex = /** * <p style="text-indent: 1em;"> * An alias method of [[navigateTo]] passing <code>page</code> instance at the given index (<code><b>idx</b></code>) as a parameter. * </p> * * @see [[INavigator.navigateToIndex]] * @see [[navigateTo]] * @param {?} idx * @param {?=} options * @return {?} */ function (idx, options) { var /** @type {?} */ page = this.getItemByIndex(idx); if (page === null) { return Promise.resolve(false); } return this.navigateTo(page, options); }; /** * <p style="text-indent: 1em;"> * Navigate this <code>application</code> to the given <code>page</code> <code><b>name</b></code>. The <code>page</code> name is also a * <code>router</code>'s uri path specified in [[PHLOX_ROUTES]]. * </p> * * @see [[INavigator.navigateToName]] * @see [[PHLOX_ROUTES]] * @param {?} name * @param {?=} options * @return {?} */ PhloxApp.prototype.navigateToName = /** * <p style="text-indent: 1em;"> * Navigate this <code>application</code> to the given <code>page</code> <code><b>name</b></code>. The <code>page</code> name is also a * <code>router</code>'s uri path specified in [[PHLOX_ROUTES]]. * </p> * * @see [[INavigator.navigateToName]] * @see [[PHLOX_ROUTES]] * @param {?} name * @param {?=} options * @return {?} */ function (name, options) { var _this = this; var /** @type {?} */ link = name; if (link === null || typeof link !== 'string') { return Promise.resolve(false); } if (link.length <= 0) { return Promise.resolve(false); } if (link.charAt(0) !== '/') { link = '/' + link; } if (this.router.url === link) { // Currently active return Promise.resolve(false); } var /** @type {?} */ nav = [link]; if (options !== null && options !== undefined) { nav.push(options); } // Navigate to specified link return this.router.navigate(nav).then(function (success) { if (success) { var /** @type {?} */ curActive = _this.getActiveItem(); if (curActive !== null) { // Set current page active to false curActive.active = false; } var /** @type {?} */ newPage = _this.getItemByName(link.substring(1)); if (newPage !== null) { newPage.active = true; } } else { console.warn('Could not navigate to "' + name + '".'); } return Promise.resolve(success); }); }; /** * <p style="text-indent: 1em;"> * Try to navigate this <code>application</code> back to the first <code>page</code>. * </p> * * @see [[INavigator.reset]] * @return {?} */ PhloxApp.prototype.reset = /** * <p style="text-indent: 1em;"> * Try to navigate this <code>application</code> back to the first <code>page</code>. * </p> * * @see [[INavigator.reset]] * @return {?} */ function () { this.navigateToIndex(0); }; /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[needFocusService]].setFocusingComponent()</code>. * </p> * * @see [[NeedFocusService.setFocusingComponent]] * @param {?} component * @param {?=} event * @return {?} */ PhloxApp.prototype.setFocusingComponent = /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[needFocusService]].setFocusingComponent()</code>. * </p> * * @see [[NeedFocusService.setFocusingComponent]] * @param {?} component * @param {?=} event * @return {?} */ function (component, event) { this.needFocusService.setFocusingComponent(component, event); }; /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[needFocusService]].getFocusingComponent()</code>. * </p> * * @see [[NeedFocusService.getFocusingComponent]] * @return {?} */ PhloxApp.prototype.getFocusingComponent = /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[needFocusService]].getFocusingComponent()</code>. * </p> * * @see [[NeedFocusService.getFocusingComponent]] * @return {?} */ function () { return this.needFocusService.getFocusingComponent(); }; /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[needFocusService]].resetFocusingComponent()</code>. * </p> * * @see [[NeedFocusService.resetFocusingComponent]] * @param {?=} event * @return {?} */ PhloxApp.prototype.resetFocusingComponent = /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[needFocusService]].resetFocusingComponent()</code>. * </p> * * @see [[NeedFocusService.resetFocusingComponent]] * @param {?=} event * @return {?} */ function (event) { this.needFocusService.resetFocusingComponent(event); }; /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[phloxDialog]].hideDialog()</code>. * </p> * * @see [[PhloxDialog.hideDialog]] * @return {?} */ PhloxApp.prototype.hideDialog = /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[phloxDialog]].hideDialog()</code>. * </p> * * @see [[PhloxDialog.hideDialog]] * @return {?} */ function () { if (this.phloxDialog != null) { return this.phloxDialog.hideDialog(); } }; /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[phloxDialog]].showConfirmDialog()</code>. * </p> * * @see [[PhloxDialog.showConfirmDialog]] * @param {?} title * @param {?} message * @param {?} showCancelBtn * @param {?=} width * @param {?=} height * @return {?} */ PhloxApp.prototype.showConfirmDialog = /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[phloxDialog]].showConfirmDialog()</code>. * </p> * * @see [[PhloxDialog.showConfirmDialog]] * @param {?} title * @param {?} message * @param {?} showCancelBtn * @param {?=} width * @param {?=} height * @return {?} */ function (title, message, showCancelBtn, width, height) { if (this.phloxDialog != null) { return this.phloxDialog.showConfirmDialog(title, message, showCancelBtn, width, height); } return new Promise(function (resolve, reject) { reject('Could not find PhloxDialog instance.'); }); }; /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[phloxDialog]].showMessageDialog()</code>. * </p> * * @see [[PhloxDialog.showMessageDialog]] * @param {?} title * @param {?} message * @param {?=} width * @param {?=} height * @return {?} */ PhloxApp.prototype.showMessageDialog = /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[phloxDialog]].showMessageDialog()</code>. * </p> * * @see [[PhloxDialog.showMessageDialog]] * @param {?} title * @param {?} message * @param {?=} width * @param {?=} height * @return {?} */ function (title, message, width, height) { if (this.phloxDialog != null) { return this.phloxDialog.showMessageDialog(title, message, width, height); } return new Promise(function (resolve, reject) { reject('Could not find PhloxDialog instance.'); }); }; /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[phloxDialog]].showComponentDialog()</code>. * </p> * * @see [[PhloxDialog.showComponentDialog]] * @param {?} componentDialogModel * @return {?} */ PhloxApp.prototype.showComponentDialog = /** * <p style="text-indent: 1em;"> * A delegator method passing method call to <code>[[phloxDialog]].showComponentDialog()</code>. * </p> * * @see [[PhloxDialog.showComponentDialog]] * @param {?} componentDialogModel * @return {?} */ function (componentDialogModel) { if (this.phloxDialog != null) { return this.phloxDialog.showComponentDialog(componentDialogModel); } return new Promise(function (resolve, reject) { reject('Could not find PhloxDialog instance.'); }); }; /** * @return {?} */ PhloxApp.prototype.runPageLoader = /** * @return {?} */ function () { if (this.barloader === null || typeof this.barloader === 'undefined') { return; } this._showLoader = true; if (!this.barloader.isRunning()) { this.barloader.start(); } }; /** * @return {?} */ PhloxApp.prototype.stopPageLoader = /** * @return {?} */ function () { if (this.barloader === null || typeof this.barloader === 'undefined') { return; } this._showLoader = false; if (this.barloader.isRunning()) { this.barloader.stop(); } }; PhloxApp.TYPE_NAME = TYPE_NAME; PhloxApp.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: 'phx-app', template: "<div class=\"phlox-app-bar-container\" [class.show]=\"isShowLoader()\">\n <material-bar-loader #barloader></material-bar-loader>\n</div>\n<router-outlet></router-outlet>\n<phx-dialog #dialog></phx-dialog>\n" },] }, ]; /** @nocollapse */ PhloxApp.ctorParameters = function () { return [ { type: Router, }, { type: PhloxAppInfoService, }, { type: PhloxAppService, }, { type: ObservableManager, }, { type: NeedFocusService, }, { type: DialogService, }, { type: BackgroundProcessManager, }, ]; }; PhloxApp.propDecorators = { "phloxDialog": [{ type: ViewChild, args: ['dialog',] },], "barloader": [{ type: ViewChild, args: ["barloader",] },], }; return PhloxApp; }()); export { PhloxApp }; function PhloxApp_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ PhloxApp.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ PhloxApp.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ PhloxApp.propDecorators; /** @type {?} */ PhloxApp.TYPE_NAME; /** * This field will be automatically injected by <code>ng</code>. * @type {?} */ PhloxApp.prototype.appInfoService; /** * This field will be automatically injected by <code>ng</code>. * @type {?} */ PhloxApp.prototype.observableMgr; /** * This field will be automatically injected by <code>ng</code>. * @type {?} */ PhloxApp.prototype.needFocusService; /** * A field keeping cache for the last successfully loaded [[PhloxAppInfo]] from method [[reloadAppInfo]]. * @type {?} */ PhloxApp.prototype.appInfo; /** * An array keeping all <code>page</code>s of this <code>application</code>. * @type {?} */ PhloxApp.prototype.pages; /** * This field will be automatically injected by <code>ng</code>. * @type {?} */ PhloxApp.prototype.router; /** * This field will be automatically injected by <code>ng</code>. * @type {?} */ PhloxApp.prototype.dialogService; /** * This field will be automatically injected by <code>ng</code>. * @type {?} */ PhloxApp.prototype.bgProcessMgr; /** * A [[PhloxDialog]] child component instance of this component. * @type {?} */ PhloxApp.prototype.phloxDialog; /** @type {?} */ PhloxApp.prototype.barloader; /** @type {?} */ PhloxApp.prototype._showLoader; /** @type {?} */ PhloxApp.prototype.curRouterLoading; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGhsb3hBcHAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L1BobG94QXBwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFJdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFFNUYscUJBQU0sU0FBUyxHQUFXLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7SUF1RWxDLGtCQUFZLE1BQWMsRUFBRSxjQUFtQyxFQUFFLE1BQXVCLEVBQUUsYUFBZ0MsRUFBRSxnQkFBa0MsRUFDNUosYUFBNEIsRUFBRSxZQUFzQztRQUR0RSxpQkFxQ0M7Z0NBM0MrQjtZQUM5QixNQUFNLEVBQUUsSUFBSTtZQUNaLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUlDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUks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Q2Isd0JBQXdCOzs7Z0NBbUU5QixTQUFTLFNBQUMsUUFBUTs4QkFFbEIsU0FBUyxTQUFDLFdBQVc7O21CQTdFeEI7O1NBb0NhLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvLCBDb21wb25lbnREaWFsb2dNb2RlbCB9IGZyb20gJy4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL1BobG94QXBwSW5mb1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQaGxveEFwcFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL1BobG94QXBwU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGVNYW5hZ2VyIH0gZnJvbSAnLi4vc2VydmljZS9PYnNlcnZhYmxlTWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9EaWFsb2dTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyIH0gZnJvbSAnLi4vc2VydmljZS9CYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJTmF2aWdhdG9yIH0gZnJvbSAnLi9JTmF2aWdhdG9yJztcbmltcG9ydCB7IElOZWVkRm9jdXMgfSBmcm9tICcuL0lOZWVkRm9jdXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RQYWdlIH0gZnJvbSAnLi9BYnN0cmFjdFBhZ2UnO1xuaW1wb3J0IHsgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0IH0gZnJvbSAnLi9BYnN0cmFjdE5hdkxlZnRMYXlvdXQnO1xuaW1wb3J0IHsgTWF0ZXJpYWxCYXJMb2FkZXIgfSBmcm9tICcuLi90aGVtZS9tYXRlcmlhbC9jb21wb25lbnQvTWF0ZXJpYWxCYXJMb2FkZXIuY29tcG9uZW50JztcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1hcHBcIjtcblxuLyoqXG4gKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAyZW07XCI+XG4gKiBBIG1haW4gYm9vdHN0cmFwIGNvbXBvbmVudCBjbGFzcyBmb3IgPGNvZGU+UGhsb3hVSTwvY29kZT4gYXBwbGljYXRpb24uIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgW1tJTmF2aWdhdG9yXV0gaW50ZXJmYWNlIGhhdmluZyBwYWdlcyAoW1tBYnN0cmFjdFBhZ2VdXSlcbiAqIGFzIDxjb2RlPm5hdmlnYXRlZTwvY29kZT4gaXRlbXMgKFtbSU5hdmlnYXRlZV1dKS4gQW4gPGNvZGU+YXBwbGljYXRpb248L2NvZGU+IG1heSBjb25zaXN0IG9mIHZhcmlvdXMgcGFnZXMsIGZvciBleGFtcGxlLCBpdCBtYXkgaGF2ZSBhIGxvZ2luIHBhZ2UgdG8gYWxsb3cgdGhlIHVzZXIgdG9cbiAqIGxvZ2luLCBvbmNlIHRoZSB1c2VyIGlzIGxvZ2dlZCBvbiwgaXQgd2lsbCBuYXZpZ2F0ZSB0aGUgdXNlciB0byB0aGUgbWFpbiBwYWdlLCBldGMuXG4gKiA8L3A+XG4gKlxuICogQGF1dGhvciBzaGlvcmluLCB0ZWU0Y3V0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6ICdwaHgtYXBwJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGhsb3gtYXBwLWJhci1jb250YWluZXJcIiBbY2xhc3Muc2hvd109XCJpc1Nob3dMb2FkZXIoKVwiPlxuICA8bWF0ZXJpYWwtYmFyLWxvYWRlciAjYmFybG9hZGVyPjwvbWF0ZXJpYWwtYmFyLWxvYWRlcj5cbjwvZGl2PlxuPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuPHBoeC1kaWFsb2cgI2RpYWxvZz48L3BoeC1kaWFsb2c+XG5gXG59KVxuZXhwb3J0IGNsYXNzIFBobG94QXBwIGltcGxlbWVudHMgSU5hdmlnYXRvcjxBYnN0cmFjdFBhZ2U+LCBPbkluaXQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGJ5IDxjb2RlPm5nPC9jb2RlPi5cbiAgICovXG4gIHByaXZhdGUgYXBwSW5mb1NlcnZpY2U6IFBobG94QXBwSW5mb1NlcnZpY2U7XG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbmplY3RlZCBieSA8Y29kZT5uZzwvY29kZT4uXG4gICAqL1xuICBwcml2YXRlIG9ic2VydmFibGVNZ3I6IE9ic2VydmFibGVNYW5hZ2VyO1xuICAvKipcbiAgICogVGhpcyBmaWVsZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5qZWN0ZWQgYnkgPGNvZGU+bmc8L2NvZGU+LlxuICAgKi9cbiAgcHJpdmF0ZSBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlO1xuICAvKipcbiAgICogQSBmaWVsZCBrZWVwaW5nIGNhY2hlIGZvciB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgbG9hZGVkIFtbUGhsb3hBcHBJbmZvXV0gZnJvbSBtZXRob2QgW1tyZWxvYWRBcHBJbmZvXV0uXG4gICAqL1xuICBwcml2YXRlIGFwcEluZm86IFBobG94QXBwSW5mbztcbiAgLyoqXG4gICAqIEFuIGFycmF5IGtlZXBpbmcgYWxsIDxjb2RlPnBhZ2U8L2NvZGU+cyBvZiB0aGlzIDxjb2RlPmFwcGxpY2F0aW9uPC9jb2RlPi5cbiAgICovXG4gIHByaXZhdGUgcGFnZXM6IEFic3RyYWN0UGFnZVtdO1xuICAvKipcbiAgICogVGhpcyBmaWVsZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5qZWN0ZWQgYnkgPGNvZGU+bmc8L2NvZGU+LlxuICAgKi9cbiAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcjtcbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGJ5IDxjb2RlPm5nPC9jb2RlPi5cbiAgICovXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZTtcbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGJ5IDxjb2RlPm5nPC9jb2RlPi5cbiAgICovXG4gIHByaXZhdGUgYmdQcm9jZXNzTWdyOiBCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXI7XG4gIC8qKlxuICAgKiBBIFtbUGhsb3hEaWFsb2ddXSBjaGlsZCBjb21wb25lbnQgaW5zdGFuY2Ugb2YgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBAVmlld0NoaWxkKCdkaWFsb2cnKVxuICBwcml2YXRlIHBobG94RGlhbG9nOiBhbnk7XG4gIEBWaWV3Q2hpbGQoXCJiYXJsb2FkZXJcIilcbiAgcHJpdmF0ZSBiYXJsb2FkZXI6IE1hdGVyaWFsQmFyTG9hZGVyO1xuICBwcml2YXRlIF9zaG93TG9hZGVyOiBib29sZWFuO1xuICBwcml2YXRlIGN1clJvdXRlckxvYWRpbmc6IGFueSA9IHtcbiAgICBcInBhdGhcIjogbnVsbCxcbiAgICBcInJlc29sdmVcIjogbnVsbCxcbiAgICBcInJlamVjdFwiOiBudWxsXG4gIH07XG5cbiAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsIGFwcEluZm9TZXJ2aWNlOiBQaGxveEFwcEluZm9TZXJ2aWNlLCBhcHBTdmM6IFBobG94QXBwU2VydmljZSwgb2JzZXJ2YWJsZU1ncjogT2JzZXJ2YWJsZU1hbmFnZXIsIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UsXG4gICAgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSwgYmdQcm9jZXNzTWdyOiBCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIpIHtcbiAgICB0aGlzLnBhZ2VzID0gW107XG4gICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XG4gICAgdGhpcy5hcHBJbmZvU2VydmljZSA9IGFwcEluZm9TZXJ2aWNlO1xuICAgIHRoaXMub2JzZXJ2YWJsZU1nciA9IG9ic2VydmFibGVNZ3I7XG4gICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlID0gbmVlZEZvY3VzU2VydmljZTtcbiAgICB0aGlzLnJlbG9hZEFwcEluZm8oKTtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSBkaWFsb2dTZXJ2aWNlO1xuICAgIHRoaXMuYmdQcm9jZXNzTWdyID0gYmdQcm9jZXNzTWdyO1xuICAgIHRoaXMuX3Nob3dMb2FkZXIgPSBmYWxzZTtcblxuICAgIC8vIFNldCBhcHAgaW5zdGFuY2UgdG8gUGhsb3hBcHBTZXJ2aWNlIHRvIGFsbG93IG90aGVycyB0byBhY2Nlc3MgdGhpcyBpbnN0YW5jZS5cbiAgICBhcHBTdmMuc2V0SW5zdGFuY2UodGhpcyk7XG5cbiAgICAvLyBpbml0IGRpYWxvZyBzZXJ2aWNlXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluaXQodGhpcyk7XG5cbiAgICB0aGlzLm9ic2VydmFibGVNZ3Iuc3Vic2NyaWJlKEJhY2tncm91bmRQcm9jZXNzTWFuYWdlci5QUk9DRVNTX1NUQVJUX1RPUElDX05BTUUsIChzdGFydEJHUHJvY2VzczogYW55KSA9PiB7XG4gICAgICBpZiAoc3RhcnRCR1Byb2Nlc3MudHlwZSA9PT0gJ2Nvbm5lY3Rpb24ucGFnZScpIHtcbiAgICAgICAgdGhpcy5ydW5QYWdlTG9hZGVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vYnNlcnZhYmxlTWdyLnN1YnNjcmliZShCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIuUFJPQ0VTU19FTkRfVE9QSUNfTkFNRSwgKGVuZEJHUHJvY2VzczogYW55KSA9PiB7XG4gICAgICBpZiAoZW5kQkdQcm9jZXNzLnR5cGUgPT09ICdjb25uZWN0aW9uLnBhZ2UnKSB7XG4gICAgICAgIGlmICh0aGlzLmJnUHJvY2Vzc01nci5nZXRSdW5uaW5nUHJvY2Vzc2VzQ291bnQoJ2Nvbm5lY3Rpb24ucGFnZScsIG51bGwpIDw9IDApIHtcbiAgICAgICAgICB0aGlzLnN0b3BQYWdlTG9hZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9ic2VydmFibGVNZ3Iuc3Vic2NyaWJlKEJhY2tncm91bmRQcm9jZXNzTWFuYWdlci5QUk9DRVNTX0VSUk9SX1RPUElDX05BTUUsIChlcnJvckJHUHJvY2VzczogYW55KSA9PiB7XG4gICAgICBpZiAoZXJyb3JCR1Byb2Nlc3MudHlwZSA9PT0gJ2Nvbm5lY3Rpb24ucGFnZScpIHtcbiAgICAgICAgaWYgKHRoaXMuYmdQcm9jZXNzTWdyLmdldFJ1bm5pbmdQcm9jZXNzZXNDb3Vud