angular-admin-lte-teliqo
Version:
npm# angular-admin-lte
156 lines (155 loc) • 15.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Injectable } from '@angular/core';
import { NavigationEnd, PRIMARY_OUTLET, Router } from '@angular/router';
import { BehaviorSubject } from 'rxjs';
/**
* @record
*/
export function Path() { }
function Path_tsickle_Closure_declarations() {
/** @type {?} */
Path.prototype.data;
/** @type {?} */
Path.prototype.params;
/** @type {?} */
Path.prototype.url;
}
/**
* @record
*/
export function Paths() { }
function Paths_tsickle_Closure_declarations() {
}
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
* @param {?} route [description]
* @return {?} [description]
*/
static createUrl(route) {
const /** @type {?} */ url = route.url.map(urlSegment => urlSegment.toString()).join('/');
return url;
}
/**
* [isChildrenSelfRoute description]
* \@method isChildrenSelfRoute
* @param {?} route [description]
* @return {?} [description]
*/
static isChildrenSelfRoute(route) {
route.routeConfig.children.forEach(child => {
if (child.path === '' && (child.component || child.loadChildren)) {
return true;
}
});
return false;
}
/**
* [createBreadcrumb description]
* \@method createBreadcrumb
* @param {?} route [description]
* @param {?} url [description]
* @return {?} [description]
*/
static createBreadcrumb(route, url) {
let /** @type {?} */ 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
* @return {?}
*/
init() {
this.router.events.subscribe(routeEvent => {
// https://github.com/angular/angular/issues/17473: event not fired anymore on load for routed component.
this.events.next(routeEvent);
if (routeEvent instanceof NavigationEnd) {
let /** @type {?} */ route = this.router.routerState.root.snapshot, /** @type {?} */
tmpUrl = '', /** @type {?} */
url = '', /** @type {?} */
rootRoot = true;
const /** @type {?} */ 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 /** @type {?} */ 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, },
];
function RoutingService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
RoutingService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
RoutingService.ctorParameters;
/** @type {?} */
RoutingService.prototype.onChange;
/** @type {?} */
RoutingService.prototype.events;
/** @type {?} */
RoutingService.prototype.router;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1hZG1pbi1sdGUtdGVsaXFvLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3JvdXRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWdELGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCdkMsTUFBTTs7Ozs7SUFRSixZQUNVO1FBQUEsV0FBTSxHQUFOLE1BQU07d0JBUjBCLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQztzQkFDMUIsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDO1FBUzFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNiOzs7Ozs7O0lBUU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUE2QjtRQUNwRCx1QkFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekUsTUFBTSxDQUFDLEdBQUcsQ0FBQzs7Ozs7Ozs7SUFTTCxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBNkI7UUFDOUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLENBQUMsSUFBSSxDQUFDO2FB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b20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgRXZlbnQgYXMgUm91dGVyRXZlbnQsIE5hdmlnYXRpb25FbmQsIFBSSU1BUllfT1VUTEVULCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLypcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aCB7XG4gIGRhdGE6IE9iamVjdDtcbiAgcGFyYW1zOiBPYmplY3Q7XG4gIHVybDogc3RyaW5nO1xufVxuXG4vKlxuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXRocyBleHRlbmRzIEFycmF5PFBhdGg+IHt9XG5cblxuLypcbiAqXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSb3V0aW5nU2VydmljZSB7XG4gIHB1YmxpYyBvbkNoYW5nZTogQmVoYXZpb3JTdWJqZWN0PFBhdGhzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHVibGljIGV2ZW50czogQmVoYXZpb3JTdWJqZWN0PFJvdXRlckV2ZW50PiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogQG1ldGhvZCBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gcm91dGVyIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogW2NyZWF0ZVVybCBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBjcmVhdGVVcmxcbiAgICogQHBhcmFtIHJvdXRlIFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVVcmwocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IHJvdXRlLnVybC5tYXAodXJsU2VnbWVudCA9PiB1cmxTZWdtZW50LnRvU3RyaW5nKCkpLmpvaW4oJy8nKTtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIFtpc0NoaWxkcmVuU2VsZlJvdXRlIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIGlzQ2hpbGRyZW5TZWxmUm91dGVcbiAgICogQHBhcmFtIHJvdXRlIFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBpc0NoaWxkcmVuU2VsZlJvdXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogYm9vbGVhbiB7XG4gICAgcm91dGUucm91dGVDb25maWcuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICBpZiAoY2hpbGQucGF0aCA9PT0gJycgJiYgKGNoaWxkLmNvbXBvbmVudCB8fCBjaGlsZC5sb2FkQ2hpbGRyZW4pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFtjcmVhdGVCcmVhZGNydW1iIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIGNyZWF0ZUJyZWFkY3J1bWJcbiAgICogQHBhcmFtIHJvdXRlIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHVybCAgIFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVCcmVhZGNydW1iKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCB1cmw6IHN0cmluZyk6IFBhdGgge1xuICAgIGxldCBpc1VybCA9IHRydWU7XG5cbiAgICBpZiAocm91dGUuY2hpbGRyZW4ubGVuZ3RoICE9PSAwICYmIHJvdXRlLmZpcnN0Q2hpbGQucm91dGVDb25maWcucGF0aCkge1xuICAgICAgaWYgKHVybCAhPT0gJy8nICYmICFyb3V0ZS5yb3V0ZUNvbmZpZy5sb2FkQ2hpbGRyZW4gJiYgIXJvdXRlLnJvdXRlQ29uZmlnLmNvbXBvbmVudCAmJiAhUm91dGluZ1NlcnZpY2UuaXNDaGlsZHJlblNlbGZSb3V0ZShyb3V0ZSkpIHtcbiAgICAgICAgaXNVcmwgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogcm91dGUuZGF0YSxcbiAgICAgIHBhcmFtcyA6IHJvdXRlLnBhcmFtcyxcbiAgICAgIHVybDogaXNVcmwgPyB1cmwgOiBudWxsXG4gICAgfTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFtpbml0IGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIGluaXRcbiAgICovXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKHJvdXRlRXZlbnQgPT4ge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTc0NzM6IGV2ZW50IG5vdCBmaXJlZCBhbnltb3JlIG9uIGxvYWQgZm9yIHJvdXRlZCBjb21wb25lbnQuXG4gICAgICB0aGlzLmV2ZW50cy5uZXh0KHJvdXRlRXZlbnQpO1xuICAgICAgaWYgKHJvdXRlRXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIGxldCByb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnJvb3Quc25hcHNob3QsXG4gICAgICAgICAgdG1wVXJsID0gJycsXG4gICAgICAgICAgdXJsID0gJycsXG4gICAgICAgICAgcm9vdFJvb3QgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBhdGhzOiBQYXRocyA9IFtdO1xuXG4gICAgICAgIHdoaWxlIChyb3V0ZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgdG1wVXJsID0gYC8ke1JvdXRpbmdTZXJ2aWNlLmNyZWF0ZVVybChyb3V0ZSl9YDtcblxuICAgICAgICAgIGlmIChyb3V0ZS5vdXRsZXQgIT09IFBSSU1BUllfT1VUTEVUIHx8ICghcm91dGUucm91dGVDb25maWcucGF0aCAmJiAhcm9vdFJvb3QpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb290Um9vdCA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHJvdXRlLnBhcmFtcyB8fCByb3V0ZS5kYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3V0ZS5wYXJhbXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFrZXkpIHsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgaWYgKHJvdXRlLmRhdGFbJ3RpdGxlJ10pIHtcbiAgICAgICAgICAgICAgICByb3V0ZS5kYXRhWyd0aXRsZSddID0gcm91dGUuZGF0YVsndGl0bGUnXS5yZXBsYWNlKGA6JHtrZXl9YCwgcm91dGUucGFyYW1zW2tleV0pO1xuICAgICAgICAgICAgICAgIHJvdXRlLmRhdGFbJ3RpdGxlJ10gPSByb3V0ZS5kYXRhWyd0aXRsZSddLnJlcGxhY2UoYDoke2tleX1gLCByb3V0ZS5wYXJhbXNba2V5XSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJvdXRlLmRhdGFbJ2JyZWFkY3J1bWJzJ10pIHtcbiAgICAgICAgICAgICAgICByb3V0ZS5kYXRhWydicmVhZGNydW1icyddID0gcm91dGUuZGF0YVsnYnJlYWRjcnVtYnMnXS5yZXBsYWNlKGA6JHtrZXl9YCwgcm91dGUucGFyYW1zW2tleV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyb3V0ZS5kYXRhWydkZXNjcmlwdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgcm91dGUuZGF0YVsnZGVzY3JpcHRpb24nXSA9IHJvdXRlLmRhdGFbJ2Rlc2NyaXB0aW9uJ10ucmVwbGFjZShgOiR7a2V5fWAsIHJvdXRlLnBhcmFtc1trZXldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0bXBVcmwgPT09ICcvJykge1xuICAgICAgICAgICAgcGF0aHMucHVzaChSb3V0aW5nU2VydmljZS5jcmVhdGVCcmVhZGNydW1iKHJvdXRlLCB0bXBVcmwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9IHRtcFVybDtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goUm91dGluZ1NlcnZpY2UuY3JlYXRlQnJlYWRjcnVtYihyb3V0ZSwgdXJsKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHBhdGhzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19