@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
93 lines (89 loc) • 6.77 kB
JavaScript
import * as i0 from '@angular/core';
import { Input, Optional, Component } from '@angular/core';
import { gettext } from '@c8y/ngx-components/gettext';
import * as i1 from '@c8y/ngx-components';
import { DynamicComponentAlert, CoreModule } from '@c8y/ngx-components';
import * as i2 from '@c8y/client';
import * as i3 from '@ngx-translate/core';
import { BehaviorSubject } from 'rxjs';
import { map, shareReplay } from 'rxjs/operators';
import * as i4 from '@c8y/ngx-components/context-dashboard';
import * as i6 from '@angular/forms';
import { ReactiveFormsModule } from '@angular/forms';
import * as i5 from '@angular/common';
class DeviceControlMessageWidgetViewComponent {
constructor(alert, operation, translate, dashboard) {
this.alert = alert;
this.operation = operation;
this.translate = translate;
this.dashboard = dashboard;
this.messageToBeSent = '';
this.operationAttribute = 'c8y_Message';
this.currentDevice = new BehaviorSubject(null);
this.operationSupportedByDevice$ = this.currentDevice.pipe(map(device => {
if (!device) {
return false;
}
const supportedOperations = device.c8y_SupportedOperations;
if (supportedOperations && Array.isArray(supportedOperations)) {
return supportedOperations.includes(this.operationAttribute);
}
return false;
}), shareReplay({ refCount: true, bufferSize: 1 }));
}
ngOnInit() {
if (this.dashboard?.isDeviceTypeDashboard && this.dashboard?.context?.id) {
this.currentDevice.next(this.dashboard.context);
}
this.operationSupportedByDeviceSubscription = this.operationSupportedByDevice$.subscribe(supported => {
if (!supported) {
this.alerts.addAlerts(new DynamicComponentAlert({
type: 'warning',
text: gettext('Operation not supported by this device')
}));
}
else {
this.alerts.clear();
}
});
}
ngOnDestroy() {
this.operationSupportedByDeviceSubscription?.unsubscribe();
}
ngOnChanges() {
if (!this.dashboard?.isDeviceTypeDashboard && this.config.device) {
this.currentDevice.next(this.config.device);
}
}
async sendMessage() {
const msg = this.messageToBeSent;
const operationDescription = this.translate.instant(gettext('Send message "{{msg}}"'), { msg });
try {
await this.operation.create({
deviceId: this.currentDevice.value?.id,
description: operationDescription,
[this.operationAttribute]: { text: msg }
});
this.alert.success(gettext('Message will be sent.'));
this.messageToBeSent = '';
}
catch (e) {
this.alert.addServerFailure(e);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DeviceControlMessageWidgetViewComponent, deps: [{ token: i1.AlertService }, { token: i2.OperationService }, { token: i3.TranslateService }, { token: i4.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DeviceControlMessageWidgetViewComponent, isStandalone: true, selector: "c8y-device-control-message-widget-view", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DeviceControlMessageWidgetViewComponent, decorators: [{
type: Component,
args: [{ selector: 'c8y-device-control-message-widget-view', standalone: true, imports: [CoreModule, ReactiveFormsModule], template: "<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" }]
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.OperationService }, { type: i3.TranslateService }, { type: i4.ContextDashboardComponent, decorators: [{
type: Optional
}] }], propDecorators: { config: [{
type: Input
}] } });
/**
* Generated bundle index. Do not edit.
*/
export { DeviceControlMessageWidgetViewComponent };
//# sourceMappingURL=c8y-ngx-components-widgets-implementations-device-control-message.mjs.map