@miesil/pp-breadcrumbs
Version:
PP-Breadcrumbs is an Angular 7 module generating breadcrumbs based on the routing state.
159 lines • 13.4 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";
export class PpBreadcrumbsService {
/**
* @param {?} router
* @param {?} route
* @param {?} injector
*/
constructor(router, route, injector) {
this.router = router;
this.injector = injector;
this.breadcrumbs = new BehaviorSubject([]);
this.defaultResolver = new PpBreadcrumbsResolver();
this.breadcrumbsSource = [];
this.router.events.pipe(filter((/**
* @param {?} x
* @return {?}
*/
x => x instanceof NavigationEnd))).subscribe((/**
* @param {?} event
* @return {?}
*/
(event) => {
this.resolveCrumbs(router.routerState.snapshot.root)
.pipe(mergeMap((/**
* @param {?} breadcrumbs
* @return {?}
*/
breadcrumbs => breadcrumbs)), distinct((/**
* @param {?} breadcrumb
* @return {?}
*/
breadcrumb => breadcrumb.text)), toArray(), tap((/**
* @param {?} breadcrumbs
* @return {?}
*/
breadcrumbs => this.breadcrumbsSource = breadcrumbs)), mergeMap((/**
* @param {?} breadcrumbs
* @return {?}
*/
breadcrumbs => {
return this.postProcess ? this.wrapIntoObservable(this.postProcess(breadcrumbs)).pipe(first()) : of(breadcrumbs);
})))
.subscribe((/**
* @param {?} breadcrumbs
* @return {?}
*/
breadcrumbs => {
this.breadcrumbs.next(breadcrumbs);
}));
}));
}
/**
* @return {?}
*/
get crumbs$() {
return this.breadcrumbs;
}
/**
* @return {?}
*/
refreshBreadcrumbs() {
(this.postProcess ? this.wrapIntoObservable(this.postProcess(this.breadcrumbsSource)).pipe(first()) : of(this.breadcrumbsSource))
.subscribe((/**
* @param {?} breadcrumbs
* @return {?}
*/
breadcrumbs => {
this.breadcrumbs.next(breadcrumbs);
}));
}
/**
* @private
* @param {?} route
* @return {?}
*/
resolveCrumbs(route) {
/** @type {?} */
let crumbs$ = of([]);
/** @type {?} */
const data = route.routeConfig && route.routeConfig.data;
if (data && data.breadcrumbs) {
/** @type {?} */
const resolver = data.breadcrumbs.prototype instanceof PpBreadcrumbsResolver ? this.injector.get(data.breadcrumbs) : this.defaultResolver;
/** @type {?} */
const 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 {?}
*/
wrapIntoObservable(value) {
return value instanceof Observable ? value : this.isPromise(value) ? from(Promise.resolve(value)) : of((/** @type {?} */ (value)));
}
/**
* @private
* @param {?} value
* @return {?}
*/
isPromise(value) {
return value && typeof value.then === 'function';
}
}
PpBreadcrumbsService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
PpBreadcrumbsService.ctorParameters = () => [
{ 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" });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtaWVzaWwvcHAtYnJlYWRjcnVtYnMvIiwic291cmNlcyI6WyJsaWIvYnJlYWRjcnVtYnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBMEIsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFNL0UsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7O0lBWS9CLFlBQW9CLE1BQWMsRUFBRSxLQUFxQixFQUFVLFFBQWtCO1FBQWpFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBaUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVI3RSxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELG9CQUFlLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzlDLHNCQUFpQixHQUFpQixFQUFFLENBQUM7UUFPM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU07Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxhQUFhLEVBQUMsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUNsRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0s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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG1CQUFBLEtBQUssRUFBSyxDQUFDLENBQUM7SUFDckgsQ0FBQzs7Ozs7O0lBRU8sU0FBUyxDQUFDLEtBQVU7UUFDMUIsT0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztJQUNuRCxDQUFDOzs7WUE3REYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7O1lBVCtELE1BQU07WUFBN0QsY0FBYztZQURGLFFBQVE7Ozs7O0lBYTNCLDJDQUF1Rzs7Ozs7SUFFdkcsMkNBQTREOzs7OztJQUM1RCwrQ0FBc0Q7Ozs7O0lBQ3RELGlEQUE2Qzs7Ozs7SUFNakMsc0NBQXNCOzs7OztJQUF5Qix3Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgY29uY2F0LCBmcm9tIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBQcEJyZWFkY3J1bWJzUmVzb2x2ZXIgfSBmcm9tICcuL2JyZWFkY3J1bWJzLnJlc29sdmVyJztcclxuaW1wb3J0IHtmaWx0ZXIsIG1lcmdlTWFwLCBkaXN0aW5jdCwgdG9BcnJheSwgZmlyc3QsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iIH0gZnJvbSAnLi9icmVhZGNydW1iJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBwQnJlYWRjcnVtYnNTZXJ2aWNlIHtcclxuXHJcbiAgcG9zdFByb2Nlc3M6IChjcnVtYnM6IEJyZWFkY3J1bWJbXSkgPT4gUHJvbWlzZTxCcmVhZGNydW1iW10+IHwgT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHwgQnJlYWRjcnVtYltdO1xyXG5cclxuICBwcml2YXRlIGJyZWFkY3J1bWJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCcmVhZGNydW1iW10+KFtdKTtcclxuICBwcml2YXRlIGRlZmF1bHRSZXNvbHZlciA9IG5ldyBQcEJyZWFkY3J1bWJzUmVzb2x2ZXIoKTtcclxuICBwcml2YXRlIGJyZWFkY3J1bWJzU291cmNlOiBCcmVhZGNydW1iW10gPSBbXTtcclxuXHJcbiAgZ2V0IGNydW1icyQoKTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcclxuICAgIHJldHVybiB0aGlzLmJyZWFkY3J1bWJzO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKHggPT4geCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKS5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzb2x2ZUNydW1icyhyb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdClcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIG1lcmdlTWFwKGJyZWFkY3J1bWJzID0+IGJyZWFkY3J1bWJzKSxcclxuICAgICAgICAgIGRpc3RpbmN0KGJyZWFkY3J1bWIgPT4gYnJlYWRjcnVtYi50ZXh0KSxcclxuICAgICAgICAgIHRvQXJyYXkoKSxcclxuICAgICAgICAgIHRhcChicmVhZGNydW1icyA9PiB0aGlzLmJyZWFkY3J1bWJzU291cmNlID0gYnJlYWRjcnVtYnMpLFxyXG4gICAgICAgICAgbWVyZ2VNYXAoYnJlYWRjcnVtYnMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0UHJvY2VzcyA/IHRoaXMud3JhcEludG9PYnNlcnZhYmxlKHRoaXMucG9zdFByb2Nlc3MoYnJlYWRjcnVtYnMpKS5waXBlKGZpcnN0KCkpIDogb2YoYnJlYWRjcnVtYnMpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZShicmVhZGNydW1icyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzLm5leHQoYnJlYWRjcnVtYnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEJyZWFkY3J1bWJzKCkge1xyXG4gICAgKHRoaXMucG9zdFByb2Nlc3MgPyB0aGlzLndyYXBJbnRvT2JzZXJ2YWJsZSh0aGlzLnBvc3RQcm9jZXNzKHRoaXMuYnJlYWRjcnVtYnNTb3VyY2UpKS5waXBlKGZpcnN0KCkpIDogb2YodGhpcy5icmVhZGNydW1ic1NvdXJjZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYnJlYWRjcnVtYnMgPT4ge1xyXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnMubmV4dChicmVhZGNydW1icyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlQ3J1bWJzKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcclxuICAgIGxldCBjcnVtYnMkOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4gPSBvZihbXSk7XHJcbiAgICBjb25zdCBkYXRhID0gcm91dGUucm91dGVDb25maWcgJiYgcm91dGUucm91dGVDb25maWcuZGF0YTtcclxuXHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmJyZWFkY3J1bWJzKSB7XHJcbiAgICAgIGNvbnN0IHJlc29sdmVyOiBQcEJyZWFkY3J1bWJzUmVzb2x2ZXIgPVxyXG4gICAgICAgIGRhdGEuYnJlYWRjcnVtYnMucHJvdG90eXBlIGluc3RhbmNlb2YgUHBCcmVhZGNydW1ic1Jlc29sdmVyID8gdGhpcy5pbmplY3Rvci5nZXQoZGF0YS5icmVhZGNydW1icykgOiB0aGlzLmRlZmF1bHRSZXNvbHZlcjtcclxuXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVyLnJlc29sdmUocm91dGUsIHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcclxuICAgICAgY3J1bWJzJCA9IHRoaXMud3JhcEludG9PYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ocmVzdWx0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByb3V0ZS5maXJzdENoaWxkID8gY29uY2F0KGNydW1icyQsIHRoaXMucmVzb2x2ZUNydW1icyhyb3V0ZS5maXJzdENoaWxkKSkgOiBjcnVtYnMkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3cmFwSW50b09ic2VydmFibGU8VD4odmFsdWU6IFQgfCBQcm9taXNlPFQ+IHwgT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHZhbHVlIDogdGhpcy5pc1Byb21pc2UodmFsdWUpID8gZnJvbShQcm9taXNlLnJlc29sdmUodmFsdWUpKSA6IG9mKHZhbHVlIGFzIFQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1Byb21pc2UodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xyXG4gIH1cclxufVxyXG4iXX0=