{"version":3,"file":"c8y-ngx-components-diagnostics.mjs","sources":["../../diagnostics/diagnostics.service.ts","../../diagnostics/diagnostics-tab.guard.ts","../../diagnostics/diagnostics.component.ts","../../diagnostics/diagnostics.component.html","../../diagnostics/diagnostics.module.ts","../../diagnostics/c8y-ngx-components-diagnostics.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport {\n  IManagedObject,\n  IResultList,\n  InventoryBinaryService,\n  IOperation,\n  OperationService,\n  OperationStatus\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, ModalService } from '@c8y/ngx-components';\nimport { assign } from 'lodash-es';\nimport { switchMap } from 'rxjs/operators';\n\n@Injectable()\nexport class DiagnosticsService {\n  readonly fragment = 'c8y_DiagnosticReport';\n  constructor(\n    private operationService: OperationService,\n    private inventoryBinary: InventoryBinaryService,\n    private modalService: ModalService,\n    private alertService: AlertService\n  ) {}\n\n  isSupportedDevice(device): boolean {\n    const supportedOperations = (device && device.c8y_SupportedOperations) || [];\n    return supportedOperations.includes(this.fragment);\n  }\n\n  getOperations$(device$: Observable<IManagedObject>): Observable<IResultList<IOperation>> {\n    return device$.pipe(\n      switchMap(device =>\n        this.operationService.list({\n          deviceId: device.id,\n          fragmentType: this.fragment,\n          dateFrom: new Date(0).toISOString(),\n          dateTo: new Date(Date.now()).toISOString(),\n          revert: true,\n          pageSize: 10,\n          withTotalPages: true\n        })\n      )\n    );\n  }\n\n  async createOperation(deviceId: string) {\n    const operation = {\n      deviceId,\n      description: gettext('Diagnostic file request'),\n      [this.fragment]: {}\n    };\n    try {\n      await this.operationService.create(operation);\n      this.alertService.success(gettext('Diagnostic file request sent.'));\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    }\n  }\n\n  async deleteOperation(operation: IOperation) {\n    try {\n      const result = await this.modalService.confirm(\n        gettext('Delete diagnostic file'),\n        gettext('You are about to delete this diagnostic file. Do you want to proceed?'),\n        'danger',\n        {\n          ok: gettext('Delete'),\n          cancel: gettext('Cancel')\n        }\n      );\n\n      if (result) {\n        this.deleteDiagnosticsBinary(operation);\n      }\n    } catch (error) {\n      // Do nothing\n    }\n  }\n\n  async cancelOperation(operation: IOperation) {\n    try {\n      const operationAfterUpdate = (\n        await this.operationService.update({\n          id: operation.id,\n          status: OperationStatus.FAILED,\n          failureReason: gettext('Operation cancelled by user.')\n        })\n      ).data;\n      assign(operation, operationAfterUpdate);\n      this.alertService.success(gettext('Diagnostic file request cancelled.'));\n    } catch (ex) {\n      this.alertService.addServerFailure(ex);\n    }\n  }\n\n  private getOperation(op: IOperation) {\n    if (!op) {\n      return null;\n    }\n    return op && op[this.fragment];\n  }\n\n  private async deleteDiagnosticsBinary(op: IOperation) {\n    const operation = this.getOperation(op);\n    if (operation && operation.file) {\n      const { file } = operation;\n      try {\n        const binaryId = this.inventoryBinary.getIdFromUrl(file);\n        const result = await this.inventoryBinary.delete(binaryId);\n        if (result) {\n          this.deleteDiagnosticsFragment(op);\n        }\n      } catch (err) {\n        if (err.res.status === 404) {\n          // In case the file is already deleted via other means we want to delete the fragment\n          this.deleteDiagnosticsFragment(op);\n        } else {\n          const msg = gettext('Could not delete the diagnostic file.');\n          this.alertService.danger(msg);\n        }\n      }\n    }\n  }\n\n  private async deleteDiagnosticsFragment(op: IOperation) {\n    const deleteOp = {\n      id: op.id,\n      status: op.status,\n      [this.fragment]: null\n    };\n    try {\n      const operationAfterUpdate = (await this.operationService.update(deleteOp)).data;\n      assign(op, operationAfterUpdate);\n      this.alertService.success(gettext('Diagnostic file deleted.'));\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    }\n  }\n}\n","import { DiagnosticsService } from './diagnostics.service';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class DiagnosticsTabGuard {\n  constructor(private diagnosticsService: DiagnosticsService) {}\n\n  canActivate(route: ActivatedRouteSnapshot) {\n    const device = route.data.contextData || route.parent.data.contextData;\n    return this.diagnosticsService.isSupportedDevice(device);\n  }\n}\n","import { DiagnosticsService } from './diagnostics.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { Component } from '@angular/core';\nimport { BehaviorSubject, pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n  ForOfRealtimeOptions,\n  operationStatusClasses,\n  operationStatusIcons,\n  OperationRealtimeService,\n  ForOfFilterPipe,\n  ActionBarItemComponent,\n  IconDirective,\n  C8yTranslateDirective,\n  ListGroupComponent,\n  ForOfDirective,\n  ListItemTimelineComponent,\n  ListItemComponent,\n  ListItemIconComponent,\n  ListItemBodyComponent,\n  ListItemActionComponent,\n  EmptyStateComponent,\n  C8yTranslatePipe,\n  DatePipe\n} from '@c8y/ngx-components';\nimport { IManagedObject, IOperation } from '@c8y/client';\nimport { NgIf, NgClass } from '@angular/common';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { FileDownloadComponent } from '@c8y/ngx-components/repository/shared';\n@Component({\n  templateUrl: './diagnostics.component.html',\n  selector: 'c8y-diagnostics',\n  imports: [\n    ActionBarItemComponent,\n    IconDirective,\n    C8yTranslateDirective,\n    NgIf,\n    ListGroupComponent,\n    ForOfDirective,\n    ListItemTimelineComponent,\n    ListItemComponent,\n    ListItemIconComponent,\n    NgClass,\n    TooltipDirective,\n    ListItemBodyComponent,\n    FileDownloadComponent,\n    ListItemActionComponent,\n    EmptyStateComponent,\n    C8yTranslatePipe,\n    DatePipe\n  ]\n})\nexport class DiagnosticsComponent {\n  statusIcons = operationStatusIcons;\n  statusClasses = operationStatusClasses;\n  deviceId: string = this.route.snapshot.parent.data.contextData.id;\n  device$ = new BehaviorSubject<IManagedObject>(this.route.snapshot.parent.data.contextData);\n  operations$ = this.diagnosticService.getOperations$(this.device$);\n  operationsPipe: ForOfFilterPipe<IOperation> = pipe(\n    map(ops => ops.filter(op => op[this.diagnosticService.fragment]))\n  );\n  realtimeOptions: ForOfRealtimeOptions = {\n    entityOrId: this.deviceId,\n    removeOnUpdate: true,\n    insertOnUpdate: true\n  } as ForOfRealtimeOptions;\n  operationCount: number;\n\n  constructor(\n    private route: ActivatedRoute,\n    private diagnosticService: DiagnosticsService,\n    public operationRealtime: OperationRealtimeService\n  ) {}\n\n  onDiagnosticRequest() {\n    this.diagnosticService.createOperation(this.deviceId);\n  }\n\n  onDelete(operation: IOperation) {\n    this.diagnosticService.deleteOperation(operation);\n  }\n\n  onCancel(operation: IOperation) {\n    this.diagnosticService.cancelOperation(operation);\n  }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n  <button\n    class=\"btn btn-link\"\n    type=\"button\"\n    title=\"{{ 'Request diagnostic file' | translate }}\"\n    (click)=\"onDiagnosticRequest()\"\n  >\n    <i c8yIcon=\"stethoscope\"></i>\n    <span translate>Request diagnostic file</span>\n  </button>\n</c8y-action-bar-item>\n\n<div\n  class=\"page-sticky-header hidden-xs c8y-list__item c8y-list--timeline\"\n  *ngIf=\"operationCount > 0\"\n>\n  <div class=\"d-flex\">\n    <div class=\"c8y-list--timeline__item__date a-s-center\">\n      <label>{{ 'Date' | translate }}</label>\n    </div>\n    <div class=\"c8y-list__item__block flex-grow\">\n      <div class=\"c8y-list__item__icon\">\n        <i class=\"p-l-24\"></i>\n      </div>\n      <div class=\"c8y-list__item__body\">\n        <div class=\"content-flex-40\">\n          <div class=\"col-4\">{{ 'Event' | translate }}</div>\n          <div class=\"col-5 m-l-8\">{{ 'File' | translate }}</div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n\n<c8y-list-group>\n  <ng-template\n    c8yFor\n    let-operation\n    [c8yForOf]=\"operations$\"\n    [c8yForPipe]=\"operationsPipe\"\n    [c8yForRealtime]=\"operationRealtime\"\n    [c8yForRealtimeOptions]=\"realtimeOptions\"\n    (c8yForCount)=\"operationCount = $event\"\n  >\n    <c8y-li-timeline>\n      {{ operation.creationTime | c8yDate }}\n      <c8y-li>\n        <c8y-li-icon>\n          <i\n            [c8yIcon]=\"statusIcons[operation.status]\"\n            [ngClass]=\"statusClasses[operation.status]\"\n            [tooltip]=\"operation.status?.toString() | translate\"\n          ></i>\n        </c8y-li-icon>\n        <c8y-li-body class=\"content-flex-40\">\n          <div class=\"col-4\">\n            <p class=\"text-truncate-wrap\" title=\"{{ operation.description | translate }}\">\n              {{ operation.description | translate }}\n            </p>\n          </div>\n          <div class=\"col-5\" *ngIf=\"operation.c8y_DiagnosticReport?.file\">\n            <div class=\"text-truncate-wrap m-t-xs-8\">\n              <span class=\"text-label-small visible-xs\" translate>File</span>\n              <span title=\"{{ operation.c8y_DiagnosticReport.file }}\">\n                <c8y-file-download\n                  url=\"{{ operation.c8y_DiagnosticReport.file }}\"\n                ></c8y-file-download>\n              </span>\n            </div>\n          </div>\n        </c8y-li-body>\n        <c8y-li-action\n          (click)=\"onCancel(operation)\"\n          *ngIf=\"operation.status === 'PENDING'\"\n          icon=\"times\"\n          label=\"{{ 'Cancel' | translate }}\"\n        ></c8y-li-action>\n        <c8y-li-action\n          (click)=\"onDelete(operation)\"\n          *ngIf=\"operation.status === 'SUCCESSFUL'\"\n          icon=\"delete\"\n          label=\"{{ 'Delete' | translate }}\"\n        ></c8y-li-action>\n      </c8y-li>\n    </c8y-li-timeline>\n  </ng-template>\n</c8y-list-group>\n\n<!-- EMPTY STATE -->\n\n<c8y-ui-empty-state\n  *ngIf=\"operationCount === 0\"\n  [icon]=\"'stethoscope'\"\n  [title]=\"'No diagnostic files available.' | translate\"\n></c8y-ui-empty-state>\n","import { DiagnosticsTabGuard } from './diagnostics-tab.guard';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ListGroupModule, CoreModule, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { RouterModule } from '@angular/router';\nimport { DiagnosticsService } from './diagnostics.service';\nimport { DiagnosticsComponent } from './diagnostics.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BsDropdownModule, BsDropdownConfig } from 'ngx-bootstrap/dropdown';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\n\n@NgModule({\n  imports: [\n    CoreModule,\n    RouterModule,\n    CommonModule,\n    ListGroupModule,\n    SharedRepositoryModule,\n    BsDropdownModule,\n    TooltipModule,\n    DiagnosticsComponent\n  ],\n  exports: [DiagnosticsComponent],\n  providers: [\n    DiagnosticsService,\n    BsDropdownConfig,\n    DiagnosticsTabGuard,\n    hookRoute({\n      context: ViewContext.Device,\n      path: 'diagnostics',\n      component: DiagnosticsComponent,\n      label: gettext('Diagnostics'),\n      icon: 'stethoscope',\n      canActivate: [DiagnosticsTabGuard],\n      priority: 200\n    })\n  ]\n})\nexport class DiagnosticsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DiagnosticsService","i1","i2.DiagnosticsService","i3"],"mappings":"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"}