UNPKG

@miesil/pp-breadcrumbs

Version:

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

181 lines 14.5 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"; 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