@dooboostore/dom-render
Version:
html view template engine
163 lines (162 loc) • 6.35 kB
JavaScript
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