@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
88 lines • 9.75 kB
JavaScript
import { Injectable, InjectionToken, Injector } from '@angular/core';
import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';
import { ExtensionPointForPlugins, fromTriggerOnce, getInjectedHooks, hookGeneric, sortByPriority, stateToFactory } from '../common';
import { Router } from '@angular/router';
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 `hookUserMenu` function instead.
*/
const HOOK_USER_MENU = new InjectionToken('HOOK_USER_MENU');
/**
* You can either provide a single `UserMenuItem` as parameter:
* ```typescript
* hookUserMenu(...)
* ```
*
* Or an array to directly register multiple:
* ```typescript
* hookUserMenu([...])
* ```
*
* Or you provide a Service that implements `ExtensionFactory<UserMenuItem>`
* ```typescript
* export class MyUserMenuFactory implements ExtensionFactory<UserMenuItem> {...}
* ...
* hookUserMenu(MyUserMenuFactory)
* ```
* @param userMenu The `UserMenuItem`'s or `ExtensionFactory` to be provided.
* @param options The options to use for the hook.
* @returns A `Provider` to be provided in your module.
*/
export function hookUserMenu(userMenu, options) {
return hookGeneric(userMenu, HOOK_USER_MENU, options);
}
export class UserMenuService 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;
}
/**
* Adds a new item to the search in the header.
* @param item The item to add.
*/
add(item) {
this.state.add(item);
this.emitNewState();
}
/**
* Removes an search from the header.
* @param item The item to remove.
*/
remove(item) {
this.state.delete(item);
this.emitNewState();
}
/**
* Sets the items observable.
* @returns The items observable.
*/
setupItemsObservable() {
return fromTriggerOnce(this.router, this.refresh$, [
getInjectedHooks(HOOK_USER_MENU, this.injectors),
() => this.factories,
stateToFactory(this.state$)
]).pipe(map(items => Array.from(items.values())), map(items => sortByPriority(items)), distinctUntilChanged(), shareReplay(1));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserMenuService, 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: UserMenuService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserMenuService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.Router }, { type: i2.PluginsResolveService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3VzZXIvdXNlci1tZW51LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixlQUFlLEVBR2YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUFFbkQ7OztHQUdHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQWlCLGdCQUFnQixDQUFDLENBQUM7QUFFNUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsUUFBdUMsRUFDdkMsT0FBcUM7SUFFckMsT0FBTyxXQUFXLENBQWUsUUFBUSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBS0QsTUFBTSxPQUFPLGVBQWdCLFNBQVEsd0JBQXNDO0lBQ3pFLFlBQ0UsWUFBc0IsRUFDZCxNQUFjLEVBQ3RCLGFBQW9DO1FBRXBDLEtBQUssQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFIM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUl0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsR0FBRyxDQUFDLElBQWtCO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLElBQWtCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sb0JBQW9CO1FBQzVCLE9BQU8sZUFBZSxDQUFlLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMvRCxnQkFBZ0IsQ0FBZSxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM5RCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNwQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUM1QixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFDeEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ25DLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBQ0osQ0FBQzsrR0FwRFUsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVXNlck1lbnVJdGVtIH0gZnJvbSAnLi91c2VyLm1vZGVsJztcbmltcG9ydCB7XG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBHZW5lcmljSG9va09wdGlvbnMsXG4gIEdlbmVyaWNIb29rVHlwZSxcbiAgZ2V0SW5qZWN0ZWRIb29rcyxcbiAgaG9va0dlbmVyaWMsXG4gIHNvcnRCeVByaW9yaXR5LFxuICBzdGF0ZVRvRmFjdG9yeVxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMnO1xuXG4vKipcbiAqIEEgaG9vayB0byB1c2UgZm9yIE11bHRpIFByb3ZpZGVyIGV4dGVuc2lvbi5cbiAqIENvbnNpZGVyIHVzaW5nIHRoZSBgaG9va1VzZXJNZW51YCBmdW5jdGlvbiBpbnN0ZWFkLlxuICovXG5jb25zdCBIT09LX1VTRVJfTUVOVSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxVc2VyTWVudUl0ZW1bXT4oJ0hPT0tfVVNFUl9NRU5VJyk7XG5cbi8qKlxuICogWW91IGNhbiBlaXRoZXIgcHJvdmlkZSBhIHNpbmdsZSBgVXNlck1lbnVJdGVtYCBhcyBwYXJhbWV0ZXI6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBob29rVXNlck1lbnUoLi4uKVxuICogYGBgXG4gKlxuICogT3IgYW4gYXJyYXkgdG8gZGlyZWN0bHkgcmVnaXN0ZXIgbXVsdGlwbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBob29rVXNlck1lbnUoWy4uLl0pXG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgcHJvdmlkZSBhIFNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzIGBFeHRlbnNpb25GYWN0b3J5PFVzZXJNZW51SXRlbT5gXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlVc2VyTWVudUZhY3RvcnkgaW1wbGVtZW50cyBFeHRlbnNpb25GYWN0b3J5PFVzZXJNZW51SXRlbT4gey4uLn1cbiAqIC4uLlxuICogaG9va1VzZXJNZW51KE15VXNlck1lbnVGYWN0b3J5KVxuICogYGBgXG4gKiBAcGFyYW0gdXNlck1lbnUgVGhlIGBVc2VyTWVudUl0ZW1gJ3Mgb3IgYEV4dGVuc2lvbkZhY3RvcnlgIHRvIGJlIHByb3ZpZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgaG9vay5cbiAqIEByZXR1cm5zIEEgYFByb3ZpZGVyYCB0byBiZSBwcm92aWRlZCBpbiB5b3VyIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tVc2VyTWVudShcbiAgdXNlck1lbnU6IEdlbmVyaWNIb29rVHlwZTxVc2VyTWVudUl0ZW0+LFxuICBvcHRpb25zPzogUGFydGlhbDxHZW5lcmljSG9va09wdGlvbnM+XG4pIHtcbiAgcmV0dXJuIGhvb2tHZW5lcmljPFVzZXJNZW51SXRlbT4odXNlck1lbnUsIEhPT0tfVVNFUl9NRU5VLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlck1lbnVTZXJ2aWNlIGV4dGVuZHMgRXh0ZW5zaW9uUG9pbnRGb3JQbHVnaW5zPFVzZXJNZW51SXRlbT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICByb290SW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcGx1Z2luU2VydmljZTogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHJvb3RJbmplY3RvciwgcGx1Z2luU2VydmljZSk7XG4gICAgdGhpcy5pdGVtcyQgPSB0aGlzLnNldHVwSXRlbXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNldCBvZiBhY3Rpb25zLlxuICAgKi9cbiAgZ2V0IHN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGl0ZW0gdG8gdGhlIHNlYXJjaCBpbiB0aGUgaGVhZGVyLlxuICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byBhZGQuXG4gICAqL1xuICBhZGQoaXRlbTogVXNlck1lbnVJdGVtKSB7XG4gICAgdGhpcy5zdGF0ZS5hZGQoaXRlbSk7XG4gICAgdGhpcy5lbWl0TmV3U3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIHNlYXJjaCBmcm9tIHRoZSBoZWFkZXIuXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIHRvIHJlbW92ZS5cbiAgICovXG4gIHJlbW92ZShpdGVtOiBVc2VyTWVudUl0ZW0pIHtcbiAgICB0aGlzLnN0YXRlLmRlbGV0ZShpdGVtKTtcbiAgICB0aGlzLmVtaXROZXdTdGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGl0ZW1zIG9ic2VydmFibGUuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtcyBvYnNlcnZhYmxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8VXNlck1lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gZnJvbVRyaWdnZXJPbmNlPFVzZXJNZW51SXRlbT4odGhpcy5yb3V0ZXIsIHRoaXMucmVmcmVzaCQsIFtcbiAgICAgIGdldEluamVjdGVkSG9va3M8VXNlck1lbnVJdGVtPihIT09LX1VTRVJfTUVOVSwgdGhpcy5pbmplY3RvcnMpLFxuICAgICAgKCkgPT4gdGhpcy5mYWN0b3JpZXMsXG4gICAgICBzdGF0ZVRvRmFjdG9yeSh0aGlzLnN0YXRlJClcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKGl0ZW1zID0+IEFycmF5LmZyb20oaXRlbXMudmFsdWVzKCkpKSxcbiAgICAgIG1hcChpdGVtcyA9PiBzb3J0QnlQcmlvcml0eShpdGVtcykpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxufVxuIl19