@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
88 lines • 15.7 kB
JavaScript
import { ChangeDetectorRef, Component, Input } from '@angular/core';
import { CurrentDeviceService, PendingCallManager } from '@iotize/ionic';
import { Observable } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@iotize/ionic";
import * as i2 from "@angular/common";
import * as i3 from "@ionic/angular";
export class TapVariableSwitchPictureComponent {
set fieldError(err) {
this.error = err;
}
get pending() {
return this.pendingCallManager.pendingCall !== undefined;
}
set variable(variable) {
this._variable = variable;
if (variable) {
this.inputStream = variable.values;
}
}
set inputStream(inputs) {
this.subscription = inputs.subscribe((value) => {
this.state = value;
this.pictures.filter((picture) => {
if (picture.index === this.state) {
this.currentSrc = picture.src;
this.loaded = true;
}
});
});
}
constructor(changeDetectorRef, tapService) {
this.changeDetectorRef = changeDetectorRef;
this.state = 0;
this.loaded = false;
this.stateText = 'State';
this.pendingCallManager = PendingCallManager.create(tapService);
}
ngOnDestroy() {
this.subscription?.unsubscribe();
this.pendingCallManager.destroy();
}
switchPicture() {
if (this.editable) {
this.state++;
if (this.state === this.pictures.length + 1) {
this.state = 1;
}
this.pictures.filter((value) => {
if (value.index === this.state) {
this.pendingCallManager
.exec(async () => this._variable?.write(value.src).then(() => {
this.changeDetectorRef.detectChanges();
}))
.catch((err) => {
if (!this.pending) {
this.fieldError = err;
}
else {
this.pendingSubmitValue = value.src;
}
this.changeDetectorRef.detectChanges();
});
this.currentSrc = value.src;
}
});
}
}
}
/** @nocollapse */ TapVariableSwitchPictureComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariableSwitchPictureComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CurrentDeviceService }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TapVariableSwitchPictureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TapVariableSwitchPictureComponent, selector: "tap-variable-switch-picture", inputs: { fieldError: "fieldError", pictures: "pictures", stateText: "stateText", editable: "editable", variable: "variable", inputStream: "inputStream" }, ngImport: i0, template: "<ion-item-sliding [disabled]=\"!error\">\n <ion-item>\n <ion-thumbnail slot=\"start\">\n <img *ngIf=\"loaded\" (click)=\"switchPicture()\" [src]=\"currentSrc\" />\n <ion-spinner\n style=\"height: 100%; width: 100%\"\n *ngIf=\"!loaded\"\n name=\"crescent\"\n color=\"primary\"\n ></ion-spinner>\n </ion-thumbnail>\n <ion-label>{{ stateText }} : {{ state }}</ion-label>\n <ion-icon\n slot=\"end\"\n *ngIf=\"error\"\n name=\"alert-outline\"\n color=\"danger\"\n ></ion-icon>\n </ion-item>\n\n <ion-item-options side=\"end\" style=\"max-width: 85%\">\n <ion-item-option color=\"danger\">\n <ion-text *ngIf=\"error\" color=\"light\" style=\"max-width: 100%\">\n <span style=\"text-transform: none !important\">{{ error.message }}</span>\n </ion-text>\n </ion-item-option>\n </ion-item-options>\n</ion-item-sliding>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonItemOption, selector: "ion-item-option", inputs: ["color", "disabled", "download", "expandable", "href", "mode", "rel", "target", "type"] }, { kind: "component", type: i3.IonItemOptions, selector: "ion-item-options", inputs: ["side"] }, { kind: "component", type: i3.IonItemSliding, selector: "ion-item-sliding", inputs: ["disabled"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonThumbnail, selector: "ion-thumbnail" }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariableSwitchPictureComponent, decorators: [{
type: Component,
args: [{ selector: 'tap-variable-switch-picture', template: "<ion-item-sliding [disabled]=\"!error\">\n <ion-item>\n <ion-thumbnail slot=\"start\">\n <img *ngIf=\"loaded\" (click)=\"switchPicture()\" [src]=\"currentSrc\" />\n <ion-spinner\n style=\"height: 100%; width: 100%\"\n *ngIf=\"!loaded\"\n name=\"crescent\"\n color=\"primary\"\n ></ion-spinner>\n </ion-thumbnail>\n <ion-label>{{ stateText }} : {{ state }}</ion-label>\n <ion-icon\n slot=\"end\"\n *ngIf=\"error\"\n name=\"alert-outline\"\n color=\"danger\"\n ></ion-icon>\n </ion-item>\n\n <ion-item-options side=\"end\" style=\"max-width: 85%\">\n <ion-item-option color=\"danger\">\n <ion-text *ngIf=\"error\" color=\"light\" style=\"max-width: 100%\">\n <span style=\"text-transform: none !important\">{{ error.message }}</span>\n </ion-text>\n </ion-item-option>\n </ion-item-options>\n</ion-item-sliding>\n" }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CurrentDeviceService }]; }, propDecorators: { fieldError: [{
type: Input
}], pictures: [{
type: Input
}], stateText: [{
type: Input
}], editable: [{
type: Input
}], variable: [{
type: Input
}], inputStream: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtc3dpdGNoLXBpY3R1cmUvdGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtc3dpdGNoLXBpY3R1cmUvdGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFjaEQsTUFBTSxPQUFPLGlDQUFpQztJQWM1QyxJQUFhLFVBQVUsQ0FBQyxHQUFVO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDO0lBQzNELENBQUM7SUFTRCxJQUNJLFFBQVEsQ0FBQyxRQUFtRDtRQUM5RCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztTQUNwQztJQUNILENBQUM7SUFF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LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEN1cnJlbnREZXZpY2VTZXJ2aWNlLCBQZW5kaW5nQ2FsbE1hbmFnZXIgfSBmcm9tICdAaW90aXplL2lvbmljJztcbmltcG9ydCB7IEFic3RyYWN0VmFyaWFibGUgfSBmcm9tICdAaW90aXplL3RhcC9kYXRhJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwR2VuRmllbGQgfSBmcm9tICcuLi8uLi9tZXRhZGF0YS9kZWNvcmF0b3JzJztcbmltcG9ydCB7IFRBUF9WQVJJQUJMRV9TQ0hFTUEgfSBmcm9tICcuLi9zaGFyZWQtc2NoZW1hJztcblxuZXhwb3J0IGludGVyZmFjZSBQaWN0dXJlRGF0YSB7XG4gIGluZGV4OiBudW1iZXI7XG4gIHNyYzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXAtdmFyaWFibGUtc3dpdGNoLXBpY3R1cmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhcFZhcmlhYmxlU3dpdGNoUGljdHVyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHN0YXRlID0gMDtcbiAgY3VycmVudFNyYz86IHN0cmluZztcblxuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHBlbmRpbmdDYWxsTWFuYWdlcjogUGVuZGluZ0NhbGxNYW5hZ2VyO1xuICBwZW5kaW5nU3VibWl0VmFsdWU6IGFueTtcblxuICBwdWJsaWMgZXJyb3I/OiBFcnJvcjtcblxuICBsb2FkZWQgPSBmYWxzZTtcblxuICBfdmFyaWFibGU/OiBBYnN0cmFjdFZhcmlhYmxlPGFueT47XG5cbiAgQElucHV0KCkgc2V0IGZpZWxkRXJyb3IoZXJyOiBFcnJvcikge1xuICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2FsbE1hbmFnZXIucGVuZGluZ0NhbGwgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIEBJbnB1dCgpIHBpY3R1cmVzITogUGljdHVyZURhdGFbXTtcblxuICBASW5wdXQoKSBzdGF0ZVRleHQgPSAnU3RhdGUnO1xuXG4gIEBJbnB1dCgpXG4gIGVkaXRhYmxlPzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzZXQgdmFyaWFibGUodmFyaWFibGU6IEFic3RyYWN0VmFyaWFibGU8YW55IHwgYW55W10+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdmFyaWFibGUgPSB2YXJpYWJsZTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHRoaXMuaW5wdXRTdHJlYW0gPSB2YXJpYWJsZS52YWx1ZXM7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGlucHV0U3RyZWFtKGlucHV0czogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSBpbnB1dHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5waWN0dXJlcy5maWx0ZXIoKHBpY3R1cmUpID0+IHtcbiAgICAgICAgaWYgKHBpY3R1cmUuaW5kZXggPT09IHRoaXMuc3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTcmMgPSBwaWN0dXJlLnNyYztcbiAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgdGFwU2VydmljZTogQ3VycmVudERldmljZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2FsbE1hbmFnZXIgPSBQZW5kaW5nQ2FsbE1hbmFnZXIuY3JlYXRlKHRhcFNlcnZpY2UpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucGVuZGluZ0NhbGxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHN3aXRjaFBpY3R1cmUoKSB7XG4gICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgIHRoaXMuc3RhdGUrKztcbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSB0aGlzLnBpY3R1cmVzLmxlbmd0aCArIDEpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE7XG4gICAgICB9XG4gICAgICB0aGlzLnBpY3R1cmVzLmZpbHRlcigodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmluZGV4ID09PSB0aGlzLnN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ2FsbE1hbmFnZXJcbiAgICAgICAgICAgIC5leGVjKGFzeW5jICgpID0+XG4gICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlPy53cml0ZSh2YWx1ZS5zcmMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nU3VibWl0VmFsdWUgPSB2YWx1ZS5zcmM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTcmMgPSB2YWx1ZS5zcmM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1pdGVtLXNsaWRpbmcgW2Rpc2FibGVkXT1cIiFlcnJvclwiPlxuICA8aW9uLWl0ZW0+XG4gICAgPGlvbi10aHVtYm5haWwgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW1nICpuZ0lmPVwibG9hZGVkXCIgKGNsaWNrKT1cInN3aXRjaFBpY3R1cmUoKVwiIFtzcmNdPVwiY3VycmVudFNyY1wiIC8+XG4gICAgICA8aW9uLXNwaW5uZXJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlXCJcbiAgICAgICAgKm5nSWY9XCIhbG9hZGVkXCJcbiAgICAgICAgbmFtZT1cImNyZXNjZW50XCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgID48L2lvbi1zcGlubmVyPlxuICAgIDwvaW9uLXRodW1ibmFpbD5cbiAgICA8aW9uLWxhYmVsPnt7IHN0YXRlVGV4dCB9fSA6IHt7IHN0YXRlIH19PC9pb24tbGFiZWw+XG4gICAgPGlvbi1pY29uXG4gICAgICBzbG90PVwiZW5kXCJcbiAgICAgICpuZ0lmPVwiZXJyb3JcIlxuICAgICAgbmFtZT1cImFsZXJ0LW91dGxpbmVcIlxuICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgID48L2lvbi1pY29uPlxuICA8L2lvbi1pdGVtPlxuXG4gIDxpb24taXRlbS1vcHRpb25zIHNpZGU9XCJlbmRcIiBzdHlsZT1cIm1heC13aWR0aDogODUlXCI+XG4gICAgPGlvbi1pdGVtLW9wdGlvbiBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwiZXJyb3JcIiBjb2xvcj1cImxpZ2h0XCIgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50XCI+e3sgZXJyb3IubWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgIDwvaW9uLXRleHQ+XG4gICAgPC9pb24taXRlbS1vcHRpb24+XG4gIDwvaW9uLWl0ZW0tb3B0aW9ucz5cbjwvaW9uLWl0ZW0tc2xpZGluZz5cbiJdfQ==