UNPKG

ngx-dynamic-breadcrumb

Version:
113 lines 15.6 kB
import { Injectable } from '@angular/core'; import { NavigationEnd } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; import { filter } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; export class NgxBreadcrumbService { constructor(router, activatedRoute) { this.router = router; this.activatedRoute = activatedRoute; this.breadcrumbs = []; this._breadcrumbChanges = new BehaviorSubject([]); this.breadcrumbChanges = this._breadcrumbChanges.asObservable(); this._subscribeToRouteEvent(); } /** * Recursively build breadcrumb according to activated route. * * @param route activate route object * @param url parent url * @param breadcrumbs array of current breadcrumbs */ buildBreadCrumb(route, url = '', breadcrumbs = []) { var _a, _b, _c, _d, _e, _f; // If no routeConfig is available we are on the root path let label, key, tooltip; let isClickable = true; const currentBreadcrumb = (_b = (_a = route.routeConfig) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.breadcrumb; if (typeof currentBreadcrumb === 'object') { key = currentBreadcrumb.key; label = currentBreadcrumb.label; isClickable = (_c = currentBreadcrumb.isClickable) !== null && _c !== void 0 ? _c : isClickable; tooltip = (_d = currentBreadcrumb.tooltip) !== null && _d !== void 0 ? _d : label; } else if (typeof currentBreadcrumb === 'string') { key = label = tooltip = currentBreadcrumb; } let path = (_f = (_e = route.routeConfig) === null || _e === void 0 ? void 0 : _e.path) !== null && _f !== void 0 ? _f : ''; // If the route is dynamic route such as ':id', replace it with actual param values const dynamicRoutes = path.split('/').filter((el) => el.startsWith(':')); if (dynamicRoutes.length && !!route.snapshot) { dynamicRoutes.forEach((item) => { const paramName = item.split(':')[1]; path = path.replace(item, route.snapshot.params[paramName]); }); } // In the routeConfig the complete path is not available, //so we rebuild it each time const nextUrl = path ? `${url}/${path}` : url; const newBreadcrumbs = [...breadcrumbs]; if (key) { const breadcrumb = { key, label, tooltip, url: nextUrl, isClickable, }; // Only adding route with non-empty label newBreadcrumbs.push(breadcrumb); } if (route.firstChild) { //If we are not on our current path yet, //there will be more children to look after, to build our breadcrumb return this.buildBreadCrumb(route.firstChild, nextUrl, newBreadcrumbs); } return newBreadcrumbs; } /** * Returns the latest array of breadcrumbs. * * @returns Array of breadcrumbs */ getBreadcrumbs() { return this._breadcrumbChanges.getValue(); } /** * Edit the breadcrumb label and url dynamically. * If the label is null while editing, it will act * as delete breadcrumb from UI. * * @param crumbs IReplaceBreadcrumb[] */ editBreadcrumbs(crumbs) { crumbs.forEach((item) => { var _a, _b; const data = this.breadcrumbs.find((breadcrumb) => breadcrumb.key === item.key); if (data) { data.label = item.newLabel; data.url = Array.isArray(item.newUrl) ? item.newUrl.join('/') : (_a = item.newUrl) !== null && _a !== void 0 ? _a : data.url; data.tooltip = (_b = item.tooltip) !== null && _b !== void 0 ? _b : data.tooltip; } }); this._breadcrumbChanges.next([...this.breadcrumbs]); } // private functions _subscribeToRouteEvent() { this.router.events .pipe(filter((event) => event instanceof NavigationEnd)) .subscribe(() => { this.breadcrumbs = this.buildBreadCrumb(this.activatedRoute.root); this._breadcrumbChanges.next(this.breadcrumbs); }); } } NgxBreadcrumbService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NgxBreadcrumbService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); NgxBreadcrumbService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NgxBreadcrumbService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NgxBreadcrumbService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWJyZWFkY3J1bWIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1icmVhZGNydW1iL3NyYy9saWIvbmd4LWJyZWFkY3J1bWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBa0IsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUt4QyxNQUFNLE9BQU8sb0JBQW9CO0lBWS9CLFlBQ21CLE1BQWMsRUFDZCxjQUE4QjtRQUQ5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBTnpDLGdCQUFXLEdBQWtCLEVBQUUsQ0FBQztRQUV2Qix1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFNM0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZUFBZSxDQUNiLEtBQXFCLEVBQ3JCLEdBQUcsR0FBRyxFQUFFLEVBQ1IsY0FBNkIsRUFBRTs7UUFFL0IseURBQXlEO1FBQ3pELElBQUksS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUM7UUFDeEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0saUJBQWlCLEdBQUcsTUFBQSxNQUFBLEtBQUssQ0FBQyxXQUFXLDBDQUFFLElBQUksMENBQUUsVUFBVSxDQUFDO1FBQzlELElBQUksT0FBTyxpQkFBaUIsS0FBSyxRQUFRLEVB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Q0FBQyxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBQSxJQUFJLENBQUMsT0FBTyxtQ0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzdDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsb0JBQW9CO0lBQ1osc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsQ0FBQzthQUN2RCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztrSEExSFUsb0JBQW9CO3NIQUFwQixvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBJQnJlYWRjcnVtYiwgSVJlcGxhY2VCcmVhZGNydW1iIH0gZnJvbSAnLi9uZ3gtYnJlYWRjcnVtYi50eXBlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOZ3hCcmVhZGNydW1iU2VydmljZSB7XHJcblxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGNoYW5nZSB3aGVuIHRoZSBicmVhZGNydW1icyBhcmUgY2hhbmdlZC5cclxuICAgKi9cclxuICByZWFkb25seSBicmVhZGNydW1iQ2hhbmdlczogT2JzZXJ2YWJsZTxJQnJlYWRjcnVtYltdPjtcclxuXHJcbiAgcHJpdmF0ZSBicmVhZGNydW1iczogSUJyZWFkY3J1bWJbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9icmVhZGNydW1iQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUJyZWFkY3J1bWJbXT4oW10pO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkge1xyXG4gICAgdGhpcy5icmVhZGNydW1iQ2hhbmdlcyA9IHRoaXMuX2JyZWFkY3J1bWJDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgdGhpcy5fc3Vic2NyaWJlVG9Sb3V0ZUV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWN1cnNpdmVseSBidWlsZCBicmVhZGNydW1iIGFjY29yZGluZyB0byBhY3RpdmF0ZWQgcm91dGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm91dGUgYWN0aXZhdGUgcm91dGUgb2JqZWN0XHJcbiAgICogQHBhcmFtIHVybCBwYXJlbnQgdXJsXHJcbiAgICogQHBhcmFtIGJyZWFkY3J1bWJzIGFycmF5IG9mIGN1cnJlbnQgYnJlYWRjcnVtYnNcclxuICAgKi9cclxuICBidWlsZEJyZWFkQ3J1bWIoXHJcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICB1cmwgPSAnJyxcclxuICAgIGJyZWFkY3J1bWJzOiBJQnJlYWRjcnVtYltdID0gW11cclxuICApOiBJQnJlYWRjcnVtYltdIHtcclxuICAgIC8vIElmIG5vIHJvdXRlQ29uZmlnIGlzIGF2YWlsYWJsZSB3ZSBhcmUgb24gdGhlIHJvb3QgcGF0aFxyXG4gICAgbGV0IGxhYmVsLCBrZXksIHRvb2x0aXA7XHJcbiAgICBsZXQgaXNDbGlja2FibGUgPSB0cnVlO1xyXG4gICAgY29uc3QgY3VycmVudEJyZWFkY3J1bWIgPSByb3V0ZS5yb3V0ZUNvbmZpZz8uZGF0YT8uYnJlYWRjcnVtYjtcclxuICAgIGlmICh0eXBlb2YgY3VycmVudEJyZWFkY3J1bWIgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGtleSA9IGN1cnJlbnRCcmVhZGNydW1iLmtleTtcclxuICAgICAgbGFiZWwgPSBjdXJyZW50QnJlYWRjcnVtYi5sYWJlbDtcclxuICAgICAgaXNDbGlja2FibGUgPSBjdXJyZW50QnJlYWRjcnVtYi5pc0NsaWNrYWJsZSA/PyBpc0NsaWNrYWJsZTtcclxuICAgICAgdG9vbHRpcCA9IGN1cnJlbnRCcmVhZGNydW1iLnRvb2x0aXAgPz8gbGFiZWw7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50QnJlYWRjcnVtYiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAga2V5ID0gbGFiZWwgPSB0b29sdGlwID0gY3VycmVudEJyZWFkY3J1bWI7XHJcbiAgICB9XHJcbiAgICBsZXQgcGF0aCA9IHJvdXRlLnJvdXRlQ29uZmlnPy5wYXRoID8/ICcnO1xyXG5cclxuICAgIC8vIElmIHRoZSByb3V0ZSBpcyBkeW5hbWljIHJvdXRlIHN1Y2ggYXMgJzppZCcsIHJlcGxhY2UgaXQgd2l0aCBhY3R1YWwgcGFyYW0gdmFsdWVzXHJcbiAgICBjb25zdCBkeW5hbWljUm91dGVzID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcigoZWwpID0+IGVsLnN0YXJ0c1dpdGgoJzonKSk7XHJcbiAgICBpZiAoZHluYW1pY1JvdXRlcy5sZW5ndGggJiYgISFyb3V0ZS5zbmFwc2hvdCkge1xyXG4gICAgICBkeW5hbWljUm91dGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBwYXJhbU5hbWUgPSBpdGVtLnNwbGl0KCc6JylbMV07XHJcbiAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShpdGVtLCByb3V0ZS5zbmFwc2hvdC5wYXJhbXNbcGFyYW1OYW1lXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluIHRoZSByb3V0ZUNvbmZpZyB0aGUgY29tcGxldGUgcGF0aCBpcyBub3QgYXZhaWxhYmxlLFxyXG4gICAgLy9zbyB3ZSByZWJ1aWxkIGl0IGVhY2ggdGltZVxyXG4gICAgY29uc3QgbmV4dFVybCA9IHBhdGggPyBgJHt1cmx9LyR7cGF0aH1gIDogdXJsO1xyXG5cclxuICAgIGNvbnN0IG5ld0JyZWFkY3J1bWJzID0gWy4uLmJyZWFkY3J1bWJzXTtcclxuXHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIGNvbnN0IGJyZWFkY3J1bWI6IElCcmVhZGNydW1iID0ge1xyXG4gICAgICAgIGtleSxcclxuICAgICAgICBsYWJlbCxcclxuICAgICAgICB0b29sdGlwLFxyXG4gICAgICAgIHVybDogbmV4dFVybCxcclxuICAgICAgICBpc0NsaWNrYWJsZSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIE9ubHkgYWRkaW5nIHJvdXRlIHdpdGggbm9uLWVtcHR5IGxhYmVsXHJcbiAgICAgIG5ld0JyZWFkY3J1bWJzLnB1c2goYnJlYWRjcnVtYik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJvdXRlLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgLy9JZiB3ZSBhcmUgbm90IG9uIG91ciBjdXJyZW50IHBhdGggeWV0LFxyXG4gICAgICAvL3RoZXJlIHdpbGwgYmUgbW9yZSBjaGlsZHJlbiB0byBsb29rIGFmdGVyLCB0byBidWlsZCBvdXIgYnJlYWRjcnVtYlxyXG4gICAgICByZXR1cm4gdGhpcy5idWlsZEJyZWFkQ3J1bWIocm91dGUuZmlyc3RDaGlsZCwgbmV4dFVybCwgbmV3QnJlYWRjcnVtYnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld0JyZWFkY3J1bWJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbGF0ZXN0IGFycmF5IG9mIGJyZWFkY3J1bWJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgQXJyYXkgb2YgYnJlYWRjcnVtYnNcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0QnJlYWRjcnVtYnMoKTogSUJyZWFkY3J1bWJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYkNoYW5nZXMuZ2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVkaXQgdGhlIGJyZWFkY3J1bWIgbGFiZWwgYW5kIHVybCBkeW5hbWljYWxseS5cclxuICAgKiBJZiB0aGUgbGFiZWwgaXMgbnVsbCB3aGlsZSBlZGl0aW5nLCBpdCB3aWxsIGFjdFxyXG4gICAqIGFzIGRlbGV0ZSBicmVhZGNydW1iIGZyb20gVUkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY3J1bWJzIElSZXBsYWNlQnJlYWRjcnVtYltdXHJcbiAgICovXHJcbiAgZWRpdEJyZWFkY3J1bWJzKGNydW1iczogSVJlcGxhY2VCcmVhZGNydW1iW10pOiB2b2lkIHtcclxuICAgIGNydW1icy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJyZWFkY3J1bWJzLmZpbmQoXHJcbiAgICAgICAgKGJyZWFkY3J1bWIpID0+IGJyZWFkY3J1bWIua2V5ID09PSBpdGVtLmtleVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIGRhdGEubGFiZWwgPSBpdGVtLm5ld0xhYmVsO1xyXG4gICAgICAgIGRhdGEudXJsID0gQXJyYXkuaXNBcnJheShpdGVtLm5ld1VybClcclxuICAgICAgICAgID8gaXRlbS5uZXdVcmwuam9pbignLycpXHJcbiAgICAgICAgICA6IGl0ZW0ubmV3VXJsID8/IGRhdGEudXJsO1xyXG4gICAgICAgIGRhdGEudG9vbHRpcCA9IGl0ZW0udG9vbHRpcCA/PyBkYXRhLnRvb2x0aXA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5fYnJlYWRjcnVtYkNoYW5nZXMubmV4dChbLi4udGhpcy5icmVhZGNydW1ic10pO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBmdW5jdGlvbnNcclxuICBwcml2YXRlIF9zdWJzY3JpYmVUb1JvdXRlRXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5icmVhZGNydW1icyA9IHRoaXMuYnVpbGRCcmVhZENydW1iKHRoaXMuYWN0aXZhdGVkUm91dGUucm9vdCk7XHJcbiAgICAgICAgdGhpcy5fYnJlYWRjcnVtYkNoYW5nZXMubmV4dCh0aGlzLmJyZWFkY3J1bWJzKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==