fix: upload a image can clear other message

This commit is contained in:
jialin
2024-10-17 16:06:38 +08:00
parent fbefb2014d
commit e10c5e28b5
12 changed files with 505 additions and 17 deletions
+92
View File
@@ -0,0 +1,92 @@
import qs from 'query-string';
import { useEffect, useRef } from 'react';
interface RequestConfig {
url: string;
handler: (data: any) => any;
beforeReconnect?: () => void;
params?: object;
contentType?: 'json' | 'text';
}
const useSetChunkFetch = () => {
const axiosToken = useRef<any>(null);
const requestConfig = useRef<any>({});
const readTextEventStreamData = async (
reader: any,
decoder: TextDecoder,
callback: (data: any) => void
) => {
const { done, value } = await reader.read();
if (done) {
return;
}
let chunk = decoder.decode(value, { stream: true });
callback(chunk);
await readTextEventStreamData(reader, decoder, callback);
};
const fetchChunkRequest = async ({
url,
handler,
params = {}
}: RequestConfig) => {
axiosToken.current?.abort?.();
axiosToken.current = new AbortController();
try {
const response = await fetch(
`v1${url}?${qs.stringify({
...params,
watch: true
})}`,
{
method: 'GET',
body: null,
headers: {
'Content-Type': 'application/octet-stream'
},
signal: axiosToken.current.signal
}
);
console.log('response============', response);
if (!response.ok) {
return;
}
const reader = response?.body?.getReader();
const decoder = new TextDecoder('utf-8');
await readTextEventStreamData(reader, decoder, handler);
} catch (error) {
// handle error
}
return axiosToken.current;
};
const setChunkFetch = (config: RequestConfig) => {
requestConfig.current = { ...config };
fetchChunkRequest(requestConfig.current);
return axiosToken;
};
useEffect(() => {
const handleUnload = () => {
axiosToken.current?.abort?.();
};
window.addEventListener('beforeunload', handleUnload);
return () => {
axiosToken.current?.abort?.();
window.removeEventListener('beforeunload', handleUnload);
};
}, []);
return {
setChunkFetch
};
};
export default useSetChunkFetch;
+1 -2
View File
@@ -172,7 +172,7 @@ const useSetChunkRequest = () => {
let result = response;
let cres = '';
console.log('chunkrequest============e==', e);
console.log('chunkrequest============e==', result);
if (contentType === 'json') {
const currentRes = sliceData(response, e.loaded, loadedSize);
result = parseData(currentRes);
@@ -194,7 +194,6 @@ const useSetChunkRequest = () => {
retryCount.current -= 1;
}
} catch (error) {
console.log('error=============', error);
if (!axios.isCancel(error)) {
setRequestReadyState(4);
if (retryCount.current > 0) {
+6 -1
View File
@@ -11,10 +11,15 @@ export default function useTableRowSelection() {
setSelectedRowKeys([]);
};
const removeSelectedKey = (rowKey: React.Key) => {
setSelectedRowKeys((keys) => keys.filter((key) => key !== rowKey));
};
const rowSelection = {
selectedRowKeys,
clearSelections,
onChange: onSelectChange
onChange: onSelectChange,
removeSelectedKey
};
return rowSelection;