UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

92 lines 11.8 kB
import { Injectable, InjectionToken, Injector } from '@angular/core'; import { Router } from '@angular/router'; import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators'; import { fromTrigger, hookGeneric, getInjectedHooks, stateToFactory, ExtensionPointForPlugins } from '../common/extension-hooks'; import { PluginsResolveService } from '../plugins/plugins-resolve.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "../plugins/plugins-resolve.service"; /** * @deprecated Consider using the `hookBreadcrumb` function instead. */ export const HOOK_BREADCRUMB = new InjectionToken('HOOK_BREADCRUMB'); /** * You can either provide a single `Breadcrumb` as parameter: * ```typescript * hookBreadcrumb(...) * ``` * * Or an array to directly register multiple: * ```typescript * hookBreadcrumb([...]) * ``` * * Or you provide an Service that implements `ExtensionFactory<Breadcrumb>` * ```typescript * export class MyBreadcrumbFactory implements ExtensionFactory<Breadcrumb> {...} * ... * hookBreadcrumb(MyBreadcrumbFactory) * ``` * A typed alternative to `HOOK_BREADCRUMB`. * @param breadcrumb The `Breadcrumb`'s or `ExtensionFactory` to be provided. * @returns An `Provider` to be provided in your module. */ export function hookBreadcrumb(breadcrumb, options) { return hookGeneric(breadcrumb, HOOK_BREADCRUMB, options); } export class BreadcrumbService extends ExtensionPointForPlugins { constructor(rootInjector, router, plugins) { super(rootInjector, plugins); this.router = router; this.items$ = this.setupItemsObservable(); } get state() { return this.state$.value; } /** * Adds a new item to the action bar in the header. * @param item The item to add. */ add(item) { this.state.add(item); this.emitNewState(); } /** * Removes an action bar item from the header. * @param item The item to remove. */ remove(item) { this.state.delete(item); this.emitNewState(); } /** * Sets the crumb that contains that path to the top. * @param path The path to prefer. */ selectPreferredByPath(path) { this.preferredPath = path; this.refresh(); } sortByPreferredPath(breadcrumbs) { if (this.preferredPath) { return breadcrumbs.sort(bc => bc.items.find((item) => !!item.path.match(this.preferredPath)) ? -1 : 1); } return breadcrumbs; } setupItemsObservable() { return fromTrigger(this.router, this.refresh$, [ getInjectedHooks(HOOK_BREADCRUMB, this.injectors), () => this.factories, stateToFactory(this.state$) ]).pipe(distinctUntilChanged(), map(breadcrumbs => this.sortByPreferredPath(breadcrumbs)), shareReplay(1)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BreadcrumbService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i2.PluginsResolveService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BreadcrumbService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BreadcrumbService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.Router }, { type: i2.PluginsResolveService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9icmVhZGNydW1iL2JyZWFkY3J1bWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUVMLFdBQVcsRUFFWCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCx3QkFBd0IsRUFFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQXVCM0U7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixVQUF1QyxFQUN2QyxPQUFxQztJQUVyQyxPQUFPLFdBQVcsQ0FBYSxVQUFVLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFLRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsd0JBQW9DO0lBR3pFLFlBQ0UsWUFBc0IsRUFDZCxNQUFjLEVBQ3RCLE9BQThCO1FBRTlCLEtBQUssQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFIckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUl0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxHQUFHLENBQUMsSUFBZ0I7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsSUFBZ0I7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxJQUFZO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsV0FBVztRQUM3QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FDM0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hGLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVTLG9CQUFvQjtRQUM1QixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDN0MsZ0JBQWdCLENBQWEsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDekQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDOytHQTlEVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBFeHRlbnNpb25GYWN0b3J5LFxuICBmcm9tVHJpZ2dlcixcbiAgR2VuZXJpY0hvb2tUeXBlLFxuICBob29rR2VuZXJpYyxcbiAgZ2V0SW5qZWN0ZWRIb29rcyxcbiAgc3RhdGVUb0ZhY3RvcnksXG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgR2VuZXJpY0hvb2tPcHRpb25zXG59IGZyb20gJy4uL2NvbW1vbi9leHRlbnNpb24taG9va3MnO1xuaW1wb3J0IHsgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlIH0gZnJvbSAnLi4vcGx1Z2lucy9wbHVnaW5zLXJlc29sdmUuc2VydmljZSc7XG5pbXBvcnQgeyBCcmVhZGNydW1iLCBCcmVhZGNydW1iSXRlbSB9IGZyb20gJy4vYnJlYWRjcnVtYi5tb2RlbCc7XG5cbi8qKlxuICogQW4gZXh0ZW5zaW9uIEhPT0sgY2FuIHVzZSBlaXRoZXIgYSBwdXJlIHZhbHVlOlxuICogYGBgdHlwZXNjcmlwdFxuICogIHsgcHJvdmlkZTogSE9PS19YLCB1c2VWYWx1ZTogeyAuLi5ob29rVmFsdWUgfSwgbXVsdGk6IHRydWUgfVxuICogYGBgXG4gKlxuICogT3IgYW4gYXJyYXkgdG8gZGlyZWN0bHkgcmVnaXN0ZXIgbXVsdGlwbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgeyBwcm92aWRlOiBIT09LX1gsIHVzZVZhbHVlOiBbeyAuLi5ob29rVmFsdWVzIH1dLCBtdWx0aTogdHJ1ZSB9XG4gKiBgYGBcbiAqXG4gKiBPciBhbiBFeHRlbnNpb25GYWN0b3J5IHdoaWNoIGFsbG93cyB0byBkZWZpbmUgYSBnZXQoKSBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvblxuICogZ2V0cyBjYWxsZWQgb24gZWFjaCBuYXZpZ2F0aW9uIHdpdGggdGhlIGN1cnJlbnQgcm91dGUgYW5kIGNhbiByZXR1cm4gdmFsdWVzXG4gKiBhc3luYyAob2JzZXJ2YWJsZSBvciBwcm9taXNlKS5cbiAqIGBgYHR5cGVzY3JpcHRcbiAqICB7IHByb3ZpZGU6IEhPT0tfWCwgdXNlRmFjdG9yeTogeyBnZXQ6IChyb3V0ZSkgPT4gZG9Tb21ldGhpbmdBc3luYyhyb3V0ZSkgfSwgbXVsdGk6IHRydWUgfVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIEJyZWFkY3J1bWJFeHRlbnNpb24gPSBCcmVhZGNydW1iIHwgQnJlYWRjcnVtYltdIHwgRXh0ZW5zaW9uRmFjdG9yeTxCcmVhZGNydW1iPjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBDb25zaWRlciB1c2luZyB0aGUgYGhvb2tCcmVhZGNydW1iYCBmdW5jdGlvbiBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgSE9PS19CUkVBRENSVU1CID0gbmV3IEluamVjdGlvblRva2VuKCdIT09LX0JSRUFEQ1JVTUInKTtcblxuLyoqXG4gKiBZb3UgY2FuIGVpdGhlciBwcm92aWRlIGEgc2luZ2xlIGBCcmVhZGNydW1iYCBhcyBwYXJhbWV0ZXI6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgaG9va0JyZWFkY3J1bWIoLi4uKVxuICogYGBgXG4gKlxuICogT3IgYW4gYXJyYXkgdG8gZGlyZWN0bHkgcmVnaXN0ZXIgbXVsdGlwbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgaG9va0JyZWFkY3J1bWIoWy4uLl0pXG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgcHJvdmlkZSBhbiBTZXJ2aWNlIHRoYXQgaW1wbGVtZW50cyBgRXh0ZW5zaW9uRmFjdG9yeTxCcmVhZGNydW1iPmBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBleHBvcnQgY2xhc3MgTXlCcmVhZGNydW1iRmFjdG9yeSBpbXBsZW1lbnRzIEV4dGVuc2lvbkZhY3Rvcnk8QnJlYWRjcnVtYj4gey4uLn1cbiAqICAuLi5cbiAqICBob29rQnJlYWRjcnVtYihNeUJyZWFkY3J1bWJGYWN0b3J5KVxuICogYGBgXG4gKiBBIHR5cGVkIGFsdGVybmF0aXZlIHRvIGBIT09LX0JSRUFEQ1JVTUJgLlxuICogQHBhcmFtIGJyZWFkY3J1bWIgVGhlIGBCcmVhZGNydW1iYCdzIG9yIGBFeHRlbnNpb25GYWN0b3J5YCB0byBiZSBwcm92aWRlZC5cbiAqIEByZXR1cm5zIEFuIGBQcm92aWRlcmAgdG8gYmUgcHJvdmlkZWQgaW4geW91ciBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rQnJlYWRjcnVtYihcbiAgYnJlYWRjcnVtYjogR2VuZXJpY0hvb2tUeXBlPEJyZWFkY3J1bWI+LFxuICBvcHRpb25zPzogUGFydGlhbDxHZW5lcmljSG9va09wdGlvbnM+XG4pIHtcbiAgcmV0dXJuIGhvb2tHZW5lcmljPEJyZWFkY3J1bWI+KGJyZWFkY3J1bWIsIEhPT0tfQlJFQURDUlVNQiwgb3B0aW9ucyk7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJTZXJ2aWNlIGV4dGVuZHMgRXh0ZW5zaW9uUG9pbnRGb3JQbHVnaW5zPEJyZWFkY3J1bWI+IHtcbiAgcHJpdmF0ZSBwcmVmZXJyZWRQYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcm9vdEluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHBsdWdpbnM6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICApIHtcbiAgICBzdXBlcihyb290SW5qZWN0b3IsIHBsdWdpbnMpO1xuICAgIHRoaXMuaXRlbXMkID0gdGhpcy5zZXR1cEl0ZW1zT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGl0ZW0gdG8gdGhlIGFjdGlvbiBiYXIgaW4gdGhlIGhlYWRlci5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gdG8gYWRkLlxuICAgKi9cbiAgYWRkKGl0ZW06IEJyZWFkY3J1bWIpIHtcbiAgICB0aGlzLnN0YXRlLmFkZChpdGVtKTtcbiAgICB0aGlzLmVtaXROZXdTdGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gYWN0aW9uIGJhciBpdGVtIGZyb20gdGhlIGhlYWRlci5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gdG8gcmVtb3ZlLlxuICAgKi9cbiAgcmVtb3ZlKGl0ZW06IEJyZWFkY3J1bWIpIHtcbiAgICB0aGlzLnN0YXRlLmRlbGV0ZShpdGVtKTtcbiAgICB0aGlzLmVtaXROZXdTdGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNydW1iIHRoYXQgY29udGFpbnMgdGhhdCBwYXRoIHRvIHRoZSB0b3AuXG4gICAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHByZWZlci5cbiAgICovXG4gIHNlbGVjdFByZWZlcnJlZEJ5UGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByZWZlcnJlZFBhdGggPSBwYXRoO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgc29ydEJ5UHJlZmVycmVkUGF0aChicmVhZGNydW1icykge1xuICAgIGlmICh0aGlzLnByZWZlcnJlZFBhdGgpIHtcbiAgICAgIHJldHVybiBicmVhZGNydW1icy5zb3J0KGJjID0+XG4gICAgICAgIGJjLml0ZW1zLmZpbmQoKGl0ZW06IEJyZWFkY3J1bWJJdGVtKSA9PiAhIWl0ZW0ucGF0aC5tYXRjaCh0aGlzLnByZWZlcnJlZFBhdGgpKSA/IC0xIDogMVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB7XG4gICAgcmV0dXJuIGZyb21UcmlnZ2VyKHRoaXMucm91dGVyLCB0aGlzLnJlZnJlc2gkLCBbXG4gICAgICBnZXRJbmplY3RlZEhvb2tzPEJyZWFkY3J1bWI+KEhPT0tfQlJFQURDUlVNQiwgdGhpcy5pbmplY3RvcnMpLFxuICAgICAgKCkgPT4gdGhpcy5mYWN0b3JpZXMsXG4gICAgICBzdGF0ZVRvRmFjdG9yeSh0aGlzLnN0YXRlJClcbiAgICBdKS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcChicmVhZGNydW1icyA9PiB0aGlzLnNvcnRCeVByZWZlcnJlZFBhdGgoYnJlYWRjcnVtYnMpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxufVxuIl19