You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
997 B
TypeScript
47 lines
997 B
TypeScript
2 years ago
|
import { atom } from "jotai";
|
||
|
import { jotaiStore } from "../../jotai";
|
||
|
import 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) => {
|
||
|
jotaiStore.set(overwriteConfirmStateAtom, {
|
||
|
active: true,
|
||
|
onConfirm: () => resolve(true),
|
||
|
onClose: () => resolve(false),
|
||
|
onReject: () => resolve(false),
|
||
|
title,
|
||
|
description,
|
||
|
actionLabel,
|
||
|
color,
|
||
|
});
|
||
|
});
|
||
|
}
|