@exalif/ngx-breadcrumbs
Version:
Angular 4+ breadcrumbs on top of native Angular router
107 lines (106 loc) • 10.9 kB
JavaScript
/**
* @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