UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

87 lines 10.3 kB
import { Injector, Injectable } from '@angular/core'; import { Router } from '@angular/router'; import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators'; import { allEntriesAreEqual, ExtensionPointForPlugins, fromTriggerOnce, getInjectedHooks, removeDuplicatesIds, stateToFactory } from '../common'; import { InjectionToken } from '@angular/core'; import { hookGeneric } from '../common'; import { PluginsResolveService } from '../plugins'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "../plugins"; /** * A hook to use for Multi Provider extension. * Consider using the `hookDrawer` function instead. */ const HOOK_DRAWER = new InjectionToken('HOOK_DRAWER'); /** * You can either provide a single `DrawerItem` as parameter: * ```typescript * hookDrawer(...) * ``` * * Or an array to directly register multiple: * ```typescript * hookDrawer([...]) * ``` * * Or you provide a Service that implements `ExtensionFactory<DrawerItem>` * ```typescript * export class MyDrawerFactory implements ExtensionFactory<DrawerItem> {...} * ... * hookDrawer(MyDrawerFactory) * ``` * A typed alternative to `HOOK_DRAWER`. * @param drawer The `DrawerItem`'s or `ExtensionFactory` to be provided. * @returns An `Provider` to be provided in your module. */ export function hookDrawer(drawer, options) { return hookGeneric(drawer, HOOK_DRAWER, options); } export class DrawerService extends ExtensionPointForPlugins { constructor(rootInjector, router, pluginService) { super(rootInjector, pluginService); this.router = router; this.items$ = this.setupItemsObservable(); } /** * Returns the current state. * @readonly * @returns The current set of actions. */ get state() { return this.state$.value; } getDrawersForPosition$(position) { return this.items$.pipe(map(items => items.filter(drawer => drawer.position === position))); } /** * Adds a new node to the navigator. * @param {DrawerItem} node Navigator node to add. */ add(node) { this.state.add(node); this.emitNewState(); } /** * Removes a node from the navigator. * @param {DrawerItem} node Navigator node to remove. */ remove(node) { this.state.delete(node); this.emitNewState(); } setupItemsObservable() { return fromTriggerOnce(this.router, this.refresh$, [ getInjectedHooks(HOOK_DRAWER, this.injectors), () => this.factories, stateToFactory(this.state$) ]).pipe(distinctUntilChanged(allEntriesAreEqual), map((drawerItems) => removeDuplicatesIds(drawerItems)), shareReplay(1)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DrawerService, 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: DrawerService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DrawerService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.Router }, { type: i2.PluginsResolveService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2RyYXdlci9kcmF3ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixjQUFjLEVBQ2YsTUFBTSxXQUFXLENBQUM7QUFFbkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQW1CLFdBQVcsRUFBc0IsTUFBTSxXQUFXLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7O0FBRW5EOzs7R0FHRztBQUNILE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFlLGFBQWEsQ0FBQyxDQUFDO0FBRXBFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLE1BQW1DLEVBQ25DLE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUFhLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUdELE1BQU0sT0FBTyxhQUFjLFNBQVEsd0JBQW9DO0lBQ3JFLFlBQ0UsWUFBc0IsRUFDZCxNQUFjLEVBQ3RCLGFBQW9DO1FBRXBDLEtBQUssQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFIM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUl0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBMEI7UUFDL0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxJQUFnQjtRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUFnQjtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVTLG9CQUFvQjtRQUM1QixPQUFPLGVBQWUsQ0FBYSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDN0QsZ0JBQWdCLENBQWEsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDekQsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUN4QyxHQUFHLENBQUMsQ0FBQyxXQUF5QixFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUNwRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7K0dBbkRVLGFBQWE7bUhBQWIsYUFBYSxjQURBLE1BQU07OzRGQUNuQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBhbGxFbnRyaWVzQXJlRXF1YWwsXG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBnZXRJbmplY3RlZEhvb2tzLFxuICByZW1vdmVEdXBsaWNhdGVzSWRzLFxuICBzdGF0ZVRvRmFjdG9yeVxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRHJhd2VySXRlbSB9IGZyb20gJy4vZHJhd2VyLm1vZGVsJztcbmltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHZW5lcmljSG9va1R5cGUsIGhvb2tHZW5lcmljLCBHZW5lcmljSG9va09wdGlvbnMgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlIH0gZnJvbSAnLi4vcGx1Z2lucyc7XG5cbi8qKlxuICogQSBob29rIHRvIHVzZSBmb3IgTXVsdGkgUHJvdmlkZXIgZXh0ZW5zaW9uLlxuICogQ29uc2lkZXIgdXNpbmcgdGhlIGBob29rRHJhd2VyYCBmdW5jdGlvbiBpbnN0ZWFkLlxuICovXG5jb25zdCBIT09LX0RSQVdFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEcmF3ZXJJdGVtW10+KCdIT09LX0RSQVdFUicpO1xuXG4vKipcbiAqIFlvdSBjYW4gZWl0aGVyIHByb3ZpZGUgYSBzaW5nbGUgYERyYXdlckl0ZW1gIGFzIHBhcmFtZXRlcjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBob29rRHJhd2VyKC4uLilcbiAqIGBgYFxuICpcbiAqIE9yIGFuIGFycmF5IHRvIGRpcmVjdGx5IHJlZ2lzdGVyIG11bHRpcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogIGhvb2tEcmF3ZXIoWy4uLl0pXG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgcHJvdmlkZSBhIFNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzIGBFeHRlbnNpb25GYWN0b3J5PERyYXdlckl0ZW0+YFxuICogYGBgdHlwZXNjcmlwdFxuICogIGV4cG9ydCBjbGFzcyBNeURyYXdlckZhY3RvcnkgaW1wbGVtZW50cyBFeHRlbnNpb25GYWN0b3J5PERyYXdlckl0ZW0+IHsuLi59XG4gKiAgLi4uXG4gKiAgaG9va0RyYXdlcihNeURyYXdlckZhY3RvcnkpXG4gKiBgYGBcbiAqIEEgdHlwZWQgYWx0ZXJuYXRpdmUgdG8gYEhPT0tfRFJBV0VSYC5cbiAqIEBwYXJhbSBkcmF3ZXIgVGhlIGBEcmF3ZXJJdGVtYCdzIG9yIGBFeHRlbnNpb25GYWN0b3J5YCB0byBiZSBwcm92aWRlZC5cbiAqIEByZXR1cm5zIEFuIGBQcm92aWRlcmAgdG8gYmUgcHJvdmlkZWQgaW4geW91ciBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rRHJhd2VyKFxuICBkcmF3ZXI6IEdlbmVyaWNIb29rVHlwZTxEcmF3ZXJJdGVtPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxEcmF3ZXJJdGVtPihkcmF3ZXIsIEhPT0tfRFJBV0VSLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEcmF3ZXJTZXJ2aWNlIGV4dGVuZHMgRXh0ZW5zaW9uUG9pbnRGb3JQbHVnaW5zPERyYXdlckl0ZW0+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcm9vdEluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHBsdWdpblNlcnZpY2U6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICApIHtcbiAgICBzdXBlcihyb290SW5qZWN0b3IsIHBsdWdpblNlcnZpY2UpO1xuICAgIHRoaXMuaXRlbXMkID0gdGhpcy5zZXR1cEl0ZW1zT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUuXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzZXQgb2YgYWN0aW9ucy5cbiAgICovXG4gIGdldCBzdGF0ZSgpOiBTZXQ8RHJhd2VySXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIGdldERyYXdlcnNGb3JQb3NpdGlvbiQocG9zaXRpb246ICdyaWdodCcgfCAnbGVmdCcpOiBPYnNlcnZhYmxlPERyYXdlckl0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zJC5waXBlKG1hcChpdGVtcyA9PiBpdGVtcy5maWx0ZXIoZHJhd2VyID0+IGRyYXdlci5wb3NpdGlvbiA9PT0gcG9zaXRpb24pKSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBub2RlIHRvIHRoZSBuYXZpZ2F0b3IuXG4gICAqIEBwYXJhbSB7RHJhd2VySXRlbX0gbm9kZSBOYXZpZ2F0b3Igbm9kZSB0byBhZGQuXG4gICAqL1xuICBhZGQobm9kZTogRHJhd2VySXRlbSkge1xuICAgIHRoaXMuc3RhdGUuYWRkKG5vZGUpO1xuICAgIHRoaXMuZW1pdE5ld1N0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgbmF2aWdhdG9yLlxuICAgKiBAcGFyYW0ge0RyYXdlckl0ZW19IG5vZGUgTmF2aWdhdG9yIG5vZGUgdG8gcmVtb3ZlLlxuICAgKi9cbiAgcmVtb3ZlKG5vZGU6IERyYXdlckl0ZW0pIHtcbiAgICB0aGlzLnN0YXRlLmRlbGV0ZShub2RlKTtcbiAgICB0aGlzLmVtaXROZXdTdGF0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8RHJhd2VySXRlbVtdPiB7XG4gICAgcmV0dXJuIGZyb21UcmlnZ2VyT25jZTxEcmF3ZXJJdGVtPih0aGlzLnJvdXRlciwgdGhpcy5yZWZyZXNoJCwgW1xuICAgICAgZ2V0SW5qZWN0ZWRIb29rczxEcmF3ZXJJdGVtPihIT09LX0RSQVdFUiwgdGhpcy5pbmplY3RvcnMpLFxuICAgICAgKCkgPT4gdGhpcy5mYWN0b3JpZXMsXG4gICAgICBzdGF0ZVRvRmFjdG9yeSh0aGlzLnN0YXRlJClcbiAgICBdKS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoYWxsRW50cmllc0FyZUVxdWFsKSxcbiAgICAgIG1hcCgoZHJhd2VySXRlbXM6IERyYXdlckl0ZW1bXSkgPT4gcmVtb3ZlRHVwbGljYXRlc0lkcyhkcmF3ZXJJdGVtcykpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG59XG4iXX0=