@coreui/angular
Version:
CoreUI Components Library for Angular
52 lines • 7.85 kB
JavaScript
import { Injectable } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
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 BreadcrumbRouterService {
#breadcrumbsBehaviorSubject;
constructor(router, route) {
this.router = router;
this.route = route;
this.outlet = 'primary';
this.#breadcrumbsBehaviorSubject = new BehaviorSubject(new Array());
this.breadcrumbs$ = this.#breadcrumbsBehaviorSubject.asObservable();
this.router.events
.pipe(takeUntilDestroyed(), filter((event) => event instanceof NavigationEnd))
.subscribe((event) => {
const breadcrumbs = [];
let currentRoute = this.route.root;
let url = '';
do {
const childrenRoutes = currentRoute.children;
currentRoute = null;
childrenRoutes.forEach((childRoute) => {
// console.log('breadcrumb event', event, 'route', route);
if (childRoute.outlet === this.outlet) {
const routeSnapshot = childRoute.snapshot;
url += '/' + routeSnapshot.url.map((segment) => segment.path).join('/');
breadcrumbs.push({
label: routeSnapshot.data['title'] ?? routeSnapshot.title ?? '',
url,
queryParams: routeSnapshot.queryParams
});
currentRoute = childRoute;
}
});
} while (currentRoute);
this.#breadcrumbsBehaviorSubject.next(Object.assign([], breadcrumbs));
return breadcrumbs;
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BreadcrumbRouterService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BreadcrumbRouterService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BreadcrumbRouterService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1yb3V0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLXJvdXRlci9icmVhZGNydW1iLXJvdXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFrQixhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTXhDLE1BQU0sT0FBTyx1QkFBdUI7SUFHekIsMkJBQTJCLENBQTRHO0lBR2hKLFlBQW9CLE1BQWMsRUFBVSxLQUFxQjtRQUE3QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFMMUQsV0FBTSxHQUFHLFNBQVMsQ0FBQztRQUVqQixnQ0FBMkIsR0FBdUMsSUFBSSxlQUFlLENBQW9CLElBQUksS0FBSyxFQUFtQixDQUFDLENBQUM7UUFDdkksaUJBQVksR0FBa0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBSXJHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNmLElBQUksQ0FDSCxrQkFBa0IsRUFBRSxFQUNwQixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsQ0FDbEQ7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixNQUFNLFdBQVcsR0FBVSxFQUFFLENBQUM7WUFDOUIsSUFBSSxZQUFZLEdBQTBCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzFELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNiLEdBQUcsQ0FBQztnQkFDRixNQUFNLGNBQWMsR0FBcUIsWUFBWSxDQUFDLFFBQVEsQ0FBQztnQkFDL0QsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO29CQUNwQywwREFBMEQ7b0JBQzFELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ3RDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7d0JBQzFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3hFLFdBQVcsQ0FBQyxJQUFJLENBQUM7NEJBQ2YsS0FBSyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFOzRCQUMvRCxHQUFHOzRCQUNILFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVzt5QkFDdkMsQ0FBQyxDQUFDO3dCQUNILFlBQVksR0FBRyxVQUFVLENBQUM7b0JBQzVCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLFFBQVEsWUFBWSxFQUFFO1lBRXZCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUV0RSxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBdkNVLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSUJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi4vYnJlYWRjcnVtYi1pdGVtL2JyZWFkY3J1bWItaXRlbSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJSb3V0ZXJTZXJ2aWNlIHtcbiAgcHVibGljIG91dGxldCA9ICdwcmltYXJ5JztcblxuICByZWFkb25seSAjYnJlYWRjcnVtYnNCZWhhdmlvclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJQnJlYWRjcnVtYkl0ZW1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElCcmVhZGNydW1iSXRlbVtdPihuZXcgQXJyYXk8SUJyZWFkY3J1bWJJdGVtPigpKTtcbiAgcmVhZG9ubHkgYnJlYWRjcnVtYnMkOiBPYnNlcnZhYmxlPElCcmVhZGNydW1iSXRlbVtdPiA9IHRoaXMuI2JyZWFkY3J1bWJzQmVoYXZpb3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG5cbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYnM6IGFueVtdID0gW107XG4gICAgICAgIGxldCBjdXJyZW50Um91dGU6IEFjdGl2YXRlZFJvdXRlIHwgbnVsbCA9IHRoaXMucm91dGUucm9vdDtcbiAgICAgICAgbGV0IHVybCA9ICcnO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW5Sb3V0ZXM6IEFjdGl2YXRlZFJvdXRlW10gPSBjdXJyZW50Um91dGUuY2hpbGRyZW47XG4gICAgICAgICAgY3VycmVudFJvdXRlID0gbnVsbDtcbiAgICAgICAgICBjaGlsZHJlblJvdXRlcy5mb3JFYWNoKChjaGlsZFJvdXRlKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYnJlYWRjcnVtYiBldmVudCcsIGV2ZW50LCAncm91dGUnLCByb3V0ZSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRSb3V0ZS5vdXRsZXQgPT09IHRoaXMub3V0bGV0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJvdXRlU25hcHNob3QgPSBjaGlsZFJvdXRlLnNuYXBzaG90O1xuICAgICAgICAgICAgICB1cmwgKz0gJy8nICsgcm91dGVTbmFwc2hvdC51cmwubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHJvdXRlU25hcHNob3QuZGF0YVsndGl0bGUnXSA/PyByb3V0ZVNuYXBzaG90LnRpdGxlID8/ICcnLFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogcm91dGVTbmFwc2hvdC5xdWVyeVBhcmFtc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3VycmVudFJvdXRlID0gY2hpbGRSb3V0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudFJvdXRlKTtcblxuICAgICAgICB0aGlzLiNicmVhZGNydW1ic0JlaGF2aW9yU3ViamVjdC5uZXh0KE9iamVjdC5hc3NpZ24oW10sIGJyZWFkY3J1bWJzKSk7XG5cbiAgICAgICAgcmV0dXJuIGJyZWFkY3J1bWJzO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==