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

84 lines 13.2 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 { Injectable } from "@angular/core"; import get from "lodash/get"; import { distinctUntilChanged, map } from "rxjs/operators"; import { getParentComponentId } from "../../functions/get-parent-component-id"; import { parseStringWithData } from "../../functions/parse-string-with-data"; import { PizzagnaService } from "../../pizzagna/services/pizzagna.service"; import * as i0 from "@angular/core"; import * as i1 from "../../pizzagna/services/pizzagna.service"; export class PizzagnaBroadcasterService { constructor(pizzagnaService) { this.pizzagnaService = pizzagnaService; this.defaultTrackOn = "pizzagna"; this.subscriptions = []; } setComponent(component, componentId) { this.component = component; this.componentId = componentId; this.parentComponentId = getParentComponentId(componentId); this.initChangeSubscriptions(); } updateConfiguration(properties) { this.configs = properties?.configs; } initChangeSubscriptions() { for (const config of this.configs) { const observable = this.getObservableFor(config); if (!observable) { console.warn("no observable found on 'PizzagnaBroadcasterService', for part: ", config); return; } const subscription = observable.subscribe((v) => { for (const path of config.paths) { const validatedPath = parseStringWithData(path, this); this.pizzagnaService.setProperty(validatedPath, v); } }); this.subscriptions.push(subscription); } } getObservableFor(config) { const trackOn = config.trackOn || this.defaultTrackOn; const observable = trackOn === "component" ? this.getComponentObservableFor(config) : this.getPizzagnaObservableFor(config); return observable; } getPizzagnaObservableFor(part) { return this.pizzagnaService.pizzaChanged.pipe(map((v) => get(v, part.key)), distinctUntilChanged()); } getComponentObservableFor(part) { const obs = get(this.component, part.key); return obs?.pipe(distinctUntilChanged()); } ngOnDestroy() { for (const subscription of this.subscriptions) { subscription.unsubscribe(); } } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PizzagnaBroadcasterService, deps: [{ token: i1.PizzagnaService }], target: i0.ɵɵFactoryTarget.Injectable }); } /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PizzagnaBroadcasterService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PizzagnaBroadcasterService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.PizzagnaService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl6emFnbmEtYnJvYWRjYXN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wcm92aWRlcnMvcGl6emFnbmEtYnJvYWRjYXN0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFFN0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7O0FBSTNFLE1BQU0sT0FBTywwQkFBMEI7SUFTbkMsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBTm5DLG1CQUFjLEdBQTJCLFVBQVUsQ0FBQztRQUU3RCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFJWSxDQUFDO0lBRWpELFlBQVksQ0FBQyxTQUFjLEVBQUUsV0FBbUI7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxVQUF1QjtRQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsRUFBRSxPQUFPLENBQUM7SUFDdkMsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpELElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FDUixpRUFBaUUsRUFDakUsTUFBTSxDQUNULENBQUM7Z0JBQ0YsT0FBTzthQUNWO1lBRUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQzdCLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0RDtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBMEI7UUFDL0MsTUFBTSxPQUFPLEdBQ1QsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUNaLE9BQU8sS0FBSyxXQUFXO1lBQ25CLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVPLHdCQUF3QixDQUFDLElBQXdCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzVCLG9CQUFvQixFQUFFLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRU8seUJBQXlCLENBQUMsSUFBd0I7UUFDdEQsTUFBTSxHQUFHLEdBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxXQUFXO1FBQ2QsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7a0lBdkVRLDBCQUEwQjtzSUFBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgZ2V0IGZyb20gXCJsb2Rhc2gvZ2V0XCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBCcm9hZGNhc3RlclRyYWNrT25UeXBlLCBJQnJvYWRjYXN0ZXJDb25maWcgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0UGFyZW50Q29tcG9uZW50SWQgfSBmcm9tIFwiLi4vLi4vZnVuY3Rpb25zL2dldC1wYXJlbnQtY29tcG9uZW50LWlkXCI7XG5pbXBvcnQgeyBwYXJzZVN0cmluZ1dpdGhEYXRhIH0gZnJvbSBcIi4uLy4uL2Z1bmN0aW9ucy9wYXJzZS1zdHJpbmctd2l0aC1kYXRhXCI7XG5pbXBvcnQgeyBQaXp6YWduYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vcGl6emFnbmEvc2VydmljZXMvcGl6emFnbmEuc2VydmljZVwiO1xuaW1wb3J0IHsgSUNvbmZpZ3VyYWJsZSwgSVByb3BlcnRpZXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBpenphZ25hQnJvYWRjYXN0ZXJTZXJ2aWNlIGltcGxlbWVudHMgSUNvbmZpZ3VyYWJsZSwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIGNvbXBvbmVudDogYW55O1xuICAgIHByaXZhdGUgY29uZmlnczogSUJyb2FkY2FzdGVyQ29uZmlnW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VHJhY2tPbjogQnJvYWRjYXN0ZXJUcmFja09uVHlwZSA9IFwicGl6emFnbmFcIjtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBwcml2YXRlIGNvbXBvbmVudElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwYXJlbnRDb21wb25lbnRJZDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwaXp6YWduYVNlcnZpY2U6IFBpenphZ25hU2VydmljZSkge31cblxuICAgIHB1YmxpYyBzZXRDb21wb25lbnQoY29tcG9uZW50OiBhbnksIGNvbXBvbmVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHRoaXMuY29tcG9uZW50SWQgPSBjb21wb25lbnRJZDtcbiAgICAgICAgdGhpcy5wYXJlbnRDb21wb25lbnRJZCA9IGdldFBhcmVudENvbXBvbmVudElkKGNvbXBvbmVudElkKTtcblxuICAgICAgICB0aGlzLmluaXRDaGFuZ2VTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNvbmZpZ3VyYXRpb24ocHJvcGVydGllczogSVByb3BlcnRpZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb25maWdzID0gcHJvcGVydGllcz8uY29uZmlncztcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDaGFuZ2VTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiB0aGlzLmNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLmdldE9ic2VydmFibGVGb3IoY29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKCFvYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICBcIm5vIG9ic2VydmFibGUgZm91bmQgb24gJ1BpenphZ25hQnJvYWRjYXN0ZXJTZXJ2aWNlJywgZm9yIHBhcnQ6IFwiLFxuICAgICAgICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgY29uZmlnLnBhdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFBhdGggPSBwYXJzZVN0cmluZ1dpdGhEYXRhKHBhdGgsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpenphZ25hU2VydmljZS5zZXRQcm9wZXJ0eSh2YWxpZGF0ZWRQYXRoLCB2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9ic2VydmFibGVGb3IoY29uZmlnOiBJQnJvYWRjYXN0ZXJDb25maWcpIHtcbiAgICAgICAgY29uc3QgdHJhY2tPbjogQnJvYWRjYXN0ZXJUcmFja09uVHlwZSA9XG4gICAgICAgICAgICBjb25maWcudHJhY2tPbiB8fCB0aGlzLmRlZmF1bHRUcmFja09uO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPVxuICAgICAgICAgICAgdHJhY2tPbiA9PT0gXCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRDb21wb25lbnRPYnNlcnZhYmxlRm9yKGNvbmZpZylcbiAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0UGl6emFnbmFPYnNlcnZhYmxlRm9yKGNvbmZpZyk7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGl6emFnbmFPYnNlcnZhYmxlRm9yKHBhcnQ6IElCcm9hZGNhc3RlckNvbmZpZykge1xuICAgICAgICByZXR1cm4gdGhpcy5waXp6YWduYVNlcnZpY2UucGl6emFDaGFuZ2VkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHYpID0+IGdldCh2LCBwYXJ0LmtleSkpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tcG9uZW50T2JzZXJ2YWJsZUZvcihwYXJ0OiBJQnJvYWRjYXN0ZXJDb25maWcpIHtcbiAgICAgICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPGFueT4gPSBnZXQodGhpcy5jb21wb25lbnQsIHBhcnQua2V5KTtcbiAgICAgICAgcmV0dXJuIG9icz8ucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=