Qortal-Hub/src/hooks/useModal.tsx
2025-05-24 12:26:21 +02:00

53 lines
1.1 KiB
TypeScript

//TODO
import { useRef, useState, useCallback, useMemo } from 'react';
interface State {
isShow: boolean;
}
export const useModal = () => {
const [state, setState] = useState<State>({ isShow: false });
const [message, setMessage] = useState({ publishFee: '', message: '' });
const promiseConfig = useRef<any>(null);
const show = useCallback((data) => {
setMessage(data);
return new Promise((resolve, reject) => {
promiseConfig.current = { resolve, reject };
setState({ isShow: true });
});
}, []);
const hide = useCallback(() => {
setState({ isShow: false });
setMessage({ publishFee: '', message: '' });
}, []);
const onOk = useCallback(
(payload: any) => {
const { resolve } = promiseConfig.current || {};
hide();
resolve?.(payload);
},
[hide]
);
const onCancel = useCallback(() => {
const { reject } = promiseConfig.current || {};
hide();
reject?.('Declined');
}, [hide]);
return useMemo(
() => ({
show,
onOk,
onCancel,
isShow: state.isShow,
message,
}),
[show, onOk, onCancel, state.isShow, message]
);
};