65 lines
1.2 KiB
JavaScript
65 lines
1.2 KiB
JavaScript
|
import { ComfyDialog } from "../dialog.js";
|
||
|
import { $el } from "../../ui.js";
|
||
|
|
||
|
export class ComfyAsyncDialog extends ComfyDialog {
|
||
|
#resolve;
|
||
|
|
||
|
constructor(actions) {
|
||
|
super(
|
||
|
"dialog.comfy-dialog.comfyui-dialog",
|
||
|
actions?.map((opt) => {
|
||
|
if (typeof opt === "string") {
|
||
|
opt = { text: opt };
|
||
|
}
|
||
|
return $el("button.comfyui-button", {
|
||
|
type: "button",
|
||
|
textContent: opt.text,
|
||
|
onclick: () => this.close(opt.value ?? opt.text),
|
||
|
});
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
|
||
|
show(html) {
|
||
|
this.element.addEventListener("close", () => {
|
||
|
this.close();
|
||
|
});
|
||
|
|
||
|
super.show(html);
|
||
|
|
||
|
return new Promise((resolve) => {
|
||
|
this.#resolve = resolve;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
showModal(html) {
|
||
|
this.element.addEventListener("close", () => {
|
||
|
this.close();
|
||
|
});
|
||
|
|
||
|
super.show(html);
|
||
|
this.element.showModal();
|
||
|
|
||
|
return new Promise((resolve) => {
|
||
|
this.#resolve = resolve;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
close(result = null) {
|
||
|
this.#resolve(result);
|
||
|
this.element.close();
|
||
|
super.close();
|
||
|
}
|
||
|
|
||
|
static async prompt({ title = null, message, actions }) {
|
||
|
const dialog = new ComfyAsyncDialog(actions);
|
||
|
const content = [$el("span", message)];
|
||
|
if (title) {
|
||
|
content.unshift($el("h3", title));
|
||
|
}
|
||
|
const res = await dialog.showModal(content);
|
||
|
dialog.element.remove();
|
||
|
return res;
|
||
|
}
|
||
|
}
|