UNPKG

@dooboostore/dom-render

Version:
163 lines (162 loc) 6.35 kB
import { ComponentBase } from "../ComponentBase.js"; import { DomRender } from "../../DomRender.js"; import { RawSet } from "../../rawsets/RawSet.js"; import { ValidUtils } from "@dooboostore/core"; import { Promises } from "@dooboostore/core"; var PromiseSwitch; ((_PromiseSwitch) => { _PromiseSwitch.selector = "dr-promise-switch"; class ChildBase extends ComponentBase { constructor() { super(...arguments); this.hidden = true; } } class Default extends ChildBase { } _PromiseSwitch.Default = Default; class Pending extends ChildBase { // onChangeAttrRender(name: string, value: any, other: OtherData) { // super.onChangeAttrRender(name, value, other); // if (this.equalsAttributeName(name, 'defaultView')) { // // console.log('--------------', value) // if (value !== null) { // this.hidden = false; // } else { // this.hidden = true; // } // // console.log('--------------', this.hidden) // } // } } _PromiseSwitch.Pending = Pending; class Fulfilled extends ChildBase { setData(data) { this.data = data; } } _PromiseSwitch.Fulfilled = Fulfilled; class Rejected extends ChildBase { setData(data) { this.data = data; } } _PromiseSwitch.Rejected = Rejected; class PromiseSwitch2 extends ComponentBase { onCreatedThisChild(child, data) { super.onCreatedThisChild(child, data); this.childStateChange(); } childStateChange() { const defaults = this.getChildren(Default); const pendings = this.getChildren(Pending); const fulfilleds = this.getChildren(Fulfilled); const rejecteds = this.getChildren(Rejected); const full = [...fulfilleds, ...rejecteds, ...pendings, ...defaults]; if (this.promiseState === void 0) { this.state = void 0; full.filter((it) => !it.hidden).forEach((it) => it.hidden = true); defaults.filter((it) => it.hidden).forEach((it) => it.hidden = false); pendings.filter((it) => it.getAttribute("defaultView") && it.hidden).forEach((it) => it.hidden = false); } else if (this.promiseState.status === "pending") { this.state = "pending"; full.filter((it) => !it.hidden).forEach((it) => it.hidden = true); pendings.filter((it) => it.hidden).forEach((it) => it.hidden = false); } else if (this.promiseState.status === "fulfilled") { this.state = "fulfilled"; const value = this.promiseState.value; full.filter((it) => !it.hidden).forEach((it) => it.hidden = true); fulfilleds.forEach((it) => { it.setData(value); }); fulfilleds.filter((it) => it.hidden).forEach((it) => it.hidden = false); } else if (this.promiseState.status === "rejected") { this.state = "rejected"; const value = this.promiseState.reason; full.filter((it) => !it.hidden).forEach((it) => it.hidden = true); rejecteds.forEach((it) => { it.setData(value); }); rejecteds.filter((it) => it.hidden).forEach((it) => it.hidden = false); } return this.state; } onChangeAttrRender(name, value, other) { super.onChangeAttrRender(name, value, other); if (this.equalsAttributeName(name, "data") && value) { this.promiseState = void 0; this.state = void 0; this.promiseState = Promises.Result.wrap(typeof value === "function" ? value() : value); this.getAttribute("change")?.({ status: "pending" }); this.childStateChange(); this.promiseState.then((data) => { this.childStateChange(); this.getAttribute("change")?.({ status: "fulfilled", data }); return data; }).catch((e) => { this.childStateChange(); this.getAttribute("change")?.({ status: "rejected", data: e }); throw e; }).finally(() => { this.getAttribute("change")?.({ status: "finally" }); }); } else if (this.equalsAttributeName(name, "data") && ValidUtils.isNullOrUndefined(value)) { this.promiseState = void 0; this.childStateChange(); } } } _PromiseSwitch.PromiseSwitch = PromiseSwitch2; })(PromiseSwitch || (PromiseSwitch = {})); var PromiseSwitch_default = { promiseDefault: (config) => { return RawSet.createComponentTargetElement({ name: `${PromiseSwitch.selector}-default`, template: '<div dr-if="!@this@.hidden" dr-option-strip="true">#innerHTML#</div>', objFactory: (e, o, r2, counstructorParam) => { return DomRender.run({ rootObject: new PromiseSwitch.Default(...counstructorParam), config }); } }); }, promisePending: (config) => { return RawSet.createComponentTargetElement({ name: `${PromiseSwitch.selector}-pending`, template: '<div dr-if="!@this@.hidden" dr-option-strip="true">#innerHTML#</div>', objFactory: (e, o, r2, counstructorParam) => { return DomRender.run({ rootObject: new PromiseSwitch.Pending(...counstructorParam), config }); } }); }, promiseFulfilled: (config) => { return RawSet.createComponentTargetElement({ name: `${PromiseSwitch.selector}-fulfilled`, template: '<div dr-if="!@this@.hidden" dr-option-strip="true">#innerHTML#</div>', objFactory: (e, o, r2, counstructorParam) => { return DomRender.run({ rootObject: new PromiseSwitch.Fulfilled(...counstructorParam), config }); } }); }, promiseRejected: (config) => { return RawSet.createComponentTargetElement({ name: `${PromiseSwitch.selector}-rejected`, template: '<div dr-if="!@this@.hidden" dr-option-strip="true">#innerHTML#</div>', objFactory: (e, o, r2, counstructorParam) => { return DomRender.run({ rootObject: new PromiseSwitch.Rejected(...counstructorParam), config }); } }); }, promiseSwitch: (config) => { return RawSet.createComponentTargetElement({ name: `${PromiseSwitch.selector}`, template: "#innerHTML#", objFactory: (e, o, r2, counstructorParam) => { return DomRender.run({ rootObject: new PromiseSwitch.PromiseSwitch(...counstructorParam), config }); } }); } }; export { PromiseSwitch, PromiseSwitch_default as default }; //# sourceMappingURL=PromiseSwitch.js.map