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