@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
88 lines • 12.8 kB
JavaScript
// © 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 defaultsDeep from "lodash/defaultsDeep";
import set from "lodash/set";
import { PizzagnaLayer } from "../types";
import * as i0 from "@angular/core";
export class WidgetTypesService {
constructor() {
this.widgetTypes = {};
}
registerWidgetType(key, version, widgetType) {
let widgetTypeVersions = this.widgetTypes[key];
if (!widgetTypeVersions) {
widgetTypeVersions = [];
this.widgetTypes[key] = widgetTypeVersions;
}
if (widgetTypeVersions.length < version) {
widgetTypeVersions.length = version;
}
widgetTypeVersions[version - 1] = widgetType;
}
getWidgetType(type, version) {
const widgetTypeVersions = this.widgetTypes[type];
if (!widgetTypeVersions || widgetTypeVersions.length === 0) {
throw new Error("Type '" +
type +
"' not found in the registry. Available types: " +
Object.keys(this.widgetTypes).join(", "));
}
if (typeof version !== "undefined" &&
(version <= 0 || widgetTypeVersions.length < version)) {
throw new Error("Version " +
version +
" for widget type '" +
type +
"' not registered. Max available version is " +
widgetTypeVersions.length);
}
const adjustedVersion = typeof version === "undefined"
? widgetTypeVersions.length
: version;
return widgetTypeVersions[adjustedVersion - 1];
}
/**
* Take a widget and merge it with the pizzagna of its type
*
* @param widget
*
* @return new reference of a widget including the pizzagna of its type
*/
mergeWithWidgetType(widget) {
const widgetType = this.getWidgetType(widget.type, widget.version);
return {
...widget,
pizzagna: defaultsDeep(widget.pizzagna, widgetType.widget),
};
}
setNode(widgetTemplate, section, pathKey, value) {
const widgetSection = `${section}.${PizzagnaLayer.Structure}`;
const itemPath = `${widgetTemplate.paths?.[section]?.[pathKey] || pathKey}`;
const path = `${widgetSection}.${itemPath}`;
set(widgetTemplate, path, value);
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetTypesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetTypesService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetTypesService, decorators: [{
type: Injectable
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXR5cGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3dpZGdldC10eXBlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sWUFBWSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUc3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUd6QyxNQUFNLE9BQU8sa0JBQWtCO0lBRzNCO1FBRlEsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO0lBRW5ELENBQUM7SUFFVCxrQkFBa0IsQ0FDckIsR0FBVyxFQUNYLE9BQWUsRUFDZixVQUFpQztRQUVqQyxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3JCLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1NBQzlDO1FBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsT0FBTyxFQUFFO1lBQ3JDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7U0FDdkM7UUFDRCxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0lBQ2pELENBQUM7SUFFTSxhQUFhLENBQ2hCLElBQVksRUFDWixPQUFnQjtRQUVoQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDWCxRQUFRO2dCQUNKLElBQUk7Z0JBQ0osZ0RBQWdEO2dCQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQy9DLENBQUM7U0FDTDtRQUVELElBQ0ksT0FBTyxPQUFPLEtBQUssV0FBVztZQUM5QixDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUN2RDtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQ1gsVUFBVTtnQkFDTixPQUFPO2dCQUNQLG9CQUFvQjtnQkFDcEIsSUFBSTtnQkFDSiw2Q0FBNkM7Z0JBQzdDLGtCQUFrQixDQUFDLE1BQU0sQ0FDaEMsQ0FBQztTQUNMO1FBRUQsTUFBTSxlQUFlLEdBQ2pCLE9BQU8sT0FBTyxLQUFLLFdBQVc7WUFDMUIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU07WUFDM0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNsQixPQUFPLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CLENBQUMsTUFBZTtRQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE9BQU87WUFDSCxHQUFHLE1BQU07WUFDVCxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztTQUM3RCxDQUFDO0lBQ04sQ0FBQztJQUVNLE9BQU8sQ0FDVixjQUFxQyxFQUNyQyxPQUFrQyxFQUNsQyxPQUFlLEVBQ2YsS0FBVTtRQUVWLE1BQU0sYUFBYSxHQUFHLEdBQUcsT0FBTyxJQUFJLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5RCxNQUFNLFFBQVEsR0FBRyxHQUNiLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQ2xELEVBQUUsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLEdBQUcsYUFBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7a0lBcEZRLGtCQUFrQjtzSUFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IGRlZmF1bHRzRGVlcCBmcm9tIFwibG9kYXNoL2RlZmF1bHRzRGVlcFwiO1xuaW1wb3J0IHNldCBmcm9tIFwibG9kYXNoL3NldFwiO1xuXG5pbXBvcnQgeyBJV2lkZ2V0LCBJV2lkZ2V0VHlwZURlZmluaXRpb24gfSBmcm9tIFwiLi4vY29tcG9uZW50cy93aWRnZXQvdHlwZXNcIjtcbmltcG9ydCB7IFBpenphZ25hTGF5ZXIgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdpZGdldFR5cGVzU2VydmljZSB7XG4gICAgcHJpdmF0ZSB3aWRnZXRUeXBlczogUmVjb3JkPHN0cmluZywgSVdpZGdldFR5cGVEZWZpbml0aW9uW10+ID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJXaWRnZXRUeXBlKFxuICAgICAgICBrZXk6IHN0cmluZyxcbiAgICAgICAgdmVyc2lvbjogbnVtYmVyLFxuICAgICAgICB3aWRnZXRUeXBlOiBJV2lkZ2V0VHlwZURlZmluaXRpb25cbiAgICApOiB2b2lkIHtcbiAgICAgICAgbGV0IHdpZGdldFR5cGVWZXJzaW9ucyA9IHRoaXMud2lkZ2V0VHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCF3aWRnZXRUeXBlVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIHdpZGdldFR5cGVWZXJzaW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy53aWRnZXRUeXBlc1trZXldID0gd2lkZ2V0VHlwZVZlcnNpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aWRnZXRUeXBlVmVyc2lvbnMubGVuZ3RoIDwgdmVyc2lvbikge1xuICAgICAgICAgICAgd2lkZ2V0VHlwZVZlcnNpb25zLmxlbmd0aCA9IHZlcnNpb247XG4gICAgICAgIH1cbiAgICAgICAgd2lkZ2V0VHlwZVZlcnNpb25zW3ZlcnNpb24gLSAxXSA9IHdpZGdldFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZGdldFR5cGUoXG4gICAgICAgIHR5cGU6IHN0cmluZyxcbiAgICAgICAgdmVyc2lvbj86IG51bWJlclxuICAgICk6IElXaWRnZXRUeXBlRGVmaW5pdGlvbiB7XG4gICAgICAgIGNvbnN0IHdpZGdldFR5cGVWZXJzaW9ucyA9IHRoaXMud2lkZ2V0VHlwZXNbdHlwZV07XG4gICAgICAgIGlmICghd2lkZ2V0VHlwZVZlcnNpb25zIHx8IHdpZGdldFR5cGVWZXJzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlR5cGUgJ1wiICtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSArXG4gICAgICAgICAgICAgICAgICAgIFwiJyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBBdmFpbGFibGUgdHlwZXM6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy53aWRnZXRUeXBlcykuam9pbihcIiwgXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHZlcnNpb24gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgICh2ZXJzaW9uIDw9IDAgfHwgd2lkZ2V0VHlwZVZlcnNpb25zLmxlbmd0aCA8IHZlcnNpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiVmVyc2lvbiBcIiArXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb24gK1xuICAgICAgICAgICAgICAgICAgICBcIiBmb3Igd2lkZ2V0IHR5cGUgJ1wiICtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSArXG4gICAgICAgICAgICAgICAgICAgIFwiJyBub3QgcmVnaXN0ZXJlZC4gTWF4IGF2YWlsYWJsZSB2ZXJzaW9uIGlzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgd2lkZ2V0VHlwZVZlcnNpb25zLmxlbmd0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkanVzdGVkVmVyc2lvbiA9XG4gICAgICAgICAgICB0eXBlb2YgdmVyc2lvbiA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgID8gd2lkZ2V0VHlwZVZlcnNpb25zLmxlbmd0aFxuICAgICAgICAgICAgICAgIDogdmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIHdpZGdldFR5cGVWZXJzaW9uc1thZGp1c3RlZFZlcnNpb24gLSAxXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlIGEgd2lkZ2V0IGFuZCBtZXJnZSBpdCB3aXRoIHRoZSBwaXp6YWduYSBvZiBpdHMgdHlwZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZGdldFxuICAgICAqXG4gICAgICogQHJldHVybiBuZXcgcmVmZXJlbmNlIG9mIGEgd2lkZ2V0IGluY2x1ZGluZyB0aGUgcGl6emFnbmEgb2YgaXRzIHR5cGVcbiAgICAgKi9cbiAgICBwdWJsaWMgbWVyZ2VXaXRoV2lkZ2V0VHlwZSh3aWRnZXQ6IElXaWRnZXQpOiBJV2lkZ2V0IHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0VHlwZSA9IHRoaXMuZ2V0V2lkZ2V0VHlwZSh3aWRnZXQudHlwZSwgd2lkZ2V0LnZlcnNpb24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ud2lkZ2V0LFxuICAgICAgICAgICAgcGl6emFnbmE6IGRlZmF1bHRzRGVlcCh3aWRnZXQucGl6emFnbmEsIHdpZGdldFR5cGUud2lkZ2V0KSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Tm9kZShcbiAgICAgICAgd2lkZ2V0VGVtcGxhdGU6IElXaWRnZXRUeXBlRGVmaW5pdGlvbixcbiAgICAgICAgc2VjdGlvbjogXCJ3aWRnZXRcIiB8IFwiY29uZmlndXJhdG9yXCIsXG4gICAgICAgIHBhdGhLZXk6IHN0cmluZyxcbiAgICAgICAgdmFsdWU6IGFueVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCB3aWRnZXRTZWN0aW9uID0gYCR7c2VjdGlvbn0uJHtQaXp6YWduYUxheWVyLlN0cnVjdHVyZX1gO1xuICAgICAgICBjb25zdCBpdGVtUGF0aCA9IGAke1xuICAgICAgICAgICAgd2lkZ2V0VGVtcGxhdGUucGF0aHM/LltzZWN0aW9uXT8uW3BhdGhLZXldIHx8IHBhdGhLZXlcbiAgICAgICAgfWA7XG5cbiAgICAgICAgY29uc3QgcGF0aCA9IGAke3dpZGdldFNlY3Rpb259LiR7aXRlbVBhdGh9YDtcbiAgICAgICAgc2V0KHdpZGdldFRlbXBsYXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgfVxufVxuIl19