summaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.ts')
-rw-r--r--packages/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/packages/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.ts b/packages/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.ts
new file mode 100644
index 0000000..04616aa
--- /dev/null
+++ b/packages/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.ts
@@ -0,0 +1,45 @@
+import { atom, editorJotaiStore } from "../../editor-jotai";
+import type React from "react";
+
+export type OverwriteConfirmState =
+ | {
+ active: true;
+ title: string;
+ description: React.ReactNode;
+ actionLabel: string;
+ color: "danger" | "warning";
+
+ onClose: () => void;
+ onConfirm: () => void;
+ onReject: () => void;
+ }
+ | { active: false };
+
+export const overwriteConfirmStateAtom = atom<OverwriteConfirmState>({
+ active: false,
+});
+
+export async function openConfirmModal({
+ title,
+ description,
+ actionLabel,
+ color,
+}: {
+ title: string;
+ description: React.ReactNode;
+ actionLabel: string;
+ color: "danger" | "warning";
+}) {
+ return new Promise<boolean>((resolve) => {
+ editorJotaiStore.set(overwriteConfirmStateAtom, {
+ active: true,
+ onConfirm: () => resolve(true),
+ onClose: () => resolve(false),
+ onReject: () => resolve(false),
+ title,
+ description,
+ actionLabel,
+ color,
+ });
+ });
+}