UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

92 lines 14.7 kB
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