{"version":3,"file":"c8y-ngx-components-widgets-definitions-image.mjs","sources":["../../widgets/definitions/image/index.ts","../../widgets/definitions/image/c8y-ngx-components-widgets-definitions-image.ts"],"sourcesContent":["import type { DashboardMetadata } from '@c8y/ngx-components/context-dashboard';\nimport type {\n  DynamicWidgetDefinition,\n  WidgetImportExportInjectorOptions\n} from '@c8y/ngx-components';\nimport { hookWidget } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport type { ImageWidgetConfig } from '@c8y/ngx-components/widgets/implementations/image';\nimport { inject, Injector } from '@angular/core';\nimport { InventoryService, QueriesUtil } from '@c8y/client';\n\nexport interface ExportedImageWidgetConfig extends ImageWidgetConfig {\n  imageDetails: { file: { name: string; type: string }; base64: string; c8y_SHA256: string };\n}\n\nexport const imageWidgetDefinition = {\n  id: defaultWidgetIds.IMAGE,\n  label: gettext('Image'),\n  description: gettext(`Display a single image selected from the user's file system.`),\n  loadComponent: () =>\n    import('@c8y/ngx-components/widgets/implementations/image').then(\n      m => m.ImageWidgetViewComponent\n    ),\n  loadConfigComponent: () =>\n    import('@c8y/ngx-components/widgets/implementations/image').then(\n      m => m.ImageWidgetConfigComponent\n    ),\n  previewImage: 'c8y-style-assets/image-widget.png',\n\n  data: {\n    schema: () =>\n      import(\n        'c8y-schema-loader?interfaceName=ImageWidgetConfig!@c8y/ngx-components/widgets/implementations/image'\n      ),\n    export: exportImageWidgetConfig,\n    import: importImageWidgetConfig,\n    settings: {\n      noNewWidgets: false,\n      widgetDefaults: {\n        _width: 8,\n        _height: 4\n      },\n      ng1: {\n        options: {\n          noDeviceTarget: true,\n          groupsSelectable: false\n        }\n      }\n    }\n  }\n} satisfies DynamicWidgetDefinition;\n\nexport const imageWidgetProviders = [hookWidget(imageWidgetDefinition)];\n\nasync function exportImageWidgetConfig(\n  config: ImageWidgetConfig,\n  _dashboardData: DashboardMetadata,\n  _options: WidgetImportExportInjectorOptions\n): Promise<ExportedImageWidgetConfig> {\n  const { ImageWidgetService } = await import('@c8y/ngx-components/widgets/implementations/image');\n  const injector = inject(Injector);\n  const imageWidgetService = injector.get(ImageWidgetService);\n  const imageDetails = await imageWidgetService.getImageDetails(config.imageBinaryId);\n\n  return {\n    ...config,\n    imageDetails: {\n      base64: imageDetails.base64,\n      c8y_SHA256: imageDetails.c8y_SHA256,\n      file: {\n        name: imageDetails.file.name,\n        type: imageDetails.file.type\n      }\n    }\n  };\n}\n\nasync function importImageWidgetConfig(\n  config: ExportedImageWidgetConfig,\n  dashboardData: DashboardMetadata,\n  _options: WidgetImportExportInjectorOptions\n): Promise<ImageWidgetConfig> {\n  const injector = inject(Injector);\n  const inventoryService = injector.get(InventoryService);\n\n  const baseQuery = {\n    __filter: { c8y_SHA256: { __eq: config.imageDetails.c8y_SHA256 } }\n  };\n  const queriesUtil = new QueriesUtil();\n  const query = queriesUtil.buildQuery(baseQuery);\n\n  // check if image already exists in inventory\n  const fileBySha = (await inventoryService.list({ query, pageSize: 1 })).data?.[0];\n  if (fileBySha) {\n    return {\n      imageBinaryId: fileBySha.id,\n      styling: config.styling\n    };\n  }\n\n  // create image file from base64\n  const url = config.imageDetails.base64;\n  const fileName = config.imageDetails.file.name;\n  const type = config.imageDetails.file.type;\n  const file = await fetch(url)\n    .then(res => res.blob())\n    .then(blob => {\n      return new File([blob], fileName, { type });\n    });\n\n  const { ImageWidgetService } = await import('@c8y/ngx-components/widgets/implementations/image');\n  const imageWidgetService = injector.get(ImageWidgetService);\n  const imageBinaryId = await imageWidgetService.uploadFile(file, {\n    dashboardMoId: dashboardData.mo.id,\n    isDeviceTypeDashboard:\n      !!dashboardData.mo.c8y_Dashboard.deviceType &&\n      !!dashboardData.mo.c8y_Dashboard.deviceTypeValue\n  });\n\n  return {\n    imageBinaryId,\n    styling: config.styling\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}