updates
This commit is contained in:
38
web/components/src/confirm/useConfirm.ts
Normal file
38
web/components/src/confirm/useConfirm.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { useCallback, useContext } from "react";
|
||||
|
||||
import { MODAL_BACKDROP_TIMEOUT } from "../Modal";
|
||||
|
||||
import ConfirmContext from "./ConfirmContext";
|
||||
|
||||
type ResolveCallback = ((value: unknown) => void) | null;
|
||||
|
||||
let resolveCallback: ResolveCallback = null;
|
||||
|
||||
export default function useConfirm() {
|
||||
const [confirmState, { closeConfirm, showConfirm }] =
|
||||
useContext(ConfirmContext);
|
||||
|
||||
const onConfirm = () => {
|
||||
closeConfirm();
|
||||
resolveCallback?.(true);
|
||||
};
|
||||
|
||||
const onCancel = () => {
|
||||
closeConfirm();
|
||||
resolveCallback?.(false);
|
||||
};
|
||||
|
||||
const confirm = useCallback(
|
||||
async (text: string) => {
|
||||
showConfirm(text);
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolveCallback = resolve;
|
||||
}, MODAL_BACKDROP_TIMEOUT);
|
||||
});
|
||||
},
|
||||
[showConfirm],
|
||||
);
|
||||
|
||||
return { confirm, confirmState, onCancel, onConfirm };
|
||||
}
|
||||
Reference in New Issue
Block a user