File size: 1,335 Bytes
e26a977
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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;
	}
}