{"version":3,"file":"c8y-ngx-components-widgets-implementations-device-control-message.mjs","sources":["../../widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.ts","../../widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.html","../../widgets/implementations/device-control-message/c8y-ngx-components-widgets-implementations-device-control-message.ts"],"sourcesContent":["import { Component, Input, OnChanges, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  CoreModule,\n  DynamicComponent,\n  DynamicComponentAlert,\n  DynamicComponentAlertAggregator\n} from '@c8y/ngx-components';\nimport { IManagedObject, OperationService } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nexport type DeviceControlMessageWidgetConfig = { device?: IManagedObject };\n\n@Component({\n  selector: 'c8y-device-control-message-widget-view',\n  templateUrl: './device-control-message-widget-view.component.html',\n  standalone: true,\n  imports: [CoreModule, ReactiveFormsModule]\n})\nexport class DeviceControlMessageWidgetViewComponent\n  implements OnChanges, DynamicComponent, OnDestroy, OnInit\n{\n  @Input() config: DeviceControlMessageWidgetConfig;\n  operationSupportedByDevice$: Observable<boolean>;\n  messageToBeSent = '';\n  alerts: DynamicComponentAlertAggregator;\n  private readonly operationAttribute = 'c8y_Message';\n  private currentDevice = new BehaviorSubject<IManagedObject | null>(null);\n  private operationSupportedByDeviceSubscription: Subscription;\n\n  constructor(\n    private alert: AlertService,\n    private operation: OperationService,\n    private translate: TranslateService,\n    @Optional() private dashboard: ContextDashboardComponent\n  ) {\n    this.operationSupportedByDevice$ = this.currentDevice.pipe(\n      map(device => {\n        if (!device) {\n          return false;\n        }\n        const supportedOperations = device.c8y_SupportedOperations;\n        if (supportedOperations && Array.isArray(supportedOperations)) {\n          return supportedOperations.includes(this.operationAttribute);\n        }\n        return false;\n      }),\n      shareReplay({ refCount: true, bufferSize: 1 })\n    );\n  }\n\n  ngOnInit(): void {\n    if (this.dashboard?.isDeviceTypeDashboard && this.dashboard?.context?.id) {\n      this.currentDevice.next(this.dashboard.context);\n    }\n    this.operationSupportedByDeviceSubscription = this.operationSupportedByDevice$.subscribe(\n      supported => {\n        if (!supported) {\n          this.alerts.addAlerts(\n            new DynamicComponentAlert({\n              type: 'warning',\n              text: gettext('Operation not supported by this device')\n            })\n          );\n        } else {\n          this.alerts.clear();\n        }\n      }\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.operationSupportedByDeviceSubscription?.unsubscribe();\n  }\n\n  ngOnChanges(): void {\n    if (!this.dashboard?.isDeviceTypeDashboard && this.config.device) {\n      this.currentDevice.next(this.config.device);\n    }\n  }\n\n  async sendMessage() {\n    const msg = this.messageToBeSent;\n    const operationDescription = this.translate.instant(gettext('Send message \"{{msg}}\"'), { msg });\n    try {\n      await this.operation.create({\n        deviceId: this.currentDevice.value?.id,\n        description: operationDescription,\n        [this.operationAttribute]: { text: msg }\n      });\n      this.alert.success(gettext('Message will be sent.'));\n      this.messageToBeSent = '';\n    } catch (e) {\n      this.alert.addServerFailure(e);\n    }\n  }\n}\n","<div *ngIf=\"operationSupportedByDevice$ | async\" class=\"input-group p-16\">\n  <input\n    type=\"text\"\n    class=\"form-control\"\n    data-cy=\"c8y-device-control-message-widget-view--message-textbox\"\n    [(ngModel)]=\"messageToBeSent\"\n    placeholder=\"{{ 'Message' | translate }}\"\n  />\n  <span class=\"input-group-btn\">\n    <button\n      title=\"{{ 'Send' | translate }}\"\n      class=\"btn btn-primary\"\n      data-cy=\"c8y-device-control-message-widget-view--send-button\"\n      (click)=\"sendMessage()\"\n      [disabled]=\"!messageToBeSent\"\n      translate\n    >\n      Send\n    </button>\n  </span>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}