diff --git a/web/src/components/ChatBox/ChatMessageList/useChatMessageItemAction.tsx b/web/src/components/ChatBox/ChatMessageList/useChatMessageItemAction.tsx index fae250f3..4b047730 100644 --- a/web/src/components/ChatBox/ChatMessageList/useChatMessageItemAction.tsx +++ b/web/src/components/ChatBox/ChatMessageList/useChatMessageItemAction.tsx @@ -25,13 +25,15 @@ export function useChatMessageItemAction( const userInfo = useUserInfo(); const [, handleRecallMessage] = useAsyncRequest(async () => { - await openReconfirmModalP(); - await recallMessage(payload._id); + if (await openReconfirmModalP()) { + await recallMessage(payload._id); + } }, [payload._id]); const [, handleDeleteMessage] = useAsyncRequest(async () => { - await openReconfirmModalP(); - await deleteMessage(payload._id); + if (await openReconfirmModalP()) { + await deleteMessage(payload._id); + } }, [payload._id]); const isGroupOwner = groupInfo && groupInfo.owner === userInfo?._id; // diff --git a/web/src/components/Modal.tsx b/web/src/components/Modal.tsx index f1d09b10..017dea6f 100644 --- a/web/src/components/Modal.tsx +++ b/web/src/components/Modal.tsx @@ -135,7 +135,9 @@ export function closeModal(key?: number): void { */ export function openModal( content: React.ReactNode, - props?: Pick + props?: Pick & { + onCloseModal?: () => void; + } ): number { const key = PortalAdd( { if (visible === false) { closeModal(key); + props?.onCloseModal?.(); } }} > @@ -187,20 +190,27 @@ export function openReconfirmModal(props: OpenReconfirmModalProps) { {t('确认')} - + , + { + onCloseModal: props.onCancel, + } ); } /** * 打开再次确认操作modal(Promise版本) - * TODO: 需要检查一下持久pending的promise会不会导致内存泄露 + * @example + * if(await openReconfirmModalP()) { + * // do somthing + * } */ export function openReconfirmModalP( props?: Omit -) { - return new Promise((resolve) => { +): Promise { + return new Promise((resolve) => { openReconfirmModal({ ...props, - onConfirm: resolve, + onConfirm: () => resolve(true), + onCancel: () => resolve(false), }); }); }