@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
92 lines • 14.7 kB
JavaScript
import { Injectable, NgZone, inject } from '@angular/core';
import { Router } from '@angular/router';
import { getActivatedRoute } from '@c8y/ngx-components';
import { ContextDashboardService } from '@c8y/ngx-components/context-dashboard';
import { get } from 'lodash-es';
import * as i0 from "@angular/core";
export class DashboardBridgeService {
constructor() {
this.ng1Injector = inject('$injector');
this.zone = inject(NgZone);
this.router = inject(Router);
this.contextDashboardService = inject(ContextDashboardService, { optional: true });
this.dashboardSvc = this.ng1Injector.get('dashboardSvc');
this.compile = this.ng1Injector.get('$compile');
}
get ng1Components() {
return this.ng1Injector.get('c8yComponents');
}
async instantiateComponent(widget, element) {
const { dashboard, context, child } = widget;
if (dashboard) {
const transformedChild = await this.dashboardSvc.transformChildWithContext(this.dashboardSvc.forcedContext || context, dashboard, child);
if (this.dashboardSvc.forcedContext || dashboard.deviceType || dashboard.updateTarget) {
await this.dashboardSvc.updateConfigTargetsWithContext(this.dashboardSvc.forcedContext || context, transformedChild.config);
}
return this.zone.runOutsideAngular(() => this.loadTemplate(transformedChild, child, element, context));
}
else {
return this.loadConfigTemplate(element, widget);
}
}
instantiateDeviceSelector(element, widgetConfig) {
return this.loadConfigTemplate(element, widgetConfig, true);
}
loadTemplate(transformedChild, child, element, context) {
const scope = this.ng1Injector.get('$rootScope').$new(true);
scope.child = transformedChild;
scope.dashboardContext = context;
if (child.widgetComponent) {
element.innerHTML = `<c8y-ui-component component-name="'${child.widgetComponent}'" config="child.config" context="dashboardContext"></c8y-ui-component>`;
}
else if (child.templateUrl) {
element.innerHTML = `<ng-include src="'${child.templateUrl}'"></ng-include>`;
}
this.compile(element)(scope);
return scope;
}
getDashboard() {
return getActivatedRoute(this.router).snapshot.data.dashboard;
}
loadConfigTemplate(element, widgetConfig, onlyDeviceSelector = false) {
const { settings } = widgetConfig;
const scope = this.ng1Injector.get('$rootScope').$new(true);
scope.settings = { ...settings, ...settings.ng1 };
scope.options = widgetConfig.options;
scope.config = widgetConfig;
scope.forms = {};
scope.rootId = settings.context.id;
scope.dashboard = get(widgetConfig, 'settings.dashboardMo');
let configCmp = '';
if (!onlyDeviceSelector) {
if (widgetConfig.settings.configComponent) {
configCmp = `<c8y-ui-component component-name="'${widgetConfig.settings.configComponent}'" config="config"></c8y-ui-component>`;
}
else if (widgetConfig.settings.configTemplateUrl) {
configCmp = `<ng-include src="'${widgetConfig.settings.configTemplateUrl}'"></ng-include>`;
}
}
element.innerHTML = `
<ng-form name="forms.componentForm">
<div class="form-group m-0"
ng-if="!settings.noDeviceTarget"
ng-style="{height: settings.hideTarget && '0', overflow: 'hidden'}"
>
</div>
${configCmp}
</ng-form>`;
scope.$watch('forms.componentForm.$invalid', formStatus => {
this.contextDashboardService.formDisabled = formStatus;
});
this.compile(element)(scope);
this.contextDashboardService.formDisabled = scope.forms.componentForm.$invalid;
return scope;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardBridgeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardBridgeService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardBridgeService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWJyaWRnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdXBncmFkZS9kYXNoYm9hcmQvZGFzaGJvYXJkLWJyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUNMLHVCQUF1QixFQUV4QixNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBR2hDLE1BQU0sT0FBTyxzQkFBc0I7SUFVakM7UUFMUSxnQkFBVyxHQUFRLE1BQU0sQ0FBQyxXQUFrQixDQUFDLENBQUM7UUFDOUMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLDRCQUF1QixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBR3BGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxPQUFP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YXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0QWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmRTZXJ2aWNlLFxuICBDb250ZXh0V2lkZ2V0Q29uZmlnXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvY29udGV4dC1kYXNoYm9hcmQnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRCcmlkZ2VTZXJ2aWNlIHtcbiAgZGFzaGJvYXJkU3ZjO1xuICBjb21waWxlO1xuICBkYXNoYm9hcmRDbGlwYm9hcmQ7XG5cbiAgcHJpdmF0ZSBuZzFJbmplY3RvcjogYW55ID0gaW5qZWN0KCckaW5qZWN0b3InIGFzIGFueSk7XG4gIHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlID0gaW5qZWN0KENvbnRleHREYXNoYm9hcmRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGFzaGJvYXJkU3ZjID0gdGhpcy5uZzFJbmplY3Rvci5nZXQoJ2Rhc2hib2FyZFN2YycpO1xuICAgIHRoaXMuY29tcGlsZSA9IHRoaXMubmcxSW5qZWN0b3IuZ2V0KCckY29tcGlsZScpO1xuICB9XG5cbiAgZ2V0IG5nMUNvbXBvbmVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubmcxSW5qZWN0b3IuZ2V0KCdjOHlDb21wb25lbnRzJyk7XG4gIH1cblxuICBhc3luYyBpbnN0YW50aWF0ZUNvbXBvbmVudCh3aWRnZXQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IGRhc2hib2FyZCwgY29udGV4dCwgY2hpbGQgfSA9IHdpZGdldDtcbiAgICBpZiAoZGFzaGJvYXJkKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZENoaWxkID0gYXdhaXQgdGhpcy5kYXNoYm9hcmRTdmMudHJhbnNmb3JtQ2hpbGRXaXRoQ29udGV4dChcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRTdmMuZm9yY2VkQ29udGV4dCB8fCBjb250ZXh0LFxuICAgICAgICBkYXNoYm9hcmQsXG4gICAgICAgIGNoaWxkXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkU3ZjLmZvcmNlZENvbnRleHQgfHwgZGFzaGJvYXJkLmRldmljZVR5cGUgfHwgZGFzaGJvYXJkLnVwZGF0ZVRhcmdldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmRhc2hib2FyZFN2Yy51cGRhdGVDb25maWdUYXJnZXRzV2l0aENvbnRleHQoXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRTdmMuZm9yY2VkQ29udGV4dCB8fCBjb250ZXh0LFxuICAgICAgICAgIHRyYW5zZm9ybWVkQ2hpbGQuY29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIHRoaXMubG9hZFRlbXBsYXRlKHRyYW5zZm9ybWVkQ2hpbGQsIGNoaWxkLCBlbGVtZW50LCBjb250ZXh0KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZENvbmZpZ1RlbXBsYXRlKGVsZW1lbnQsIHdpZGdldCk7XG4gICAgfVxuICB9XG5cbiAgaW5zdGFudGlhdGVEZXZpY2VTZWxlY3RvcihlbGVtZW50LCB3aWRnZXRDb25maWc6IENvbnRleHRXaWRnZXRDb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkQ29uZmlnVGVtcGxhdGUoZWxlbWVudCwgd2lkZ2V0Q29uZmlnLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRlbXBsYXRlKHRyYW5zZm9ybWVkQ2hpbGQsIGNoaWxkLCBlbGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLm5nMUluamVjdG9yLmdldCgnJHJvb3RTY29wZScpLiRuZXcodHJ1ZSk7XG4gICAgc2NvcGUuY2hpbGQgPSB0cmFuc2Zvcm1lZENoaWxkO1xuICAgIHNjb3BlLmRhc2hib2FyZENvbnRleHQgPSBjb250ZXh0O1xuICAgIGlmIChjaGlsZC53aWRnZXRDb21wb25lbnQpIHtcbiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gYDxjOHktdWktY29tcG9uZW50IGNvbXBvbmVudC1uYW1lPVwiJyR7Y2hpbGQud2lkZ2V0Q29tcG9uZW50fSdcIiBjb25maWc9XCJjaGlsZC5jb25maWdcIiBjb250ZXh0PVwiZGFzaGJvYXJkQ29udGV4dFwiPjwvYzh5LXVpLWNvbXBvbmVudD5gO1xuICAgIH0gZWxzZSBpZiAoY2hpbGQudGVtcGxhdGVVcmwpIHtcbiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gYDxuZy1pbmNsdWRlIHNyYz1cIicke2NoaWxkLnRlbXBsYXRlVXJsfSdcIj48L25nLWluY2x1ZGU+YDtcbiAgICB9XG4gICAgdGhpcy5jb21waWxlKGVsZW1lbnQpKHNjb3BlKTtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICBwcml2YXRlIGdldERhc2hib2FyZCgpIHtcbiAgICByZXR1cm4gZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpLnNuYXBzaG90LmRhdGEuZGFzaGJvYXJkO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29uZmlnVGVtcGxhdGUoXG4gICAgZWxlbWVudCxcbiAgICB3aWRnZXRDb25maWc6IENvbnRleHRXaWRnZXRDb25maWcsXG4gICAgb25seURldmljZVNlbGVjdG9yID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgeyBzZXR0aW5ncyB9ID0gd2lkZ2V0Q29uZmlnO1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5uZzFJbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kbmV3KHRydWUpO1xuXG4gICAgc2NvcGUuc2V0dGluZ3MgPSB7IC4uLnNldHRpbmdzLCAuLi5zZXR0aW5ncy5uZzEgfTtcbiAgICBzY29wZS5vcHRpb25zID0gd2lkZ2V0Q29uZmlnLm9wdGlvbnM7XG4gICAgc2NvcGUuY29uZmlnID0gd2lkZ2V0Q29uZmlnO1xuICAgIHNjb3BlLmZvcm1zID0ge307XG4gICAgc2NvcGUucm9vdElkID0gc2V0dGluZ3MuY29udGV4dC5pZDtcbiAgICBzY29wZS5kYXNoYm9hcmQgPSBnZXQod2lkZ2V0Q29uZmlnLCAnc2V0dGluZ3MuZGFzaGJvYXJkTW8nKTtcblxuICAgIGxldCBjb25maWdDbXAgPSAnJztcbiAgICBpZiAoIW9ubHlEZXZpY2VTZWxlY3Rvcikge1xuICAgICAgaWYgKHdpZGdldENvbmZpZy5zZXR0aW5ncy5jb25maWdDb21wb25lbnQpIHtcbiAgICAgICAgY29uZmlnQ21wID0gYDxjOHktdWktY29tcG9uZW50IGNvbXBvbmVudC1uYW1lPVwiJyR7d2lkZ2V0Q29uZmlnLnNldHRpbmdzLmNvbmZpZ0NvbXBvbmVudH0nXCIgY29uZmlnPVwiY29uZmlnXCI+PC9jOHktdWktY29tcG9uZW50PmA7XG4gICAgICB9IGVsc2UgaWYgKHdpZGdldENvbmZpZy5zZXR0aW5ncy5jb25maWdUZW1wbGF0ZVVybCkge1xuICAgICAgICBjb25maWdDbXAgPSBgPG5nLWluY2x1ZGUgc3JjPVwiJyR7d2lkZ2V0Q29uZmlnLnNldHRpbmdzLmNvbmZpZ1RlbXBsYXRlVXJsfSdcIj48L25nLWluY2x1ZGU+YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50LmlubmVySFRNTCA9IGBcbiAgICA8bmctZm9ybSBuYW1lPVwiZm9ybXMuY29tcG9uZW50Rm9ybVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbS0wXCJcbiAgICAgICAgbmctaWY9XCIhc2V0dGluZ3Mubm9EZXZpY2VUYXJnZXRcIlxuICAgICAgICBuZy1zdHlsZT1cIntoZWlnaHQ6IHNldHRpbmdzLmhpZGVUYXJnZXQgJiYgJzAnLCBvdmVyZmxvdzogJ2hpZGRlbid9XCJcbiAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgICAgJHtjb25maWdDbXB9XG4gICAgPC9uZy1mb3JtPmA7XG5cbiAgICBzY29wZS4kd2F0Y2goJ2Zvcm1zLmNvbXBvbmVudEZvcm0uJGludmFsaWQnLCBmb3JtU3RhdHVzID0+IHtcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkID0gZm9ybVN0YXR1cztcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBpbGUoZWxlbWVudCkoc2NvcGUpO1xuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkID0gc2NvcGUuZm9ybXMuY29tcG9uZW50Rm9ybS4kaW52YWxpZDtcblxuICAgIHJldHVybiBzY29wZTtcbiAgfVxufVxuIl19