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

86 lines 13.8 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 { Inject, Injectable } from "@angular/core"; import get from "lodash/get"; import pick from "lodash/pick"; import { takeUntil } from "rxjs/operators"; import { EventBus, immutableSet } from "@nova-ui/bits"; import { PizzagnaService } from "../../../../../pizzagna/services/pizzagna.service"; import { PizzagnaLayer, PIZZAGNA_EVENT_BUS } from "../../../../../types"; import { PreviewService } from "../../../preview.service"; import { BaseConverter } from "../../base-converter"; import * as i0 from "@angular/core"; import * as i1 from "../../../preview.service"; import * as i2 from "../../../../../pizzagna/services/pizzagna.service"; import * as i3 from "@nova-ui/bits"; export class KpiSectionConverterService extends BaseConverter { get previewComponentId() { return this.componentId.split("/")[0]; } constructor(eventBus, previewService, pizzagnaService) { super(eventBus, previewService, pizzagnaService); } updateConfiguration(properties) { if (properties && properties.formParts) { this.formParts = properties.formParts; } } buildForm() { const preview = this.getPreview(); const updatedPizzagna = this.formParts.reduce((res, v) => { const previewPath = `${this.previewComponentId}.${v.previewPath}`; // TODO: Define correct index type const previewSlice = get(preview, previewPath); if (previewSlice) { for (const key of v.keys) { if (previewSlice[key] !== undefined) { res = immutableSet(res, `${PizzagnaLayer.Data}.${this.componentId}.properties.${key}`, previewSlice[key]); } } } return res; }, this.pizzagnaService.pizzagna); this.updateFormPizzagna(updatedPizzagna); } toPreview(form) { form.valueChanges .pipe(takeUntil(this.destroy$)) .subscribe((formData) => { const updatedPreview = this.formParts.reduce((p, v) => { let outPath = v.previewOutputPath || v.previewPath; outPath = `${this.previewComponentId}.${outPath}`; const preview = get(p, outPath); const fromForm = pick(formData, v.keys); const merged = { ...preview, ...fromForm }; return immutableSet(p, `${outPath}`, merged); }, this.getPreview()); this.updatePreview(updatedPreview); }); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiSectionConverterService, deps: [{ token: PIZZAGNA_EVENT_BUS }, { token: i1.PreviewService }, { token: i2.PizzagnaService }], target: i0.ɵɵFactoryTarget.Injectable }); } /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiSectionConverterService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiSectionConverterService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i3.EventBus, decorators: [{ type: Inject, args: [PIZZAGNA_EVENT_BUS] }] }, { type: i1.PreviewService }, { type: i2.PizzagnaService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXNlY3Rpb24tY29udmVydGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbmZpZ3VyYXRvci9zZXJ2aWNlcy9jb252ZXJ0ZXJzL2twaS9rcGktc2VjdGlvbi1jb252ZXJ0ZXIva3BpLXNlY3Rpb24tY29udmVydGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQVUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFJckQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLGFBQWE7SUFH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IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgZ2V0IGZyb20gXCJsb2Rhc2gvZ2V0XCI7XG5pbXBvcnQgcGljayBmcm9tIFwibG9kYXNoL3BpY2tcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBFdmVudEJ1cywgSUV2ZW50LCBpbW11dGFibGVTZXQgfSBmcm9tIFwiQG5vdmEtdWkvYml0c1wiO1xuXG5pbXBvcnQgeyBQaXp6YWduYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vcGl6emFnbmEvc2VydmljZXMvcGl6emFnbmEuc2VydmljZVwiO1xuaW1wb3J0IHsgUGl6emFnbmFMYXllciwgUElaWkFHTkFfRVZFTlRfQlVTIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBQcmV2aWV3U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9wcmV2aWV3LnNlcnZpY2VcIjtcbmltcG9ydCB7IEJhc2VDb252ZXJ0ZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IElDb252ZXJ0ZXJGb3JtUGFydHNQcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBLcGlTZWN0aW9uQ29udmVydGVyU2VydmljZSBleHRlbmRzIEJhc2VDb252ZXJ0ZXIge1xuICAgIHByaXZhdGUgZm9ybVBhcnRzOiBJQ29udmVydGVyRm9ybVBhcnRzUHJvcGVydGllc1tdO1xuXG4gICAgcHJpdmF0ZSBnZXQgcHJldmlld0NvbXBvbmVudElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRJZC5zcGxpdChcIi9cIilbMF07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoUElaWkFHTkFfRVZFTlRfQlVTKSBldmVudEJ1czogRXZlbnRCdXM8SUV2ZW50PixcbiAgICAgICAgcHJldmlld1NlcnZpY2U6IFByZXZpZXdTZXJ2aWNlLFxuICAgICAgICBwaXp6YWduYVNlcnZpY2U6IFBpenphZ25hU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihldmVudEJ1cywgcHJldmlld1NlcnZpY2UsIHBpenphZ25hU2VydmljZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNvbmZpZ3VyYXRpb24ocHJvcGVydGllczoge1xuICAgICAgICBmb3JtUGFydHM6IElDb252ZXJ0ZXJGb3JtUGFydHNQcm9wZXJ0aWVzW107XG4gICAgfSk6IHZvaWQge1xuICAgICAgICBpZiAocHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzLmZvcm1QYXJ0cykge1xuICAgICAgICAgICAgdGhpcy5mb3JtUGFydHMgPSBwcm9wZXJ0aWVzLmZvcm1QYXJ0cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZEZvcm0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLmdldFByZXZpZXcoKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkUGl6emFnbmEgPSB0aGlzLmZvcm1QYXJ0cy5yZWR1Y2UoKHJlcywgdikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlld1BhdGggPSBgJHt0aGlzLnByZXZpZXdDb21wb25lbnRJZH0uJHt2LnByZXZpZXdQYXRofWA7XG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgY29ycmVjdCBpbmRleCB0eXBlXG4gICAgICAgICAgICBjb25zdCBwcmV2aWV3U2xpY2U6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnZXQocHJldmlldywgcHJldmlld1BhdGgpO1xuXG4gICAgICAgICAgICBpZiAocHJldmlld1NsaWNlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygdi5rZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aWV3U2xpY2Vba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBpbW11dGFibGVTZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke1BpenphZ25hTGF5ZXIuRGF0YX0uJHt0aGlzLmNvbXBvbmVudElkfS5wcm9wZXJ0aWVzLiR7a2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld1NsaWNlW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sIHRoaXMucGl6emFnbmFTZXJ2aWNlLnBpenphZ25hKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtUGl6emFnbmEodXBkYXRlZFBpenphZ25hKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9QcmV2aWV3KGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICAgICBmb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZm9ybURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUHJldmlldyA9IHRoaXMuZm9ybVBhcnRzLnJlZHVjZSgocCwgdikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3V0UGF0aCA9IHYucHJldmlld091dHB1dFBhdGggfHwgdi5wcmV2aWV3UGF0aDtcbiAgICAgICAgICAgICAgICAgICAgb3V0UGF0aCA9IGAke3RoaXMucHJldmlld0NvbXBvbmVudElkfS4ke291dFBhdGh9YDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3ID0gZ2V0KHAsIG91dFBhdGgpIGFzIGFueVtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb21Gb3JtID0gcGljayhmb3JtRGF0YSwgdi5rZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0geyAuLi5wcmV2aWV3LCAuLi5mcm9tRm9ybSB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbW11dGFibGVTZXQocCwgYCR7b3V0UGF0aH1gLCBtZXJnZWQpO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMuZ2V0UHJldmlldygpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlldyh1cGRhdGVkUHJldmlldyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=