@miesil/pp-breadcrumbs
Version:
PP-Breadcrumbs is an Angular 7 module generating breadcrumbs based on the routing state.
181 lines • 14.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable, Injector } from '@angular/core';
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
import { Observable, BehaviorSubject, of, concat, from } from 'rxjs';
import { PpBreadcrumbsResolver } from './breadcrumbs.resolver';
import { filter, mergeMap, distinct, toArray, first, tap } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
var PpBreadcrumbsService = /** @class */ (function () {
function PpBreadcrumbsService(router, route, injector) {
var _this = this;
this.router = router;
this.injector = injector;
this.breadcrumbs = new BehaviorSubject([]);
this.defaultResolver = new PpBreadcrumbsResolver();
this.breadcrumbsSource = [];
this.router.events.pipe(filter((/**
* @param {?} x
* @return {?}
*/
function (x) { return x instanceof NavigationEnd; }))).subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.resolveCrumbs(router.routerState.snapshot.root)
.pipe(mergeMap((/**
* @param {?} breadcrumbs
* @return {?}
*/
function (breadcrumbs) { return breadcrumbs; })), distinct((/**
* @param {?} breadcrumb
* @return {?}
*/
function (breadcrumb) { return breadcrumb.text; })), toArray(), tap((/**
* @param {?} breadcrumbs
* @return {?}
*/
function (breadcrumbs) { return _this.breadcrumbsSource = breadcrumbs; })), mergeMap((/**
* @param {?} breadcrumbs
* @return {?}
*/
function (breadcrumbs) {
return _this.postProcess ? _this.wrapIntoObservable(_this.postProcess(breadcrumbs)).pipe(first()) : of(breadcrumbs);
})))
.subscribe((/**
* @param {?} breadcrumbs
* @return {?}
*/
function (breadcrumbs) {
_this.breadcrumbs.next(breadcrumbs);
}));
}));
}
Object.defineProperty(PpBreadcrumbsService.prototype, "crumbs$", {
get: /**
* @return {?}
*/
function () {
return this.breadcrumbs;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
PpBreadcrumbsService.prototype.refreshBreadcrumbs = /**
* @return {?}
*/
function () {
var _this = this;
(this.postProcess ? this.wrapIntoObservable(this.postProcess(this.breadcrumbsSource)).pipe(first()) : of(this.breadcrumbsSource))
.subscribe((/**
* @param {?} breadcrumbs
* @return {?}
*/
function (breadcrumbs) {
_this.breadcrumbs.next(breadcrumbs);
}));
};
/**
* @private
* @param {?} route
* @return {?}
*/
PpBreadcrumbsService.prototype.resolveCrumbs = /**
* @private
* @param {?} route
* @return {?}
*/
function (route) {
/** @type {?} */
var crumbs$ = of([]);
/** @type {?} */
var data = route.routeConfig && route.routeConfig.data;
if (data && data.breadcrumbs) {
/** @type {?} */
var resolver = data.breadcrumbs.prototype instanceof PpBreadcrumbsResolver ? this.injector.get(data.breadcrumbs) : this.defaultResolver;
/** @type {?} */
var result = resolver.resolve(route, this.router.routerState.snapshot);
crumbs$ = this.wrapIntoObservable(result).pipe(first());
}
return route.firstChild ? concat(crumbs$, this.resolveCrumbs(route.firstChild)) : crumbs$;
};
/**
* @private
* @template T
* @param {?} value
* @return {?}
*/
PpBreadcrumbsService.prototype.wrapIntoObservable = /**
* @private
* @template T
* @param {?} value
* @return {?}
*/
function (value) {
return value instanceof Observable ? value : this.isPromise(value) ? from(Promise.resolve(value)) : of((/** @type {?} */ (value)));
};
/**
* @private
* @param {?} value
* @return {?}
*/
PpBreadcrumbsService.prototype.isPromise = /**
* @private
* @param {?} value
* @return {?}
*/
function (value) {
return value && typeof value.then === 'function';
};
PpBreadcrumbsService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
PpBreadcrumbsService.ctorParameters = function () { return [
{ type: Router },
{ type: ActivatedRoute },
{ type: Injector }
]; };
/** @nocollapse */ PpBreadcrumbsService.ngInjectableDef = i0.defineInjectable({ factory: function PpBreadcrumbsService_Factory() { return new PpBreadcrumbsService(i0.inject(i1.Router), i0.inject(i1.ActivatedRoute), i0.inject(i0.INJECTOR)); }, token: PpBreadcrumbsService, providedIn: "root" });
return PpBreadcrumbsService;
}());
export { PpBreadcrumbsService };
if (false) {
/** @type {?} */
PpBreadcrumbsService.prototype.postProcess;
/**
* @type {?}
* @private
*/
PpBreadcrumbsService.prototype.breadcrumbs;
/**
* @type {?}
* @private
*/
PpBreadcrumbsService.prototype.defaultResolver;
/**
* @type {?}
* @private
*/
PpBreadcrumbsService.prototype.breadcrumbsSource;
/**
* @type {?}
* @private
*/
PpBreadcrumbsService.prototype.router;
/**
* @type {?}
* @private
*/
PpBreadcrumbsService.prototype.injector;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtaWVzaWwvcHAtYnJlYWRjcnVtYnMvIiwic291cmNlcyI6WyJsaWIvYnJlYWRjcnVtYnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBMEIsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFHL0U7SUFlRSw4QkFBb0IsTUFBYyxFQUFFLEtBQXFCLEVBQVUsUUFBa0I7UUFBckYsaUJBZ0JDO1FBaEJtQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQWlDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFSN0UsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBZSxFQUFFLENBQUMsQ0FBQztRQUNwRCxvQkFBZSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUM5QyxzQkFBaUIsR0FBaUIsRUFBRSxDQUFDO1FBTzNDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLFlBQVksYUFBYSxFQUExQixDQUEwQixFQUFDLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQyxLQUFvQjtZQUM5RixLQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxX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SyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxtQkFBQSxLQUFLLEVBQUssQ0FBQyxDQUFDO0lBQ3JILENBQUM7Ozs7OztJQUVPLHdDQUFTOzs7OztJQUFqQixVQUFrQixLQUFVO1FBQzFCLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7SUFDbkQsQ0FBQzs7Z0JBN0RGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBVCtELE1BQU07Z0JBQTdELGNBQWM7Z0JBREYsUUFBUTs7OytCQUE3QjtDQXNFQyxBQTlERCxJQThEQztTQTNEWSxvQkFBb0I7OztJQUUvQiwyQ0FBdUc7Ozs7O0lBRXZHLDJDQUE0RDs7Ozs7SUFDNUQsK0NBQXNEOzs7OztJQUN0RCxpREFBNkM7Ozs7O0lBTWpDLHNDQUFzQjs7Ozs7SUFBeUIsd0NBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgb2YsIGNvbmNhdCwgZnJvbSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgUHBCcmVhZGNydW1ic1Jlc29sdmVyIH0gZnJvbSAnLi9icmVhZGNydW1icy5yZXNvbHZlcic7XHJcbmltcG9ydCB7ZmlsdGVyLCBtZXJnZU1hcCwgZGlzdGluY3QsIHRvQXJyYXksIGZpcnN0LCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYiB9IGZyb20gJy4vYnJlYWRjcnVtYic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcEJyZWFkY3J1bWJzU2VydmljZSB7XHJcblxyXG4gIHBvc3RQcm9jZXNzOiAoY3J1bWJzOiBCcmVhZGNydW1iW10pID0+IFByb21pc2U8QnJlYWRjcnVtYltdPiB8IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB8IEJyZWFkY3J1bWJbXTtcclxuXHJcbiAgcHJpdmF0ZSBicmVhZGNydW1icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnJlYWRjcnVtYltdPihbXSk7XHJcbiAgcHJpdmF0ZSBkZWZhdWx0UmVzb2x2ZXIgPSBuZXcgUHBCcmVhZGNydW1ic1Jlc29sdmVyKCk7XHJcbiAgcHJpdmF0ZSBicmVhZGNydW1ic1NvdXJjZTogQnJlYWRjcnVtYltdID0gW107XHJcblxyXG4gIGdldCBjcnVtYnMkKCk6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5icmVhZGNydW1icztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcih4ID0+IHggaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSkuc3Vic2NyaWJlKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc29sdmVDcnVtYnMocm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtZXJnZU1hcChicmVhZGNydW1icyA9PiBicmVhZGNydW1icyksXHJcbiAgICAgICAgICBkaXN0aW5jdChicmVhZGNydW1iID0+IGJyZWFkY3J1bWIudGV4dCksXHJcbiAgICAgICAgICB0b0FycmF5KCksXHJcbiAgICAgICAgICB0YXAoYnJlYWRjcnVtYnMgPT4gdGhpcy5icmVhZGNydW1ic1NvdXJjZSA9IGJyZWFkY3J1bWJzKSxcclxuICAgICAgICAgIG1lcmdlTWFwKGJyZWFkY3J1bWJzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdFByb2Nlc3MgPyB0aGlzLndyYXBJbnRvT2JzZXJ2YWJsZSh0aGlzLnBvc3RQcm9jZXNzKGJyZWFkY3J1bWJzKSkucGlwZShmaXJzdCgpKSA6IG9mKGJyZWFkY3J1bWJzKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoYnJlYWRjcnVtYnMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5icmVhZGNydW1icy5uZXh0KGJyZWFkY3J1bWJzKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2hCcmVhZGNydW1icygpIHtcclxuICAgICh0aGlzLnBvc3RQcm9jZXNzID8gdGhpcy53cmFwSW50b09ic2VydmFibGUodGhpcy5wb3N0UHJvY2Vzcyh0aGlzLmJyZWFkY3J1bWJzU291cmNlKSkucGlwZShmaXJzdCgpKSA6IG9mKHRoaXMuYnJlYWRjcnVtYnNTb3VyY2UpKVxyXG4gICAgICAuc3Vic2NyaWJlKGJyZWFkY3J1bWJzID0+IHtcclxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzLm5leHQoYnJlYWRjcnVtYnMpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZUNydW1icyhyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB7XHJcbiAgICBsZXQgY3J1bWJzJDogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+ID0gb2YoW10pO1xyXG4gICAgY29uc3QgZGF0YSA9IHJvdXRlLnJvdXRlQ29uZmlnICYmIHJvdXRlLnJvdXRlQ29uZmlnLmRhdGE7XHJcblxyXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5icmVhZGNydW1icykge1xyXG4gICAgICBjb25zdCByZXNvbHZlcjogUHBCcmVhZGNydW1ic1Jlc29sdmVyID1cclxuICAgICAgICBkYXRhLmJyZWFkY3J1bWJzLnByb3RvdHlwZSBpbnN0YW5jZW9mIFBwQnJlYWRjcnVtYnNSZXNvbHZlciA/IHRoaXMuaW5qZWN0b3IuZ2V0KGRhdGEuYnJlYWRjcnVtYnMpIDogdGhpcy5kZWZhdWx0UmVzb2x2ZXI7XHJcblxyXG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlci5yZXNvbHZlKHJvdXRlLCB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCk7XHJcbiAgICAgIGNydW1icyQgPSB0aGlzLndyYXBJbnRvT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+KHJlc3VsdCkucGlwZShmaXJzdCgpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcm91dGUuZmlyc3RDaGlsZCA/IGNvbmNhdChjcnVtYnMkLCB0aGlzLnJlc29sdmVDcnVtYnMocm91dGUuZmlyc3RDaGlsZCkpIDogY3J1bWJzJDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd3JhcEludG9PYnNlcnZhYmxlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyB2YWx1ZSA6IHRoaXMuaXNQcm9taXNlKHZhbHVlKSA/IGZyb20oUHJvbWlzZS5yZXNvbHZlKHZhbHVlKSkgOiBvZih2YWx1ZSBhcyBUKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNQcm9taXNlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJztcclxuICB9XHJcbn1cclxuIl19