UNPKG

@miesil/pp-breadcrumbs

Version:

PP-Breadcrumbs is an Angular 7 module generating breadcrumbs based on the routing state.

159 lines 13.4 kB
/** * @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=