@exalif/ngx-breadcrumbs
Version:
Angular 4+ breadcrumbs on top of native Angular router
115 lines (114 loc) • 11.4 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';
var BreadcrumbsService = /** @class */ (function () {
function BreadcrumbsService(_router, route, _config, _injector) {
var _this = this;
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(function (x) { return x instanceof NavigationEnd; }))
.subscribe(function (event) {
var /** @type {?} */ routeRoot = _router.routerState.snapshot.root;
_this._resolveCrumbs(routeRoot).pipe(flatMap(function (crumbs) { return crumbs; }), distinct(function (crumb) { return crumb.text; }), toArray(), flatMap(function (crumbs) {
if (_this._config.postProcess) {
var /** @type {?} */ postProcessedCrumb = _this._config.postProcess(crumbs);
return BreadcrumbsUtils.wrapIntoObservable(postProcessedCrumb).pipe(first());
}
else {
return of(crumbs);
}
}))
.subscribe(function (crumbs) {
_this._breadcrumbs.next(crumbs);
});
});
}
Object.defineProperty(BreadcrumbsService.prototype, "crumbs$", {
get: /**
* @return {?}
*/
function () {
return this._breadcrumbs;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
BreadcrumbsService.prototype.getCrumbs = /**
* @return {?}
*/
function () {
return this.crumbs$;
};
/**
* @param {?} route
* @return {?}
*/
BreadcrumbsService.prototype._resolveCrumbs = /**
* @param {?} route
* @return {?}
*/
function (route) {
var /** @type {?} */ crumbs$;
var /** @type {?} */ data = route.routeConfig && route.routeConfig.data;
if (data && data["breadcrumbs"]) {
var /** @type {?} */ resolver = void 0;
if (data["breadcrumbs"].prototype instanceof BreadcrumbsResolver) {
resolver = this._injector.get(data["breadcrumbs"]);
}
else {
resolver = this._defaultResolver;
}
var /** @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 = function () { return [
{ type: Router },
{ type: ActivatedRoute },
{ type: BreadcrumbsConfig },
{ type: Injector }
]; };
return BreadcrumbsService;
}());
export { BreadcrumbsService };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BleGFsaWYvbmd4LWJyZWFkY3J1bWJzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2JyZWFkY3J1bWJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQTBCLGFBQWEsRUFBRSxNQUFNLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3RyxPQUFPLEVBQWMsRUFBRSxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0lBUTVELDRCQUNVLFNBQ0QsT0FDQyxTQUNBO1FBSlYsaUJBOEJDO1FBN0JTLFlBQU8sR0FBUCxPQUFPO1FBQ1IsVUFBSyxHQUFMLEtBQUs7UUFDSixZQUFPLEdBQVAsT0FBTztRQUNQLGNBQVMsR0FBVCxTQUFTOzRCQVBJLElBQUksZUFBZSxDQUFlLEVBQUUsQ0FBQztnQ0FDakMsSUFBSSxtQkFBbUIsRUFBRTtRQVNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxZQUFZLGFBQWEsRUFBMUIsQ0FBMEIsQ0FBQyxDQUFDO2FBQ2hFLFNBQVMsQ0FBQyxVQUFDLEtBQW9CO1lBQzlCLHFCQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFFcEQsS0FBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQ2pDLE9BQU8sQ0FBQyxVQUFDLE1BQW9CLElBQUssT0FBQSxNQUFNLEVBQU4sQ0FBTSxDQUFDLEVBQ3pDLFFBQVEsQ0FBQyxVQUFDLEtBQWlCLElBQUssT0FBQSxLQUFLLENBQUMsSUFBSSxFQUFWLENBQVUsQ0FBQyxFQUMzQyxPQUFPLEVBQUUsRUFDVCxPQUFPLENBQUMsVUFBQyxNQUFvQjtnQkFDM0IsRUFBRSxDQUFDLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUM3QixxQkFBTSxrQkFBa0IsR0FBRyxLQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFlLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUMvRSxLQUFLLEVBQUUsQ0FDUixDQUFDO2lCQUNIO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ25CO2FBQ0YsQ0FBQyxDQUNIO2lCQUNFLFNBQVMsQ0FBQyxVQUFDLE1BQW9CO2dCQUM5QixLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNoQyxDQUFDLENBQUM7U0FDTixDQUFDLENBQUM7S0FDTjtJQUVELHNCQUFJLHVDQUFPOzs7O1FBQVg7WUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQjs7O09BQUE7Ozs7SUFFTSxzQ0FBUzs7OztRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDOzs7Ozs7SUFHZCwyQ0FBYzs7OztjQUFDLEtBQTZCO1FBR2xELHFCQUFJLE9BQWlDLENBQUM7UUFFdEMscUJBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFFekQsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksZUFBWSxDQUFDLENBQUMsQ0FBQztZQUM3QixxQkFBSSxRQUFRLFNBQXFCLENBQUM7WUFFbEMsRUFBRSxDQUFDLENBQUMsSUFBSSxnQkFBYSxTQUFTLFlBQVksbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxnQkFBYSxDQUFDO2FBQ2pEO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUNsQztZQUVELHFCQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQWUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN0RSxLQUFLLEVBQUUsQ0FDUixDQUFDO1NBRUg7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE9BQU8sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEI7UUFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNyQixPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQzs7O2dCQTNFbEIsVUFBVTs7OztnQkFYcUQsTUFBTTtnQkFBN0QsY0FBYztnQkFNZCxpQkFBaUI7Z0JBUEwsUUFBUTs7NkJBQTdCOztTQWFhLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29uY2F0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGZpbHRlciwgZmxhdE1hcCwgZGlzdGluY3QsIHRvQXJyYXksIGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCcmVhZGNydW1ic0NvbmZpZyB9IGZyb20gJy4vYnJlYWRjcnVtYnMuY29uZmlnJztcbmltcG9ydCB7IEJyZWFkY3J1bWJzUmVzb2x2ZXIgfSBmcm9tICcuL2JyZWFkY3J1bWJzLnJlc29sdmVyJztcbmltcG9ydCB7IEJyZWFkY3J1bWIgfSBmcm9tICcuLi9tb2RlbHMvYnJlYWRjcnVtYic7XG5pbXBvcnQgeyBCcmVhZGNydW1ic1V0aWxzIH0gZnJvbSAnLi4vdXRpbHMvYnJlYWRjcnVtYnMudXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYnNTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9icmVhZGNydW1icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnJlYWRjcnVtYltdPihbXSk7XG4gIHByaXZhdGUgX2RlZmF1bHRSZXNvbHZlciA9IG5ldyBCcmVhZGNydW1ic1Jlc29sdmVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9jb25maWc6IEJyZWFkY3J1bWJzQ29uZmlnLFxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvclxuICApIHtcblxuICAgIHRoaXMuX3JvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoKHgpID0+IHggaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdXRlUm9vdCA9IF9yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdDtcblxuICAgICAgICB0aGlzLl9yZXNvbHZlQ3J1bWJzKHJvdXRlUm9vdCkucGlwZShcbiAgICAgICAgICBmbGF0TWFwKChjcnVtYnM6IEJyZWFkY3J1bWJbXSkgPT4gY3J1bWJzKSxcbiAgICAgICAgICBkaXN0aW5jdCgoY3J1bWI6IEJyZWFkY3J1bWIpID0+IGNydW1iLnRleHQpLFxuICAgICAgICAgIHRvQXJyYXkoKSxcbiAgICAgICAgICBmbGF0TWFwKChjcnVtYnM6IEJyZWFkY3J1bWJbXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5wb3N0UHJvY2Vzcykge1xuICAgICAgICAgICAgICBjb25zdCBwb3N0UHJvY2Vzc2VkQ3J1bWIgPSB0aGlzLl9jb25maWcucG9zdFByb2Nlc3MoY3J1bWJzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIEJyZWFkY3J1bWJzVXRpbHMud3JhcEludG9PYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ocG9zdFByb2Nlc3NlZENydW1iKS5waXBlKFxuICAgICAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZihjcnVtYnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChjcnVtYnM6IEJyZWFkY3J1bWJbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYnJlYWRjcnVtYnMubmV4dChjcnVtYnMpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXQgY3J1bWJzJCgpOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ge1xuICAgIHJldHVybiB0aGlzLl9icmVhZGNydW1icztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDcnVtYnMoKTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcbiAgICByZXR1cm4gdGhpcy5jcnVtYnMkO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzb2x2ZUNydW1icyhyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdClcbiAgICA6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB7XG5cbiAgICBsZXQgY3J1bWJzJDogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+O1xuXG4gICAgY29uc3QgZGF0YSA9IHJvdXRlLnJvdXRlQ29uZmlnICYmIHJvdXRlLnJvdXRlQ29uZmlnLmRhdGE7XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLmJyZWFkY3J1bWJzKSB7XG4gICAgICBsZXQgcmVzb2x2ZXI6IEJyZWFkY3J1bWJzUmVzb2x2ZXI7XG5cbiAgICAgIGlmIChkYXRhLmJyZWFkY3J1bWJzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEJyZWFkY3J1bWJzUmVzb2x2ZXIpIHtcbiAgICAgICAgcmVzb2x2ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoZGF0YS5icmVhZGNydW1icyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlciA9IHRoaXMuX2RlZmF1bHRSZXNvbHZlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZXIucmVzb2x2ZShyb3V0ZSwgdGhpcy5fcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcbiAgICAgIGNydW1icyQgPSBCcmVhZGNydW1ic1V0aWxzLndyYXBJbnRvT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+KHJlc3VsdCkucGlwZShcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjcnVtYnMkID0gb2YoW10pO1xuICAgIH1cblxuICAgIGlmIChyb3V0ZS5maXJzdENoaWxkKSB7XG4gICAgICBjcnVtYnMkID0gY29uY2F0KGNydW1icyQsIHRoaXMuX3Jlc29sdmVDcnVtYnMocm91dGUuZmlyc3RDaGlsZCkpO1xuICAgIH1cblxuICAgIHJldHVybiBjcnVtYnMkO1xuICB9XG59XG4iXX0=