UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

96 lines (92 loc) 3.74 kB
import { DashboardDetailService } from '@c8y/ngx-components/context-dashboard'; import { gettext, hookWidget } from '@c8y/ngx-components'; import { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions'; import { ImageWidgetService } from '@c8y/ngx-components/widgets/implementations/image'; import { inject, Injector } from '@angular/core'; import { InventoryService, QueriesUtil } from '@c8y/client'; const imageWidgetDefinition = { id: defaultWidgetIds.IMAGE, label: gettext('Image'), description: gettext(`Display a single image selected from the user's file system.`), loadComponent: () => import('@c8y/ngx-components/widgets/implementations/image').then(m => m.ImageWidgetViewComponent), loadConfigComponent: () => import('@c8y/ngx-components/widgets/implementations/image').then(m => m.ImageWidgetConfigComponent), previewImage: 'c8y-style-assets/image-widget.png', data: { schema: () => import('c8y-schema-loader?interfaceName=ImageWidgetConfig!@c8y/ngx-components/widgets/implementations/image'), export: exportImageWidgetConfig, import: importImageWidgetConfig, settings: { noNewWidgets: false, widgetDefaults: { _width: 8, _height: 4 }, ng1: { options: { noDeviceTarget: true, groupsSelectable: false } } } } }; const imageWidgetProviders = [hookWidget(imageWidgetDefinition)]; async function exportImageWidgetConfig(config) { const injector = inject(Injector); const imageWidgetService = injector.get(ImageWidgetService); const imageDetails = await imageWidgetService.getImageDetails(config.imageBinaryId); return { ...config, imageDetails: { base64: imageDetails.base64, c8y_SHA256: imageDetails.c8y_SHA256, file: { name: imageDetails.file.name, type: imageDetails.file.type } } }; } async function importImageWidgetConfig(config) { const injector = inject(Injector); const inventoryService = injector.get(InventoryService); const dashboardDetailsService = injector.get(DashboardDetailService); const dashboardData = dashboardDetailsService.details; const baseQuery = { __filter: { c8y_SHA256: { __eq: config.imageDetails.c8y_SHA256 } } }; const queriesUtil = new QueriesUtil(); const query = queriesUtil.buildQuery(baseQuery); // check if image already exists in inventory const fileBySha = (await inventoryService.list({ query, pageSize: 1 })).data?.[0]; if (fileBySha) { return { imageBinaryId: fileBySha.id, styling: config.styling }; } // create image file from base64 const url = config.imageDetails.base64; const fileName = config.imageDetails.file.name; const type = config.imageDetails.file.type; const file = await fetch(url) .then(res => res.blob()) .then(blob => { return new File([blob], fileName, { type }); }); const imageWidgetService = injector.get(ImageWidgetService); const imageBinaryId = await imageWidgetService.uploadFile(file, { dashboardMoId: dashboardData.mo.id, isDeviceTypeDashboard: !!dashboardData.mo.c8y_Dashboard.deviceType && !!dashboardData.mo.c8y_Dashboard.deviceTypeValue }); return { imageBinaryId, styling: config.styling }; } /** * Generated bundle index. Do not edit. */ export { imageWidgetDefinition, imageWidgetProviders }; //# sourceMappingURL=c8y-ngx-components-widgets-definitions-image.mjs.map