UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

79 lines 10.3 kB
import { Injectable, Injector } from '@angular/core'; import { Router } from '@angular/router'; import { Subject } from 'rxjs'; import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators'; import { ExtensionPointForPlugins, fromTrigger, getInjectedHooks, allEntriesAreEqual, stateToFactory } from '../common/extension-hooks'; import { PluginsResolveService } from '../plugins'; import { HOOK_WIZARD } from './wizard.model'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "../plugins"; export class WizardService extends ExtensionPointForPlugins { constructor(rootInjector, router, plugins) { super(rootInjector, plugins); this.router = router; /** Wizard header subject. It emits header template. */ this.headerTemplate$ = new Subject(); /** Wizard body subject. It emits body template. */ this.bodyTemplate$ = new Subject(); /** Wizard footer subject. It emits footer template. */ this.footerTemplate$ = new Subject(); this.items$ = this.setupItemsObservable(); } /** * Returns the current state. * @returns The current set of entries. * @readonly */ get state() { return this.state$.value; } /** * Adds a new entry in the wizard. * @param entry Wizard entry to add. */ add(entry) { this.state.add(entry); this.emitNewState(); } /** * Removes entry from the wizard. * @param entry Wizard entry to remove. */ remove(entry) { this.state.delete(entry); this.emitNewState(); } /** * List of wizard entries matching the given id. * @param id * @returns observable with list of wizard entries. */ getEntriesListById(id) { return this.items$.pipe(map(entries => entries.filter(entry => entry.wizardId === id))); } setupItemsObservable() { return fromTrigger(this.router, this.refresh$, [ getInjectedHooks(HOOK_WIZARD, this.injectors), () => this.factories, stateToFactory(this.state$) ]).pipe(distinctUntilChanged(allEntriesAreEqual), map(entries => this.getUniqueListBy(entries, 'name', 'wizardId')), shareReplay(1)); } getUniqueListBy(entries, ...keys) { return [ ...new Map(entries.map(item => [this.getUniqIdentifierForKeys(item, keys), item])).values() ]; } getUniqIdentifierForKeys(entry, keys) { return keys.map(key => entry[key]).join('_'); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WizardService, 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: WizardService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WizardService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.Router }, { type: i2.PluginsResolveService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3dpemFyZC93aXphcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUsxRCxNQUFNLE9BQU8sYUFBYyxTQUFRLHdCQUFxQztJQVV0RSxZQUFZLFlBQXNCLEVBQVUsTUFBYyxFQUFFLE9BQThCO1FBQ3hGLEtBQUssQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFEYSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBVDFELHVEQUF1RDtRQUM5QyxvQkFBZSxHQUN0QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLG1EQUFtRDtRQUMxQyxrQkFBYSxHQUE4RCxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2xHLHVEQUF1RDtRQUM5QyxvQkFBZSxHQUN0QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSWQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxLQUFrQjtRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFrQjtRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxFQUFVO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFUyxvQkFBb0I7UUFDNUIsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzdDLGdCQUFnQixDQUFjLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzFELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ3BCLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQzVCLENBQUMsQ0FBQyxJQUFJLENBQ0wsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsRUFDeEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBa0IsQ0FBQyxFQUNsRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlLENBQUksT0FBWSxFQUFFLEdBQUcsSUFBYztRQUN4RCxPQUFPO1lBQ0wsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7U0FDNUYsQ0FBQztJQUNKLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxLQUFVLEVBQUUsSUFBYztRQUN6RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQzsrR0F2RVUsYUFBYTttSEFBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXIsXG4gIGdldEluamVjdGVkSG9va3MsXG4gIGFsbEVudHJpZXNBcmVFcXVhbCxcbiAgc3RhdGVUb0ZhY3Rvcnlcbn0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UgfSBmcm9tICcuLi9wbHVnaW5zJztcbmltcG9ydCB7IEhPT0tfV0laQVJELCBXaXphcmRFbnRyeSB9IGZyb20gJy4vd2l6YXJkLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV2l6YXJkU2VydmljZSBleHRlbmRzIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2luczxXaXphcmRFbnRyeT4ge1xuICAvKiogV2l6YXJkIGhlYWRlciBzdWJqZWN0LiBJdCBlbWl0cyBoZWFkZXIgdGVtcGxhdGUuICovXG4gIHJlYWRvbmx5IGhlYWRlclRlbXBsYXRlJDogU3ViamVjdDx7IHdpemFyZElkOiBzdHJpbmc7IHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0+ID1cbiAgICBuZXcgU3ViamVjdCgpO1xuICAvKiogV2l6YXJkIGJvZHkgc3ViamVjdC4gSXQgZW1pdHMgYm9keSB0ZW1wbGF0ZS4gKi9cbiAgcmVhZG9ubHkgYm9keVRlbXBsYXRlJDogU3ViamVjdDx7IHdpemFyZElkOiBzdHJpbmc7IHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0+ID0gbmV3IFN1YmplY3QoKTtcbiAgLyoqIFdpemFyZCBmb290ZXIgc3ViamVjdC4gSXQgZW1pdHMgZm9vdGVyIHRlbXBsYXRlLiAqL1xuICByZWFkb25seSBmb290ZXJUZW1wbGF0ZSQ6IFN1YmplY3Q8eyB3aXphcmRJZDogc3RyaW5nOyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB9PiA9XG4gICAgbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3Rvcihyb290SW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwbHVnaW5zOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UpIHtcbiAgICBzdXBlcihyb290SW5qZWN0b3IsIHBsdWdpbnMpO1xuICAgIHRoaXMuaXRlbXMkID0gdGhpcy5zZXR1cEl0ZW1zT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNldCBvZiBlbnRyaWVzLlxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGdldCBzdGF0ZSgpOiBTZXQ8V2l6YXJkRW50cnk+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBlbnRyeSBpbiB0aGUgd2l6YXJkLlxuICAgKiBAcGFyYW0gZW50cnkgV2l6YXJkIGVudHJ5IHRvIGFkZC5cbiAgICovXG4gIGFkZChlbnRyeTogV2l6YXJkRW50cnkpIHtcbiAgICB0aGlzLnN0YXRlLmFkZChlbnRyeSk7XG4gICAgdGhpcy5lbWl0TmV3U3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGVudHJ5IGZyb20gdGhlIHdpemFyZC5cbiAgICogQHBhcmFtIGVudHJ5IFdpemFyZCBlbnRyeSB0byByZW1vdmUuXG4gICAqL1xuICByZW1vdmUoZW50cnk6IFdpemFyZEVudHJ5KSB7XG4gICAgdGhpcy5zdGF0ZS5kZWxldGUoZW50cnkpO1xuICAgIHRoaXMuZW1pdE5ld1N0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBvZiB3aXphcmQgZW50cmllcyBtYXRjaGluZyB0aGUgZ2l2ZW4gaWQuXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcmV0dXJucyBvYnNlcnZhYmxlIHdpdGggbGlzdCBvZiB3aXphcmQgZW50cmllcy5cbiAgICovXG4gIGdldEVudHJpZXNMaXN0QnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxXaXphcmRFbnRyeVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMkLnBpcGUobWFwKGVudHJpZXMgPT4gZW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkud2l6YXJkSWQgPT09IGlkKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8V2l6YXJkRW50cnlbXT4ge1xuICAgIHJldHVybiBmcm9tVHJpZ2dlcih0aGlzLnJvdXRlciwgdGhpcy5yZWZyZXNoJCwgW1xuICAgICAgZ2V0SW5qZWN0ZWRIb29rczxXaXphcmRFbnRyeT4oSE9PS19XSVpBUkQsIHRoaXMuaW5qZWN0b3JzKSxcbiAgICAgICgpID0+IHRoaXMuZmFjdG9yaWVzLFxuICAgICAgc3RhdGVUb0ZhY3RvcnkodGhpcy5zdGF0ZSQpXG4gICAgXSkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGFsbEVudHJpZXNBcmVFcXVhbCksXG4gICAgICBtYXAoZW50cmllcyA9PiB0aGlzLmdldFVuaXF1ZUxpc3RCeShlbnRyaWVzLCAnbmFtZScsICd3aXphcmRJZCcpIGFzIFdpemFyZEVudHJ5W10pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVbmlxdWVMaXN0Qnk8VD4oZW50cmllczogVFtdLCAuLi5rZXlzOiBzdHJpbmdbXSk6IFRbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLm5ldyBNYXAoZW50cmllcy5tYXAoaXRlbSA9PiBbdGhpcy5nZXRVbmlxSWRlbnRpZmllckZvcktleXMoaXRlbSwga2V5cyksIGl0ZW1dKSkudmFsdWVzKClcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVbmlxSWRlbnRpZmllckZvcktleXMoZW50cnk6IGFueSwga2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBrZXlzLm1hcChrZXkgPT4gZW50cnlba2V5XSkuam9pbignXycpO1xuICB9XG59XG4iXX0=