{"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 { AsyncPipe, NgStyle } from '@angular/common';\nimport {\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  FormsModule,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport {\n  IManagedObject,\n  IResultList,\n  QueriesUtil,\n  QueryObjectFilterComparison,\n  QueryObjectWithDedicatedFilter\n} from '@c8y/client';\nimport {\n  C8yTranslateDirective,\n  C8yTranslatePipe,\n  ForOfDirective,\n  ForOfFilterPipe,\n  HighlightComponent,\n  ListItemComponent,\n  toObservable,\n  TypeaheadComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\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';\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    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  }\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  [ngStyle]=\"style\"\n  name=\"softwareType\"\n  [(ngModel)]=\"softwareTypeMO\"\n  [required]=\"required\"\n  [disabled]=\"disabled\"\n  [placeholder]=\"placeholder\"\n  [allowFreeEntries]=\"allowFreeEntries\"\n  #deviceSoftwareTypeModel\n  (onSearch)=\"search$.next($event)\"\n  displayProperty=\"softwareType\"\n>\n  @if (showClearSelectionOption) {\n    <c8y-li\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  }\n  <c8y-li\n    class=\"p-l-8 p-r-8 c8y-list__item--link\"\n    *c8yFor=\"\n      let software of softwaresResult$;\n      pipe: filterPipe;\n      loadMore: 'auto';\n      notFound: notFoundTemplateToUse\n    \"\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    @if ((search$ | async)?.length > 0) {\n      <c8y-li class=\"bg-level-2 p-8\">\n        <span translate>No match found.</span>\n        <button\n          class=\"btn btn-primary btn-xs m-l-8\"\n          title=\"{{ 'Add new`software type`' | translate }}\"\n          type=\"button\"\n          translate\n        >\n          Add new`software type`\n        </button>\n      </c8y-li>\n    }\n  </ng-template>\n  <ng-template #notFoundTypeTemplate>\n    @if ((search$ | async)?.length > 0 && (softwaresResult$ | async)?.data?.length === 0) {\n      <c8y-li class=\"bg-level-2 p-8\">\n        <span translate>No match found. Refine your search terms or check your spelling.</span>\n      </c8y-li>\n    }\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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"}