ad-custom-lib
Version:
This is an UI custom library based on Adminlte library with purpose for personal use, if you need a full template of Primeng please visit https://github.com/mledour/angular-admin-lte
176 lines • 17.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { BehaviorSubject } from 'rxjs';
import { Injectable } from '@angular/core';
import { NavigationEnd, PRIMARY_OUTLET, Router } from '@angular/router';
/**
* @record
*/
export function Path() { }
if (false) {
/** @type {?} */
Path.prototype.data;
/** @type {?} */
Path.prototype.params;
/** @type {?} */
Path.prototype.url;
}
/**
* @record
*/
export function Paths() { }
/*
*
*/
export class RoutingService {
/**
* \@method constructor
* @param {?} router [description]
*/
constructor(router) {
this.router = router;
this.onChange = new BehaviorSubject(undefined);
this.events = new BehaviorSubject(undefined);
this.init();
}
/**
* [createUrl description]
* \@method createUrl
* @private
* @param {?} route [description]
* @return {?} [description]
*/
static createUrl(route) {
/** @type {?} */
const url = route.url.map((/**
* @param {?} urlSegment
* @return {?}
*/
urlSegment => urlSegment.toString())).join('/');
return url;
}
/**
* [isChildrenSelfRoute description]
* \@method isChildrenSelfRoute
* @private
* @param {?} route [description]
* @return {?} [description]
*/
static isChildrenSelfRoute(route) {
route.routeConfig.children.forEach((/**
* @param {?} child
* @return {?}
*/
child => {
if (child.path === '' && (child.component || child.loadChildren)) {
return true;
}
}));
return false;
}
/**
* [createBreadcrumb description]
* \@method createBreadcrumb
* @private
* @param {?} route [description]
* @param {?} url [description]
* @return {?} [description]
*/
static createBreadcrumb(route, url) {
/** @type {?} */
let isUrl = true;
if (route.children.length !== 0 && route.firstChild.routeConfig.path) {
if (url !== '/' && !route.routeConfig.loadChildren && !route.routeConfig.component && !RoutingService.isChildrenSelfRoute(route)) {
isUrl = false;
}
}
return {
data: route.data,
params: route.params,
url: isUrl ? url : null
};
}
/**
* [init description]
* \@method init
* @private
* @return {?}
*/
init() {
this.router.events.subscribe((/**
* @param {?} routeEvent
* @return {?}
*/
routeEvent => {
// console.log(routeEvent)
// https://github.com/angular/angular/issues/17473: event not fired anymore on load for routed component.
if (routeEvent instanceof NavigationEnd) {
this.events.next(routeEvent);
/** @type {?} */
let route = this.router.routerState.root.snapshot;
/** @type {?} */
let tmpUrl = '';
/** @type {?} */
let url = '';
/** @type {?} */
let rootRoot = true;
/** @type {?} */
const paths = [];
while (route.children.length) {
route = route.firstChild;
tmpUrl = `/${RoutingService.createUrl(route)}`;
if (route.outlet !== PRIMARY_OUTLET || (!route.routeConfig.path && !rootRoot)) {
continue;
}
rootRoot = false;
if (route.params || route.data) {
for (const key in route.params) {
if (!key) {
continue;
}
if (route.data['title']) {
route.data['title'] = route.data['title'].replace(`:${key}`, route.params[key]);
route.data['title'] = route.data['title'].replace(`:${key}`, route.params[key]);
}
if (route.data['breadcrumbs']) {
route.data['breadcrumbs'] = route.data['breadcrumbs'].replace(`:${key}`, route.params[key]);
}
if (route.data['description']) {
route.data['description'] = route.data['description'].replace(`:${key}`, route.params[key]);
}
}
}
if (tmpUrl === '/') {
paths.push(RoutingService.createBreadcrumb(route, tmpUrl));
}
else {
url += tmpUrl;
paths.push(RoutingService.createBreadcrumb(route, url));
}
}
this.onChange.next(paths);
}
}));
}
}
RoutingService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
RoutingService.ctorParameters = () => [
{ type: Router }
];
if (false) {
/** @type {?} */
RoutingService.prototype.onChange;
/** @type {?} */
RoutingService.prototype.events;
/**
* @type {?}
* @private
*/
RoutingService.prototype.router;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWQtY3VzdG9tLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQzJDLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUN0RixNQUFNLGlCQUFpQixDQUFDOzs7O0FBS3pCLDBCQUlDOzs7SUFIRyxvQkFBYTs7SUFDYixzQkFBZTs7SUFDZixtQkFBWTs7Ozs7QUFNaEIsMkJBQThDOzs7O0FBTzlDLE1BQU0sT0FBTyxjQUFjOzs7OztJQVF2QixZQUNZLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBUm5CLGFBQVEsR0FBMkIsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEUsV0FBTSxHQUFpQyxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQVN6RSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQzs7Ozs7Ozs7SUFRTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQTZCOztjQUM1QyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHOzs7O1FBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3hFLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7Ozs7SUFRTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBNkI7UUFDNUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTzs7OztRQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLElB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S0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs2QkFDL0Y7NEJBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dDQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzZCQUMvRjt5QkFDSjtxQkFDSjtvQkFFRCxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUU7d0JBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3FCQUM5RDt5QkFBTTt3QkFDSCxHQUFHLElBQUksTUFBTSxDQUFDO3dCQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUMzRDtpQkFDSjtnQkFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3QjtRQUNMLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQzs7O1lBeEhKLFVBQVU7Ozs7WUFyQnNFLE1BQU07Ozs7SUF1Qm5GLGtDQUF5RTs7SUFDekUsZ0NBQTZFOzs7OztJQU96RSxnQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIEV2ZW50IGFzIFJvdXRlckV2ZW50LCBOYXZpZ2F0aW9uRW5kLCBQUklNQVJZX09VVExFVCwgUm91dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFBhdGgge1xyXG4gICAgZGF0YTogT2JqZWN0O1xyXG4gICAgcGFyYW1zOiBPYmplY3Q7XHJcbiAgICB1cmw6IHN0cmluZztcclxufVxyXG5cclxuLypcclxuICpcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGF0aHMgZXh0ZW5kcyBBcnJheTxQYXRoPiB7IH1cclxuXHJcblxyXG4vKlxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUm91dGluZ1NlcnZpY2Uge1xyXG4gICAgcHVibGljIG9uQ2hhbmdlOiBCZWhhdmlvclN1YmplY3Q8UGF0aHM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gICAgcHVibGljIGV2ZW50czogQmVoYXZpb3JTdWJqZWN0PFJvdXRlckV2ZW50PiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgY29uc3RydWN0b3JcclxuICAgICAqIEBwYXJhbSByb3V0ZXIgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtjcmVhdGVVcmwgZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIGNyZWF0ZVVybFxyXG4gICAgICogQHBhcmFtIHJvdXRlIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEByZXR1cm4gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVVcmwocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHJvdXRlLnVybC5tYXAodXJsU2VnbWVudCA9PiB1cmxTZWdtZW50LnRvU3RyaW5nKCkpLmpvaW4oJy8nKTtcclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2lzQ2hpbGRyZW5TZWxmUm91dGUgZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIGlzQ2hpbGRyZW5TZWxmUm91dGVcclxuICAgICAqIEBwYXJhbSByb3V0ZSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcmV0dXJuIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNDaGlsZHJlblNlbGZSb3V0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJvdXRlLnJvdXRlQ29uZmlnLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQucGF0aCA9PT0gJycgJiYgKGNoaWxkLmNvbXBvbmVudCB8fCBjaGlsZC5sb2FkQ2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbY3JlYXRlQnJlYWRjcnVtYiBkZXNjcmlwdGlvbl1cclxuICAgICAqIEBtZXRob2QgY3JlYXRlQnJlYWRjcnVtYlxyXG4gICAgICogQHBhcmFtIHJvdXRlIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB1cmwgICBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcmV0dXJuIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQnJlYWRjcnVtYihyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgdXJsOiBzdHJpbmcpOiBQYXRoIHtcclxuICAgICAgICBsZXQgaXNVcmwgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAocm91dGUuY2hpbGRyZW4ubGVuZ3RoICE9PSAwICYmIHJvdXRlLmZpcnN0Q2hpbGQucm91dGVDb25maWcucGF0aCkge1xyXG4gICAgICAgICAgICBpZiAodXJsICE9PSAnLycgJiYgIXJvdXRlLnJvdXRlQ29uZmlnLmxvYWRDaGlsZHJlbiAmJiAhcm91dGUucm91dGVDb25maWcuY29tcG9uZW50ICYmICFSb3V0aW5nU2VydmljZS5pc0NoaWxkcmVuU2VsZlJvdXRlKHJvdXRlKSkge1xyXG4gICAgICAgICAgICAgICAgaXNVcmwgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGF0YTogcm91dGUuZGF0YSxcclxuICAgICAgICAgICAgcGFyYW1zOiByb3V0ZS5wYXJhbXMsXHJcbiAgICAgICAgICAgIHVybDogaXNVcmwgPyB1cmwgOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbaW5pdCBkZXNjcmlwdGlvbl1cclxuICAgICAqIEBtZXRob2QgaW5pdFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShyb3V0ZUV2ZW50ID0+IHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocm91dGVFdmVudClcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTc0NzM6IGV2ZW50IG5vdCBmaXJlZCBhbnltb3JlIG9uIGxvYWQgZm9yIHJvdXRlZCBjb21wb25lbnQuXHJcbiAgICAgICAgICAgIGlmIChyb3V0ZUV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dChyb3V0ZUV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGxldCByb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnJvb3Quc25hcHNob3QsXHJcbiAgICAgICAgICAgICAgICAgICAgdG1wVXJsID0gJycsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJycsXHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdFJvb3QgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzOiBQYXRocyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChyb3V0ZS5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wVXJsID0gYC8ke1JvdXRpbmdTZXJ2aWNlLmNyZWF0ZVVybChyb3V0ZSl9YDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlLm91dGxldCAhPT0gUFJJTUFSWV9PVVRMRVQgfHwgKCFyb3V0ZS5yb3V0ZUNvbmZpZy5wYXRoICYmICFyb290Um9vdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByb290Um9vdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUucGFyYW1zIHx8IHJvdXRlLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm91dGUucGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSkgeyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlLmRhdGFbJ3RpdGxlJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZS5kYXRhWyd0aXRsZSddID0gcm91dGUuZGF0YVsndGl0bGUnXS5yZXBsYWNlKGA6JHtrZXl9YCwgcm91dGUucGFyYW1zW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLmRhdGFbJ3RpdGxlJ10gPSByb3V0ZS5kYXRhWyd0aXRsZSddLnJlcGxhY2UoYDoke2tleX1gLCByb3V0ZS5wYXJhbXNba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUuZGF0YVsnYnJlYWRjcnVtYnMnXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLmRhdGFbJ2JyZWFkY3J1bWJzJ10gPSByb3V0ZS5kYXRhWydicmVhZGNydW1icyddLnJlcGxhY2UoYDoke2tleX1gLCByb3V0ZS5wYXJhbXNba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUuZGF0YVsnZGVzY3JpcHRpb24nXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLmRhdGFbJ2Rlc2NyaXB0aW9uJ10gPSByb3V0ZS5kYXRhWydkZXNjcmlwdGlvbiddLnJlcGxhY2UoYDoke2tleX1gLCByb3V0ZS5wYXJhbXNba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0bXBVcmwgPT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKFJvdXRpbmdTZXJ2aWNlLmNyZWF0ZUJyZWFkY3J1bWIocm91dGUsIHRtcFVybCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCArPSB0bXBVcmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goUm91dGluZ1NlcnZpY2UuY3JlYXRlQnJlYWRjcnVtYihyb3V0ZSwgdXJsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UubmV4dChwYXRocyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=