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

104 lines 15.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 { Inject, Injectable } from "@angular/core"; import isEmpty from "lodash/isEmpty"; import uniq from "lodash/uniq"; import { takeUntil } from "rxjs/operators"; import { EventBus } from "@nova-ui/bits"; import { StatusContentFallbackAdapter } from "./status-content-fallback-adapter"; import { DATA_SOURCE_DESTROYED } from "../../configurator/types"; import { PizzagnaService } from "../../pizzagna/services/pizzagna.service"; import { HttpStatusCode, PizzagnaLayer, PIZZAGNA_EVENT_BUS, } from "../../types"; import * as i0 from "@angular/core"; import * as i1 from "../../pizzagna/services/pizzagna.service"; import * as i2 from "@nova-ui/bits"; export class KpiStatusContentFallbackAdapter extends StatusContentFallbackAdapter { constructor(eventBus, pizzagnaService) { super(eventBus, pizzagnaService); /** * Fallback node key to use if multiple tile data sources report different errors */ this.multipleErrorFallbackKey = HttpStatusCode.Unknown; /** * Map of kpi tile component id's to their corresponding error */ this.errorMap = {}; this.eventBus .getStream(DATA_SOURCE_DESTROYED) .pipe(takeUntil(this.destroy$)) .subscribe((event) => { this.handleDataSourceDestroyed(event); }); } updateConfiguration(properties) { if (properties.multipleErrorFallbackKey) { this.multipleErrorFallbackKey = properties.multipleErrorFallbackKey; } } handleDataSourceOutput(event) { this.errorMap = this.updateErrorMap(event); this.setFallbackKeyProperty(); } handleDataSourceDestroyed(event) { if (event.payload?.componentId) { delete this.errorMap[event.payload.componentId]; } this.setFallbackKeyProperty(); } setFallbackKeyProperty() { this.pizzagnaService.setProperty({ componentId: this.componentId, propertyPath: ["fallbackKey"], pizzagnaKey: PizzagnaLayer.Data, }, this.getFallbackKey()); } getFallbackKey() { if (isEmpty(this.errorMap)) { return undefined; } const uniqueErrors = uniq(Object.values(this.errorMap)); return uniqueErrors.length === 1 ? uniqueErrors[0] : this.multipleErrorFallbackKey; } updateErrorMap(event) { const errorMap = this.errorMap; const errorCode = typeof event.payload?.error?.type !== "undefined" ? event.payload?.error?.type.toString() : undefined; // an undefined result indicates the kpi tile was destroyed if (!errorCode) { delete errorMap[event.payload.componentId]; } else if (errorCode) { errorMap[event.payload.componentId] = errorCode; } return errorMap; } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiStatusContentFallbackAdapter, deps: [{ token: PIZZAGNA_EVENT_BUS }, { token: i1.PizzagnaService }], target: i0.ɵɵFactoryTarget.Injectable }); } /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiStatusContentFallbackAdapter }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiStatusContentFallbackAdapter, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i2.EventBus, decorators: [{ type: Inject, args: [PIZZAGNA_EVENT_BUS] }] }, { type: i1.PizzagnaService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXN0YXR1cy1jb250ZW50LWZhbGxiYWNrLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcHJvdmlkZXJzL2twaS1zdGF0dXMtY29udGVudC1mYWxsYmFjay1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFDSCxjQUFjLEVBSWQsYUFBYSxFQUNiLGtCQUFrQixHQUNyQixNQUFNLGFBQWEsQ0FBQzs7OztBQVFyQixNQUFNLE9BQU8sK0JBQ1QsU0FBUSw0QkFBNEI7SUFhcEMsWUFDZ0MsUUFBMEIsRUFDdEQsZUFBZ0M7UUFF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Ii8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgaXNFbXB0eSBmcm9tIFwibG9kYXNoL2lzRW1wdHlcIjtcbmltcG9ydCB1bmlxIGZyb20gXCJsb2Rhc2gvdW5pcVwiO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IEV2ZW50QnVzLCBJRXZlbnQgfSBmcm9tIFwiQG5vdmEtdWkvYml0c1wiO1xuXG5pbXBvcnQgeyBTdGF0dXNDb250ZW50RmFsbGJhY2tBZGFwdGVyIH0gZnJvbSBcIi4vc3RhdHVzLWNvbnRlbnQtZmFsbGJhY2stYWRhcHRlclwiO1xuaW1wb3J0IHsgSUNvbXBvbmVudElkUGF5bG9hZCwgSURhdGFTb3VyY2VPdXRwdXRQYXlsb2FkIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IERBVEFfU09VUkNFX0RFU1RST1lFRCB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0b3IvdHlwZXNcIjtcbmltcG9ydCB7IFBpenphZ25hU2VydmljZSB9IGZyb20gXCIuLi8uLi9waXp6YWduYS9zZXJ2aWNlcy9waXp6YWduYS5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIEh0dHBTdGF0dXNDb2RlLFxuICAgIElDb25maWd1cmFibGUsXG4gICAgSUhhc0NvbXBvbmVudCxcbiAgICBJUHJvcGVydGllcyxcbiAgICBQaXp6YWduYUxheWVyLFxuICAgIFBJWlpBR05BX0VWRU5UX0JVUyxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUtwaUZhbGxiYWNrQWRhcHRlclByb3BlcnRpZXMgZXh0ZW5kcyBJUHJvcGVydGllcyB7XG4gICAgLy8gRmFsbGJhY2sgbm9kZSBrZXkgdG8gdXNlIGlmIG11bHRpcGxlIHRpbGUgZGF0YSBzb3VyY2VzIHJlcG9ydCBkaWZmZXJlbnQgZXJyb3JzXG4gICAgbXVsdGlwbGVFcnJvckZhbGxiYWNrS2V5OiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBLcGlTdGF0dXNDb250ZW50RmFsbGJhY2tBZGFwdGVyXG4gICAgZXh0ZW5kcyBTdGF0dXNDb250ZW50RmFsbGJhY2tBZGFwdGVyXG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIElIYXNDb21wb25lbnQsIElDb25maWd1cmFibGVcbntcbiAgICAvKipcbiAgICAgKiBGYWxsYmFjayBub2RlIGtleSB0byB1c2UgaWYgbXVsdGlwbGUgdGlsZSBkYXRhIHNvdXJjZXMgcmVwb3J0IGRpZmZlcmVudCBlcnJvcnNcbiAgICAgKi9cbiAgICBwdWJsaWMgbXVsdGlwbGVFcnJvckZhbGxiYWNrS2V5OiBzdHJpbmcgPSBIdHRwU3RhdHVzQ29kZS5Vbmtub3duO1xuXG4gICAgLyoqXG4gICAgICogTWFwIG9mIGtwaSB0aWxlIGNvbXBvbmVudCBpZCdzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXJyb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIGVycm9yTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChQSVpaQUdOQV9FVkVOVF9CVVMpIGV2ZW50QnVzOiBFdmVudEJ1czxJRXZlbnQ+LFxuICAgICAgICBwaXp6YWduYVNlcnZpY2U6IFBpenphZ25hU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihldmVudEJ1cywgcGl6emFnbmFTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLmV2ZW50QnVzXG4gICAgICAgICAgICAuZ2V0U3RyZWFtKERBVEFfU09VUkNFX0RFU1RST1lFRClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRhU291cmNlRGVzdHJveWVkKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDb25maWd1cmF0aW9uKFxuICAgICAgICBwcm9wZXJ0aWVzOiBJS3BpRmFsbGJhY2tBZGFwdGVyUHJvcGVydGllc1xuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAocHJvcGVydGllcy5tdWx0aXBsZUVycm9yRmFsbGJhY2tLZXkpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVFcnJvckZhbGxiYWNrS2V5ID0gcHJvcGVydGllcy5tdWx0aXBsZUVycm9yRmFsbGJhY2tLZXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRGF0YVNvdXJjZU91dHB1dChcbiAgICAgICAgZXZlbnQ6IElFdmVudDxhbnkgfCBJRGF0YVNvdXJjZU91dHB1dFBheWxvYWQ8YW55Pj5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lcnJvck1hcCA9IHRoaXMudXBkYXRlRXJyb3JNYXAoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuc2V0RmFsbGJhY2tLZXlQcm9wZXJ0eSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVEYXRhU291cmNlRGVzdHJveWVkKFxuICAgICAgICBldmVudDogSUV2ZW50PElDb21wb25lbnRJZFBheWxvYWQ+XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5wYXlsb2FkPy5jb21wb25lbnRJZCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZXJyb3JNYXBbZXZlbnQucGF5bG9hZC5jb21wb25lbnRJZF07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEZhbGxiYWNrS2V5UHJvcGVydHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZhbGxiYWNrS2V5UHJvcGVydHkoKSB7XG4gICAgICAgIHRoaXMucGl6emFnbmFTZXJ2aWNlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudElkOiB0aGlzLmNvbXBvbmVudElkLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5UGF0aDogW1wiZmFsbGJhY2tLZXlcIl0sXG4gICAgICAgICAgICAgICAgcGl6emFnbmFLZXk6IFBpenphZ25hTGF5ZXIuRGF0YSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmdldEZhbGxiYWNrS2V5KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZhbGxiYWNrS2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0VtcHR5KHRoaXMuZXJyb3JNYXApKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pcXVlRXJyb3JzID0gdW5pcShPYmplY3QudmFsdWVzKHRoaXMuZXJyb3JNYXApKTtcbiAgICAgICAgcmV0dXJuIHVuaXF1ZUVycm9ycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgID8gdW5pcXVlRXJyb3JzWzBdXG4gICAgICAgICAgICA6IHRoaXMubXVsdGlwbGVFcnJvckZhbGxiYWNrS2V5O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRXJyb3JNYXAoZXZlbnQ6IElFdmVudDxhbnkgfCBJRGF0YVNvdXJjZU91dHB1dFBheWxvYWQ8YW55Pj4pIHtcbiAgICAgICAgY29uc3QgZXJyb3JNYXAgPSB0aGlzLmVycm9yTWFwO1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPVxuICAgICAgICAgICAgdHlwZW9mIGV2ZW50LnBheWxvYWQ/LmVycm9yPy50eXBlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgPyBldmVudC5wYXlsb2FkPy5lcnJvcj8udHlwZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gYW4gdW5kZWZpbmVkIHJlc3VsdCBpbmRpY2F0ZXMgdGhlIGtwaSB0aWxlIHdhcyBkZXN0cm95ZWRcbiAgICAgICAgaWYgKCFlcnJvckNvZGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBlcnJvck1hcFtldmVudC5wYXlsb2FkLmNvbXBvbmVudElkXTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvckNvZGUpIHtcbiAgICAgICAgICAgIGVycm9yTWFwW2V2ZW50LnBheWxvYWQuY29tcG9uZW50SWRdID0gZXJyb3JDb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9yTWFwO1xuICAgIH1cbn1cbiJdfQ==