UNPKG

@exalif/ngx-breadcrumbs

Version:

Angular 4+ breadcrumbs on top of native Angular router

107 lines (106 loc) 10.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable, Injector } from '@angular/core'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { of, BehaviorSubject, concat } from 'rxjs'; import { filter, flatMap, distinct, toArray, first } from 'rxjs/operators'; import { BreadcrumbsConfig } from './breadcrumbs.config'; import { BreadcrumbsResolver } from './breadcrumbs.resolver'; import { BreadcrumbsUtils } from '../utils/breadcrumbs.utils'; export class BreadcrumbsService { /** * @param {?} _router * @param {?} route * @param {?} _config * @param {?} _injector */ constructor(_router, route, _config, _injector) { this._router = _router; this.route = route; this._config = _config; this._injector = _injector; this._breadcrumbs = new BehaviorSubject([]); this._defaultResolver = new BreadcrumbsResolver(); this._router.events.pipe(filter((x) => x instanceof NavigationEnd)) .subscribe((event) => { const /** @type {?} */ routeRoot = _router.routerState.snapshot.root; this._resolveCrumbs(routeRoot).pipe(flatMap((crumbs) => crumbs), distinct((crumb) => crumb.text), toArray(), flatMap((crumbs) => { if (this._config.postProcess) { const /** @type {?} */ postProcessedCrumb = this._config.postProcess(crumbs); return BreadcrumbsUtils.wrapIntoObservable(postProcessedCrumb).pipe(first()); } else { return of(crumbs); } })) .subscribe((crumbs) => { this._breadcrumbs.next(crumbs); }); }); } /** * @return {?} */ get crumbs$() { return this._breadcrumbs; } /** * @return {?} */ getCrumbs() { return this.crumbs$; } /** * @param {?} route * @return {?} */ _resolveCrumbs(route) { let /** @type {?} */ crumbs$; const /** @type {?} */ data = route.routeConfig && route.routeConfig.data; if (data && data["breadcrumbs"]) { let /** @type {?} */ resolver; if (data["breadcrumbs"].prototype instanceof BreadcrumbsResolver) { resolver = this._injector.get(data["breadcrumbs"]); } else { resolver = this._defaultResolver; } const /** @type {?} */ result = resolver.resolve(route, this._router.routerState.snapshot); crumbs$ = BreadcrumbsUtils.wrapIntoObservable(result).pipe(first()); } else { crumbs$ = of([]); } if (route.firstChild) { crumbs$ = concat(crumbs$, this._resolveCrumbs(route.firstChild)); } return crumbs$; } } BreadcrumbsService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ BreadcrumbsService.ctorParameters = () => [ { type: Router }, { type: ActivatedRoute }, { type: BreadcrumbsConfig }, { type: Injector } ]; function BreadcrumbsService_tsickle_Closure_declarations() { /** @type {?} */ BreadcrumbsService.prototype._breadcrumbs; /** @type {?} */ BreadcrumbsService.prototype._defaultResolver; /** @type {?} */ BreadcrumbsService.prototype._router; /** @type {?} */ BreadcrumbsService.prototype.route; /** @type {?} */ BreadcrumbsService.prototype._config; /** @type {?} */ BreadcrumbsService.prototype._injector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BleGFsaWYvbmd4LWJyZWFkY3J1bWJzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2JyZWFkY3J1bWJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQTBCLGFBQWEsRUFBRSxNQUFNLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3RyxPQUFPLEVBQWMsRUFBRSxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUQsTUFBTTs7Ozs7OztJQUtKLFlBQ1UsU0FDRCxPQUNDLFNBQ0E7UUFIQSxZQUFPLEdBQVAsT0FBTztRQUNSLFVBQUssR0FBTCxLQUFLO1FBQ0osWUFBTyxHQUFQLE9BQU87UUFDUCxjQUFTLEdBQVQsU0FBUzs0QkFQSSxJQUFJLGVBQWUsQ0FBZSxFQUFFLENBQUM7Z0NBQ2pDLElBQUksbUJBQW1CLEVBQUU7UUFTbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLGFBQWEsQ0FBQyxDQUFDO2FBQ2hFLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUNsQyx1QkFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBRXBELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUNqQyxPQUFPLENBQUMsQ0FBQyxNQUFvQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFDekMsUUFBUSxDQUFDLENBQUMsS0FBaUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUMzQyxPQUFPLEVBQUUsRUFDVCxPQUFPLENBQUMsQ0FBQyxNQUFvQixFQUFFLEVBQUU7Z0JBQy9CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsdUJBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBZSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FDL0UsS0FBSyxFQUFFLENBQ1IsQ0FBQztpQkFDSDtnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNuQjthQUNGLENBQUMsQ0FDSDtpQkFDRSxTQUFTLENBQUMsQ0FBQyxNQUFvQixFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hDLENBQUMsQ0FBQztTQUNOLENBQUMsQ0FBQztLQUNOOzs7O0lBRUQsSUFBSSxPQUFPO1FBQ1QsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDMUI7Ozs7SUFFTSxTQUFTO1FBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Ozs7OztJQUdkLGNBQWMsQ0FBQyxLQUE2QjtRQUdsRCxxQkFBSSxPQUFpQyxDQUFDO1FBRXRDLHVCQUFNLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBRXpELEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLGVBQVksQ0FBQyxDQUFDLENBQUM7WUFDN0IscUJBQUksUUFBNkIsQ0FBQztZQUVsQyxFQUFFLENBQUMsQ0FBQyxJQUFJLGdCQUFhLFNBQVMsWUFBWSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFhLENBQUM7YUFDakQ7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2FBQ2xDO1lBRUQsdUJBQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBZSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3RFLEtBQUssRUFBRSxDQUNSLENBQUM7U0FFSDtRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNsQjtRQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDbEU7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDOzs7O1lBM0VsQixVQUFVOzs7O1lBWHFELE1BQU07WUFBN0QsY0FBYztZQU1kLGlCQUFpQjtZQVBMLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyU3RhdGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbmNhdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBmaWx0ZXIsIGZsYXRNYXAsIGRpc3RpbmN0LCB0b0FycmF5LCBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQnJlYWRjcnVtYnNDb25maWcgfSBmcm9tICcuL2JyZWFkY3J1bWJzLmNvbmZpZyc7XG5pbXBvcnQgeyBCcmVhZGNydW1ic1Jlc29sdmVyIH0gZnJvbSAnLi9icmVhZGNydW1icy5yZXNvbHZlcic7XG5pbXBvcnQgeyBCcmVhZGNydW1iIH0gZnJvbSAnLi4vbW9kZWxzL2JyZWFkY3J1bWInO1xuaW1wb3J0IHsgQnJlYWRjcnVtYnNVdGlscyB9IGZyb20gJy4uL3V0aWxzL2JyZWFkY3J1bWJzLnV0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJzU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfYnJlYWRjcnVtYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJyZWFkY3J1bWJbXT4oW10pO1xuICBwcml2YXRlIF9kZWZhdWx0UmVzb2x2ZXIgPSBuZXcgQnJlYWRjcnVtYnNSZXNvbHZlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHB1YmxpYyByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBCcmVhZGNydW1ic0NvbmZpZyxcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG5cbiAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKCh4KSA9PiB4IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZVJvb3QgPSBfcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3Q7XG5cbiAgICAgICAgdGhpcy5fcmVzb2x2ZUNydW1icyhyb3V0ZVJvb3QpLnBpcGUoXG4gICAgICAgICAgZmxhdE1hcCgoY3J1bWJzOiBCcmVhZGNydW1iW10pID0+IGNydW1icyksXG4gICAgICAgICAgZGlzdGluY3QoKGNydW1iOiBCcmVhZGNydW1iKSA9PiBjcnVtYi50ZXh0KSxcbiAgICAgICAgICB0b0FycmF5KCksXG4gICAgICAgICAgZmxhdE1hcCgoY3J1bWJzOiBCcmVhZGNydW1iW10pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucG9zdFByb2Nlc3MpIHtcbiAgICAgICAgICAgICAgY29uc3QgcG9zdFByb2Nlc3NlZENydW1iID0gdGhpcy5fY29uZmlnLnBvc3RQcm9jZXNzKGNydW1icyk7XG4gICAgICAgICAgICAgIHJldHVybiBCcmVhZGNydW1ic1V0aWxzLndyYXBJbnRvT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+KHBvc3RQcm9jZXNzZWRDcnVtYikucGlwZShcbiAgICAgICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gb2YoY3J1bWJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoY3J1bWJzOiBCcmVhZGNydW1iW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2JyZWFkY3J1bWJzLm5leHQoY3J1bWJzKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IGNydW1icyQoKTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcbiAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3J1bWJzKCk6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY3J1bWJzJDtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc29sdmVDcnVtYnMocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpXG4gICAgOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ge1xuXG4gICAgbGV0IGNydW1icyQ6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPjtcblxuICAgIGNvbnN0IGRhdGEgPSByb3V0ZS5yb3V0ZUNvbmZpZyAmJiByb3V0ZS5yb3V0ZUNvbmZpZy5kYXRhO1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5icmVhZGNydW1icykge1xuICAgICAgbGV0IHJlc29sdmVyOiBCcmVhZGNydW1ic1Jlc29sdmVyO1xuXG4gICAgICBpZiAoZGF0YS5icmVhZGNydW1icy5wcm90b3R5cGUgaW5zdGFuY2VvZiBCcmVhZGNydW1ic1Jlc29sdmVyKSB7XG4gICAgICAgIHJlc29sdmVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KGRhdGEuYnJlYWRjcnVtYnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZXIgPSB0aGlzLl9kZWZhdWx0UmVzb2x2ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVyLnJlc29sdmUocm91dGUsIHRoaXMuX3JvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCk7XG4gICAgICBjcnVtYnMkID0gQnJlYWRjcnVtYnNVdGlscy53cmFwSW50b09ic2VydmFibGU8QnJlYWRjcnVtYltdPihyZXN1bHQpLnBpcGUoXG4gICAgICAgIGZpcnN0KClcbiAgICAgICk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgY3J1bWJzJCA9IG9mKFtdKTtcbiAgICB9XG5cbiAgICBpZiAocm91dGUuZmlyc3RDaGlsZCkge1xuICAgICAgY3J1bWJzJCA9IGNvbmNhdChjcnVtYnMkLCB0aGlzLl9yZXNvbHZlQ3J1bWJzKHJvdXRlLmZpcnN0Q2hpbGQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3J1bWJzJDtcbiAgfVxufVxuIl19