From f04a2f087d2c86283af44fd37c531999fc134143 Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Sun, 26 Feb 2023 14:43:04 +0800 Subject: [PATCH] fix: catch prepare file API error --- src/common/component/FileMessage/index.tsx | 20 ++++++++++++++------ src/common/hook/useUploadFile.ts | 8 +++++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/common/component/FileMessage/index.tsx b/src/common/component/FileMessage/index.tsx index 5a20cd8e..660117a0 100644 --- a/src/common/component/FileMessage/index.tsx +++ b/src/common/component/FileMessage/index.tsx @@ -54,7 +54,7 @@ const FileMessage: FC = ({ from: from_uid, to }); - const { stopUploading, data, uploadFile, progress, isSuccess: uploadSuccess } = useUploadFile(); + const { stopUploading, data, uploadFile, progress, isSuccess: uploadSuccess, isError } = useUploadFile(); const fromUser = useAppSelector((store) => store.users.byId[from_uid]); const { size = 0, name, content_type } = properties ?? {}; useEffect(() => { @@ -89,6 +89,18 @@ const FileMessage: FC = ({ handleUpSend({ url: content, name, type: content_type }); } }, [content, name, content_type]); + const handleCancel = () => { + stopUploading(); + URL.revokeObjectURL(content); + removeLocalMessage(properties.local_id); + }; + useEffect(() => { + if (isError) { + // 撤回消息 + handleCancel(); + } + }, [isError]); + useEffect(() => { const props = properties ?? {}; const propsV2 = imageSize ? { ...props, ...imageSize } : props; @@ -110,11 +122,7 @@ const FileMessage: FC = ({ URL.revokeObjectURL(content); } }, [sendMessageSuccess, content]); - const handleCancel = () => { - stopUploading(); - URL.revokeObjectURL(content); - removeLocalMessage(properties.local_id); - }; + if (!properties) return null; const icon = getFileIcon(content_type, name, "w-9 h-auto"); diff --git a/src/common/hook/useUploadFile.ts b/src/common/hook/useUploadFile.ts index 819357a8..bb120bec 100644 --- a/src/common/hook/useUploadFile.ts +++ b/src/common/hook/useUploadFile.ts @@ -24,7 +24,7 @@ const useUploadFile = (props?: IProps) => { const canceledRef = useRef(false); const sliceUploadedCountRef = useRef(0); const totalSliceCountRef = useRef(1); - const [prepareUploadFile, { isLoading: isPreparing }] = usePrepareUploadFileMutation(); + const [prepareUploadFile, { isLoading: isPreparing, isError: prepareFileError }] = usePrepareUploadFileMutation(); const [uploadFileFn, { isLoading: isUploading, isError: uploadFileError }] = useUploadFileMutation(); @@ -41,6 +41,8 @@ const useUploadFile = (props?: IProps) => { const uploadFile = async (file?: File) => { if (!file) return; + console.log("up file", file); + setData(null); const { name = `-${+new Date()}.${file.type.split("/")[1]}`, @@ -95,7 +97,7 @@ const useUploadFile = (props?: IProps) => { } } } - // setUploadingFile(false); + // 出错 则返回 if (!uploadResult || "error" in uploadResult) { return; } @@ -157,7 +159,7 @@ const useUploadFile = (props?: IProps) => { 2 ), uploadFile, - isError: uploadFileError, + isError: uploadFileError || prepareFileError, isSuccess: !!data, stageFiles, addStageFile,