@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
63 lines • 12 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 { immutableSet } from "@nova-ui/bits";
import { PizzagnaLayer } from "../../types";
import * as i0 from "@angular/core";
// TODO: make it dynamic!
const CHILD_ELEM_COMPONENT_TYPE = "WidgetConfiguratorSectionComponent";
export class DynamicComponentCreator {
getPizzagnaUpdatedWithComponents(pizzagna, parentPath, componentIds) {
const parent = pizzagna[PizzagnaLayer.Structure][parentPath];
const template = parent.properties
?.template;
return this.getPizzagnaWithChildren(pizzagna, componentIds, template, parentPath);
}
getPizzagnaWithChildren(pizzagna, componentIds, template, parentPath) {
const children = componentIds.map((id) => ({
id,
componentType: CHILD_ELEM_COMPONENT_TYPE,
}));
let updatedPizzagna = children.reduce((res, child) => this.updateChildPizzagna(res, template, child), pizzagna);
updatedPizzagna = this.getPizzagnaWithNodesSet(updatedPizzagna, parentPath, componentIds);
return updatedPizzagna;
}
updateChildPizzagna(pizzagna, template, child) {
let updatedPizzagna = immutableSet(pizzagna, `${PizzagnaLayer.Structure}.${child.id}`, child);
const nodes = template.map((node) => ({
...node,
id: `${child.id}/${node.id}`,
}));
updatedPizzagna = nodes.reduce((res, node) => immutableSet(res, `${PizzagnaLayer.Structure}.${node.id}`, node), updatedPizzagna);
const nodesIDs = nodes.map((node) => node.id);
updatedPizzagna = this.getPizzagnaWithNodesSet(updatedPizzagna, child.id, nodesIDs);
return updatedPizzagna;
}
getPizzagnaWithNodesSet(pizzagna, componentId, nodes) {
const path = `${PizzagnaLayer.Structure}.${componentId}.properties.nodes`;
return immutableSet(pizzagna, path, nodes);
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DynamicComponentCreator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DynamicComponentCreator }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DynamicComponentCreator, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQtY3JlYXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9waXp6YWduYS9zZXJ2aWNlcy9keW5hbWljLWNvbXBvbmVudC1jcmVhdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQXNDLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFaEYseUJBQXlCO0FBQ3pCLE1BQU0seUJBQXlCLEdBQUcsb0NBQW9DLENBQUM7QUFHdkUsTUFBTSxPQUFPLHVCQUF1QjtJQUN6QixnQ0FBZ0MsQ0FDbkMsUUFBbUIsRUFDbkIsVUFBa0IsRUFDbEIsWUFBc0I7UUFFdEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVTtZQUM5QixFQUFFLFFBQThDLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQy9CLFFBQVEsRUFDUixZQUFZLEVBQ1osUUFBUSxFQUNSLFVBQVUsQ0FDYixDQUFDO0lBQ04sQ0FBQztJQUVPLHVCQUF1QixDQUMzQixRQUFtQixFQUNuQixZQUFzQixFQUN0QixRQUE0QyxFQUM1QyxVQUFrQjtRQUVsQixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLEVBQUU7WUFDRixhQUFhLEVBQUUseUJBQXlCO1NBQzNDLENBQUMsQ0FBOEIsQ0FBQztRQUVqQyxJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNqQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUM5RCxRQUFRLENBQ1gsQ0FBQztRQUNGLGVBQWUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQzFDLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxDQUNmLENBQUM7UUFFRixPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0lBRU8sbUJBQW1CLENBQ3ZCLFFBQW1CLEVBQ25CLFFBQTRDLEVBQzVDLEtBQThCO1FBRTlCLElBQUksZUFBZSxHQUFHLFlBQVksQ0FDOUIsUUFBUSxFQUNSLEdBQUcsYUFBYSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQ3hDLEtBQUssQ0FDUixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNsQyxHQUFHLElBQUk7WUFDUCxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7U0FDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSixlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FDMUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FDVixZQUFZLENBQ1IsR0FBRyxFQUNILEdBQUcsYUFBYSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQ3ZDLElBQUksQ0FDUCxFQUNMLGVBQWUsQ0FDbEIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxlQUFlLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUMxQyxlQUFlLEVBQ2YsS0FBSyxDQUFDLEVBQUUsRUFDUixRQUFRLENBQ1gsQ0FBQztRQUVGLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFTyx1QkFBdUIsQ0FDM0IsUUFBbUIsRUFDbkIsV0FBbUIsRUFDbkIsS0FBZTtRQUVmLE1BQU0sSUFBSSxHQUFHLEdBQUcsYUFBYSxDQUFDLFNBQVMsSUFBSSxXQUFXLG1CQUFtQixDQUFDO1FBRTFFLE9BQU8sWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztrSUFyRlEsdUJBQXVCO3NJQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IGltbXV0YWJsZVNldCB9IGZyb20gXCJAbm92YS11aS9iaXRzXCI7XG5cbmltcG9ydCB7IElDb21wb25lbnRDb25maWd1cmF0aW9uLCBJUGl6emFnbmEsIFBpenphZ25hTGF5ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuLy8gVE9ETzogbWFrZSBpdCBkeW5hbWljIVxuY29uc3QgQ0hJTERfRUxFTV9DT01QT05FTlRfVFlQRSA9IFwiV2lkZ2V0Q29uZmlndXJhdG9yU2VjdGlvbkNvbXBvbmVudFwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRHluYW1pY0NvbXBvbmVudENyZWF0b3Ige1xuICAgIHB1YmxpYyBnZXRQaXp6YWduYVVwZGF0ZWRXaXRoQ29tcG9uZW50cyhcbiAgICAgICAgcGl6emFnbmE6IElQaXp6YWduYSxcbiAgICAgICAgcGFyZW50UGF0aDogc3RyaW5nLFxuICAgICAgICBjb21wb25lbnRJZHM6IHN0cmluZ1tdXG4gICAgKTogSVBpenphZ25hIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gcGl6emFnbmFbUGl6emFnbmFMYXllci5TdHJ1Y3R1cmVdW3BhcmVudFBhdGhdO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHBhcmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICA/LnRlbXBsYXRlIGFzIFBhcnRpYWw8SUNvbXBvbmVudENvbmZpZ3VyYXRpb24+W107XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGl6emFnbmFXaXRoQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXp6YWduYSxcbiAgICAgICAgICAgIGNvbXBvbmVudElkcyxcbiAgICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgICAgcGFyZW50UGF0aFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGl6emFnbmFXaXRoQ2hpbGRyZW4oXG4gICAgICAgIHBpenphZ25hOiBJUGl6emFnbmEsXG4gICAgICAgIGNvbXBvbmVudElkczogc3RyaW5nW10sXG4gICAgICAgIHRlbXBsYXRlOiBQYXJ0aWFsPElDb21wb25lbnRDb25maWd1cmF0aW9uPltdLFxuICAgICAgICBwYXJlbnRQYXRoOiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjb21wb25lbnRJZHMubWFwKChpZCkgPT4gKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgY29tcG9uZW50VHlwZTogQ0hJTERfRUxFTV9DT01QT05FTlRfVFlQRSxcbiAgICAgICAgfSkpIGFzIElDb21wb25lbnRDb25maWd1cmF0aW9uW107XG5cbiAgICAgICAgbGV0IHVwZGF0ZWRQaXp6YWduYSA9IGNoaWxkcmVuLnJlZHVjZShcbiAgICAgICAgICAgIChyZXMsIGNoaWxkKSA9PiB0aGlzLnVwZGF0ZUNoaWxkUGl6emFnbmEocmVzLCB0ZW1wbGF0ZSwgY2hpbGQpLFxuICAgICAgICAgICAgcGl6emFnbmFcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlZFBpenphZ25hID0gdGhpcy5nZXRQaXp6YWduYVdpdGhOb2Rlc1NldChcbiAgICAgICAgICAgIHVwZGF0ZWRQaXp6YWduYSxcbiAgICAgICAgICAgIHBhcmVudFBhdGgsXG4gICAgICAgICAgICBjb21wb25lbnRJZHNcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlZFBpenphZ25hO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2hpbGRQaXp6YWduYShcbiAgICAgICAgcGl6emFnbmE6IElQaXp6YWduYSxcbiAgICAgICAgdGVtcGxhdGU6IFBhcnRpYWw8SUNvbXBvbmVudENvbmZpZ3VyYXRpb24+W10sXG4gICAgICAgIGNoaWxkOiBJQ29tcG9uZW50Q29uZmlndXJhdGlvblxuICAgICkge1xuICAgICAgICBsZXQgdXBkYXRlZFBpenphZ25hID0gaW1tdXRhYmxlU2V0KFxuICAgICAgICAgICAgcGl6emFnbmEsXG4gICAgICAgICAgICBgJHtQaXp6YWduYUxheWVyLlN0cnVjdHVyZX0uJHtjaGlsZC5pZH1gLFxuICAgICAgICAgICAgY2hpbGRcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBub2RlcyA9IHRlbXBsYXRlLm1hcCgobm9kZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBpZDogYCR7Y2hpbGQuaWR9LyR7bm9kZS5pZH1gLFxuICAgICAgICB9KSk7XG4gICAgICAgIHVwZGF0ZWRQaXp6YWduYSA9IG5vZGVzLnJlZHVjZShcbiAgICAgICAgICAgIChyZXMsIG5vZGUpID0+XG4gICAgICAgICAgICAgICAgaW1tdXRhYmxlU2V0KFxuICAgICAgICAgICAgICAgICAgICByZXMsXG4gICAgICAgICAgICAgICAgICAgIGAke1BpenphZ25hTGF5ZXIuU3RydWN0dXJlfS4ke25vZGUuaWR9YCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB1cGRhdGVkUGl6emFnbmFcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBub2Rlc0lEcyA9IG5vZGVzLm1hcCgobm9kZSkgPT4gbm9kZS5pZCk7XG4gICAgICAgIHVwZGF0ZWRQaXp6YWduYSA9IHRoaXMuZ2V0UGl6emFnbmFXaXRoTm9kZXNTZXQoXG4gICAgICAgICAgICB1cGRhdGVkUGl6emFnbmEsXG4gICAgICAgICAgICBjaGlsZC5pZCxcbiAgICAgICAgICAgIG5vZGVzSURzXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRQaXp6YWduYTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBpenphZ25hV2l0aE5vZGVzU2V0KFxuICAgICAgICBwaXp6YWduYTogSVBpenphZ25hLFxuICAgICAgICBjb21wb25lbnRJZDogc3RyaW5nLFxuICAgICAgICBub2Rlczogc3RyaW5nW11cbiAgICApIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGAke1BpenphZ25hTGF5ZXIuU3RydWN0dXJlfS4ke2NvbXBvbmVudElkfS5wcm9wZXJ0aWVzLm5vZGVzYDtcblxuICAgICAgICByZXR1cm4gaW1tdXRhYmxlU2V0KHBpenphZ25hLCBwYXRoLCBub2Rlcyk7XG4gICAgfVxufVxuIl19