UNPKG

@nova-ui/dashboards

Version:

Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and

83 lines 11.4 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { Directive } from "@angular/core"; import { BehaviorSubject } from "rxjs"; import { map } from "rxjs/operators"; import { LoggerService, uuid } from "@nova-ui/bits"; import * as i0 from "@angular/core"; import * as i1 from "@nova-ui/bits"; // eslint-disable-next-line @angular-eslint/directive-class-suffix export class RegistryService { /* Helper method for non-reactive usages */ get stateVersion() { return this._stateVersion; } get isEmpty() { return this._isEmpty; } constructor(logger, className) { this.logger = logger; this.className = className; this.state$ = new BehaviorSubject({}); this.stateChanged$ = this.state$ .asObservable() .pipe(map(() => this.getItems())); this._isEmpty = true; } addItems(items, options = { overrideExisting: true }) { const storageValue = this.state$.value; items.forEach((item) => { if (storageValue[this.getItemKey(item)] && !options.overrideExisting) { this.logger.warn(`Logger - ${this.className}: item with ${this.getItemKey(item)} is already registered. Skipping.`); return; } storageValue[this.getItemKey(item)] = { ...item }; }); this.state$.next(storageValue); if (items.length > 0) { this.updateStateFlags(false); } } getItem(id) { return this.state$.value[id]; } getItems() { return Object.values(this.state$.value); } reset() { this.state$.next({}); this.updateStateFlags(true); } ngOnDestroy() { this.state$.complete(); } updateStateFlags(isEmpty) { this._isEmpty = isEmpty; this._stateVersion = uuid(); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RegistryService, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); } /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: RegistryService, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RegistryService, decorators: [{ type: Directive }], ctorParameters: () => [{ type: i1.LoggerService }, { type: undefined }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnktc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvcmVnaXN0cnktc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT3BELGtFQUFrRTtBQUNsRSxNQUFNLE9BQWdCLGVBQWU7SUFVakMsMkNBQTJDO0lBQzNDLElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUdELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFDWSxNQUFxQixFQUNyQixTQUFrQjtRQURsQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFyQnBCLFdBQU0sR0FBcUMsSUFBSSxlQUFlLENBRXRFLEVBQUUsQ0FBQyxDQUFDO1FBRUMsa0JBQWEsR0FBb0IsSUFBSSxDQUFDLE1BQU07YUFDOUMsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBUTlCLGFBQVEsR0FBWSxJQUFJLENBQUM7SUFROUIsQ0FBQztJQUVHLFFBQVEsQ0FDWCxLQUFVLEVBQ1YsVUFBK0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUU7UUFFekQsTUFBTSxZQUFZLEdBQW9CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRXhELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFPLEVBQUUsRUFBRTtZQUN0QixJQUNJLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDM0I7Z0JBQ0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFDYixJQUFJLENBQUMsU0FDVCxlQUFlLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO3FEQUNDLENBQUMsQ0FBQztnQkFFdkMsT0FBTzthQUNWO1lBRUQsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztJQUNMLENBQUM7SUFFTSxPQUFPLENBQUMsRUFBVTtRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxRQUFRO1FBQ1gsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLEtBQUs7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFJTyxnQkFBZ0IsQ0FBQyxPQUFnQjtRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7a0lBNUVpQixlQUFlO3NIQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRnBDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlLCB1dWlkIH0gZnJvbSBcIkBub3ZhLXVpL2JpdHNcIjtcblxuaW1wb3J0IHsgSVJlZ2lzdHJ5QWRkT3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbnR5cGUgSVJlZ2lzdHJ5TWFwPFQ+ID0gUmVjb3JkPHN0cmluZywgVD47XG5cbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVnaXN0cnlTZXJ2aWNlPFQgPSBvYmplY3Q+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcm90ZWN0ZWQgc3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8SVJlZ2lzdHJ5TWFwPFQ+PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgICAgIElSZWdpc3RyeU1hcDxUPlxuICAgID4oe30pO1xuXG4gICAgcHVibGljIHN0YXRlQ2hhbmdlZCQ6IE9ic2VydmFibGU8VFtdPiA9IHRoaXMuc3RhdGUkXG4gICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAucGlwZShtYXAoKCkgPT4gdGhpcy5nZXRJdGVtcygpKSk7XG5cbiAgICBwcml2YXRlIF9zdGF0ZVZlcnNpb246IHN0cmluZztcbiAgICAvKiBIZWxwZXIgbWV0aG9kIGZvciBub24tcmVhY3RpdmUgdXNhZ2VzICovXG4gICAgcHVibGljIGdldCBzdGF0ZVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlVmVyc2lvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0VtcHR5OiBib29sZWFuID0gdHJ1ZTtcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0VtcHR5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2xhc3NOYW1lPzogc3RyaW5nXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGFkZEl0ZW1zKFxuICAgICAgICBpdGVtczogVFtdLFxuICAgICAgICBvcHRpb25zOiBJUmVnaXN0cnlBZGRPcHRpb25zID0geyBvdmVycmlkZUV4aXN0aW5nOiB0cnVlIH1cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZVZhbHVlOiBJUmVnaXN0cnlNYXA8VD4gPSB0aGlzLnN0YXRlJC52YWx1ZTtcblxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBUKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RvcmFnZVZhbHVlW3RoaXMuZ2V0SXRlbUtleShpdGVtKV0gJiZcbiAgICAgICAgICAgICAgICAhb3B0aW9ucy5vdmVycmlkZUV4aXN0aW5nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBMb2dnZXIgLSAke1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZVxuICAgICAgICAgICAgICAgIH06IGl0ZW0gd2l0aCAke3RoaXMuZ2V0SXRlbUtleShpdGVtKX1cbiAgICAgICAgICAgICAgICAgICAgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBTa2lwcGluZy5gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RvcmFnZVZhbHVlW3RoaXMuZ2V0SXRlbUtleShpdGVtKV0gPSB7IC4uLml0ZW0gfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSQubmV4dChzdG9yYWdlVmFsdWUpO1xuXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlRmxhZ3MoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZW0oaWQ6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQudmFsdWVbaWRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJdGVtcygpOiBUW10ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlJC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlJC5uZXh0KHt9KTtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZUZsYWdzKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGF0ZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0SXRlbUtleShpdGVtOiBUKTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUZsYWdzKGlzRW1wdHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNFbXB0eSA9IGlzRW1wdHk7XG4gICAgICAgIHRoaXMuX3N0YXRlVmVyc2lvbiA9IHV1aWQoKTtcbiAgICB9XG59XG4iXX0=