ng-prime-tools
Version:
An advanced PrimeNG table for Angular
92 lines • 14.8 kB
JavaScript
import { Injectable } from '@angular/core';
import { NavigationEnd } from '@angular/router';
import { filter } from 'rxjs/operators';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
export class PTBreadCrumbService {
constructor(router) {
this.router = router;
this._breadcrumb = new BehaviorSubject([]);
this.breadcrumb$ = this._breadcrumb.asObservable();
this.menuData = [];
this.router.events
.pipe(filter((event) => event instanceof NavigationEnd))
.subscribe((event) => {
let urlParts = event.urlAfterRedirects.split('/');
urlParts.splice(0, 1);
let urlWithoutContext = urlParts.join('/');
let newBreadcrumb = this.createBreadcrumb(urlWithoutContext);
this._breadcrumb.next(newBreadcrumb);
});
}
// Method to set menuData
setMenuData(menuData) {
this.menuData = menuData;
}
createBreadcrumb(url = '', breadcrumbs = []) {
if (!url) {
return breadcrumbs;
}
const pathSegments = url.split('/').filter((segment) => segment);
return this.buildParentBreadcrumbs(this.menuData, pathSegments, breadcrumbs);
}
buildParentBreadcrumbs(menuData, pathSegments, breadcrumbs) {
if (pathSegments.length === 0) {
return breadcrumbs;
}
const currentSegment = pathSegments.shift();
const currentMenu = menuData.find((menu) => menu.url === currentSegment || menu.url.endsWith(currentSegment));
if (currentMenu) {
breadcrumbs.push({ label: currentMenu.label, url: currentMenu.url });
if (currentMenu.children &&
currentMenu.children.length > 0 &&
pathSegments.length > 0) {
return this.buildChildBreadcrumbs(currentMenu.children, pathSegments, breadcrumbs, currentSegment || '');
}
}
return breadcrumbs;
}
buildChildBreadcrumbs(menuData, pathSegments, breadcrumbs, currentUrl) {
if (pathSegments.length === 0) {
return breadcrumbs;
}
const currentSegment = pathSegments.shift();
currentUrl = `/${currentUrl}/${currentSegment}`;
const currentMenu = menuData.find((menu) => menu.url === currentUrl);
if (currentMenu) {
breadcrumbs.push({ label: currentMenu.label, url: currentMenu.url });
if (currentMenu.children &&
currentMenu.children.length > 0 &&
pathSegments.length > 0) {
return this.buildChildBreadcrumbs(currentMenu.children, pathSegments, breadcrumbs, currentUrl);
}
}
else {
const parentMenu = menuData.find((menu) => menu.children &&
menu.children.some((child) => child.url === currentUrl));
if (parentMenu && parentMenu.children) {
const childMenu = parentMenu.children.find((child) => child.url === currentUrl);
if (childMenu) {
breadcrumbs.push({ label: parentMenu.label, url: parentMenu.url });
breadcrumbs.push({ label: childMenu.label, url: childMenu.url });
if (childMenu.children &&
childMenu.children.length > 0 &&
pathSegments.length > 0) {
return this.buildChildBreadcrumbs(childMenu.children, pathSegments, breadcrumbs, currentUrl);
}
}
}
}
return breadcrumbs;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTBreadCrumbService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTBreadCrumbService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTBreadCrumbService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: () => [{ type: i1.Router }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtYnJlYWQtY3J1bWIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtYnJlYWQtY3J1bWIvcHQtYnJlYWQtY3J1bWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBTXZDLE1BQU0sT0FBTyxtQkFBbUI7SUFLOUIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFKMUIsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUMxRCxnQkFBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEMsYUFBUSxHQUFVLEVBQUUsQ0FBQztRQUczQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDZixJQUFJLENBQ0gsTUFBTSxDQUNKLENBQUMsS0FBSyxFQUEwQixFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FDbEUsQ0FDRjthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUNsQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksaUJBQWlCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMs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QUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7K0dBeElVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lbnUgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUFRCcmVhZENydW1iU2VydmljZSB7XG4gIHByaXZhdGUgX2JyZWFkY3J1bWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lbnVJdGVtW10+KFtdKTtcbiAgYnJlYWRjcnVtYiQgPSB0aGlzLl9icmVhZGNydW1iLmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIG1lbnVEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvbkVuZCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmRcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcbiAgICAgICAgbGV0IHVybFBhcnRzID0gZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMuc3BsaXQoJy8nKTtcbiAgICAgICAgdXJsUGFydHMuc3BsaWNlKDAsIDEpO1xuICAgICAgICBsZXQgdXJsV2l0aG91dENvbnRleHQgPSB1cmxQYXJ0cy5qb2luKCcvJyk7XG4gICAgICAgIGxldCBuZXdCcmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKHVybFdpdGhvdXRDb250ZXh0KTtcbiAgICAgICAgdGhpcy5fYnJlYWRjcnVtYi5uZXh0KG5ld0JyZWFkY3J1bWIpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gc2V0IG1lbnVEYXRhXG4gIHNldE1lbnVEYXRhKG1lbnVEYXRhOiBhbnlbXSkge1xuICAgIHRoaXMubWVudURhdGEgPSBtZW51RGF0YTtcbiAgfVxuXG4gIGNyZWF0ZUJyZWFkY3J1bWIodXJsOiBzdHJpbmcgPSAnJywgYnJlYWRjcnVtYnM6IE1lbnVJdGVtW10gPSBbXSk6IE1lbnVJdGVtW10ge1xuICAgIGlmICghdXJsKSB7XG4gICAgICByZXR1cm4gYnJlYWRjcnVtYnM7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aFNlZ21lbnRzID0gdXJsLnNwbGl0KCcvJykuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50KTtcblxuICAgIHJldHVybiB0aGlzLmJ1aWxkUGFyZW50QnJlYWRjcnVtYnMoXG4gICAgICB0aGlzLm1lbnVEYXRhLFxuICAgICAgcGF0aFNlZ21lbnRzLFxuICAgICAgYnJlYWRjcnVtYnNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmVudEJyZWFkY3J1bWJzKFxuICAgIG1lbnVEYXRhOiBhbnlbXSxcbiAgICBwYXRoU2VnbWVudHM6IHN0cmluZ1tdLFxuICAgIGJyZWFkY3J1bWJzOiBNZW51SXRlbVtdXG4gICk6IE1lbnVJdGVtW10ge1xuICAgIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnJlYWRjcnVtYnM7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFNlZ21lbnQgPSBwYXRoU2VnbWVudHMuc2hpZnQoKTtcblxuICAgIGNvbnN0IGN1cnJlbnRNZW51ID0gbWVudURhdGEuZmluZChcbiAgICAgIChtZW51KSA9PiBtZW51LnVybCA9PT0gY3VycmVudFNlZ21lbnQgfHwgbWVudS51cmwuZW5kc1dpdGgoY3VycmVudFNlZ21lbnQpXG4gICAgKTtcblxuICAgIGlmIChjdXJyZW50TWVudSkge1xuICAgICAgYnJlYWRjcnVtYnMucHVzaCh7IGxhYmVsOiBjdXJyZW50TWVudS5sYWJlbCwgdXJsOiBjdXJyZW50TWVudS51cmwgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudE1lbnUuY2hpbGRyZW4gJiZcbiAgICAgICAgY3VycmVudE1lbnUuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJlxuICAgICAgICBwYXRoU2VnbWVudHMubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ2hpbGRCcmVhZGNydW1icyhcbiAgICAgICAgICBjdXJyZW50TWVudS5jaGlsZHJlbixcbiAgICAgICAgICBwYXRoU2VnbWVudHMsXG4gICAgICAgICAgYnJlYWRjcnVtYnMsXG4gICAgICAgICAgY3VycmVudFNlZ21lbnQgfHwgJydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYnJlYWRjcnVtYnM7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ2hpbGRCcmVhZGNydW1icyhcbiAgICBtZW51RGF0YTogTWVudVtdLFxuICAgIHBhdGhTZWdtZW50czogc3RyaW5nW10sXG4gICAgYnJlYWRjcnVtYnM6IE1lbnVJdGVtW10sXG4gICAgY3VycmVudFVybDogc3RyaW5nXG4gICk6IE1lbnVJdGVtW10ge1xuICAgIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnJlYWRjcnVtYnM7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFNlZ21lbnQgPSBwYXRoU2VnbWVudHMuc2hpZnQoKTtcbiAgICBjdXJyZW50VXJsID0gYC8ke2N1cnJlbnRVcmx9LyR7Y3VycmVudFNlZ21lbnR9YDtcblxuICAgIGNvbnN0IGN1cnJlbnRNZW51ID0gbWVudURhdGEuZmluZCgobWVudSkgPT4gbWVudS51cmwgPT09IGN1cnJlbnRVcmwpO1xuXG4gICAgaWYgKGN1cnJlbnRNZW51KSB7XG4gICAgICBicmVhZGNydW1icy5wdXNoKHsgbGFiZWw6IGN1cnJlbnRNZW51LmxhYmVsLCB1cmw6IGN1cnJlbnRNZW51LnVybCB9KTtcblxuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50TWVudS5jaGlsZHJlbiAmJlxuICAgICAgICBjdXJyZW50TWVudS5jaGlsZHJlbi5sZW5ndGggPiAwICYmXG4gICAgICAgIHBhdGhTZWdtZW50cy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDaGlsZEJyZWFkY3J1bWJzKFxuICAgICAgICAgIGN1cnJlbnRNZW51LmNoaWxkcmVuLFxuICAgICAgICAgIHBhdGhTZWdtZW50cyxcbiAgICAgICAgICBicmVhZGNydW1icyxcbiAgICAgICAgICBjdXJyZW50VXJsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmVudE1lbnUgPSBtZW51RGF0YS5maW5kKFxuICAgICAgICAobWVudSkgPT5cbiAgICAgICAgICBtZW51LmNoaWxkcmVuICYmXG4gICAgICAgICAgbWVudS5jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQudXJsID09PSBjdXJyZW50VXJsKVxuICAgICAgKTtcbiAgICAgIGlmIChwYXJlbnRNZW51ICYmIHBhcmVudE1lbnUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgY2hpbGRNZW51ID0gcGFyZW50TWVudS5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgIChjaGlsZDogTWVudSkgPT4gY2hpbGQudXJsID09PSBjdXJyZW50VXJsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjaGlsZE1lbnUpIHtcbiAgICAgICAgICBicmVhZGNydW1icy5wdXNoKHsgbGFiZWw6IHBhcmVudE1lbnUubGFiZWwsIHVybDogcGFyZW50TWVudS51cmwgfSk7XG4gICAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh7IGxhYmVsOiBjaGlsZE1lbnUubGFiZWwsIHVybDogY2hpbGRNZW51LnVybCB9KTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoaWxkTWVudS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgY2hpbGRNZW51LmNoaWxkcmVuLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHBhdGhTZWdtZW50cy5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZENoaWxkQnJlYWRjcnVtYnMoXG4gICAgICAgICAgICAgIGNoaWxkTWVudS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzLFxuICAgICAgICAgICAgICBicmVhZGNydW1icyxcbiAgICAgICAgICAgICAgY3VycmVudFVybFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYnJlYWRjcnVtYnM7XG4gIH1cbn1cbiJdfQ==