@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
72 lines • 11.1 kB
JavaScript
import { Injectable, Inject, Optional } from '@angular/core';
import { sortBy, cloneDeep, get, omit } from 'lodash-es';
import { DynamicComponentService } from '@c8y/ngx-components';
import { TranslateService } from '@ngx-translate/core';
import { CONTEXT_DASHBOARD_CONFIG } from './context-dashboard.model';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/ngx-components";
import * as i2 from "@ngx-translate/core";
export class WidgetService {
constructor(dynamicComponentService, translateService, moduleConfig) {
this.dynamicComponentService = dynamicComponentService;
this.translateService = translateService;
this.moduleConfig = moduleConfig;
this.dynamicComponentService.items$.subscribe(widgets => {
this.widgets = widgets;
});
}
async getWidgetDefinition(componentId) {
return this.dynamicComponentService.getById(componentId);
}
getWidgetDefinitions() {
const translatedComponents = this.widgets.map(cmp => ({
...cmp,
label: this.translateService.instant(cmp.label)
}));
// cloneDeep and injector lead to a performance issue. We removing the injectors here,
// as they are not needed, to avoid use of a lot of CPU for cloning.
const translatedComponentsWithoutInjector = translatedComponents.map(cmp => omit(cmp, 'injector'));
const filterFn = this.moduleConfig?.widgetFilter ||
(({ data }) => !(data && data.settings && data.settings.noNewWidgets));
return cloneDeep(sortBy(translatedComponentsWithoutInjector, 'label').filter(filterFn));
}
async mapLegacy(widget) {
const cmp = await this.getWidgetDefinition(widget.componentId || widget.name);
widget = this.mapDisplaySettings(widget, cmp);
if (get(cmp, 'data.settings.upgrade')) {
widget.widgetComponent = cmp.data.settings.widgetComponent;
widget.configComponent = cmp.data.settings.configComponent;
widget.templateUrl = cmp.data.settings.templateUrl;
widget.configTemplateUrl = cmp.data.settings.configTemplateUrl;
widget.transformConfigWithContext =
cmp.data.settings.componentTransformConfigWithContext ||
cmp.data.settings.transformConfigWithContext ||
widget.transformConfigWithContext;
}
else {
delete widget.templateUrl;
delete widget.configTemplateUrl;
}
return widget;
}
mapDisplaySettings(widget, cmp) {
if (cmp?.data?.displaySettings) {
widget.config = { displaySettings: cmp.data.displaySettings, ...(widget.config || {}) };
}
return widget;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WidgetService, deps: [{ token: i1.DynamicComponentService }, { token: i2.TranslateService }, { token: CONTEXT_DASHBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WidgetService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WidgetService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.DynamicComponentService }, { type: i2.TranslateService }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [CONTEXT_DASHBOARD_CONFIG]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC93aWRnZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQXNDLE1BQU0scUJBQXFCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUEwQix3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBSzdGLE1BQU0sT0FBTyxhQUFhO0lBR3hCLFlBQ1UsdUJBQWdELEVBQ2hELGdCQUFrQyxFQUduQyxZQUFnRDtRQUovQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFHbkMsaUJBQVksR0FBWixZQUFZLENBQW9DO1FBRXZELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3RELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXO1FBQ25DLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELEdBQUcsR0FBRztZQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7U0FDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSixzRkFBc0Y7UUFDdEYsb0VBQW9FO1FBQ3BFLE1BQU0sbUNBQW1DLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ3pFLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQ3RCLENBQUM7UUFDRixNQUFNLFFBQVEsR0FDWixJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVk7WUFDL0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDekUsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLG1DQUFtQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQXVCO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlFLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTlDLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDM0QsTUFBTSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDM0QsTUFBTSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDbkQsTUFBTSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1lBQy9ELE1BQU0sQ0FBQywwQkFBMEI7Z0JBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1DQUFtQztvQkFDckQsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCO29CQUM1QyxNQUFNLENBQUMsMEJBQTBCLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDMUIsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sTUFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRU8sa0JBQWtCLENBQ3hCLE1BQXVCLEVBQ3ZCLEdBQStCO1FBRS9CLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUYsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7K0dBaEVVLGFBQWEseUZBT2Qsd0JBQXdCO21IQVB2QixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQU9JLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc29ydEJ5LCBjbG9uZURlZXAsIGdldCwgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIFdpZGdldCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZENvbmZpZywgQ09OVEVYVF9EQVNIQk9BUkRfQ09ORklHIH0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFNlcnZpY2Uge1xuICB3aWRnZXRzOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoQ09OVEVYVF9EQVNIQk9BUkRfQ09ORklHKVxuICAgIHB1YmxpYyBtb2R1bGVDb25maWc6IENvbnRleHREYXNoYm9hcmRDb25maWcgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5pdGVtcyQuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xuICAgICAgdGhpcy53aWRnZXRzID0gd2lkZ2V0cztcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFdpZGdldERlZmluaXRpb24oY29tcG9uZW50SWQpOiBQcm9taXNlPER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuZ2V0QnlJZChjb21wb25lbnRJZCk7XG4gIH1cblxuICBnZXRXaWRnZXREZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkQ29tcG9uZW50cyA9IHRoaXMud2lkZ2V0cy5tYXAoY21wID0+ICh7XG4gICAgICAuLi5jbXAsXG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY21wLmxhYmVsKVxuICAgIH0pKTtcblxuICAgIC8vIGNsb25lRGVlcCBhbmQgaW5qZWN0b3IgbGVhZCB0byBhIHBlcmZvcm1hbmNlIGlzc3VlLiBXZSByZW1vdmluZyB0aGUgaW5qZWN0b3JzIGhlcmUsXG4gICAgLy8gYXMgdGhleSBhcmUgbm90IG5lZWRlZCwgdG8gYXZvaWQgdXNlIG9mIGEgbG90IG9mIENQVSBmb3IgY2xvbmluZy5cbiAgICBjb25zdCB0cmFuc2xhdGVkQ29tcG9uZW50c1dpdGhvdXRJbmplY3RvciA9IHRyYW5zbGF0ZWRDb21wb25lbnRzLm1hcChjbXAgPT5cbiAgICAgIG9taXQoY21wLCAnaW5qZWN0b3InKVxuICAgICk7XG4gICAgY29uc3QgZmlsdGVyRm46IChjb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSA9PiBib29sZWFuID1cbiAgICAgIHRoaXMubW9kdWxlQ29uZmlnPy53aWRnZXRGaWx0ZXIgfHxcbiAgICAgICgoeyBkYXRhIH0pID0+ICEoZGF0YSAmJiBkYXRhLnNldHRpbmdzICYmIGRhdGEuc2V0dGluZ3Mubm9OZXdXaWRnZXRzKSk7XG4gICAgcmV0dXJuIGNsb25lRGVlcChzb3J0QnkodHJhbnNsYXRlZENvbXBvbmVudHNXaXRob3V0SW5qZWN0b3IsICdsYWJlbCcpLmZpbHRlcihmaWx0ZXJGbikpO1xuICB9XG5cbiAgYXN5bmMgbWFwTGVnYWN5KHdpZGdldDogUGFydGlhbDxXaWRnZXQ+KTogUHJvbWlzZTxXaWRnZXQ+IHtcbiAgICBjb25zdCBjbXAgPSBhd2FpdCB0aGlzLmdldFdpZGdldERlZmluaXRpb24od2lkZ2V0LmNvbXBvbmVudElkIHx8IHdpZGdldC5uYW1lKTtcbiAgICB3aWRnZXQgPSB0aGlzLm1hcERpc3BsYXlTZXR0aW5ncyh3aWRnZXQsIGNtcCk7XG5cbiAgICBpZiAoZ2V0KGNtcCwgJ2RhdGEuc2V0dGluZ3MudXBncmFkZScpKSB7XG4gICAgICB3aWRnZXQud2lkZ2V0Q29tcG9uZW50ID0gY21wLmRhdGEuc2V0dGluZ3Mud2lkZ2V0Q29tcG9uZW50O1xuICAgICAgd2lkZ2V0LmNvbmZpZ0NvbXBvbmVudCA9IGNtcC5kYXRhLnNldHRpbmdzLmNvbmZpZ0NvbXBvbmVudDtcbiAgICAgIHdpZGdldC50ZW1wbGF0ZVVybCA9IGNtcC5kYXRhLnNldHRpbmdzLnRlbXBsYXRlVXJsO1xuICAgICAgd2lkZ2V0LmNvbmZpZ1RlbXBsYXRlVXJsID0gY21wLmRhdGEuc2V0dGluZ3MuY29uZmlnVGVtcGxhdGVVcmw7XG4gICAgICB3aWRnZXQudHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQgPVxuICAgICAgICBjbXAuZGF0YS5zZXR0aW5ncy5jb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCB8fFxuICAgICAgICBjbXAuZGF0YS5zZXR0aW5ncy50cmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCB8fFxuICAgICAgICB3aWRnZXQudHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB3aWRnZXQudGVtcGxhdGVVcmw7XG4gICAgICBkZWxldGUgd2lkZ2V0LmNvbmZpZ1RlbXBsYXRlVXJsO1xuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0IGFzIFdpZGdldDtcbiAgfVxuXG4gIHByaXZhdGUgbWFwRGlzcGxheVNldHRpbmdzKFxuICAgIHdpZGdldDogUGFydGlhbDxXaWRnZXQ+LFxuICAgIGNtcDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25cbiAgKTogUGFydGlhbDxXaWRnZXQ+IHtcbiAgICBpZiAoY21wPy5kYXRhPy5kaXNwbGF5U2V0dGluZ3MpIHtcbiAgICAgIHdpZGdldC5jb25maWcgPSB7IGRpc3BsYXlTZXR0aW5nczogY21wLmRhdGEuZGlzcGxheVNldHRpbmdzLCAuLi4od2lkZ2V0LmNvbmZpZyB8fCB7fSkgfTtcbiAgICB9XG4gICAgcmV0dXJuIHdpZGdldDtcbiAgfVxufVxuIl19