@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
97 lines • 15.9 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 {
changeDetectorRef;
state = 0;
currentSrc;
subscription;
pendingCallManager;
pendingSubmitValue;
error;
loaded = false;
_variable;
set fieldError(err) {
this.error = err;
}
get pending() {
return this.pendingCallManager.pendingCall !== undefined;
}
pictures;
stateText = 'State';
editable;
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.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 */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariableSwitchPictureComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CurrentDeviceService }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", 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", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "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: "18.2.14", 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: () => [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtc3dpdGNoLXBpY3R1cmUvdGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtc3dpdGNoLXBpY3R1cmUvdGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFjaEQsTUFBTSxPQUFPLGlDQUFpQztJQW1EbEM7SUFsRFYsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNWLFVBQVUsQ0FBVTtJQUVwQixZQUFZLENBQWdCO0lBQzVCLGtCQUFrQixDQUFxQjtJQUN2QyxrQkFBa0IsQ0FBTTtJQUVqQixLQUFLLENBQVM7SUFFckIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUVmLFNBQVMsQ0FBeUI7SUFFbEMsSUFBYSxVQUFVLENBQUMsR0FBVTtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FB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Q0UsNkJBQTZCO3lIQWtCMUIsVUFBVTtzQkFBdEIsS0FBSztnQkFRRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUlGLFFBQVE7c0JBRFgsS0FBSztnQkFTRixXQUFXO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXJyZW50RGV2aWNlU2VydmljZSwgUGVuZGluZ0NhbGxNYW5hZ2VyIH0gZnJvbSAnQGlvdGl6ZS9pb25pYyc7XG5pbXBvcnQgeyBBYnN0cmFjdFZhcmlhYmxlIH0gZnJvbSAnQGlvdGl6ZS90YXAvZGF0YSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcEdlbkZpZWxkIH0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBUQVBfVkFSSUFCTEVfU0NIRU1BIH0gZnJvbSAnLi4vc2hhcmVkLXNjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGljdHVyZURhdGEge1xuICBpbmRleDogbnVtYmVyO1xuICBzcmM6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFwLXZhcmlhYmxlLXN3aXRjaC1waWN0dXJlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhcC12YXJpYWJsZS1zd2l0Y2gtcGljdHVyZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhcC12YXJpYWJsZS1zd2l0Y2gtcGljdHVyZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYXBWYXJpYWJsZVN3aXRjaFBpY3R1cmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBzdGF0ZSA9IDA7XG4gIGN1cnJlbnRTcmM/OiBzdHJpbmc7XG5cbiAgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwZW5kaW5nQ2FsbE1hbmFnZXI6IFBlbmRpbmdDYWxsTWFuYWdlcjtcbiAgcGVuZGluZ1N1Ym1pdFZhbHVlOiBhbnk7XG5cbiAgcHVibGljIGVycm9yPzogRXJyb3I7XG5cbiAgbG9hZGVkID0gZmFsc2U7XG5cbiAgX3ZhcmlhYmxlPzogQWJzdHJhY3RWYXJpYWJsZTxhbnk+O1xuXG4gIEBJbnB1dCgpIHNldCBmaWVsZEVycm9yKGVycjogRXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVuZGluZ0NhbGxNYW5hZ2VyLnBlbmRpbmdDYWxsICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBASW5wdXQoKSBwaWN0dXJlcyE6IFBpY3R1cmVEYXRhW107XG5cbiAgQElucHV0KCkgc3RhdGVUZXh0ID0gJ1N0YXRlJztcblxuICBASW5wdXQoKVxuICBlZGl0YWJsZT86IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgc2V0IHZhcmlhYmxlKHZhcmlhYmxlOiBBYnN0cmFjdFZhcmlhYmxlPGFueSB8IGFueVtdPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZhcmlhYmxlID0gdmFyaWFibGU7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB0aGlzLmlucHV0U3RyZWFtID0gdmFyaWFibGUudmFsdWVzO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBpbnB1dFN0cmVhbShpbnB1dHM6IE9ic2VydmFibGU8YW55Pikge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gaW5wdXRzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuc3RhdGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGljdHVyZXMuZmlsdGVyKChwaWN0dXJlKSA9PiB7XG4gICAgICAgIGlmIChwaWN0dXJlLmluZGV4ID09PSB0aGlzLnN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U3JjID0gcGljdHVyZS5zcmM7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHRhcFNlcnZpY2U6IEN1cnJlbnREZXZpY2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucGVuZGluZ0NhbGxNYW5hZ2VyID0gUGVuZGluZ0NhbGxNYW5hZ2VyLmNyZWF0ZSh0YXBTZXJ2aWNlKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnBlbmRpbmdDYWxsTWFuYWdlci5kZXN0cm95KCk7XG4gIH1cblxuICBzd2l0Y2hQaWN0dXJlKCkge1xuICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICB0aGlzLnN0YXRlKys7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gdGhpcy5waWN0dXJlcy5sZW5ndGggKyAxKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxO1xuICAgICAgfVxuICAgICAgdGhpcy5waWN0dXJlcy5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5pbmRleCA9PT0gdGhpcy5zdGF0ZSkge1xuICAgICAgICAgIHRoaXMucGVuZGluZ0NhbGxNYW5hZ2VyXG4gICAgICAgICAgICAuZXhlYyhhc3luYyAoKSA9PlxuICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZT8ud3JpdGUodmFsdWUuc3JjKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5wZW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZEVycm9yID0gZXJyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ1N1Ym1pdFZhbHVlID0gdmFsdWUuc3JjO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U3JjID0gdmFsdWUuc3JjO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpb24taXRlbS1zbGlkaW5nIFtkaXNhYmxlZF09XCIhZXJyb3JcIj5cbiAgPGlvbi1pdGVtPlxuICAgIDxpb24tdGh1bWJuYWlsIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGltZyAqbmdJZj1cImxvYWRlZFwiIChjbGljayk9XCJzd2l0Y2hQaWN0dXJlKClcIiBbc3JjXT1cImN1cnJlbnRTcmNcIiAvPlxuICAgICAgPGlvbi1zcGlubmVyXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJVwiXG4gICAgICAgICpuZ0lmPVwiIWxvYWRlZFwiXG4gICAgICAgIG5hbWU9XCJjcmVzY2VudFwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICA+PC9pb24tc3Bpbm5lcj5cbiAgICA8L2lvbi10aHVtYm5haWw+XG4gICAgPGlvbi1sYWJlbD57eyBzdGF0ZVRleHQgfX0gOiB7eyBzdGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgIDxpb24taWNvblxuICAgICAgc2xvdD1cImVuZFwiXG4gICAgICAqbmdJZj1cImVycm9yXCJcbiAgICAgIG5hbWU9XCJhbGVydC1vdXRsaW5lXCJcbiAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICA+PC9pb24taWNvbj5cbiAgPC9pb24taXRlbT5cblxuICA8aW9uLWl0ZW0tb3B0aW9ucyBzaWRlPVwiZW5kXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDg1JVwiPlxuICAgIDxpb24taXRlbS1vcHRpb24gY29sb3I9XCJkYW5nZXJcIj5cbiAgICAgIDxpb24tdGV4dCAqbmdJZj1cImVycm9yXCIgY29sb3I9XCJsaWdodFwiIHN0eWxlPVwibWF4LXdpZHRoOiAxMDAlXCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudFwiPnt7IGVycm9yLm1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICA8L2lvbi10ZXh0PlxuICAgIDwvaW9uLWl0ZW0tb3B0aW9uPlxuICA8L2lvbi1pdGVtLW9wdGlvbnM+XG48L2lvbi1pdGVtLXNsaWRpbmc+XG4iXX0=