@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
87 lines • 10.3 kB
JavaScript
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=