pp-breadcrumbs
Version:
PP-Breadcrumbs is an Angular 10 library generating breadcrumbs based on the routing state.
29 lines • 4.82 kB
JavaScript
import { of } from 'rxjs';
import { Injectable } from '@angular/core';
import { template } from 'lodash';
export class PpBreadcrumbsResolver {
resolve(route, state) {
const data = route.routeConfig.data;
const path = this.getFullPath(route);
const rawText = typeof data.breadcrumbs === 'string' ? data.breadcrumbs : data.breadcrumbs.text || data.text || path;
return of([
{
path: path,
text: this.stringFormat(rawText, route.data)
}
]);
}
getFullPath(route) {
const relativePath = (segments) => segments.reduce((a, v) => (a += '/' + v.path), '');
const fullPath = (routes) => routes.reduce((a, v) => (a += relativePath(v.url)), '');
return fullPath(route.pathFromRoot);
}
stringFormat(templateString, binding) {
const compiled = template(templateString, { interpolate: /{{(.+?)}}/g });
return compiled(binding);
}
}
PpBreadcrumbsResolver.decorators = [
{ type: Injectable }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMucmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcC1icmVhZGNydW1icy9zcmMvbGliL2JyZWFkY3J1bWJzLnJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBR2hDLE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsT0FBTyxDQUFDLEtBQTZCLEVBQUUsS0FBMEI7UUFDL0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLE9BQU8sR0FBRyxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztRQUVySCxPQUFPLEVBQUUsQ0FBQztZQUNSO2dCQUNFLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQzdDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLFdBQVcsQ0FBQyxLQUE2QjtRQUNqRCxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQXNCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBZ0MsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvRyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVTLFlBQVksQ0FBQyxjQUFzQixFQUFFLE9BQVk7UUFDekQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7OztZQXpCRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSZXNvbHZlLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxTZWdtZW50fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtCcmVhZGNydW1ifSBmcm9tICcuL2JyZWFkY3J1bWInO1xyXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHBCcmVhZGNydW1ic1Jlc29sdmVyIGltcGxlbWVudHMgUmVzb2x2ZTxCcmVhZGNydW1iW10+IHtcclxuXHJcbiAgcmVzb2x2ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4gfCBQcm9taXNlPEJyZWFkY3J1bWJbXT4gfCBCcmVhZGNydW1iW10ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJvdXRlLnJvdXRlQ29uZmlnLmRhdGE7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRGdWxsUGF0aChyb3V0ZSk7XHJcbiAgICBjb25zdCByYXdUZXh0ID0gdHlwZW9mIGRhdGEuYnJlYWRjcnVtYnMgPT09ICdzdHJpbmcnID8gZGF0YS5icmVhZGNydW1icyA6IGRhdGEuYnJlYWRjcnVtYnMudGV4dCB8fCBkYXRhLnRleHQgfHwgcGF0aDtcclxuXHJcbiAgICByZXR1cm4gb2YoW1xyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICB0ZXh0OiB0aGlzLnN0cmluZ0Zvcm1hdChyYXdUZXh0LCByb3V0ZS5kYXRhKVxyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRGdWxsUGF0aChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSAoc2VnbWVudHM6IFVybFNlZ21lbnRbXSkgPT4gc2VnbWVudHMucmVkdWNlKChhLCB2KSA9PiAoYSArPSAnLycgKyB2LnBhdGgpLCAnJyk7XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IChyb3V0ZXM6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXSkgPT4gcm91dGVzLnJlZHVjZSgoYSwgdikgPT4gKGEgKz0gcmVsYXRpdmVQYXRoKHYudXJsKSksICcnKTtcclxuICAgIHJldHVybiBmdWxsUGF0aChyb3V0ZS5wYXRoRnJvbVJvb3QpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHN0cmluZ0Zvcm1hdCh0ZW1wbGF0ZVN0cmluZzogc3RyaW5nLCBiaW5kaW5nOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29tcGlsZWQgPSB0ZW1wbGF0ZSh0ZW1wbGF0ZVN0cmluZywgeyBpbnRlcnBvbGF0ZTogL3t7KC4rPyl9fS9nIH0pO1xyXG4gICAgcmV0dXJuIGNvbXBpbGVkKGJpbmRpbmcpO1xyXG4gIH1cclxufVxyXG4iXX0=