@uex/web-extensions
Version:
Uex extensions for Angular 6+ web projects
277 lines • 19.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/modules/template/breadcrumb.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable, EventEmitter } from '@angular/core';
import { Router, NavigationEnd, ActivatedRoute, PRIMARY_OUTLET } from '@angular/router';
import { filter } from 'rxjs/operators';
var BreadcrumbService = /** @class */ (function () {
function BreadcrumbService(_activatedRoute, _router) {
this._activatedRoute = _activatedRoute;
this._router = _router;
this.onChange = new EventEmitter();
this._ROUTE_DATA_TITLE_BREADCRUMB = '$title';
this._ROUTE_DATA_IGNORE_BREADCRUMB = '$ignore';
this._is_visible = false;
this._breadcrumbs = [];
this._url = '';
this._initialize();
}
Object.defineProperty(BreadcrumbService.prototype, "breadcrumbs", {
get: /**
* @return {?}
*/
function () {
return this._breadcrumbs;
},
set: /**
* @param {?} breadcrumbs
* @return {?}
*/
function (breadcrumbs) {
this._breadcrumbs = breadcrumbs;
this.onChange.emit(this.breadcrumbs);
},
enumerable: true,
configurable: true
});
Object.defineProperty(BreadcrumbService.prototype, "visible", {
get: /**
* @return {?}
*/
function () {
return this._is_visible;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
BreadcrumbService.prototype.show = /**
* @return {?}
*/
function () {
this._is_visible = true;
};
/**
* @return {?}
*/
BreadcrumbService.prototype.hide = /**
* @return {?}
*/
function () {
this._is_visible = false;
};
/**
* @return {?}
*/
BreadcrumbService.prototype.update = /**
* @return {?}
*/
function () {
this._url = '';
this._breadcrumbs = [];
this._setBreadcrumbs(this._activatedRoute.root);
this.onChange.emit(this.breadcrumbs);
this._is_visible = this.breadcrumbs.length > 1 ? true : false;
};
/**
* @private
* @return {?}
*/
BreadcrumbService.prototype._initialize = /**
* @private
* @return {?}
*/
function () {
var _this = this;
// subscribe to the NavigationEnd event
this._router.events
.pipe(filter((/**
* @param {?} event
* @return {?}
*/
function (event) { return event.constructor == NavigationEnd; })))
.subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) { return _this.update(); }));
this.update();
};
/**
* @private
* @param {?} route
* @return {?}
*/
BreadcrumbService.prototype._setBreadcrumbs = /**
* @private
* @param {?} route
* @return {?}
*/
function (route) {
var _this = this;
// get the child routes
/** @type {?} */
var children = route.children;
// return if there are no more children
if (children.length === 0) {
if (this._breadcrumbs.length === 0 && !route.snapshot.data[this._ROUTE_DATA_IGNORE_BREADCRUMB]) {
/** @type {?} */
var breadcrumb = this._buildCrumb(route);
if (breadcrumb) {
this._breadcrumbs.push(breadcrumb);
}
}
this._url = '';
// END
}
// iterate over each children
children.forEach((/**
* @param {?} child
* @return {?}
*/
function (child) {
// verify primary route
if (child.outlet !== PRIMARY_OUTLET) {
return;
}
// verify the custom data property "breadcrumb" is specified on the route
if (child.snapshot.url.length == 0) {
_this._setBreadcrumbs(child);
return;
}
/** @type {?} */
var breadcrumb = _this._buildCrumb(child);
if (breadcrumb) {
_this._breadcrumbs.push(breadcrumb);
}
// recursive
_this._setBreadcrumbs(child);
}));
};
/**
* @private
* @param {?} route
* @return {?}
*/
BreadcrumbService.prototype._buildCrumb = /**
* @private
* @param {?} route
* @return {?}
*/
function (route) {
var _this = this;
/** @type {?} */
var _route = route.snapshot;
if (!_route) {
return null;
}
// get and append the route's URL segment to URL
/** @type {?} */
var routeURL = _route.url.map((/**
* @param {?} segment
* @return {?}
*/
function (segment) { return segment.path; })).join('/');
this._url += "/" + routeURL;
if (_route.data[this._ROUTE_DATA_IGNORE_BREADCRUMB]) {
return null;
}
if (!_route.data[this._ROUTE_DATA_TITLE_BREADCRUMB]) {
/** @type {?} */
var title_1;
if (_route.routeConfig && _route.routeConfig.children) {
_route.routeConfig.children.forEach((/**
* @param {?} child
* @return {?}
*/
function (child) {
if (!title_1 &&
(child.path == '' || child.path == '/') &&
child.data &&
child.data[_this._ROUTE_DATA_TITLE_BREADCRUMB] &&
!child.data[_this._ROUTE_DATA_IGNORE_BREADCRUMB]) {
title_1 = child.data[_this._ROUTE_DATA_TITLE_BREADCRUMB];
}
}));
}
if (title_1) {
_route.data[this._ROUTE_DATA_TITLE_BREADCRUMB] = title_1;
}
if (!_route.data[this._ROUTE_DATA_TITLE_BREADCRUMB]) {
return null;
}
}
// add breadcrumb
return {
label: _route.data[this._ROUTE_DATA_TITLE_BREADCRUMB],
params: _route.params,
url: this._url
};
};
BreadcrumbService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
BreadcrumbService.ctorParameters = function () { return [
{ type: ActivatedRoute },
{ type: Router }
]; };
return BreadcrumbService;
}());
export { BreadcrumbService };
if (false) {
/** @type {?} */
BreadcrumbService.prototype.onChange;
/**
* @type {?}
* @private
*/
BreadcrumbService.prototype._ROUTE_DATA_TITLE_BREADCRUMB;
/**
* @type {?}
* @private
*/
BreadcrumbService.prototype._ROUTE_DATA_IGNORE_BREADCRUMB;
/**
* @type {?}
* @private
*/
BreadcrumbService.prototype._is_visible;
/**
* @type {?}
* @private
*/
BreadcrumbService.prototype._breadcrumbs;
/**
* @type {?}
* @private
*/
BreadcrumbService.prototype._url;
/**
* @type {?}
* @private
*/
BreadcrumbService.prototype._activatedRoute;
/**
* @type {?}
* @private
*/
BreadcrumbService.prototype._router;
}
/**
* @record
*/
export function Breadcrumb() { }
if (false) {
/** @type {?} */
Breadcrumb.prototype.label;
/** @type {?|undefined} */
Breadcrumb.prototype.params;
/** @type {?} */
Breadcrumb.prototype.url;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVleC93ZWItZXh0ZW5zaW9ucy8iLCJzb3VyY2VzIjpbImxpYi9tb2R1bGVzL3RlbXBsYXRlL2JyZWFkY3J1bWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBVSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEM7SUFFRSwyQkFDVSxlQUErQixFQUMvQixPQUFlO1FBRGYsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFpQmxCLGFBQVEsR0FBK0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV6RCxpQ0FBNEIsR0FBRyxRQUFRLENBQUM7UUFDeEMsa0NBQTZCLEdBQUcsU0FBUyxDQUFDO1FBRTFDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQUNoQyxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBdEJoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELHNCQUFXLDBDQUFXOzs7O1FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzNCLENBQUM7Ozs7O1FBQ0QsVUFBdUIsV0FBeUI7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7OztPQUpBO0lBTUQsc0JBQVcsc0NBQU87Ozs7UUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7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SSxDQUFDLDRCQUE0QixDQUFDLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7YUFBRTtTQUN0RTtRQUVELGlCQUFpQjtRQUNqQixPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1lBQ3JELE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDZixDQUFDO0lBQ0osQ0FBQzs7Z0JBcklGLFVBQVU7Ozs7Z0JBSnFCLGNBQWM7Z0JBQXJDLE1BQU07O0lBMElmLHdCQUFDO0NBQUEsQUF0SUQsSUFzSUM7U0FySVksaUJBQWlCOzs7SUFvQjVCLHFDQUFpRTs7Ozs7SUFFakUseURBQWdEOzs7OztJQUNoRCwwREFBa0Q7Ozs7O0lBRWxELHdDQUE0Qjs7Ozs7SUFDNUIseUNBQXdDOzs7OztJQUN4QyxpQ0FBa0I7Ozs7O0lBekJoQiw0Q0FBdUM7Ozs7O0lBQ3ZDLG9DQUF1Qjs7Ozs7QUFvSTNCLGdDQUlDOzs7SUFIQywyQkFBYzs7SUFDZCw0QkFBZ0I7O0lBQ2hCLHlCQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCwgQWN0aXZhdGVkUm91dGUsIFBhcmFtcywgUFJJTUFSWV9PVVRMRVQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYlNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICAgIHRoaXMuX2luaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYnJlYWRjcnVtYnMoKTogQnJlYWRjcnVtYltdIHtcclxuICAgIHJldHVybiB0aGlzLl9icmVhZGNydW1icztcclxuICB9XHJcbiAgcHVibGljIHNldCBicmVhZGNydW1icyhicmVhZGNydW1iczogQnJlYWRjcnVtYltdKSB7XHJcbiAgICB0aGlzLl9icmVhZGNydW1icyA9IGJyZWFkY3J1bWJzO1xyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuYnJlYWRjcnVtYnMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzX3Zpc2libGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxCcmVhZGNydW1iW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIF9ST1VURV9EQVRBX1RJVExFX0JSRUFEQ1JVTUIgPSAnJHRpdGxlJztcclxuICBwcml2YXRlIF9ST1VURV9EQVRBX0lHTk9SRV9CUkVBRENSVU1CID0gJyRpZ25vcmUnO1xyXG5cclxuICBwcml2YXRlIF9pc192aXNpYmxlID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfYnJlYWRjcnVtYnM6IEJyZWFkY3J1bWJbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3VybCA9ICcnO1xyXG5cclxuICBwdWJsaWMgc2hvdygpIHtcclxuICAgIHRoaXMuX2lzX3Zpc2libGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGUoKSB7XHJcbiAgICB0aGlzLl9pc192aXNpYmxlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlKCkge1xyXG4gICAgdGhpcy5fdXJsID0gJyc7XHJcbiAgICB0aGlzLl9icmVhZGNydW1icyA9IFtdO1xyXG5cclxuICAgIHRoaXMuX3NldEJyZWFkY3J1bWJzKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnJvb3QpO1xyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuYnJlYWRjcnVtYnMpO1xyXG5cclxuICAgIHRoaXMuX2lzX3Zpc2libGUgPSB0aGlzLmJyZWFkY3J1bWJzLmxlbmd0aCA+IDEgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0aWFsaXplKCkge1xyXG5cclxuICAgIC8vIHN1YnNjcmliZSB0byB0aGUgTmF2aWdhdGlvbkVuZCBldmVudFxyXG4gICAgdGhpcy5fcm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudC5jb25zdHJ1Y3RvciA9PSBOYXZpZ2F0aW9uRW5kKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMudXBkYXRlKCkpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRCcmVhZGNydW1icyhyb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuXHJcbiAgICAvLyBnZXQgdGhlIGNoaWxkIHJvdXRlc1xyXG4gICAgY29uc3QgY2hpbGRyZW46IEFycmF5PEFjdGl2YXRlZFJvdXRlPiA9IHJvdXRlLmNoaWxkcmVuO1xyXG5cclxuICAgIC8vIHJldHVybiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBjaGlsZHJlblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBpZiAodGhpcy5fYnJlYWRjcnVtYnMubGVuZ3RoID09PSAwICYmICFyb3V0ZS5zbmFwc2hvdC5kYXRhW3RoaXMuX1JPVVRFX0RBVEFfSUdOT1JFX0JSRUFEQ1JVTUJdKSB7XHJcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHRoaXMuX2J1aWxkQ3J1bWIocm91dGUpO1xyXG4gICAgICAgIGlmIChicmVhZGNydW1iKSB7IHRoaXMuX2JyZWFkY3J1bWJzLnB1c2goYnJlYWRjcnVtYik7IH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl91cmwgPSAnJztcclxuICAgICAgLy8gRU5EXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaXRlcmF0ZSBvdmVyIGVhY2ggY2hpbGRyZW5cclxuICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcblxyXG4gICAgICAvLyB2ZXJpZnkgcHJpbWFyeSByb3V0ZVxyXG4gICAgICBpZiAoY2hpbGQub3V0bGV0ICE9PSBQUklNQVJZX09VVExFVCkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgIC8vIHZlcmlmeSB0aGUgY3VzdG9tIGRhdGEgcHJvcGVydHkgXCJicmVhZGNydW1iXCIgaXMgc3BlY2lmaWVkIG9uIHRoZSByb3V0ZVxyXG4gICAgICBpZiAoY2hpbGQuc25hcHNob3QudXJsLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0QnJlYWRjcnVtYnMoY2hpbGQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHRoaXMuX2J1aWxkQ3J1bWIoY2hpbGQpO1xyXG4gICAgICBpZiAoYnJlYWRjcnVtYikgeyB0aGlzLl9icmVhZGNydW1icy5wdXNoKGJyZWFkY3J1bWIpOyB9XHJcblxyXG4gICAgICAvLyByZWN1cnNpdmVcclxuICAgICAgdGhpcy5fc2V0QnJlYWRjcnVtYnMoY2hpbGQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9idWlsZENydW1iKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IEJyZWFkY3J1bWIge1xyXG5cclxuICAgIGNvbnN0IF9yb3V0ZSA9IHJvdXRlLnNuYXBzaG90O1xyXG5cclxuICAgIGlmICghX3JvdXRlKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgLy8gZ2V0IGFuZCBhcHBlbmQgdGhlIHJvdXRlJ3MgVVJMIHNlZ21lbnQgdG8gVVJMXHJcbiAgICBjb25zdCByb3V0ZVVSTDogc3RyaW5nID0gX3JvdXRlLnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcclxuICAgIHRoaXMuX3VybCArPSBgLyR7cm91dGVVUkx9YDtcclxuXHJcbiAgICBpZiAoX3JvdXRlLmRhdGFbdGhpcy5fUk9VVEVfREFUQV9JR05PUkVfQlJFQURDUlVNQl0pIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICBpZiAoIV9yb3V0ZS5kYXRhW3RoaXMuX1JPVVRFX0RBVEFfVElUTEVfQlJFQURDUlVNQl0pIHtcclxuICAgICAgbGV0IHRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgICBpZiAoX3JvdXRlLnJvdXRlQ29uZmlnICYmIF9yb3V0ZS5yb3V0ZUNvbmZpZy5jaGlsZHJlbikge1xyXG4gICAgICAgIF9yb3V0ZS5yb3V0ZUNvbmZpZy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGl0bGUgJiZcclxuICAgICAgICAgICAgKGNoaWxkLnBhdGggPT0gJycgfHwgY2hpbGQucGF0aCA9PSAnLycpICYmXHJcbiAgICAgICAgICAgIGNoaWxkLmRhdGEgJiZcclxuICAgICAgICAgICAgY2hpbGQuZGF0YVt0aGlzLl9ST1VURV9EQVRBX1RJVExFX0JSRUFEQ1JVTUJdICYmXHJcbiAgICAgICAgICAgICFjaGlsZC5kYXRhW3RoaXMuX1JPVVRFX0RBVEFfSUdOT1JFX0JSRUFEQ1JVTUJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGl0bGUgPSBjaGlsZC5kYXRhW3RoaXMuX1JPVVRFX0RBVEFfVElUTEVfQlJFQURDUlVNQl07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aXRsZSkgeyBfcm91dGUuZGF0YVt0aGlzLl9ST1VURV9EQVRBX1RJVExFX0JSRUFEQ1JVTUJdID0gdGl0bGU7IH1cclxuXHJcbiAgICAgIGlmICghX3JvdXRlLmRhdGFbdGhpcy5fUk9VVEVfREFUQV9USVRMRV9CUkVBRENSVU1CXSkgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCBicmVhZGNydW1iXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsYWJlbDogX3JvdXRlLmRhdGFbdGhpcy5fUk9VVEVfREFUQV9USVRMRV9CUkVBRENSVU1CXSxcclxuICAgICAgcGFyYW1zOiBfcm91dGUucGFyYW1zLFxyXG4gICAgICB1cmw6IHRoaXMuX3VybFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWRjcnVtYiB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBwYXJhbXM/OiBQYXJhbXM7XHJcbiAgdXJsOiBzdHJpbmc7XHJcbn1cclxuIl19