@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
1 lines • 166 kB
Source Map (JSON)
{"version":3,"file":"c8y-ngx-components-repository-shared.mjs","sources":["../../repository/shared/columns/description.grid-column.ts","../../repository/shared/columns/device-type.cell-renderer.component.ts","../../repository/shared/columns/device-type.cell-renderer.component.html","../../repository/shared/columns/device-type.grid-column.ts","../../repository/shared/repository.model.ts","../../repository/shared/repository.service.ts","../../repository/shared/columns/file.cell-renderer.component.ts","../../repository/shared/columns/file.cell-renderer.component.html","../../repository/shared/columns/file.grid-column.ts","../../repository/shared/columns/name.cell-renderer.component.ts","../../repository/shared/columns/name.grid-column.ts","../../repository/shared/columns/type.cell-renderer.component.ts","../../repository/shared/columns/type.cell-renderer.component.html","../../repository/shared/columns/type.filtering-form-renderer.component.ts","../../repository/shared/columns/type.filtering-form-renderer.component.html","../../repository/shared/columns/type.grid-column.ts","../../repository/shared/columns/versions.cell-renderer.component.ts","../../repository/shared/columns/versions.cell-renderer.component.html","../../repository/shared/columns/versions.grid-column.ts","../../repository/shared/file-download/link-render-type.enum.ts","../../repository/shared/file-download/file-download.component.ts","../../repository/shared/file-download/file-download.component.html","../../repository/shared/select-modal/repository-select-modal.component.ts","../../repository/shared/select-modal/repository-select-modal.component.html","../../repository/shared/software-type/software-type.component.ts","../../repository/shared/software-type/software-type.component.html","../../repository/shared/shared-repository.module.ts","../../repository/shared/c8y-ngx-components-repository-shared.ts"],"sourcesContent":["import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumn, ColumnConfig, getBasicInputArrayFormFieldConfig } from '@c8y/ngx-components';\n\nexport class DescriptionGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig & { filterLabel?: string; placeholder?: string }) {\n super(initialColumnConfig);\n this.name = 'description';\n this.path = 'description';\n this.header = gettext('Description');\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'descriptions',\n label: initialColumnConfig?.filterLabel ?? gettext('Filter items by description'),\n addText: gettext('Add next`description`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: initialColumnConfig?.placeholder ?? gettext('Description…')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.descriptions.length) {\n filter.description = { __in: model.descriptions };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CellRendererContext, CommonModule } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { get } from 'lodash-es';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@Component({\n templateUrl: './device-type.cell-renderer.component.html',\n selector: 'c8y-device-type-cell-renderer',\n standalone: true,\n imports: [CommonModule, DeviceGridModule, TooltipModule, RouterModule]\n})\nexport class DeviceTypeCellRendererComponent implements OnInit {\n deviceType: string;\n\n constructor(public context: CellRendererContext) {}\n\n ngOnInit(): void {\n this.deviceType = get(this.context?.item, this.context?.property?.path);\n }\n}\n","<span *ngIf=\"deviceType; else emptyText\">\n {{ deviceType }}\n</span>\n<ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`device type`</em>\n </small>\n</ng-template>\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumn, ColumnConfig, getBasicInputArrayFormFieldConfig } from '@c8y/ngx-components';\nimport { DeviceTypeCellRendererComponent } from './device-type.cell-renderer.component';\n\nexport class DeviceTypeGridColumn extends BaseColumn {\n constructor(\n initialColumnConfig?: ColumnConfig & {\n filterLabel?: string;\n placeholder?: string;\n path?: string;\n }\n ) {\n super(initialColumnConfig);\n this.name = 'deviceType';\n this.path = initialColumnConfig?.path ?? 'c8y_Filter.type';\n this.header = gettext('Device type');\n this.cellRendererComponent = DeviceTypeCellRendererComponent;\n\n this.filterable = true;\n\n this.filteringConfig = {\n fields: [\n ...getBasicInputArrayFormFieldConfig({\n key: 'types',\n label: initialColumnConfig?.filterLabel ?? gettext('Filter items by device type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: initialColumnConfig?.placeholder ?? 'c8y_Linux',\n optional: true\n }),\n {\n key: 'noDeviceType',\n type: 'switch',\n templateOptions: {\n label: gettext('No device type')\n }\n }\n ],\n getFilter(model: any): any {\n const filter: any = { __or: {} };\n if (model.types?.length) {\n filter.__or = {\n 'c8y_Filter.type': { __in: model.types }\n };\n }\n if (model.noDeviceType) {\n filter.__or = {\n ...filter.__or,\n __or: {\n __not: { __has: 'c8y_Filter.type' },\n 'c8y_Filter.type': ''\n }\n };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { IManagedObject } from '@c8y/client';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\nexport enum RepositoryType {\n FIRMWARE = 'c8y_Firmware',\n SOFTWARE = 'c8y_Software',\n CONFIGURATION = 'c8y_ConfigurationDump',\n PROFILE = 'c8y_Profile'\n}\n\nexport const REPOSITORY_BINARY_TYPES = {\n [RepositoryType.SOFTWARE]: 'c8y_SoftwareBinary',\n [RepositoryType.FIRMWARE]: 'c8y_FirmwareBinary',\n [RepositoryType.CONFIGURATION]: 'c8y_ConfigurationDumpBinary'\n};\n\nexport interface ModalModel {\n selected?: { id?: string; name?: string; [key: string]: any };\n version?: string;\n dependency?: { c8y_Firmware: { version: string } };\n patchVersion?: string;\n description?: string;\n deviceType?: string;\n softwareType?;\n configurationType?: string;\n binary?: {\n file?: File;\n url?: string;\n };\n c8y_Global?;\n}\n\nexport interface RepositoryCategory extends Partial<IManagedObject> {\n type: string;\n description?: string;\n c8y_Filter?: {\n type: string;\n };\n softwareType?: string;\n}\n\nexport interface FirmwareBinary extends Partial<IManagedObject> {\n type: 'c8y_FirmwareBinary';\n c8y_Firmware: {\n version: string;\n url: string;\n };\n}\n\nexport interface FirmwarePatchBinary extends FirmwareBinary {\n c8y_Patch: {\n dependency: string;\n };\n}\n\nexport interface SoftwareBinary extends Partial<IManagedObject> {\n type: string;\n c8y_Software: {\n version: string;\n url: string;\n };\n}\n\nexport type RepositoryBinary = FirmwareBinary | SoftwareBinary | FirmwarePatchBinary;\n\nexport interface SelectedRepositoryBinary {\n id?: string;\n name: string;\n version: string;\n url: string;\n dependency?: string;\n c8y_Patch?: boolean;\n isPatch?: boolean;\n patchDependency?: string;\n softwareType?: string;\n}\n\nexport interface DeviceFirmware {\n version: string;\n url: string;\n name: string;\n}\n\nexport interface DeviceSoftware {\n name: string;\n version?: string;\n url: string;\n softwareType?: string;\n}\n\nexport interface DeviceSoftwareChange extends DeviceSoftware {\n action: 'install' | 'delete';\n}\n\nexport interface ConfigurationSnapshot {\n id?: string;\n time: string;\n name: string;\n binaryUrl?: string;\n binary?: any;\n binaryType?: any;\n deviceType?: string;\n configurationType?: string;\n description?: string;\n}\n\nexport interface SupportedConfigurationItem {\n name: string;\n deviceType?: string;\n configurationType?: string;\n isLegacy?: boolean;\n}\n\nexport interface DeviceConfigurationListEmptyState {\n icon?: SupportedIconsSuggestions;\n title?: string;\n text?: string;\n}\n\nexport enum DeviceConfigurationOperation {\n UPLOAD_CONFIG = 'c8y_UploadConfigFile',\n DOWNLOAD_CONFIG = 'c8y_DownloadConfigFile',\n CONFIG = 'c8y_Configuration',\n SEND_CONFIG = 'c8y_SendConfiguration'\n}\nexport interface FilterCriteria {\n name?: string;\n [key: string]: any;\n}\n\nexport const PRODUCT_EXPERIENCE_REPOSITORY_SHARED = {\n SOFTWARE: {\n EVENTS: {\n REPOSITORY: 'softwareRepository',\n DEVICE_TAB: 'deviceSoftware'\n },\n COMPONENTS: {\n ADD_SOFTWARE_MODAL: 'add-software-modal',\n DEVICE_SOFTWARE_CHANGES: 'device-software-changes',\n DEVICE_SOFTWARE_LIST: 'device-software-list'\n },\n ACTIONS: {\n APPLY_SOFTWARE_CHANGES: 'applySoftwareChanges',\n CLEAR_SOFTWARE_CHANGES: 'clearSoftwareChanges',\n OPEN_INSTALL_SOFTWARE: 'openInstallSoftwareModal',\n OPEN_UPDATE_SOFTWARE: 'openUpdateSoftwareModal',\n DELETE_SOFTWARE: 'deleteSoftware'\n },\n RESULTS: {\n ADD_SOFTWARE: 'addSoftware',\n ADD_SOFTWARE_VERSION: 'addSoftwareVersion',\n EDIT_SOFTWARE: 'editSoftware'\n }\n },\n FIRMWARE: {\n EVENTS: {\n REPOSITORY: 'firmwareRepository',\n DEVICE_TAB: 'deviceFirmware'\n },\n COMPONENTS: {\n ADD_FIRMWARE_MODAL: 'add-firmware-modal',\n ADD_FIRMWAR_PATCH_MODAL: 'add-firmware-patch-modal',\n FIRMWARE_DEVICE_TAB: 'firmware-device-tab',\n DEVICE_FIRMWARE_LIST: 'device-firmware-list'\n },\n ACTIONS: {\n OPEN_INSTALL_FIRMWARE_DIALOG: 'openInstallFirmwareDialog',\n OPEN_REPLACE_FIRMWARE_DIALOG: 'openReplaceFirmwareDialog',\n OPEN_INSTALL_FIRMWARE_PATCH_DIALOG: 'openInstallFirmwarePatchDialog'\n },\n RESULTS: {\n ADD_FIRMWARE: 'addFirmware',\n ADD_FIRMWARE_VERSION: 'addFirmwareVersion',\n ADD_FIRMWARE_PATCH: 'addFirmwarePatch',\n EDIT_FIRMWARE: 'editFirmware',\n CREATE_FIRMWARE_UPDATE_OPERATION: 'createFirmwareUpdateOperation'\n }\n },\n SHARED: {\n COMPONENTS: {\n REPOSITORY_SELECT_MODAL: 'repository-select-modal',\n SELECT_CONFIGURATION_MODAL: 'select-configuration-modal'\n }\n }\n} as const;\n","import { Injectable } from '@angular/core';\nimport {\n EventBinaryService,\n EventService,\n IdReference,\n IEvent,\n IFetchResponse,\n IIdentified,\n IManagedObject,\n IManagedObjectBinary,\n InventoryBinaryService,\n InventoryService,\n IOperation,\n IResult,\n IResultList,\n OperationService,\n OperationStatus,\n QueriesUtil,\n QueryObjectFilterComparison,\n QueryObjectOrderBy,\n QueryObjectWithDedicatedFilter\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n GlobalConfigService,\n OperationRealtimeService,\n ServiceRegistry\n} from '@c8y/ngx-components';\nimport {\n map as _map,\n assign,\n cloneDeep,\n find,\n forEach,\n get,\n head,\n isNil,\n isString,\n isUndefined,\n omitBy,\n pick,\n remove,\n set\n} from 'lodash-es';\nimport { defer, from, merge, Observable, of, throwError } from 'rxjs';\nimport { filter, map, switchMap, take, takeWhile, withLatestFrom } from 'rxjs/operators';\nimport { IAdvancedSoftwareService } from './advanced-software-management.model';\nimport {\n ConfigurationSnapshot,\n DeviceFirmware,\n DeviceSoftware,\n DeviceSoftwareChange,\n FirmwareBinary,\n FirmwarePatchBinary,\n ModalModel,\n REPOSITORY_BINARY_TYPES,\n RepositoryBinary,\n RepositoryCategory,\n RepositoryType,\n SelectedRepositoryBinary,\n SoftwareBinary\n} from './repository.model';\n\n@Injectable()\nexport class RepositoryService {\n readonly dateFrom = new Date(0);\n readonly dateTo = new Date(Date.now() + 86400000); // 1 day in the future\n private queriesUtil: QueriesUtil;\n private advancedSoftwareService: IAdvancedSoftwareService | undefined;\n\n constructor(\n private inventory: InventoryService,\n private inventoryBinary: InventoryBinaryService,\n private operation: OperationService,\n private alert: AlertService,\n private event: EventService,\n private operationRealtime: OperationRealtimeService,\n private eventBinary: EventBinaryService,\n private serviceRegistry: ServiceRegistry,\n private globalConfigService: GlobalConfigService\n ) {\n this.queriesUtil = new QueriesUtil();\n this.advancedSoftwareService = head(this.serviceRegistry.get('asm'));\n }\n\n /**\n * Lists repository entries of given type.\n * @param type The type of repository entries to list.\n * @param options Extra listing options.\n */\n listRepositoryEntries(\n type: RepositoryType,\n options?: {\n /** Additional query. */\n query?: any;\n /** (deprecated - to be removed) Only include entries with matching partial names. */\n partialName?: string;\n /** Include entries with matching partial text in the specified properties. */\n partialTextFilter?: { partialText: string; properties: string[] };\n /** Exclude legacy entries. */\n skipLegacy?: boolean;\n /** Exclude default ordering. */\n skipDefaultOrder?: boolean;\n /** Other request params. */\n params?: any;\n }\n ) {\n const defaultOrder: QueryObjectOrderBy[] = [{ name: 1 }];\n const defaultFilters = { type };\n const legacyFilters = { __has: `url` };\n let filters = {};\n\n let fullQuery = (options && options.query) || {};\n if (!options || (options && !options.skipDefaultOrder)) {\n fullQuery = this.queriesUtil.addOrderbys(fullQuery, defaultOrder, 'prepend');\n }\n\n fullQuery = this.queriesUtil.addAndFilter(fullQuery, defaultFilters);\n\n if (options && options.partialTextFilter) {\n const { partialText, properties } = options.partialTextFilter;\n const orFilter = { __or: properties.map(property => ({ [property]: `*${partialText}*` })) };\n fullQuery = this.queriesUtil.addAndFilter(fullQuery, orFilter);\n }\n\n if (options && options.partialName) {\n // backwards compatibility if\n fullQuery = this.queriesUtil.addAndFilter(fullQuery, { name: `*${options.partialName}*` });\n }\n\n if (options && options.skipLegacy) {\n fullQuery = this.queriesUtil.addAndFilter(fullQuery, { __not: legacyFilters });\n }\n\n filters = {\n query: this.queriesUtil.buildQuery(fullQuery),\n pageSize: 50,\n withTotalPages: true,\n ...((options && options.params) || {})\n };\n return this.inventory.list(filters);\n }\n\n async create(modal: ModalModel, type: RepositoryType, mo: Partial<IManagedObject> = {}) {\n switch (type) {\n case RepositoryType.FIRMWARE:\n case RepositoryType.SOFTWARE:\n return this.createRepositoryObject(modal, type);\n\n case RepositoryType.CONFIGURATION:\n Object.assign(modal, {\n selected: {\n id: mo.id,\n name: modal.version\n },\n configurationType: modal.configurationType,\n name: modal.version\n });\n\n if (!modal.deviceType && mo.id) {\n modal.deviceType = null;\n }\n if (!modal.selected && mo.id) {\n modal.configurationType = null;\n }\n\n const repositoryObject = this.createRepositoryObject(modal, type);\n\n if (mo.url) {\n const newBinaryUrl = (await repositoryObject).url;\n this.removeOutdatedBinary(newBinaryUrl, mo.url);\n }\n\n return repositoryObject;\n }\n }\n\n async createRepositoryObject(\n modal: ModalModel,\n type: RepositoryType\n ): Promise<RepositoryCategory> {\n let binary: IManagedObjectBinary;\n let binaryURL: string;\n let repositoryEntry: RepositoryCategory;\n let repositoryBinary: FirmwareBinary | SoftwareBinary;\n const mos = [];\n const {\n selected: { id: selectedId },\n binary: { file, url }\n } = modal;\n try {\n const globalParam = await this.getGlobalFragment(type);\n\n if (file) {\n ({ data: binary } = await this.saveBinary(file, globalParam));\n ({ self: binaryURL } = binary);\n if (type === RepositoryType.CONFIGURATION) {\n modal.binary.url = binaryURL;\n }\n mos.push(binary);\n } else {\n binaryURL = url;\n }\n\n ({ data: repositoryEntry } = await this.createOrUpdateRepositoryEntry(\n { ...modal, ...globalParam },\n type\n ));\n if (isNil(selectedId)) {\n mos.push(repositoryEntry);\n }\n\n if (type !== RepositoryType.CONFIGURATION) {\n ({ data: repositoryBinary } = await this.createRepositoryBinary(\n { ...modal, ...globalParam },\n binaryURL,\n type,\n repositoryEntry\n ));\n mos.push(repositoryBinary);\n }\n\n if (file) {\n await this.linkBinary(repositoryBinary, binary, repositoryEntry);\n }\n\n return repositoryEntry;\n } catch (error) {\n this.cleanUp(mos);\n this.errorMsg();\n\n // Propagate error\n throw error;\n }\n }\n\n saveBinary(file: File, global: Partial<IManagedObject>): Promise<IResult<IManagedObjectBinary>> {\n return this.inventoryBinary.create(file, global);\n }\n\n async createOrUpdateRepositoryEntry(\n modal: ModalModel,\n type: RepositoryType\n ): Promise<IResult<RepositoryCategory>> {\n const {\n selected: { id, name },\n description,\n deviceType,\n c8y_Global,\n binary\n } = modal;\n\n const mo = {\n id,\n name,\n description,\n type,\n c8y_Global\n };\n\n if (deviceType && type !== RepositoryType.CONFIGURATION) {\n set(mo, 'c8y_Filter.type', deviceType);\n }\n\n if ((deviceType || id) && type === RepositoryType.CONFIGURATION) {\n set(mo, 'deviceType', deviceType);\n }\n\n if (modal.softwareType) {\n set(mo, 'softwareType', modal.softwareType.softwareType);\n }\n\n if ((modal.configurationType || id) && type === RepositoryType.CONFIGURATION) {\n set(mo, 'configurationType', modal.configurationType);\n }\n\n if (type === RepositoryType.CONFIGURATION) {\n set(mo, 'url', binary?.url);\n }\n\n return id\n ? (this.inventory.update(mo) as Promise<IResult<RepositoryCategory>>)\n : (this.inventory.create(mo) as Promise<IResult<RepositoryCategory>>);\n }\n\n createRepositoryBinary(\n modal: ModalModel,\n binaryURL: string,\n type: RepositoryType,\n parent: RepositoryCategory\n ): Promise<IResult<FirmwareBinary | SoftwareBinary | FirmwarePatchBinary>> {\n const mo = this.prepareRepositoryBinaryMO(modal, binaryURL, type);\n\n return this.inventory.childAdditionsCreate(mo, parent) as Promise<\n IResult<FirmwareBinary | SoftwareBinary | FirmwarePatchBinary>\n >;\n }\n\n prepareRepositoryBinaryMO(modal: ModalModel, binaryURL: string, type: RepositoryType) {\n const { version, patchVersion, dependency, c8y_Global } = modal;\n const result = {\n type: REPOSITORY_BINARY_TYPES[type],\n [type]: {\n url: binaryURL\n },\n c8y_Global\n };\n\n if (dependency) {\n set(result, [type, 'version'], patchVersion);\n assign(result, {\n c8y_Patch: {\n dependency: dependency.c8y_Firmware.version\n }\n });\n } else {\n set(result, [type, 'version'], version);\n }\n return result;\n }\n\n async linkBinary(\n repositoryBinary,\n binary: IManagedObjectBinary,\n repositoryEntry?: RepositoryCategory\n ) {\n if (repositoryBinary) {\n const { id: repositoryBinaryId } = repositoryBinary;\n if (binary) {\n const { id: binaryId } = binary;\n return this.inventory.childAdditionsAdd(binaryId, repositoryBinaryId);\n }\n } else return this.inventory.childAdditionsAdd(binary, repositoryEntry);\n }\n\n cleanUp(mosToDelete: IIdentified[]) {\n mosToDelete.forEach(mo => {\n const { c8y_IsBinary } = mo;\n isUndefined(c8y_IsBinary) ? this.delete(mo) : this.inventoryBinary.delete(mo);\n });\n }\n\n delete(entity: IIdentified): Promise<IResult<null>> {\n return this.inventory.delete(entity, { forceCascade: true });\n }\n\n errorMsg() {\n const msg = gettext('Failed to save');\n this.alert.danger(msg);\n }\n\n getBaseVersionsCount$(entry: IManagedObject): Observable<number> {\n if (this.isLegacyEntry(entry)) {\n return of(1);\n }\n return from(this.listBaseVersions(entry, { withTotalElements: true })).pipe(\n map(({ paging }) => paging.totalElements)\n );\n }\n\n getBaseVersionFromMO(mo: RepositoryBinary): string {\n return this.isPatch(mo) ? get(mo, 'c8y_Patch.dependency') : get(mo, 'c8y_Firmware.version');\n }\n\n isPatch(mo: RepositoryBinary): boolean {\n return !!get(mo, 'c8y_Patch.dependency');\n }\n\n getPatchVersionsCount$(entry: IManagedObject, baseVersion: FirmwareBinary): Observable<number> {\n if (this.isLegacyEntry(baseVersion)) {\n return of(0);\n }\n return from(this.listPatchVersions(entry, baseVersion, { withTotalElements: true })).pipe(\n map(({ paging }) => paging.totalElements)\n );\n }\n\n isLegacyEntry(entry: Partial<IManagedObject>): boolean {\n return Boolean(entry.url);\n }\n\n /**\n * Lists all versions (base and patch ones) of given top level entry.\n * Versions are ordered by creation time (assuming the earlier created, the older the version).\n * @param entry Top level repository entry.\n * @param params Additional query params.\n */\n listAllVersions(entry: Partial<IManagedObject>, params = {}) {\n if (this.isLegacyEntry(entry)) {\n return this.getBaseVersionResultListForLegacyEntry(entry);\n }\n\n const VERSION_FILTER_ORDER = {\n __filter: {},\n __orderby: [{ 'creationTime.date': -1 }]\n };\n return this.listChildren(entry, VERSION_FILTER_ORDER, params);\n }\n\n /**\n * Lists base versions of given top level entry.\n * Versions are ordered by creation time (assuming the earlier created, the older the version).\n * @param entry Top level repository entry.\n * @param params Additional query params.\n */\n listBaseVersions(entry: Partial<IManagedObject>, params = {}) {\n if (this.isLegacyEntry(entry)) {\n return this.getBaseVersionResultListForLegacyEntry(entry);\n }\n\n const NO_PATCH_FILTER_ORDER = {\n __filter: {\n __not: { __has: 'c8y_Patch' }\n },\n __orderby: [{ 'creationTime.date': -1 }]\n };\n return this.listChildren(entry, NO_PATCH_FILTER_ORDER, params);\n }\n\n /**\n * Lists patch versions of given base version under the entry.\n * Versions are ordered by creation time (assuming the earlier created, the older the version).\n * @param entry Top level repository entry.\n * @param baseVersion Base version.\n * @param params Additional query params.\n */\n listPatchVersions(entry: IManagedObject, baseVersion: FirmwareBinary | string, params = {}) {\n const version = isString(baseVersion) ? baseVersion : get(baseVersion, 'c8y_Firmware.version');\n const PATCH_FILTER_ORDER = {\n __filter: {\n 'c8y_Patch.dependency': version\n },\n __orderby: [{ 'creationTime.date': -1 }]\n };\n return this.listChildren(entry, PATCH_FILTER_ORDER, params);\n }\n\n /**\n * Lists patch versions of given base version under the entry including the base version.\n * Versions are ordered by creation time (assuming the earlier created, the older the version).\n * In terms of legacy base version the entry gets transformed to fit the needed data model.\n * @param entry Top level repository entry.\n * @param baseVersion Base version.\n * @param params Additional query params.\n */\n listBaseVersionAndPatches(entry: IManagedObject, baseVersion: IManagedObject, params = {}) {\n if (this.isLegacyEntry(entry)) {\n return Promise.resolve({\n data: [\n Object.assign(\n {\n c8y_Firmware: {\n version: entry.version,\n url: entry.url\n }\n },\n entry\n )\n ]\n });\n }\n\n const PATCH_FILTER_ORDER = {\n __filter: {\n __or: {\n 'c8y_Patch.dependency': baseVersion.c8y_Firmware.version,\n 'c8y_Firmware.version': baseVersion.c8y_Firmware.version\n }\n },\n __orderby: [{ 'c8y_Patch.dependency': 1 }, { 'c8y_Firmware.version': 1 }]\n };\n return this.listChildren(entry, PATCH_FILTER_ORDER, params);\n }\n\n listChildren(entry: Partial<IManagedObject>, filters = {}, params: any = {}) {\n const childrenFilters = { __bygroupid: entry.id };\n const query = this.queriesUtil.addAndFilter(filters, childrenFilters);\n // FIXME: needed because of issue in forOf directive (...)\n params.withTotalPages = true;\n return this.inventory.listQuery(query, params);\n }\n\n /**\n * Fetches all items from the list starting with the provided page.\n * @param firstPage The first page of the list to fetch all items for.\n */\n async fetchAllItemsFromList(firstPage) {\n let allItems;\n\n if (!firstPage.then) {\n allItems = [...firstPage];\n } else {\n let { paging, data: items } = await firstPage;\n allItems = [...items];\n\n while (paging && paging.nextPage) {\n ({ paging, data: items } = await paging.next());\n allItems = [...allItems, ...items];\n }\n }\n\n return allItems;\n }\n\n /**\n * Gets top level repository entry managed object for base or patch version.\n * @param mo Base or patch version managed object with parents.\n */\n getRepositoryEntryMO$(mo: IManagedObject): Observable<IManagedObject | undefined> {\n if (!mo) {\n return of(undefined);\n }\n const [reference] = get(mo, 'additionParents.references');\n const id = get(reference, 'managedObject.id');\n return id\n ? from(this.inventory.detail(id, { withChildren: false })).pipe(map(({ data }) => data))\n : of(undefined);\n }\n /**\n * Gets base or patch version managed object.\n * @param deviceRepositoryFragment Device repository fragment.\n * @param type Top level repository entry type.\n * @param configuration Configuration object with options:\n * - **skipLegacy** - `boolean` - Exclude legacy entries.\n * - **filters** - `object` - Filter object.\n *\n * @deprecated as it doesn't support 'missing url' case\n */\n getRepositoryBinaryMoByVersion(\n deviceRepositoryFragment: DeviceFirmware | DeviceSoftware,\n type: RepositoryType,\n { skipLegacy = false, filters = {} }: { skipLegacy?: boolean; filters?: object } = {}\n ): Promise<IManagedObject> {\n const { version, url, name } = deviceRepositoryFragment;\n const repositoryBinaryType = REPOSITORY_BINARY_TYPES[type];\n let query;\n const newModelBaseVersionQuery = {\n [`${type}.version`]: version,\n [`${type}.url`]: url,\n type: repositoryBinaryType\n };\n const legacyVersionQuery = { url, type, name };\n filters = { withChildren: false, withParents: true, ...filters };\n\n if (skipLegacy) {\n query = {\n __and: {\n ...newModelBaseVersionQuery\n }\n };\n } else {\n query = {\n __or: [{ __and: { ...newModelBaseVersionQuery } }, { __and: { ...legacyVersionQuery } }]\n };\n }\n\n return this.inventory.listQuery(query, filters).then(({ data }) => head(data));\n }\n\n getBinaryName$(binaryUrl: string): Observable<string> {\n if (!binaryUrl) {\n return of('---');\n }\n\n const binaryId = this.inventoryBinary.getIdFromUrl(binaryUrl);\n if (!binaryId) {\n return of(binaryUrl);\n }\n return defer(() => this.inventory.detail(binaryId).then(result => result.data)).pipe(\n map(mo => mo.name)\n );\n }\n\n /**\n * Generates an inventory query object which can be used to find\n * repository entries of specified type matching the type of provided device.\n * @param repositoryType The type of repository entries which will be queried with the generated query.\n * @param device The device for which matching repository entries will be queried with the generated query.\n */\n\n getDeviceTypeQuery(repositoryType: RepositoryType, device: IManagedObject): object {\n let result: QueryObjectFilterComparison | QueryObjectWithDedicatedFilter = {\n type: repositoryType\n };\n if (repositoryType === RepositoryType.CONFIGURATION) {\n if (device.type) {\n result = this.queriesUtil.addAndFilter(result, {\n __or: [{ deviceType: device.type }, { __not: { __has: `deviceType` } }]\n });\n }\n } else {\n result = this.queriesUtil.addAndFilter(result, {\n __or: [\n { 'c8y_Filter.type': device.type },\n { 'c8y_Filter.type': '' },\n { __not: { __has: `c8y_Filter.type` } }\n ]\n });\n }\n\n return result;\n }\n\n /**\n * Generates an inventory query object which can be used to find\n * repository entries matching the predefined software types provided in the device.\n * @param device The device for which matching repository entries will be queried with the generated query.\n * @param query The query to which the software types filters will be attached. Default value is an object containg repository type software.\n */\n getSoftwareTypeQuery(device: IManagedObject, query?: object): object {\n let result: QueryObjectFilterComparison | QueryObjectWithDedicatedFilter = {\n ...(query || {}),\n type: RepositoryType.SOFTWARE\n };\n\n if (device.c8y_SupportedSoftwareTypes) {\n result = this.queriesUtil.addAndFilter(result, {\n __or: [device.c8y_SupportedSoftwareTypes.map(type => ({ softwareType: type }))]\n });\n }\n\n return result;\n }\n\n /**\n * Generates an inventory query object which can be used to find configuration repository entries\n * matching the type of provided device and specified configuration type.\n * @param device The device for which matching repository entries will be queried with the generated query.\n * @param configurationType Configuration type for which matching repository entries will be queried with the generated query.\n */\n getConfigurationTypeQuery(device: IManagedObject, configurationType: string): object {\n const query = this.getDeviceTypeQuery(RepositoryType.CONFIGURATION, device);\n return this.queriesUtil.addAndFilter(query, {\n __or: [\n { configurationType },\n { configurationType: '' },\n { __not: { __has: `configurationType` } }\n ]\n });\n }\n\n /**\n * Gets the list of software installed in the device in the uniform format.\n * Supports c8y_SoftwareList and c8y_Software fragments.\n * @param device The device whose software list should be returned.\n */\n getDeviceSoftwareList(device: IManagedObject): DeviceSoftware[] {\n if (device.c8y_SoftwareList) {\n return cloneDeep(device.c8y_SoftwareList);\n }\n if (device.c8y_Software) {\n return _map(device.c8y_Software, (version, name) => ({ name, version }));\n }\n return [];\n }\n\n /**\n * Prepares a software update operation for given device and the list of changes, and sends it to the device.\n * @param device The device which the operation should be prepared for and sent to.\n * @param changes The list of software changes which should be applied.\n */\n async createSoftwareUpdateOperation(\n device: IManagedObject,\n changes: DeviceSoftwareChange[]\n ): Promise<IOperation> {\n const operation = await this.getSoftwareUpdateOperation(device, changes);\n return (await this.operation.create(operation)).data;\n }\n\n /**\n * Prepares a software update operation for given device and changes.\n * Returned operation type depends on device's supported operations.\n * Supports c8y_SoftwareUpdate, c8y_SoftwareList, and c8y_Software operations.\n * @param device The device for which operation should be prepared.\n * @param changes The list of software changes which should be applied.\n */\n async getSoftwareUpdateOperation(\n device: IManagedObject,\n changes: DeviceSoftwareChange[]\n ): Promise<IOperation> {\n const operation: IOperation = {\n deviceId: device.id,\n description: `Apply software changes: ${changes\n .map(\n change =>\n `${change.action} \"${change.name}\"${\n change.version ? ` (version: ${change.version})` : ''\n }`\n )\n .join(', ')}`\n };\n if (device.c8y_SupportedOperations.includes('c8y_SoftwareUpdate')) {\n operation.c8y_SoftwareUpdate = (cloneDeep(changes) || []).map(change =>\n omitBy(change, isNil)\n );\n } else if (device.c8y_SupportedOperations.includes('c8y_SoftwareList')) {\n operation.c8y_SoftwareList = cloneDeep(\n await this.getCurrentSoftware(device, 'c8y_SoftwareList', [])\n );\n changes.forEach(change => {\n const deviceSoftware: DeviceSoftware = pick(omitBy(change, isNil), [\n 'name',\n 'version',\n 'url',\n 'softwareType'\n ]);\n if (change.action === 'delete') {\n remove(operation.c8y_SoftwareList, deviceSoftware);\n }\n if (change.action === 'install') {\n const softwareItemToUpdateIdx = operation.c8y_SoftwareList.findIndex(\n item => item.name === change.name\n );\n if (softwareItemToUpdateIdx > -1) {\n // update software\n operation.c8y_SoftwareList.splice(softwareItemToUpdateIdx, 1, deviceSoftware);\n } else {\n // install software\n operation.c8y_SoftwareList.push(deviceSoftware);\n }\n }\n });\n } else if (device.c8y_SupportedOperations.includes('c8y_Software')) {\n operation.c8y_Software = cloneDeep(await this.getCurrentSoftware(device, 'c8y_Software', {}));\n changes.forEach(change => {\n if (change.action === 'delete') {\n delete operation.c8y_Software[change.name];\n }\n if (change.action === 'install') {\n operation.c8y_Software[change.name] = change.version;\n }\n });\n }\n return operation;\n }\n\n /**\n * Extracts the list of device software changes from given operation in the context of given device.\n * @param operation The operation from which the list should be extracted.\n * @param device The target device of the operation.\n */\n async getDeviceSoftwareChangesFromOperation(\n operation: IOperation,\n device: IManagedObject\n ): Promise<DeviceSoftwareChange[]> {\n if (operation.c8y_SoftwareUpdate) {\n return cloneDeep(operation.c8y_SoftwareUpdate);\n }\n if (operation.c8y_SoftwareList) {\n return await this.getDeviceSoftwareChangesFromSoftwareListOperation(operation, device);\n }\n if (operation.c8y_Software) {\n return await this.getDeviceSoftwareChangesFromSoftwareOperation(operation, device);\n }\n return [];\n }\n\n /**\n * Prepares a firmware update operation for given device and the selected repository binary, and sends it to the device.\n * @param device The device which the operation should be prepared for and sent to.\n * @param selectedOption The selected repository binary option.\n */\n async createFirmwareUpdateOperation(\n device: IManagedObject,\n selectedOption: SelectedRepositoryBinary\n ): Promise<IOperation> {\n const operation = this.getFirmwareUpdateOperation(device, selectedOption);\n return (await this.operation.create(operation)).data;\n }\n\n /**\n * Prepares a firmware update operation for given device and selected version.\n * Supports c8y_Firmware operation.\n * @param device The device for which operation should be prepared.\n * @param selectedOption Selected firmware version.\n */\n getFirmwareUpdateOperation(\n device: IManagedObject,\n selectedOption: SelectedRepositoryBinary\n ): IOperation {\n delete selectedOption.id;\n\n const operation: IOperation = {\n deviceId: device.id,\n description: `Update firmware to: \"${selectedOption.name}\"${\n selectedOption.version ? ` (version: ${selectedOption.version})` : ''\n }`,\n c8y_Firmware: { ...selectedOption }\n };\n\n return operation;\n }\n\n /**\n * Prepares a configuration file upload operation for given device and configuration type.\n * @param device The device for which operation should be prepared.\n * @param configurationType Selected configuration type.\n * @param isLegacy A legacy operation is created without a configurationType.\n */\n getUploadConfigurationFileOperation(\n device: IManagedObject,\n configurationType: string,\n isLegacy = false\n ): IOperation {\n if (isLegacy) {\n return {\n deviceId: device.id,\n description: `Retrieve configuration snapshot from device ${device.name}`,\n c8y_UploadConfigFile: {}\n };\n }\n return {\n deviceId: device.id,\n description: `Retrieve ${configurationType} configuration snapshot from device ${device.name}`,\n c8y_UploadConfigFile: {\n type: configurationType\n }\n };\n }\n\n /**\n * Prepares a configuration file download operation for given device and configuration type.\n * @param device The device for which operation should be prepared.\n * @param configurationType Selected configuration type.\n * @param binaryUrl The url of a binary to be downloaded.\n * @param isLegacy A legacy operation is created without a configurationType.\n */\n getDownloadConfigurationFileOperation(\n device: IManagedObject,\n configurationType: string,\n configSnapshot: ConfigurationSnapshot,\n isLegacy = false\n ): IOperation {\n if (isLegacy) {\n return {\n deviceId: device.id,\n description: `Send configuration snapshot ${configSnapshot.name} to device ${device.name}`,\n c8y_DownloadConfigFile: {\n url: configSnapshot.binaryUrl,\n c8y_ConfigurationDump: {\n id: configSnapshot.id\n }\n }\n };\n }\n return {\n deviceId: device.id,\n description: `Send configuration snapshot ${configSnapshot.name} of configuration type ${configurationType} to device ${device.name}`,\n c8y_DownloadConfigFile: {\n url: configSnapshot.binaryUrl,\n type: configurationType\n }\n };\n }\n\n /**\n * Gets the last firmware update operation for given device.\n * Looks for c8y_Firmware operations.\n * @param deviceId The ID of the device to find an operation for.\n */\n async getLastFirmwareUpdateOperation(deviceId: string | number): Promise<IOperation> {\n const filters = {\n deviceId,\n dateFrom: new Date(0).toISOString(),\n dateTo: new Date(Date.now()).toISOString(),\n revert: true,\n pageSize: 1\n };\n return this.getFirstMatchingOperation([{ ...filters, fragmentType: 'c8y_Firmware' }]);\n }\n\n /**\n * Gets the last software update operation for given device.\n * Looks for c8y_SoftwareUpdate, c8y_SoftwareList, or c8y_Software operations.\n * @param deviceId The ID of the device to find an operation for.\n */\n async getLastSoftwareUpdateOperation(deviceId: string | number): Promise<IOperation> {\n const filters = {\n deviceId,\n dateFrom: new Date(0).toISOString(),\n dateTo: new Date(Date.now()).toISOString(),\n revert: true,\n pageSize: 1\n };\n return this.getLatestMatchingOperation([\n { ...filters, fragmentType: 'c8y_SoftwareUpdate' },\n { ...filters, fragmentType: 'c8y_SoftwareList' },\n { ...filters, fragmentType: 'c8y_Software' }\n ]);\n }\n\n /**\n * Iterates over the list of filters and queries the operations.\n * If a query returns at least one operation, the first one will be returned.\n * Otherwise the next query will be performed.\n * If none of the queries returns any operation, null will be returned.\n * @param filtersList The list of filters for the queries.\n */\n async getFirstMatchingOperation(filtersList: any[]): Promise<IOperation> {\n let matchingOperation = null;\n\n for (const filters of filtersList) {\n const operations = (await this.operation.list(filters)).data;\n if (operations.length) {\n matchingOperation = operations[0];\n break;\n }\n }\n\n return matchingOperation;\n }\n\n /**\n * Iterates over the list of filters and queries the operations.\n * It compares the operations retrieved by the queries by 'creationTime'\n * and return the latest one.\n * If none of the queries returns any operation, null will be returned.\n * @param filtersList The list of filters for the queries.\n */\n async getLatestMatchingOperation(filtersList: any[]): Promise<IOperation> {\n let matchingOperation: IOperation = null;\n\n for (const filters of filtersList) {\n const operations: IOperation[] = (await this.operation.list(filters)).data;\n if (operations.length) {\n if (matchingOperation) {\n matchingOperation =\n new Date(matchingOperation.creationTime).getTime() <\n new Date(operations[0].creationTime).getTime()\n ? operations[0]\n : matchingOperation;\n } else {\n matchingOperation = operations[0];\n }\n }\n }\n\n return matchingOperation;\n }\n\n /**\n * Creates the operation and returns an observable to track its progress.\n * Fails the observable when the operation returns FAILED status.\n * Completes the observable when the operation returns SUCCESSFUL status.\n * @param operation The operation to create and track.\n */\n createObservedOperation(operation: IOperation): Observable<IOperation> {\n return from(this.operation.create(operation)).pipe(\n map(({ data }) => data),\n take(1),\n switchMap(createdOperation => this.observeOperation(createdOperation))\n );\n }\n\n /**\n * Returns an observable to track progress of given operation.\n * Fails the observable when the operation returns FAILED status.\n * Completes the observable when the operation returns SUCCESSFUL status.\n * @param operation The operation to be observed.\n */\n observeOperation(operation: IOperation): Observable<IOperation> {\n const observedOperation$ = of(operation);\n const operationUpdates$ = observedOperation$.pipe(\n switchMap(observedOperation => this.operationRealtime.onAll$(observedOperation.deviceId)),\n map(({ data }) => data as IOperation),\n withLatestFrom(observedOperation$),\n filter(([operationUpdate, observedOperation]) => operationUpdate.id === observedOperation.id),\n switchMap(([operationUpdate]) => {\n if (operationUpdate.status === OperationStatus.FAILED) {\n return throwError(operationUpdate);\n }\n return of(operationUpdate);\n }),\n takeWhile(operationUpdate => operationUpdate.status !== OperationStatus.SUCCESSFUL, true)\n );\n return merge(observedOperation$, operationUpdates$);\n }\n\n /**\n * Gets a single event with latest creationTime for the given device Id and event type.\n * @param deviceId The device Id for which the events should be queried.\n * @param type Event type.\n */\n async getLatestConfigurationEvent(\n deviceId: string | number,\n type: string\n ): Promise<IEvent | undefined> {\n const eventFilter: object = {\n source: deviceId,\n type,\n dateFrom: this.dateFrom.toISOString(),\n dateTo: this.dateTo.toISOString(),\n pageSize: 1\n };\n\n const { data } = await this.event.list(eventFilter);\n return data[0];\n }\n\n /**\n * Gets a list of operations for the given device Id, and operation type.\n * @param deviceId The device Id for which the operation should be queried.\n * @param operationType Operation type fragment.\n */\n async getConfigFileOperationList(\n deviceId: string | number,\n operationType: string\n ): Promise<IOperation[]> {\n const operationFilter: object = {\n deviceId,\n fragmentType: operationType,\n dateFrom: this.dateFrom.toISOString(),\n dateTo: this.dateTo.toISOString(),\n revert: true,\n pageSize: 2000\n };\n\n return (await this.operation.list(operationFilter)).data;\n }\n\n /**\n * Gets latest uploaded configuration snapshot for the given device, and configuration type.\n * @param device The device for which the configuration snapshot was uploaded.\n * @param configurationType Selected configuration type.\n */\n async getConfigSnapshot(\n device: IManagedObject,\n configurationType: string\n ): Promise<ConfigurationSnapshot | undefined> {\n const event: IEvent = await this.getLatestConfigurationEvent(device.id, configurationType);\n let configSnapshot: ConfigurationSnapshot;\n if (event) {\n configSnapshot = {\n time: event.time,\n name: event.text,\n deviceType: device.type,\n configurationType\n };\n try {\n configSnapshot.binary = await (await this.eventBinary.download(event)).text();\n if (event.c8y_IsBinary) {\n configSnapshot.binaryType = event.c8y_IsBinary.type;\n }\n } catch (ex) {\n const msg = gettext('Could not get the binary.');\n this.alert.danger(msg);\n }\n }\n return configSnapshot;\n }\n\n async getLegacyConfigSnapshot(deviceId) {\n let configSnapshot: ConfigurationSnapshot;\n let mo;\n const device = (await this.inventory.detail(deviceId, { withChildren: false })).data;\n const snapshotId = device.c8y_ConfigurationDump && device.c8y_ConfigurationDump.id;\n if (!snapshotId) {\n return;\n }\n\n try {\n mo = (await this.inventory.detail(snapshotId)).data;\n } catch (ex) {\n // do nothing\n }\n if (mo) {\n configSnapshot = {\n time: mo.creationTime,\n name: mo.name\n };\n configSnapshot.binary = await this.getBinaryText(mo.url, { allowExternal: false });\n }\n return configSnapshot;\n }\n\n /**\n * Returns a binary object as text.\n * @param binaryUrl The URL to find binary\n * @param options The object with additional options:\n * - **allowExternal** - `boolean` - allows downloading external binary file\n * - **noAlerts** - `boolean` - do not display an alert message; defaults to `false`\n */\n async getBinaryText(\n binaryUrl: string,\n options: { allowExternal: boolean; noAlerts?: boolean }\n ): Promise<string> {\n const binaryId = this.inventoryBinary.getIdFromUrl(binaryUrl);\n let res;\n if (!binaryId) {\n if (options.allowExternal) {\n res = await this.getExternalBinaryResponse(binaryUrl, options);\n }\n } else {\n res = await this.getInternalBinaryResponse(binaryId, options);\n }\n if (!res) {\n return null;\n }\n return res.text();\n }\n\n /**\n * Returns a binary object as File.\n * @param binaryUrl The URL to find binary\n * @param options The object with additional options:\n * - **allowExternal** - `boolean` - allows downloading external binary file\n */\n async getBinaryFile(binaryUrl: string, options: { allowExternal: boolean }): Promise<File> {\n const binaryId = this.inventoryBinary.getIdFromUrl(binaryUrl);\n if (!binaryId && !options.allowExternal) {\n return null;\n }\n // @TODO: note that it doesn't solve issue with external binary here, such url won't have binaryId, so we won't know the name or contentType to use in File constructor, let's add a @FIXME comment for now?\n const { name, contentType } = (await this.inventory.detail(binaryId)).data;\n const res = !!binaryId\n ? await this.getInternalBinaryResponse(binaryId)\n : await this.getExternalBinaryResponse(binaryUrl);\n const arrayBuffer = await res.arrayBuffer();\n return new File([arrayBuffer], name, { type: contentType });\n }\n\n /**\n * Gets the last configuration update operation for given device.\n * Looks for c8y_Configuration and c8y_SendConfiguration operations.\n * @param deviceId The ID of the device to find an operation for.\n */\n async getLastConfigUpdateOperation(deviceId: string | number): Promise<IOperation> {\n const filters = {\n deviceId,\n dateFrom: new Date(0).toISOString(),\n dateTo: new Date(Date.now()).toISOString(),\n revert: true,\n pageSize: 1\n };\n return this.getLatestMatchingOperation([\n { ...filters, fragmentType: 'c8y_Configuration' },\n { ...filters, fragmentType: 'c8y_SendConfiguration' }\n ]);\n }\n\n /**\n * Prepares a configuration download operation for given device and its current configuration.\n * Supports c8y_SendConfiguration operation.\n * @param device The device for which operation should be prepared.\n */\n createTextBasedConfigurationReloadOperation(device: IManagedObject): IOperation {\n return {\n deviceId: device.id,\n description: gettext('Requested current configuration'),\n c8y_SendConfiguration: {}\n };\n }\n\n /**\n * Prepares a configuration update operation for the given device.\n * Supports c8y_Configuration operation.\n * @param device The device for which operation should be prepared.\n * @param config The configuration which will update the existing one.\n */\n createTextBasedConfigurationUpdateOperation(device: IManagedObject, config: string): IOperation {\n return {\n deviceId: device.id,\n description: gettext('Configuration update'),\n c8y_Configuration: {\n config\n }\n };\n }\n\n async getBinary(binaryId: IdReference): Promise<IFetchResponse> {\n try {\n return await this.inventoryBinary.download(binaryId);\n } catch (ex) {\n const msg = gettext('Could not get the binary.');\n this.alert.danger(msg);\n }\n }\n\n /**\n * Gets all available snapshots from the repository for the given device.\n * @param device The device for which the snapshots should be prepared.\n * @param configurationType Selected configuration type.\n */\n async getSnapshotsFromRepository(device, configurationType) {\n const searchQuery = this.getConfigurationTypeQuery(device, configurationType);\n const res = await this.listRepositoryEntries(RepositoryType.CONFIGURATION, {\n query: searchQuery,\n params: { pageSize: 100 }\n });\n return res.data;\n }\n\n /**\n * Checks if a device already have a given software installed\n * @param deviceId Id of the device to be checked\n * @param software The software to be checked\n */\n async isSoftwareInstalledOnDevice(\n deviceId: string | number,\n software: DeviceSoftware\n ): Promise<boolean> {\n const isASMAvailable = await this.advancedSoftwareService?.isASMAvailable();\n if (!isASMAvailable) {\n return false;\n }\n\n const queryFilter = { deviceId };\n if (software?.name) {\n set(queryFilter, 'name', software.name);\n }\n if (software?.version) {\n set(queryFilter, 'version', software.version);\n }\n return this.advancedSoftwareService.list(queryFilter).then(result => !!result.data?.length);\n }\n\n /**\n * Returns a binary object.\n * @param binaryId binary ID\n * @param options The object with additional options:\n * - **noAlerts** - `boolean` - do not display an alert message; defaults to `false`\n */\n private async getInternalBinaryResponse(\n binaryId: IdReference,\n options: { noAlerts?: boolean } = {}\n ): Promise<IFetchResponse> {\n let res;\n try {\n res = await this.inventoryBinary.download(binaryId);\n } catch (ex) {\n if (!options.noAlerts) {\n const msg = gettext('Could not get the binary.');\n this.alert.danger(msg);\n }\n }\n return res;\n }\n\n /**\n * Returns a binary object.\n * @param binaryUrl The URL to find binary\n * @param options The object with additional options:\n * - **noAlerts** - `boolean` - do not display an alert message; defaults to `false`\n */\n private async getExternalBinaryResponse(\n binaryUrl: string,\n options: { noAlerts?: boolean } = {}\n ): Promise<IFetchResponse> {\n let res;\n try {\n const fetchRes = await fetch(binaryUrl);\n if (fetchRes.status >= 400) {\n throw res;\n }\n res = fetchRes;\n } catch {\n if (!options.noAlerts) {\n const msg = gettext('Could not get the external binary');\n this.alert.danger(msg);\n }\n }\n return res;\n }\n\n private getBaseVersionResultListForLegacyEntry(entry) {\n return Promise.resolve({\n res: {} as IFetchResponse,\n data: [\n {\n ...entry,\n [entry.type]: {\n version: entry.version,\n url: entry.url\n }\n }\n ]\n } as IResultList<IManagedObject>);\n }\n\n private async getDeviceSoftwareChangesFromSoftwareListOperation(\n operation: IOperation,\n device: IManagedObject\n ): Promise<DeviceSoftwareChange[]> {\n const changes: DeviceSoftwareChange[] = [];\n const deviceSoftwareList = await this.getCurrentSoftware(device, 'c8y_SoftwareList', []);\n forEach(operation.c8y_SoftwareList, operationSoftware => {\n const deviceSoftware = find(deviceSoftwareList, { name: operationSoftware.name });\n if (\n (operationSoftware && operationSoftware.version) !==\n (deviceSoftware && deviceSoftware.version)\n ) {\n changes.push({\n ...operationSoftware,\n action: 'install'\n } as DeviceSoftwareChange);\n }\n });\n forEach(deviceSoftwareList, deviceSoftware => {\n const operationSoftware = find(operation.c8y_SoftwareList, { name: deviceSoftware.name });\n if (\n (operationSoftware && operationSoftware.version) !==\n (deviceSoftware && deviceSoftware.version)\n ) {\n const installChange = changes.find(\n change => deviceSoftware.name === change.name && change.action === 'install'\n );\n // check that this software is not an installation software change, otherwise it's an update and not a removal\n if (!installChange) {\n changes.push({\n ...deviceSoftware,\n action: 'delete'\n } as DeviceSoftwareChange);\n }\n }\n });\n return changes;\n }\n\n private async getDeviceSoftwareChangesFromSoftwareOperation(\n operation: IOperation,\n device: IManagedObject\n ): Promise<DeviceSoftwareChange[]> {\n const changes: DeviceSoftwareChange[] = [];\n const deviceSoftware = await this.getCurrentSoftware(device, 'c8y_Software', {});\n forEach(deviceSoftware, (deviceSoftwareVersion, deviceSoftwareName) => {\n if (operation.c8y_Software[deviceSoftwareName] !== deviceSoftwareVersion) {\n changes.push({\n name: deviceSoftwareName,\n version: deviceSoftwareVersion,\n action: 'delete'\n } as DeviceSoftwareChange);\n }\n });\n forEach(operation.c8y_Software, (operationSoftwareVersion, operationSoftwareName) => {\n const deviceSoftwareVersion = deviceSoftware && deviceSoftware[operationSoftwareName];\n if (deviceSoftwareVersion !== operationSoftwareVersion) {\n changes.push({\n name: operationSoftwareName,\n version: operationSoftwareVersion,\n action: 'install'\n } as DeviceSoftwareChange);\n }\n });\n return changes;\n }\n\n private async getCurrentSoftware(\n device: IManagedObject,\n swFragment: string,\n defaultValue: object\n ): Promise<object> {\n const isASMAvailable = await this.advancedSoftwareService?.isASMAvailable();\n if (isASMAvailable) {\n let softwareResultList: IResultList<IManagedObject> = await this.advancedSoftwareService.list(\n { deviceId: device.id, pageSize: 100 }\n );\n let list = (softwareResultList?.data || []).map(sw =>\n pick(omitBy(sw, isNil), ['name', 'version', 'url', 'softwareType'])\n );\n\n while (softwareResultList.paging?.nextPage) {\n softwareResultList = await softwareResultList.paging.next();\n list = [\n ...list,\n ...(softwareResultList?.data || []).map(sw =>\n pick(omitBy(sw, isNil), ['name', 'version', 'url', 'softwareType'])\n )\n ];\n }\n\n if (!list?.length) {\n return defaultValue;\n }\n\n return Array.isArray(defaultValue) ? list : this.softwareListToLegacy(list);\n } else {\n return device[swFragment] || defaultValue;\n }\n }\n\n private softwareListToLegacy(list: IManagedObject[]): object {\n return (list || []).reduce((prev, curr) => ({ ...prev, [curr.name]: curr.version }), {});\n }\n\n private async getGlobalFragment(type: RepositoryType) {\n return (await this.globalConfigService.getGlobalParam(type)) ? { c8y_Global: {} } : undefined;\n }\n\n private async removeOutdatedBinary(newBinaryURL, oldBinaryURL) {\n const existingBinaryId = await this.inventoryBinary.getIdFromUrl(oldBinaryURL);\n const newBinaryId = await this.inventoryBinary.getIdFromUrl(newBinaryURL);\n if (existingBinaryId && existingBinaryId !== newBinaryId) {\n await this.inventoryBinary.delete(existingBinaryId);\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { IManagedObject, InventoryBinaryService } from '@c8y/client';\nimport { CellRendererContext, CommonModule, memoize } from '@c8y/ngx-components';\nimport { property } from 'lodash-es';\nimport { RepositoryService } from '../repository.service';\n\n@Component({\n templateUrl: './file.cell-renderer.component.html',\n selector: 'c8y-file-cell-renderer',\n standalone: true,\n imports: [CommonModule],\n providers: [RepositoryService]\n})\nexport class FileCellRendererComponent {\n constructor(\n public context: CellRendererContext,\n private inventoryBinaryService: InventoryBinaryService,\n private repositoryService: RepositoryService\n ) {}\n\n isBinaryFile() {\n return this.context.item?.url\n ? !!this.inventoryBinaryService.getIdFromUrl(this.context.item.url)\n : false;\n }\n\n @memoize(property('id'))\n getBinaryName(configuration: IManagedObject) {\n return this.repositoryService.getBinaryName$(configuration.url);\n }\n}\n","<small\n title=\"{{ getBinaryName(context.item) | async }}\"\n *ngIf=\"isBinaryFile(); else noFile\"\n>\n {{ getBinaryName(context.item) | async }}\n</small>\n<ng-template #noFile>\n <small title=\"{{ context.item?.url }}\">\n {{ context.item?.url }}\n </small>\n</ng-template>\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumn, ColumnConfig } from '@c8y/ngx-components';\nimport { FileCellRendererComponent } from './file.cell-renderer.component';\n\nexport class FileGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig & { filterLabel?: string; placeholder?: string }) {\n super(initialColumnConfig);\n this.name = 'file';\n this.header = gettext('File');\n this.cellRendererComponent = FileCellRendererComponent;\n\n this.filterable = false;\n this.sortable = false;\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CellRendererContext, CommonModule } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@Component({\n template: `\n <a\n class=\"interact\"\n [title]=\"context.item.name\"\n *ngIf=\"context?.property?.callback; else router\"\n (click)=\"context.property.callback(context.item)\"\n >\n {{ context.item.name }}\n </a>\n <ng-template #router>\n <a class=\"interact\" [title]=\"context.item.name\" [routerLink]=\"[context.item.id]\">\n {{ context.item.name }}\n </a>\n </ng-template>\n `,\n selector: 'c8y-repository-item-name-cell-renderer',\n standalone: true,\n imports: [CommonModule, DeviceGridModule, TooltipModule, RouterModule]\n})\nexport class RepositoryItemNameCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n Row\n} from '@c8y/ngx-components';\nimport { RepositoryItemNameCellRendererComponent } from './name.cell-renderer.component';\n\nexport class RepositoryItemNameGridColumn extends BaseColumn {\n callback: (row: Row) => void;\n\n constructor(\n initialColumnConfig?: ColumnConfig & {\n filterLabel?: string;\n placeholder?: string;\n callback?: (row: Row) => void;\n }\n ) {\n super(initialColumnConfig);\n this.name = 'name';\n this.path = 'name';\n this.header = gettext('Name');\n this.cellRendererComponent = RepositoryItemNameCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'names',\n label: initialColumnConfig?.filterLabel ?? gettext('Filter items by name'),\n addText: gettext('Add next`name`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: initialColumnConfig?.placeholder ?? gettext('Cloud connectivity')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.names.length) {\n filter.name = { __in: model.names };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n standalone: true,\n templateUrl: './type.cell-renderer.component.html',\n selector: 'c8y-type-cell-renderer',\n imports: [CommonModule]\n})\nexport class TypeCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","<span\n class=\"label label-info\"\n *ngIf=\"!!context?.item?.[context?.property?.path]; else emptyText\"\n>\n {{ context.item[context.property.path] }}\n</span>\n<ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`type`</em>\n </small>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n IManagedObject,\n IResultList,\n QueriesUtil,\n QueryObjectFilterComparison,\n QueryObjectWithDedicatedFilter\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n CommonModule as C8yCommonModule,\n C8yTranslatePipe,\n Column,\n CoreModule,\n FilteringFormRendererContext,\n ForOfFilterPipe,\n TypeaheadComponent\n} from '@c8y/ngx-components';\nimport { cloneDeep, uniqBy } from 'lodash-es';\nimport { BehaviorSubject, NEVER, Observable, pipe } from 'rxjs';\nimport { debounceTime, map, switchMap, tap } from 'rxjs/operators';\nimport { RepositoryService } from '../repository.service';\nimport { TypeGridColumn } from './type.grid-column';\n\n@Component({\n standalone: true,\n templateUrl: './type.filtering-form-renderer.component.html',\n changeDetection: ChangeDetectionStrategy.Default,\n selector: 'c8y-type-filtering-form-renderer',\n imports: [CommonModule, C8yTranslatePipe, C8yCommonModule, FormsModule, CoreModule]\n})\nexport class TypeFilteringFormRendererComponent implements OnInit, AfterViewInit {\n path: string;\n selectedType: IManagedObject;\n types$: Observable<IResultList<IManagedObject>> = NEVER;\n search$: BehaviorSubject<string> = new BehaviorSubject(null);\n filterPipe: ForOfFilterPipe<IManagedObject> = pipe(tap());\n typeaheadPlaceholder = gettext('Start typing to search, for example, {{ example }}');\n @ViewChild(TypeaheadComponent, { static: false }) typeahead: TypeaheadComponent;\n private queriesUtil: QueriesUtil = new QueriesUtil();\n private types: Set<string> = new Set();\n\n constructor(\n public context: FilteringFormRendererContext,\n public changeDetectorRef: ChangeDetectorRef,\n private repositoryService: RepositoryService,\n private elementRef: ElementRef\n ) {\n this.path = context.property.path;\n this.types$ = this.search$.pipe(\n debounceTime(300),\n tap(() => this.types.clear()),\n switchMap((searchString: string) => {\n let query: QueryObjectFilterComparison | QueryObjectWithDedicatedFilter =\n this.queriesUtil.prependOrderbys({}, [{ [this.path]: 1 }]);\n const filter = !!searchString\n ? {\n [this.path]: {\n __eq: `*${searchString}*`\n }\n }\n : {\n __has: this.path\n };\n query = this.queriesUtil.addAndFilter(query, filter);\n\n return this.repositoryService.listRepositoryEntries(\n (this.context.property as TypeGridColumn).repositoryType,\n {\n skipDefaultOrder: true,\n query,\n params: {\n pageSize: 200\n }\n }\n );\n })\n );\n\n this.filterPipe = pipe(\n map(\n this.removeDuplicatesType.bind(\n this\n ) as TypeFilteringFormRendererComponent['removeDuplicatesType']\n ),\n tap(() => setTimeout(() => this.changeDetectorRef.detectChanges(), 0))\n );\n }\n\n @HostListener('keyup.enter', ['$event']) onEnterKeyUp(event: KeyboardEvent) {\n event.stopPropagation();\n this.applyFilter();\n }\n @HostListener('keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n event.stopPropagation();\n this.context.resetFilter();\n }\n\n ngOnInit(): void {\n const column: Column = this.context.property;\n this.selectedType = cloneDeep(column.externalFilterQuery || {});\n }\n\n ngAfterViewInit(): void {\n this.typeahead?.searchControl?.nativeElement?.focus();\n try {\n this.elementRef.nativeElement.parentElement.parentElement.style.overflow = 'visible';\n } catch (ex) {\n // intentionally empty\n }\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: {\n model: this.selectedType,\n chips: [\n {\n value: this.selectedType,\n displayValue: this.selectedType?.[this.path],\n path: [this.path],\n columnName: this.context.property.name,\n remove: () => {\n return {\n columnName: this.context.property.name,\n externalFilterQuery: {\n model: null,\n chips: []\n }\n };\n }\n }\n ]\n }\n });\n }\n\n private removeDuplicatesType(list: IManagedObject[]): IManagedObject[] {\n const uniqueByType: IManagedObject[] = uniqBy(list, this.path).filter(\n (mo: IManagedObject) => !this.types.has(mo[this.path])\n );\n uniqueByType.forEach((mo: IManagedObject) => this.types.add(mo[this.path]));\n return uniqueByType;\n }\n}\n","<c8y-form-group>\n <label>\n {{ context?.property?.filterLabel | translate }}\n </label>\n <c8y-typeahead\n placeholder=\"{{ typeaheadPlaceholder | translate: { example: context?.property?.example } }}\"\n [name]=\"path\"\n [(ngModel)]=\"selectedType\"\n [displayProperty]=\"path\"\n (onSearch)=\"search$.next($event)\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *c8yFor=\"let type of types$; pipe: filterPipe; loadMore: 'auto'\"\n (click)=\"$event.stopPropagation(); selectedType = type; typeahead.dropdown.hide()\"\n [active]=\"selectedType?.[path] === type?.[path]\"\n >\n <c8y-highlight\n [text]=\"type?.[path] || '--'\"\n [pattern]=\"search$.value\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n</c8y-form-group>\n\n<div class=\"data-grid__dropdown__footer d-flex separator-top\">\n <button\n class=\"btn btn-default btn-sm m-r-8 flex-grow\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"context.resetFilter()\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyFilter()\"\n translate\n >\n Apply\n </button>\n</div>\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumn, ColumnConfig } from '@c8y/ngx-components';\nimport { RepositoryType } from '../repository.model';\nimport { TypeCellRendererComponent } from './type.cell-renderer.component';\nimport { TypeFilteringFormRendererComponent } from './type.filtering-form-renderer.component';\n\nexport class TypeGridColumn extends BaseColumn {\n repositoryType: RepositoryType;\n\n constructor(\n initialColumnConfig?: ColumnConfig & {\n /** Column header */\n header?: string;\n /** Search field label */\n filterLabel?: string;\n /** Search field placeholder */\n placeholder?: string;\n /** MO property path to be used for quering */\n path?: string;\n /** Repository type */\n repositoryType?: RepositoryType;\n /** Typeahead input placeholder example value */\n example?: string;\n }\n ) {\n super(initialColumnConfig);\n this.name = 'type';\n this.path = initialColumnConfig?.path ?? 'type';\n this.header = initialColumnConfig?.header ?? gettext('Type');\n this.repositoryType = initialColumnConfig?.repositoryType;\n this.cellRendererComponent = TypeCellRendererComponent;\n\n this.filterable = true;\n this.filteringFormRendererComponent = TypeFilteringFormRendererComponent;\n this.filteringConfig = {\n getFilter: query => {\n const filter: any = {};\n if (query.model[this.path]) {\n filter[this.path] = { __eq: query.model[this.path] };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { CellRendererContext, CommonModule, memoize } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { property } from 'lodash-es';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { Observable } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\nimport { RepositoryService } from '../repository.service';\n\n@Component({\n templateUrl: './versions.cell-renderer.component.html',\n selector: 'c8y-versions-cell-renderer',\n standalone: true,\n imports: [CommonModule, DeviceGridModule, TooltipModule, RouterModule]\n})\nexport class VersionsCellRendererComponent {\n isLegacy = this.repositoryService.isLegacyEntry.bind(this.repositoryService);\n item;\n constructor(\n public context: CellRendererContext,\n private repositoryService: RepositoryService\n ) {\n this.item = context.item;\n }\n\n @memoize(property('id'))\n getBaseVersionsCount$(item: IManagedObject): Observable<number | string> {\n return this.repositoryService.getBaseVersionsCount$(item).pipe(shareReplay(1));\n }\n}\n","@if (isLegacy(item)) {\n <span\n class=\"label label-warning m-l-auto-sm\"\n translate\n >\n Legacy\n </span>\n} @else {\n @if (getBaseVersionsCount$(item) | async; as baseVersionsCount) {\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ baseVersionsCount }}\n </span>\n } @else {\n <span class=\"badge badge-info m-l-auto-sm\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumn, ColumnConfig } from '@c8y/ngx-components';\nimport { VersionsCellRendererComponent } from './versions.cell-renderer.component';\n\nexport class VersionsGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'versions';\n this.header = gettext('Versions');\n this.cellRendererComponent = VersionsCellRendererComponent;\n this.sortable = false;\n }\n}\n","export enum LinkRenderType {\n DOWNLOAD,\n LINK,\n TEXTONLY\n}\n","import { AlertService, memoize, IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { Component, Input } from '@angular/core';\nimport { RepositoryService } from '../repository.service';\nimport { saveAs } from 'file-saver';\nimport { InventoryBinaryService } from '@c8y/client';\nimport { LinkRenderType } from './link-render-type.enum';\nimport { NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-file-download',\n templateUrl: './file-download.component.html',\n imports: [NgIf, IconDirective, AsyncPipe, C8yTranslatePipe]\n})\nexport class FileDownloadComponent {\n @Input() url: string;\n linkRenderType = LinkRenderType;\n isDownloading = false;\n constructor(\n private repositoryService: RepositoryService,\n private inventoryBinaryService: InventoryBinaryService,\n private alertService: AlertService\n ) {}\n\n @memoize()\n getBinaryName$(binaryUrl) {\n return this.repositoryService.getBinaryName$(binaryUrl);\n }\n\n @memoize()\n determineBehavior(): LinkRenderType {\n let result: LinkRenderType;\n if (this.inventoryBinaryService.getIdFromUrl(this.url)) {\n result = LinkRenderType.DOWNLOAD;\n } else if (this.url.match(/\\/\\//g)) {\n result = LinkRenderType.LINK;\n } else {\n result = LinkRenderType.TEXTONLY;\n }\n return result;\n }\n\n async downloadFile() {\n try {\n this.isDownloading = true;\n const binary: File = await this.repositoryService.getBinaryFile(this.url, {\n allowExternal: false\n });\n this.isDownloading = false;\n saveAs(binary);\n } catch (ex) {\n this.isDownloading = false;\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n}\n","<a\n *ngIf=\"determineBehavior() === linkRenderType.LINK\"\n href=\"{{ url }}\"\n class=\"pointer\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n>\n {{ getBinaryName$(url) | async }}\n</a>\n\n<span *ngIf=\"determineBehavior() === linkRenderType.TEXTONLY\">{{\n getBinaryName$(url) | async\n}}</span>\n\n<span *ngIf=\"determineBehavior() === linkRenderType.DOWNLOAD\">\n <a *ngIf=\"!isDownloading\" class=\"pointer\" (click)=\"downloadFile()\">\n {{ getBinaryName$(url) | async }}\n </a>\n\n <span *ngIf=\"isDownloading\">\n <i c8yIcon=\"spinner\" class=\"icon-spin\"></i> {{ 'Downloading…' | translate }}\n </span>\n</span>\n","import { Component, EventEmitter, forwardRef, TemplateRef } from '@angular/core';\nimport { IManagedObject, QueriesUtil } from '@c8y/client';\nimport {\n ISelectModalObject,\n ISelectModalOption,\n IUpdateItemEvent,\n ModalLabels,\n ModalSelectionMode,\n ProductExperienceEvent,\n ProductExperienceEventSource,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n SelectModalComponent,\n ProductExperienceDirective\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get, has, isEmpty, isEqual, omitBy } from 'lodash-es';\nimport { BehaviorSubject, merge, Observable, of, Subject } from 'rxjs';\nimport { map, mergeMap, switchMap, tap } from 'rxjs/operators';\nimport {\n FilterCriteria,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryBinary,\n RepositoryCategory,\n RepositoryType,\n SelectedRepositoryBinary\n} from '../repository.model';\nimport { RepositoryService } from '../repository.service';\nimport { AsyncPipe } from '@angular/common';\n\n// MODAL STRUCTURE\n// - selectModalObject (repository entry (repositoryCategory) -> type c8y_Firmware/c8y_Software)\n// -- ISelectModalOption (repository binary entry (repositoryBinary) => type c8y_FirmwareBinary/c8y_SoftwareBinary)\n// -- ISelectModalOption...\n// - selectModalObject...\n\n/**\n * RepositorySelectModalComponent displays repository entries options and allows to select them.\n *\n * ```typescript\n * import { take } from 'rxjs/operators';\n * import { RepositorySelectModalComponent, ModalSelectionMode, RepositoryType } from '@c8y/ngx-components/repository/shared';\n *\n * const initialState = {\n * repositoryType: RepositoryType.FIRMWARE,\n * title: gettext('Install firmware'),\n * subTitle: gettext('Available firmwares matching the device type'),\n * icon: 'c8y-firmware',\n * mode: ModalSelectionMode.SINGLE,\n * labels: { ok: gettext('Install') },\n * disableSelected: false\n * };\n *\n * const modal = this.bsModal.show(RepositorySelectModalComponent, {\n * ignoreBackdropClick: true,\n * initialState\n * });\n *\n * modal.content.load.next();\n * modal.content.resultEmitter.pipe(take(1)).subscribe((firmware) => {\n * })\n * ```\n */\n\n@Component({\n selector: 'c8y-repository-select-modal',\n templateUrl: './repository-select-modal.component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => RepositorySelectModalComponent)\n }\n ],\n imports: [SelectModalComponent, ProductExperienceDirective, AsyncPipe]\n})\nexport class RepositorySelectModalComponent implements ProductExperienceEventSource {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n /**\n * Optional\n * Allows to provide custom data.\n * ```typescript\n * import { from } from 'rxjs';\n *\n * const repositoryEntry = { name: 'ExampleEntry', type: 'c8y_Firmware' };\n * const versions = [{ c8y_Firmware: { version: '1.0.0', url: 'http://example.com' } }];\n *\n * const initialState = {repositoryEntriesWithVersions$: from({ ...repositoryEntry, versions })};\n * ```\n */\n repositoryEntriesWithVersions$: Observable<IManagedObject[]> = undefined;\n /**\n * Repository entry type.\n */\n repositoryType: RepositoryType.FIRMWARE | RepositoryType.SOFTWARE;\n /**\n * Optional\n * Allows to use custom badges templates.\n * ```typescript\n * import { gettext } from '@c8y/ngx-components/gettext';\n *\n * const badgeTemplates = { '=1': gettext('{{count}} version'), other: gettext('{{count}} versions') };\n * const initialState = { badgeTemplates };\n * ```\n */\n badgeTemplates = { '=1': gettext('{{count}} version'), other: gettext('{{count}} versions') };\n /**\n * Optional\n * Allows to provide custom modal title.\n */\n title: string = gettext('Select repository entry');\n /**\n * Optional\n * Allows to provide custom modal subtitle.\n */\n subTitle: string;\n /**\n * Loads the content of the modal.\n * Must be invoked by the modal's caller.\n */\n load: Subject<void> = new Subject();\n /**\n * Triggers an update of the item list emitted.\n */\n updateInstallableList$: Subject<IUpdateItemEvent<any>> = new Subject();\n /**\n * Optional\n * Emits a filter criteria object currently entered in the filter input.\n * Use it to filter the items if you use custom repositoryEntriesWithVersions$.\n */\n searchTerm: BehaviorSubject<FilterCriteria> = new BehaviorSubject({});\n /**\n * Optional\n * Allows to provide device type query to restrict search criteria.\n * Only takes effect when repositoryEntriesWithVersions$ is not provided,\n * otherwise modal's caller have to provide already filtered data in the repositoryEntriesWithVersions$.\n */\n deviceTypeQuery: any = {};\n /**\n * Optional\n * Allows to provide query to restrict search criteria.\n * Only takes effect when repositoryEntriesWithVersions$ is not provided,\n * otherwise modal's caller have to provide already filtered data in the repositoryEntriesWithVersions$.\n */\n searchQuery: any = {};\n /**\n * Optional\n * Allows to provide custom labels for the buttons responsible for confirm/dismiss modal actions.\n */\n labels: ModalLabels = { ok: gettext('Save') };\n /**\n * Optional\n * Allows to hide the name filter input field.\n * By default, the filter input field is displayed.\n */\n showFilter = true;\n /**\n * Optional\n * Allows to show a warning that the search criteria should be narrowed down.\n * By default, this warning is hidden.\n */\n areMoreEntries = false;\n /**\n * Optional\n * Allows to display a more specific than the default message in case there are no items to display.\n */\n noItemsMessage: string;\n /**\n * Optional\n * Allows to pass the array of items. Each item from this array will be marked as selected in the modal.\n */\n selected: SelectedRepositoryBinary[];\n /**\n * Emits whenever a new repository binary have been selected in the modal.\n */\n onChoiceUpdated: EventEmitter<ISelectModalObject> = new EventEmitter<ISelectModalObject>();\n /**\n * Emits the list of selected options.\n */\n resultEmitter: EventEmitter<SelectedRepositoryBinary[]> = new EventEmitter<\n SelectedRepositoryBinary[]\n >();\n /**\n * Optional\n * Allows to change selection mode.\n * Supported options:\n * * single: only single option can be selected.\n * * multiple: multiple options can be selected.\n */\n mode: ModalSelectionMode = ModalSelectionMode.SINGLE;\n /**\n * Optional\n * Allows to use custom icon in the modal header.\n */\n icon: string;\n /**\n * Allows to block selection of the other versions from the same repository entry.\n */\n disableSelected = true;\n /**\n * Allows to hide items that have no options available.\n */\n hideEmptyItems: boolean;\n\n filterCriteria: FilterCriteria = {};\n\n repositoryEntries$: Observable<ISelectModalObject[]> = this.load.pipe(\n switchMap(() => this.repositoryEntriesWithVersions$),\n mergeMap(mos => this.aggregate(mos)),\n tap(items => {\n this.areMoreEntries = items.length >= this.PAGE_SIZE ? true : false;\n }),\n tap(items => (this.repositoryEntries = items))\n );\n\n modalEntries: Observable<ISelectModalObject[]> = merge(\n this.repositoryEntries$,\n this.updateInstallableList$.pipe(\n map((updateItemEvent: IUpdateItemEvent<any>) => {\n const itemToUpdate: ISelectModalObject = (this.repositoryEntries || []).find(\n item => item.groupId === updateItemEvent.object.groupId\n );\n if (itemToUpdate) {\n const optionToUpdate: ISelectModalOption = (itemToUpdate.options || []).find(\n option => option.obj.id === (updateItemEvent.object as any).selectedId\n );\n if (optionToUpdate) {\n optionToUpdate.template = updateItemEvent.template;\n if (updateItemEvent.mapper) {\n optionToUpdate.obj = updateItemEvent.mapper(optionToUpdate.obj);\n }\n }\n }\n return this.repositoryEntries;\n })\n )\n );\n\n /**\n * Optional\n * Allows to provide additional template that will be rendered in the\n * filters block on top of the results list in the select modal.\n */\n additionalFilterTemplate: TemplateRef<any>;\n\n productExperienceEvent: ProductExperienceEvent;\n\n private PAGE_SIZE = 100;\n private queriesUtil: QueriesUtil;\n private repositoryEntries: ISelectModalObject[];\n\n constructor(\n private repositoryService: RepositoryService,\n private translateService: TranslateService\n ) {\n this.queriesUtil = new QueriesUtil();\n }\n\n ngOnInit() {\n if (!this.repositoryType) {\n throw new Error('Repository type must be defined');\n }\n\n if (!this.repositoryEntriesWithVersions$) {\n this.repositoryEntriesWithVersions$ = of(1).pipe(\n mergeMap(() =>\n this.repositoryService.listRepositoryEntries(this.repositoryType, {\n query: this.queriesUtil.addAndFilter(\n this.deviceTypeQuery,\n has(this.searchQuery, 'name')\n ? { ...this.searchQuery, name: `*${this.searchQuery.name}*` }\n : this.searchQuery\n ),\n params: { pageSize: this.PAGE_SIZE }\n })\n ),\n map(({ data }) => data),\n map(mos => this.getAndAssignRepositoryBinaries(mos))\n );\n }\n }\n\n getAndAssignRepositoryBinaries(mos: IManagedObject[]) {\n mos.forEach(mo => {\n mo.versions = this.repositoryService.listAllVersions(mo);\n });\n return mos;\n }\n\n search(filterCriteria: FilterCriteria) {\n this.filterCriteria = omitBy(\n {\n ...this.filterCriteria,\n ...filterCriteria\n },\n isEmpty\n );\n\n if (!isEqual(this.filterCriteria, this.searchQuery)) {\n this.searchTerm.next(this.filterCriteria);\n this.searchQuery = this.filterCriteria;\n this.load.next();\n }\n }\n\n result(selectedItems: SelectedRepositoryBinary[]) {\n this.resultEmitter.emit(selectedItems);\n }\n\n async aggregate(mos: IManagedObject[]): Promise<ISelectModalObject[]> {\n const repositoryType = this.repositoryType;\n const selectedItems: SelectedRepositoryBinary[] = this.selected;\n\n return Promise.all(\n mos.map(async repositoryEntry => {\n const options: ISelectModalOption[] = this.getSelectModalOptions(\n await this.repositoryService.fetchAllItemsFromList(repositoryEntry.versions),\n selectedItems,\n repositoryEntry as RepositoryCategory,\n repositoryType\n );\n const selectModalObject = this.getSelectModalObject(\n repositoryEntry as RepositoryCategory,\n options\n );\n\n return selectModalObject;\n })\n );\n }\n\n getSelectModalOptions(\n versions: RepositoryBinary[],\n selectedItems: SelectedRepositoryBinary[],\n repositoryEntry: RepositoryCategory,\n repositoryType: RepositoryType\n ): ISelectModalOption[] {\n const selectModalOptions: ISelectModalOption[] = [];\n versions.forEach(repositoryBinary => {\n const isSelected: boolean = this.isBinaryRepositorySelected(\n selectedItems,\n repositoryEntry,\n repositoryBinary,\n repositoryType\n );\n\n const { version } = repositoryBinary[`${repositoryType}`];\n const bodyValue =\n version || `(${this.translateService.instant(gettext('not specified`version`'))})`;\n const bodyClass = version ? '' : 'text-muted';\n selectModalOptions.push({\n body: [\n {\n value: bodyValue,\n class: bodyClass\n }\n ],\n obj: {\n id: repositoryBinary.id,\n name: repositoryEntry.name,\n version,\n ...(get(repositoryBinary, 'c8y_Patch.dependency') && {\n dependency: get(repositoryBinary, 'c8y_Patch.dependency')\n }),\n ...(get(repositoryBinary, 'c8y_Patch') && { isPatch: true }),\n url: repositoryBinary[`${repositoryType}`].url,\n softwareType: repositoryEntry.softwareType\n },\n selected: isSelected\n });\n });\n return selectModalOptions;\n }\n\n isBinaryRepositorySelected(\n selectedItems: SelectedRepositoryBinary[],\n repositoryEntry: RepositoryCategory,\n repositoryBinary: RepositoryBinary,\n repositoryType: RepositoryType\n ): boolean {\n const isSelected = selectedItems\n ? selectedItems.filter(\n repositoryFragment =>\n repositoryFragment.name === repositoryEntry.name &&\n repositoryFragment.version === repositoryBinary[`${repositoryType}`].version\n ).length > 0\n : false;\n\n return isSelected;\n }\n\n getSelectModalObject(\n repositoryEntry: RepositoryCategory,\n options: ISelectModalOption[]\n ): ISelectModalObject {\n const label =\n options.length === 1\n ? this.translateService.instant(this.badgeTemplates['=1'], { count: options.length })\n : this.translateService.instant(this.badgeTemplates.other, { count: options.length });\n\n const selectModalObject: ISelectModalObject = {\n groupId: repositoryEntry.id,\n body: [\n { value: repositoryEntry.name, class: 'text-truncate' },\n { value: repositoryEntry.description, class: 'text-truncate text-muted' }\n ],\n additionalInformation: { value: label, class: 'label label-info' },\n options\n };\n\n return selectModalObject;\n }\n}\n","<c8y-select-modal\n [icon]=\"icon\"\n [title]=\"title\"\n [subTitle]=\"subTitle\"\n [items]=\"modalEntries | async\"\n [mode]=\"mode\"\n [disableSelected]=\"disableSelected\"\n [labels]=\"labels\"\n [showFilter]=\"showFilter\"\n [additionalFilterTemplate]=\"additionalFilterTemplate\"\n [areMoreEntries]=\"areMoreEntries\"\n [noItemsMessage]=\"noItemsMessage\"\n [hideEmptyItems]=\"hideEmptyItems\"\n (search)=\"search({ name: $event })\"\n (onChoiceUpdated)=\"onChoiceUpdated.emit($event)\"\n (result)=\"result($event)\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.SHARED.COMPONENTS.REPOSITORY_SELECT_MODAL }\"\n></c8y-select-modal>\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n FormsModule\n} from '@angular/forms';\nimport {\n IManagedObject,\n IResultList,\n QueriesUtil,\n QueryObjectFilterComparison,\n QueryObjectWithDedicatedFilter\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ForOfFilterPipe,\n toObservable,\n TypeaheadComponent,\n ListItemComponent,\n ForOfDirective,\n HighlightComponent,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { isEmpty, uniqBy } from 'lodash-es';\nimport { BehaviorSubject, interval, Observable, pipe } from 'rxjs';\nimport { debounce, map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { RepositoryType } from '../repository.model';\nimport { RepositoryService } from '../repository.service';\nimport { NgStyle, NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-software-type',\n templateUrl: 'software-type.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => SoftwareTypeComponent)\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SoftwareTypeComponent),\n multi: true\n }\n ],\n imports: [\n TypeaheadComponent,\n FormsModule,\n NgStyle,\n NgIf,\n ListItemComponent,\n ForOfDirective,\n HighlightComponent,\n C8yTranslateDirective,\n AsyncPipe,\n C8yTranslatePipe\n ]\n})\nexport class SoftwareTypeComponent implements OnInit, ControlValueAccessor, Validator {\n @Input() softwareTypeMO: IManagedObject;\n\n @Input() disabled: boolean;\n\n @Input() style;\n\n @Input()\n required = true;\n\n @Input()\n placeholder: string = this.translateService.instant(gettext('e.g. {{ example }}'), {\n example: 'yum'\n });\n\n @Input()\n emitResultsOnly = false;\n\n @Input()\n showBtnInNotFoundMessage = true;\n\n @Input()\n allowFreeEntries = true;\n\n @Input()\n showClearSelectionOption = false;\n\n @Input()\n clearSelectionOptionLabel: string = gettext('All software types');\n\n @Input()\n set presetSoftwareTypes(\n types: string[] | IManagedObject[] | Observable<string[] | IManagedObject[]>\n ) {\n if (!isEmpty(types)) {\n this.presetSoftwareTypes$ = toObservable(types).pipe(\n map(types =>\n types.map(softwareType =>\n typeof softwareType === 'string'\n ? ({ softwareType } as unknown as IManagedObject)\n : softwareType\n )\n )\n );\n }\n }\n\n @ViewChild('deviceSoftwareTypeModel') deviceSoftwareTypeModel: TypeaheadComponent;\n\n @ViewChild('notFoundTypeAddNewTemplate', { static: true })\n notFoundTypeAddNewTemplate: TemplateRef<unknown>;\n\n @ViewChild('notFoundTypeTemplate', { static: true })\n notFoundTypeTemplate: TemplateRef<unknown>;\n\n @Output() onSelectSoftware: EventEmitter<IManagedObject> = new EventEmitter<IManagedObject>();\n\n notFoundTemplateToUse: TemplateRef<unknown>;\n\n filterPipe: ForOfFilterPipe<IManagedObject> = pipe(tap());\n softwaresResult$: Observable<IResultList<IManagedObject>>;\n search$: BehaviorSubject<string> = new BehaviorSubject(null);\n softwaresResult: IResultList<IManagedObject>;\n\n private queriesUtil: QueriesUtil = new QueriesUtil();\n private softwareTypes: Set<string> = new Set();\n private presetSoftwareTypes$: Observable<IManagedObject[]>;\n\n constructor(\n private repositoryService: RepositoryService,\n public changeDetectorRef: ChangeDetectorRef,\n private translateService: TranslateService\n ) {\n this.filterPipe = pipe(map(this.removeDuplicatesBySoftwareType.bind(this)));\n }\n\n ngOnInit(): void {\n this.softwaresResult$ = this.search$.pipe(\n debounce(() => interval(300)),\n tap(() => this.softwareTypes.clear()),\n switchMap((searchString: string) => {\n if (!this.emitResultsOnly || !searchString) {\n this.onSelectSoftware.emit(this.softwareTypeMO);\n }\n return this.getSoftwareByTypeResult(searchString);\n }),\n shareReplay(1)\n );\n\n this.notFoundTemplateToUse = this.showBtnInNotFoundMessage\n ? this.notFoundTypeAddNewTemplate\n : this.notFoundTypeTemplate;\n }\n\n getSoftwareByTypeResult(searchString: string) {\n return this.presetSoftwareTypes$\n ? this.searchInPreset(searchString)\n : this.searchInRepository(searchString);\n }\n\n selectSoftware(software) {\n this.softwareTypeMO = software;\n this.onSelectSoftware.emit(software);\n this.deviceSoftwareTypeModel.searchControlModel.control.markAsDirty();\n (this.deviceSoftwareTypeModel as any).onChange(software);\n }\n\n clearSoftware() {\n this.softwareTypeMO = undefined;\n this.search$.next('');\n this.onSelectSoftware.emit();\n }\n\n resetInput() {\n this.deviceSoftwareTypeModel.reset();\n }\n\n writeValue(value: any): void {\n this.deviceSoftwareTypeModel.writeValue(value);\n }\n\n registerOnChange(fn: any): void {\n this.deviceSoftwareTypeModel.registerOnChange(fn);\n }\n\n registerOnTouched(fn: any): void {\n this.deviceSoftwareTypeModel.registerOnTouched(fn);\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.deviceSoftwareTypeModel.setDisabledState(isDisabled);\n }\n\n validate(control: AbstractControl<any, any>): ValidationErrors {\n return this.deviceSoftwareTypeModel.validate(control);\n }\n\n private searchInPreset(searchString: string): Observable<IResultList<IManagedObject>> {\n return this.presetSoftwareTypes$.pipe(\n map(types => ({\n data: types.filter(type => !searchString || type.softwareType.indexOf(searchString) > -1),\n res: undefined,\n statistics: { currentPage: 1, pageSize: types?.length, totalPages: 1 }\n }))\n );\n }\n\n private searchInRepository(searchString: string) {\n let query: QueryObjectFilterComparison | QueryObjectWithDedicatedFilter =\n this.queriesUtil.prependOrderbys({}, [{ softwareType: 1 }]);\n const filter = !!searchString\n ? {\n softwareType: {\n __eq: `*${searchString}*`\n }\n }\n : {\n __has: 'softwareType'\n };\n query = this.queriesUtil.addAndFilter(query, filter);\n\n return this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, {\n query,\n params: {\n pageSize: 200\n }\n });\n }\n\n private removeDuplicatesBySoftwareType(list: IManagedObject[]): IManagedObject[] {\n const uniqueBySoftwareType: IManagedObject[] = uniqBy(list, 'softwareType').filter(\n (sw: IManagedObject) => !this.softwareTypes.has(sw.softwareType)\n );\n uniqueBySoftwareType.forEach((sw: IManagedObject) => this.softwareTypes.add(sw.softwareType));\n return uniqueBySoftwareType;\n }\n}\n","<c8y-typeahead\n [(ngModel)]=\"softwareTypeMO\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n name=\"softwareType\"\n [placeholder]=\"placeholder\"\n [allowFreeEntries]=\"allowFreeEntries\"\n #deviceSoftwareTypeModel\n (onSearch)=\"search$.next($event)\"\n displayProperty=\"softwareType\"\n [ngStyle]=\"style\"\n>\n <c8y-li\n *ngIf=\"showClearSelectionOption\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"clearSoftware()\"\n [active]=\"!softwareTypeMO?.softwareType\"\n >\n <span>{{ clearSelectionOptionLabel | translate }}</span>\n </c8y-li>\n <c8y-li\n *c8yFor=\"\n let software of softwaresResult$;\n pipe: filterPipe;\n loadMore: 'auto';\n notFound: notFoundTemplateToUse\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectSoftware(software)\"\n [active]=\"softwareTypeMO?.softwareType === software.softwareType\"\n >\n <c8y-highlight\n [text]=\"software.softwareType || '--'\"\n [pattern]=\"search$ | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTypeAddNewTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"(search$ | async)?.length > 0\">\n <span translate>No match found.</span>\n <button\n title=\"{{ 'Add new`software type`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-8\"\n translate\n >\n Add new`software type`\n </button>\n </c8y-li>\n </ng-template>\n <ng-template #notFoundTypeTemplate>\n <c8y-li\n class=\"bg-level-2 p-8\"\n *ngIf=\"(search$ | async)?.length > 0 && (softwaresResult$ | async)?.data?.length === 0\"\n >\n <span translate>No match found. Refine your search terms or check your spelling.</span>\n </c8y-li>\n </ng-template>\n</c8y-typeahead>\n","import { NgModule } from '@angular/core';\nimport { OperationRealtimeService } from '@c8y/ngx-components';\nimport { FileDownloadComponent } from './file-download/file-download.component';\nimport { RepositoryService } from './repository.service';\nimport { RepositorySelectModalComponent } from './select-modal/repository-select-modal.component';\nimport { SoftwareTypeComponent } from './software-type/software-type.component';\n\n@NgModule({\n imports: [RepositorySelectModalComponent, FileDownloadComponent, SoftwareTypeComponent],\n providers: [RepositoryService, OperationRealtimeService],\n exports: [RepositorySelectModalComponent, FileDownloadComponent, SoftwareTypeComponent]\n})\nexport class SharedRepositoryModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_map","i1","i2","i3.RepositoryService","i4","CommonModule","i2.RepositoryService","C8yCommonModule","i3","i1.RepositoryService"],"mappings":"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"}