{"version":3,"file":"c8y-ngx-components-replace-device-replace-device-wizard.mjs","sources":["../../replace-device/replace-device-wizard/replace-device-wizard.model.ts","../../replace-device/replace-device-wizard/replace-device-wizard.service.ts","../../replace-device/replace-device-wizard/replace-device-wizard.component.ts","../../replace-device/replace-device-wizard/replace-device-wizard.component.html","../../replace-device/replace-device-wizard/c8y-ngx-components-replace-device-replace-device-wizard.ts"],"sourcesContent":["import { IExternalIdentity, IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\nimport { Observable } from 'rxjs';\n\nexport interface ReplaceDeviceContext {\n  deviceToReplace: IManagedObject;\n  replacementDevice: IManagedObject;\n  replacementDeviceId: string;\n  newExternalIds: IExternalIdentity[];\n  oldExternalIds: IExternalIdentity[];\n  deleteReplacedDeviceOwner: boolean;\n  time: string;\n  skip?: boolean;\n}\n\nexport interface Error {\n  text: string;\n  detailedData?:\n    | string\n    | {\n        status: string;\n        statusText: string;\n      };\n}\n\n/**\n * Declares an execution step in the device replacement flow.\n */\nexport interface ReplaceDeviceStep {\n  /**\n   * Label to be used in the replace device wizard UI.\n   */\n  label: string;\n  /**\n   * Step implementation.\n   */\n  action: (context: ReplaceDeviceContext) => Observable<unknown> | Promise<unknown>;\n  /**\n   * Defines if the result from step execution should be passed to the next step in the flow.\n   */\n  overrideContext?: boolean;\n  info?: StepInfo;\n  /**\n   * Current execution state of the step.\n   */\n  state?: ReplaceDeviceStepState;\n  /**\n   * Error occured during step execution.\n   */\n  error?: Error;\n  /**\n   * !Internal use only! Flag to skip step execution, used to control retrial.\n   */\n  skip?: boolean;\n  /**\n   * !Internal use only! Stores the context the step was initially executed with.\n   */\n  context?: ReplaceDeviceContext;\n  /**\n   * !Internal use only! Context to be used for step re-trial.\n   */\n  seed?: ReplaceDeviceContext;\n}\n\n/**\n * Allows to display an info popover for a particular step.\n */\nexport interface StepInfo {\n  /**\n   * Message that will be displayed as a popover for the given step.\n   */\n  msg?: string | undefined;\n  /**\n   * A function that will be executed\n   */\n  getMessage?: (context: ReplaceDeviceContext, step: ReplaceDeviceStep) => string | undefined;\n}\n\nconst REPLACE_DEVICE_STEP_STATES = <const>[\n  'Pending',\n  'Executing',\n  'Skipped',\n  'Failed',\n  'Successful'\n];\nexport type ReplaceDeviceStepState = (typeof REPLACE_DEVICE_STEP_STATES)[number];\n\nexport function isValidReplaceDeviceStepState(state: unknown): state is ReplaceDeviceStepState {\n  return REPLACE_DEVICE_STEP_STATES.includes(state as ReplaceDeviceStepState);\n}\n\nexport const REPLACE_DEVICE_STEP_STATE: { [key: string]: ReplaceDeviceStepState } = {\n  PENDING: gettext('Pending'),\n  EXECUTING: gettext('Executing'),\n  SKIPPED: gettext('Skipped'),\n  FAILED: gettext('Failed'),\n  SUCCESSFUL: gettext('Successful')\n};\n\nexport interface State {\n  icon?: SupportedIconsSuggestions;\n  styleClass?: string;\n}\n\nexport type ReplaceDeviceStepStatesMap = {\n  [key in ReplaceDeviceStepState]?: State;\n};\n\nexport const REPLACE_DEVICE_STEP_STATES_MAP: ReplaceDeviceStepStatesMap = {\n  Pending: {\n    icon: 'clock-o',\n    styleClass: 'text-info'\n  },\n  Executing: {\n    icon: 'refresh',\n    styleClass: 'text-info'\n  },\n  Skipped: {\n    icon: 'skip',\n    styleClass: 'text-info'\n  },\n  Failed: {\n    icon: 'exclamation-circle',\n    styleClass: 'text-danger'\n  },\n  Successful: {\n    icon: 'check-circle',\n    styleClass: 'text-success'\n  }\n};\n","import { Injectable } from '@angular/core';\nimport {\n  AuditRecordType,\n  AuditService,\n  EventService,\n  IdentityService,\n  IExternalIdentity,\n  IManagedObject,\n  InventoryService,\n  IResultList,\n  QueriesUtil,\n  UserService\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, AppStateService, toObservable } from '@c8y/ngx-components';\nimport { cloneDeep, pick } from 'lodash-es';\nimport {\n  BehaviorSubject,\n  combineLatest,\n  forkJoin,\n  from,\n  Observable,\n  of,\n  pipe,\n  Subject\n} from 'rxjs';\nimport {\n  catchError,\n  concatMap,\n  distinctUntilChanged,\n  map,\n  scan,\n  share,\n  shareReplay,\n  switchMap,\n  tap,\n  withLatestFrom\n} from 'rxjs/operators';\nimport {\n  Error,\n  isValidReplaceDeviceStepState,\n  ReplaceDeviceContext,\n  ReplaceDeviceStep,\n  ReplaceDeviceStepState,\n  REPLACE_DEVICE_STEP_STATE\n} from './replace-device-wizard.model';\n\n@Injectable()\nexport class ReplaceDeviceWizardService {\n  private static readonly NON_REENTRANT_STATES: ReplaceDeviceStepState[] = [\n    'Executing',\n    'Successful'\n  ];\n\n  get deviceToReplace$(): Observable<IManagedObject> {\n    return this.deviceToReplaceObs$;\n  }\n  get replacementDeviceId$(): Observable<string> {\n    return this.replacementDeviceIdObs$;\n  }\n\n  externalIds$: Observable<IResultList<IExternalIdentity>>;\n  externalIdsLoading$: Observable<boolean>;\n  externalIdsWithSelection$: Observable<Array<{ id: IExternalIdentity; selected: boolean }>>;\n  selectedExternalIds$: Observable<IExternalIdentity[]>;\n  deviceReplaced$: Observable<boolean>;\n  deviceReplacementInProgress$: Observable<boolean>;\n\n  steps: ReplaceDeviceStep[] = [];\n\n  private deviceToReplaceSubject$: BehaviorSubject<IManagedObject> = new BehaviorSubject(null);\n  private deviceToReplaceObs$: Observable<IManagedObject> = this.deviceToReplaceSubject$\n    .asObservable()\n    .pipe(shareReplay());\n  private replacementDeviceIdSubject$: Subject<string> = new Subject();\n  private replacementDeviceIdObs$: Observable<string> = this.replacementDeviceIdSubject$\n    .asObservable()\n    .pipe(shareReplay());\n  private checkExternalId$: Subject<{ id: IExternalIdentity; checked: boolean }> = new Subject();\n  private externalIdsLoadingSubject$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  private triggerDeviceReplacementSubject$: Subject<void> = new Subject();\n  private deviceReplacementInProgressSubject$: Subject<boolean> = new Subject();\n\n  private queriesUtil: QueriesUtil = new QueriesUtil();\n\n  constructor(\n    private inventory: InventoryService,\n    private identity: IdentityService,\n    private audit: AuditService,\n    private event: EventService,\n    private user: UserService,\n    private appState: AppStateService,\n    private alert: AlertService\n  ) {\n    this.externalIdsLoading$ = this.externalIdsLoadingSubject$.asObservable().pipe(shareReplay());\n    this.externalIds$ = this.replacementDeviceIdSubject$.pipe(\n      distinctUntilChanged(),\n      tap(() => this.externalIdsLoadingSubject$.next(true)),\n      switchMap(deviceId => this.identity.list(deviceId)),\n      tap(() => this.externalIdsLoadingSubject$.next(false)),\n      tap(() => this.checkExternalId(null, false)),\n      catchError(err => {\n        this.alert.addServerFailure(err);\n        return of(null);\n      }),\n      shareReplay()\n    );\n\n    this.externalIdsWithSelection$ = combineLatest([\n      this.externalIds$.pipe(\n        map(result => result?.data),\n        map(externalIds => externalIds?.map(id => ({ id, selected: true })))\n      ),\n      this.checkExternalId$\n    ]).pipe(\n      scan((acc, val) => {\n        const [selectedIds, lastAction] = acc;\n        const [_, checkAction] = val;\n        if (\n          !(\n            lastAction?.checked === checkAction?.checked &&\n            this.areExtIdsEqual(lastAction?.id, checkAction?.id)\n          )\n        ) {\n          selectedIds.forEach(\n            id =>\n              (id.selected = this.areExtIdsEqual(id.id, checkAction.id)\n                ? checkAction.checked\n                : id.selected)\n          );\n        }\n        return val;\n      }),\n      map(([externalIds]) => externalIds),\n      shareReplay()\n    );\n\n    this.selectedExternalIds$ = this.externalIdsWithSelection$.pipe(\n      map(ids => ids.filter(id => id.selected).map(id => id.id)),\n      shareReplay()\n    );\n\n    this.defineSteps();\n\n    const toContext = ([_, deviceToReplace, replacementDeviceId, newExternalIds]) => ({\n      deviceToReplace,\n      replacementDeviceId,\n      newExternalIds\n    });\n\n    this.deviceReplaced$ = this.triggerDeviceReplacementSubject$.pipe(\n      tap(() => this.deviceReplacementInProgressSubject$.next(true)),\n      withLatestFrom(this.deviceToReplace$, this.replacementDeviceId$, this.selectedExternalIds$),\n      map(toContext),\n      concatMap(context =>\n        this.steps\n          .map(step => this.executeStep(step))\n          .reduce((ctx, step) => ctx.pipe(step), of(context))\n      ),\n      tap(() => this.deviceReplacementInProgressSubject$.next(false)),\n      map(() => !this.steps.some(step => step.state === 'Failed')),\n      share()\n    );\n\n    this.deviceReplacementInProgress$ = this.deviceReplacementInProgressSubject$\n      .asObservable()\n      .pipe(shareReplay());\n  }\n\n  forDevice(deviceToReplace: IManagedObject) {\n    this.deviceToReplaceSubject$.next(deviceToReplace);\n  }\n\n  changeReplacementDeviceId(replacementDeviceId: string) {\n    this.replacementDeviceIdSubject$.next(replacementDeviceId);\n  }\n\n  checkExternalId(id: IExternalIdentity, checked: boolean) {\n    this.checkExternalId$.next({ id, checked });\n  }\n\n  replaceDevice() {\n    this.triggerDeviceReplacementSubject$.next();\n  }\n\n  retryStep(step?: ReplaceDeviceStep) {\n    this.steps.forEach(s => {\n      if (\n        (s.label === step?.label || !step) &&\n        !ReplaceDeviceWizardService.NON_REENTRANT_STATES.includes(s.state)\n      ) {\n        s.skip = false;\n        s.seed = s.context;\n        s.state = 'Pending';\n        delete s.error;\n      } else {\n        s.skip = true;\n      }\n    });\n    this.replaceDevice();\n  }\n\n  private defineSteps() {\n    this.steps = [\n      {\n        label: gettext('Gather required data'),\n        overrideContext: true,\n        action: (context: ReplaceDeviceContext) => {\n          const { deviceToReplace, replacementDeviceId, newExternalIds } = context;\n          if (deviceToReplace.id === replacementDeviceId) {\n            throw new Error(\n              gettext(\n                'The device to replace and the replacement device cannot be one and the same device.'\n              )\n            );\n          }\n          return forkJoin([\n            from(\n              this.inventory.list({\n                query: this.queriesUtil.buildQuery({ owner: deviceToReplace.owner })\n              })\n            ).pipe(map(result => result?.data?.length === 1)),\n            from(this.inventory.detail(replacementDeviceId)).pipe(map(result => result?.data)),\n            from(this.identity.list(deviceToReplace.id)).pipe(map(result => result?.data))\n          ]).pipe(\n            map(([deleteReplacedDeviceOwner, replacementDevice, oldExternalIds]) => ({\n              deviceToReplace,\n              replacementDevice,\n              newExternalIds,\n              oldExternalIds,\n              deleteReplacedDeviceOwner,\n              time: new Date().toISOString()\n            }))\n          );\n        }\n      },\n      {\n        label: gettext('Delete external IDs of replacement device'),\n        action: (context: ReplaceDeviceContext) => {\n          const { newExternalIds } = context;\n          return forkJoin(newExternalIds.map(id => this.identity.delete(id)));\n        }\n      },\n      {\n        label: gettext('Create new external IDs for the original device'),\n        action: (context: ReplaceDeviceContext) => {\n          const { newExternalIds, deviceToReplace } = context;\n          return forkJoin(\n            newExternalIds\n              .map(extId => ({\n                ...pick(extId, ['type', 'externalId']),\n                managedObject: { ...pick(deviceToReplace, ['id']) }\n              }))\n              .map(id => this.identity.create(id))\n          );\n        }\n      },\n      {\n        label: gettext('Delete old external IDs of original device'),\n        action: (context: ReplaceDeviceContext) => {\n          const { oldExternalIds } = context;\n          return oldExternalIds?.length\n            ? forkJoin(oldExternalIds.map(id => this.identity.delete(id)))\n            : of(REPLACE_DEVICE_STEP_STATE.SKIPPED);\n        },\n        info: {\n          getMessage: (_, step) =>\n            step.state === 'Skipped'\n              ? gettext('No existing external IDs were determined.')\n              : undefined\n        }\n      },\n      {\n        label: gettext('Change owner of original device`owner may be a human or system user`'),\n        action: (context: ReplaceDeviceContext) => {\n          const { deviceToReplace, replacementDevice, oldExternalIds, time } = context;\n          return this.inventory.update({\n            id: deviceToReplace.id,\n            owner: replacementDevice.owner,\n            c8y_LastReplacement: {\n              time,\n              user: this.appState.currentUser.value.id,\n              previousExternalIds: oldExternalIds.map(id => pick(id, ['externalId', 'type']))\n            }\n          });\n        }\n      },\n      {\n        label: gettext('Delete old owner of original device'),\n        action: (context: ReplaceDeviceContext) => {\n          const { deleteReplacedDeviceOwner, deviceToReplace } = context;\n          return deleteReplacedDeviceOwner\n            ? this.user.delete(deviceToReplace.owner)\n            : of(REPLACE_DEVICE_STEP_STATE.SKIPPED);\n        },\n        info: {\n          getMessage: (_, step) =>\n            step.state === 'Skipped'\n              ? gettext('User was not deleted because it is assigned as an owner of other devices.')\n              : undefined\n        }\n      },\n      {\n        label: gettext('Delete replacement device'),\n        action: (context: ReplaceDeviceContext) => {\n          const { replacementDevice } = context;\n          return this.inventory.delete(replacementDevice.id);\n        }\n      },\n      {\n        label: gettext('Create event'),\n        action: (context: ReplaceDeviceContext) => {\n          const { deviceToReplace, oldExternalIds, newExternalIds, time } = context;\n          return this.event.create({\n            source: { id: deviceToReplace.id },\n            text: `Device with external ID(s) ${this.extIdsToString(\n              oldExternalIds\n            )} was replaced by device with external ID(s) ${this.extIdsToString(newExternalIds)}`,\n            time,\n            type: 'c8y_DeviceReplaced'\n          });\n        }\n      },\n      {\n        label: gettext('Create audit log'),\n        action: (context: ReplaceDeviceContext) => {\n          const { deviceToReplace, oldExternalIds, newExternalIds, time } = context;\n          return this.audit.create({\n            activity: gettext('Device replaced'),\n            source: { id: deviceToReplace.id },\n            text: `Device with external ID(s) ${this.extIdsToString(\n              oldExternalIds\n            )} was replaced by device with external ID(s) ${this.extIdsToString(newExternalIds)}`,\n            time,\n            type: AuditRecordType.INVENTORY,\n            user: this.appState.currentUser.value.id\n          });\n        }\n      }\n    ];\n  }\n\n  private executeStep(step: ReplaceDeviceStep) {\n    return pipe(\n      tap(\n        (ctx: ReplaceDeviceContext) =>\n          (step.state = step?.skip || ctx.skip ? step.state : REPLACE_DEVICE_STEP_STATE.EXECUTING)\n      ),\n      concatMap((ctx: ReplaceDeviceContext) => {\n        if (!step.context && !ctx.skip) {\n          step.context = cloneDeep(ctx);\n        }\n        const context = cloneDeep(step.seed ?? ctx);\n        return step?.skip || ctx.skip\n          ? of(context)\n          : toObservable(this.unwrapStepAction(context, step.action)).pipe(\n              tap(\n                result =>\n                  (step.state = isValidReplaceDeviceStepState(result)\n                    ? result\n                    : REPLACE_DEVICE_STEP_STATE.SUCCESSFUL)\n              ),\n              catchError(err => {\n                step.state = REPLACE_DEVICE_STEP_STATE.FAILED;\n                step.error = this.toError(err);\n                context.skip = step.overrideContext;\n                return of(context);\n              }),\n              tap(() => {\n                if (typeof step.info?.getMessage === 'function') {\n                  step.info.msg = step.info.getMessage(context, step);\n                }\n              }),\n              map(result => (step.overrideContext ? result : context))\n            );\n      })\n    );\n  }\n\n  private unwrapStepAction(\n    context: ReplaceDeviceContext,\n    action: (context: ReplaceDeviceContext) => Observable<unknown> | Promise<unknown>\n  ) {\n    try {\n      return action(context);\n    } catch (err) {\n      // bubble up any runtime errors\n      return of({}).pipe(\n        tap(() => {\n          throw err;\n        })\n      );\n    }\n  }\n\n  private areExtIdsEqual(idA: IExternalIdentity, idB: IExternalIdentity): boolean {\n    return idA?.type === idB?.type && idA?.externalId === idB?.externalId;\n  }\n\n  private extIdsToString(extnernalIds: IExternalIdentity[]) {\n    return extnernalIds?.map(id => `${id.externalId} [${id.type}]`).join(', ');\n  }\n\n  private toError(err): Error {\n    const { data, res, message } = err;\n    let text = data?.message || message;\n    let detailedData;\n    if (data) {\n      if (typeof data === 'object') {\n        detailedData = data.exceptionMessage;\n      } else if (typeof data === 'string') {\n        detailedData = data;\n      }\n    }\n    const hasRelevantMessage = !!(text || detailedData);\n    if (!text) {\n      text = gettext('A server error occurred.');\n    }\n    if (res && !hasRelevantMessage) {\n      detailedData = pick(res, ['status', 'statusText']);\n    }\n\n    return { text, detailedData };\n  }\n}\n","import { Component, HostBinding, Input, Optional, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  BottomDrawerRef,\n  C8yStepper,\n  Column,\n  CoreModule,\n  DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n  DATA_GRID_CONFIGURATION_STRATEGY,\n  GridConfigContextProvider,\n  ModalService,\n  Status,\n  UserPreferencesConfigurationStrategy,\n  UserPreferencesGridConfigContext\n} from '@c8y/ngx-components';\nimport { DeviceGridModule, DeviceGridService } from '@c8y/ngx-components/device-grid';\nimport { DeviceSelectorModule } from '@c8y/ngx-components/operations/device-selector';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { REPLACE_DEVICE_STEP_STATES_MAP } from './replace-device-wizard.model';\nimport { ReplaceDeviceWizardService } from './replace-device-wizard.service';\n\n@Component({\n  standalone: true,\n  selector: 'c8y-replace-device-wizard',\n  imports: [\n    CoreModule,\n    DeviceGridModule,\n    DeviceSelectorModule,\n    TooltipModule,\n    CollapseModule,\n    PopoverModule\n  ],\n  providers: [\n    DeviceGridService,\n    ReplaceDeviceWizardService,\n    {\n      provide: DATA_GRID_CONFIGURATION_STRATEGY,\n      useClass: UserPreferencesConfigurationStrategy\n    },\n    {\n      provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n      useExisting: ReplaceDeviceWizardComponent\n    }\n  ],\n  templateUrl: './replace-device-wizard.component.html'\n})\nexport class ReplaceDeviceWizardComponent implements GridConfigContextProvider {\n  private static readonly DEFAULT_VISIBLE_COLUMNS = [\n    'status',\n    'name',\n    'serialNumber',\n    'registrationDate',\n    'systemId',\n    'imei'\n  ];\n\n  REPLACE_DEVICE_STEP_STATES_MAP = REPLACE_DEVICE_STEP_STATES_MAP;\n\n  @HostBinding('class')\n  classes = 'd-contents';\n\n  @ViewChild(C8yStepper, { static: true })\n  stepper: C8yStepper;\n\n  @Input()\n  set deviceToReplace(deviceToReplace: IManagedObject) {\n    this.service.forDevice(deviceToReplace);\n  }\n\n  replacementDeviceId: string;\n\n  baseQuery$: Observable<object> = this.service.deviceToReplace$.pipe(\n    map(device => ({\n      __not: {\n        id: {\n          __eq: device?.id\n        }\n      }\n    }))\n  );\n  columns: Column[];\n\n  constructor(\n    public service: ReplaceDeviceWizardService,\n    private deviceGridService: DeviceGridService,\n    private modal: ModalService,\n    @Optional() private drawerRef: BottomDrawerRef<ReplaceDeviceWizardComponent>\n  ) {\n    this.columns = this.deviceGridService.getDefaultColumns().map(column => {\n      column.visible = ReplaceDeviceWizardComponent.DEFAULT_VISIBLE_COLUMNS.includes(column.name);\n      return column;\n    });\n  }\n\n  getGridConfigContext(): UserPreferencesGridConfigContext {\n    return {\n      key: 'replace-device-wizard-grid',\n      configFilter: {\n        filter: false\n      }\n    };\n  }\n\n  async replace() {\n    try {\n      await this.modal.confirm(\n        gettext('Replace device'),\n        gettext(\n          'You are about to replace a device. When the process is finished, the replacement device and its data will be deleted. Do you want to proceed?'\n        ),\n        Status.DANGER,\n        { ok: gettext('Replace'), cancel: gettext('Cancel') }\n      );\n      this.service.replaceDevice();\n      this.continue();\n    } catch (ex) {\n      // Intentionally empty\n    }\n  }\n\n  continue() {\n    this.stepper.selected.completed = true;\n    this.stepper.next();\n  }\n\n  cancel() {\n    this.close();\n  }\n\n  close() {\n    if (this.drawerRef) {\n      this.drawerRef.close();\n    }\n  }\n}\n","<c8y-stepper\n  class=\"d-contents c8y-stepper--no-btns\"\n  [disableDefaultIcons]=\"{ edit: true, done: false }\"\n  id=\"modal-body\"\n  [customClasses]=\"[\n    'col-xs-10',\n    'col-xs-offset-1',\n    'col-sm-8',\n    'col-sm-offset-2',\n    'm-t-24',\n    'm-b-40',\n    'p-0',\n    'flex-no-shrink'\n  ]\"\n  linear\n>\n  <cdk-step [label]=\"'Replacement device' | translate\">\n    <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n      <div class=\"row\">\n        <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n          <div class=\"h4 text-center text-medium\">\n            {{ 'Replacement device' | translate }}\n          </div>\n        </div>\n      </div>\n    </div>\n    <c8y-device-grid\n      class=\"flex-grow col-xs-12 no-gutter\"\n      [title]=\"'Select replacement device' | translate\"\n      [infiniteScroll]=\"'auto'\"\n      [actionControls]=\"[]\"\n      [columns]=\"columns\"\n      [selectable]=\"true\"\n      [singleSelection]=\"true\"\n      [baseQuery]=\"baseQuery$ | async\"\n      (itemsSelect)=\"replacementDeviceId = $event[0]\"\n    ></c8y-device-grid>\n    <c8y-stepper-buttons\n      class=\"d-block card-footer p-24 separator\"\n      [disabled]=\"!replacementDeviceId\"\n      (onCancel)=\"cancel()\"\n      (onNext)=\"service.changeReplacementDeviceId(replacementDeviceId); continue()\"\n    ></c8y-stepper-buttons>\n  </cdk-step>\n\n  <cdk-step [label]=\"'Select external IDs' | translate\">\n    <div class=\"p-16 p-t-0 flex-no-shrink col-xs-12\">\n      <div class=\"row\">\n        <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n          <div class=\"h4 text-center text-medium\">\n            {{ 'Select external IDs' | translate }}\n          </div>\n        </div>\n      </div>\n    </div>\n    <c8y-li class=\"page-sticky-header hidden-sm hidden-xs\">\n      <c8y-li-icon><i class=\"p-l-24\"></i></c8y-li-icon>\n      <c8y-li-body class=\"content-flex-40\">\n        <div class=\"col-4\">\n          <span\n            class=\"text-medium text-truncate\"\n            title=\" {{ 'Type' | translate }} \"\n          >\n            {{ 'Type' | translate }}\n          </span>\n        </div>\n        <div class=\"col-6\">\n          <span\n            class=\"text-medium text-truncate\"\n            title=\"{{ 'External ID' | translate }}\"\n          >\n            {{ 'External ID' | translate }}\n          </span>\n        </div>\n      </c8y-li-body>\n    </c8y-li>\n    <div\n      class=\"col-xs-12 flex-grow no-gutter\"\n      *ngIf=\"!(service.externalIdsLoading$ | async); else loading\"\n    >\n      <div\n        class=\"card-inner-scroll fit-h\"\n        *ngIf=\"(service.externalIdsWithSelection$ | async)?.length > 0; else noIds\"\n      >\n        <div class=\"card-block p-t-0 p-b-0\">\n          <c8y-list-group>\n            <c8y-li *ngFor=\"let extId of service.externalIdsWithSelection$ | async\">\n              <c8y-li-checkbox\n                [selected]=\"extId.selected\"\n                (onSelect)=\"service.checkExternalId(extId.id, $event)\"\n              ></c8y-li-checkbox>\n              <c8y-li-body class=\"content-flex-40\">\n                <div class=\"col-4 m-b-xs-8\">\n                  <div\n                    class=\"text-truncate\"\n                    title=\"{{ 'Type' | translate }}\"\n                  >\n                    <span\n                      class=\"text-label-small m-r-8 visible-xs visible-sm\"\n                      translate\n                    >\n                      Type\n                    </span>\n                    {{ extId.id.type }}\n                  </div>\n                </div>\n                <div class=\"col-6 m-b-xs-8\">\n                  <div\n                    class=\"text-truncate\"\n                    title=\"{{ 'External ID' | translate }}\"\n                  >\n                    <span\n                      class=\"text-label-small m-r-8 visible-xs visible-sm\"\n                      translate\n                    >\n                      External ID\n                    </span>\n                    {{ extId.id.externalId }}\n                  </div>\n                </div>\n              </c8y-li-body>\n            </c8y-li>\n          </c8y-list-group>\n        </div>\n      </div>\n      <ng-template #noIds>\n        <c8y-ui-empty-state\n          [icon]=\"'barcode'\"\n          [title]=\"'No external IDs assigned.'\"\n          [subtitle]=\"\n            'The selected replacement device does not have external IDs assigned. Go back to &quot;Replacement device&quot; and select a different device.'\n              | translate\n          \"\n          *ngIf=\"true\"\n        ></c8y-ui-empty-state>\n      </ng-template>\n    </div>\n    <ng-template #loading>\n      <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n        <c8y-loading></c8y-loading>\n      </div>\n    </ng-template>\n    <c8y-stepper-buttons\n      class=\"d-block card-footer p-24 separator\"\n      [disabled]=\"\n        (service.externalIdsLoading$ | async) || !(service.selectedExternalIds$ | async)?.length\n      \"\n      (onCancel)=\"cancel()\"\n      (onNext)=\"replace()\"\n      [labels]=\"{ next: ('Replace' | translate) }\"\n    ></c8y-stepper-buttons>\n  </cdk-step>\n\n  <cdk-step [label]=\"'Replace' | translate\">\n    <div class=\"p-16 p-t-0 flex-no-shrink col-xs-12 separator-bottom\">\n      <div class=\"row\">\n        <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n          <div class=\"h4 text-center text-medium\">\n            {{ 'Replace' | translate }}\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"d-flex d-col a-i-center j-c-center inner-scroll\">\n      <c8y-list-group class=\"col-sm-8 col-md-6\">\n        <c8y-li\n          *ngFor=\"let step of service.steps\"\n          [attr.data-cy]=\"'c8y-replace-device-wizard--step-' + step.label\"\n        >\n          <c8y-li-icon>\n            <i\n              [c8yIcon]=\"REPLACE_DEVICE_STEP_STATES_MAP[step.state || 'Pending']?.icon\"\n              [tooltip]=\"(step.state || 'Pending').toString() | translate\"\n              [ngClass]=\"REPLACE_DEVICE_STEP_STATES_MAP[step.state || 'Pending']?.styleClass\"\n            ></i>\n          </c8y-li-icon>\n          <c8y-li-body>\n            <span [ngClass]=\"{ 'text-bold': !!step.error }\">{{ step.label | translate }}</span>\n            <button\n              class=\"btn-help btn-help--sm pull-right\"\n              [attr.aria-label]=\"'Help' | translate\"\n              [attr.aria-label]=\"step.info.msg | translate\"\n              [popover]=\"step.info.msg | translate\"\n              placement=\"right\"\n              triggers=\"focus\"\n              type=\"button\"\n              *ngIf=\"!!step.info?.msg\"\n            >\n              <i c8yIcon=\"question-circle-o\"></i>\n            </button>\n          </c8y-li-body>\n          <c8y-li-collapse\n            #alert\n            *ngIf=\"step.error\"\n          >\n            <span class=\"message\">{{ step.error?.text | translate }}</span>\n            <p\n              class=\"text-muted m-t-8\"\n              *ngIf=\"step?.error?.detailedData\"\n            >\n              <button\n                class=\"btn btn-clean\"\n                (click)=\"alert.expanded = !alert.expanded\"\n              >\n                <i c8yIcon=\"chevron-down\"></i>\n                <span *ngIf=\"!alert.expanded\">Show details</span>\n                <span *ngIf=\"alert.expanded\">Hide details</span>\n              </button>\n            </p>\n            <div\n              [collapse]=\"!alert.expanded\"\n              [isAnimated]=\"true\"\n            >\n              {{ step.error.detailedData | json }}\n            </div>\n          </c8y-li-collapse>\n          <c8y-li-action\n            icon=\"play\"\n            label=\"{{ 'Retry this step`button`' | translate }}\"\n            *ngIf=\"step.state === 'Failed' && !step.overrideContext\"\n            (click)=\"service.retryStep(step)\"\n            data-cy=\"c8y-replace-device-wizard--retry-step\"\n          ></c8y-li-action>\n        </c8y-li>\n      </c8y-list-group>\n    </div>\n\n    <c8y-stepper-buttons\n      class=\"d-block card-footer p-24 separator\"\n      [pending]=\"service.deviceReplacementInProgress$ | async\"\n      (onBack)=\"close()\"\n      [labels]=\"{ back: 'Close' | translate }\"\n    >\n      <button\n        class=\"btn btn-primary\"\n        [title]=\"'Retry' | translate\"\n        type=\"button\"\n        *ngIf=\"(service.deviceReplaced$ | async) === false\"\n        (click)=\"service.retryStep()\"\n        [ngClass]=\"{ 'btn-pending': service.deviceReplacementInProgress$ | async }\"\n        [disabled]=\"service.deviceReplacementInProgress$ | async\"\n        data-cy=\"c8y-replace-device-wizard--btn-retry\"\n      >\n        {{ 'Retry' | translate }}\n      </button>\n    </c8y-stepper-buttons>\n  </cdk-step>\n</c8y-stepper>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1.ReplaceDeviceWizardService"],"mappings":"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"}