diff --git a/web/src/pages/document-viewer/docx/index.tsx b/web/src/pages/document-viewer/docx/index.tsx
index fe04cc5bd..60f0d4fd0 100644
--- a/web/src/pages/document-viewer/docx/index.tsx
+++ b/web/src/pages/document-viewer/docx/index.tsx
@@ -5,7 +5,7 @@ import { useFetchDocx } from '../hooks';
import styles from './index.less';
const Docx = ({ filePath }: { filePath: string }) => {
- const { succeed, containerRef } = useFetchDocx(filePath);
+ const { succeed, containerRef, error } = useFetchDocx(filePath);
return (
<>
@@ -16,7 +16,7 @@ const Docx = ({ filePath }: { filePath: string }) => {
) : (
-
+ {error}
)}
>
);
diff --git a/web/src/pages/document-viewer/excel/index.tsx b/web/src/pages/document-viewer/excel/index.tsx
index 355ca4bb9..99c9d3469 100644
--- a/web/src/pages/document-viewer/excel/index.tsx
+++ b/web/src/pages/document-viewer/excel/index.tsx
@@ -3,7 +3,7 @@ import FileError from '../file-error';
import { useFetchExcel } from '../hooks';
const Excel = ({ filePath }: { filePath: string }) => {
- const { status, containerRef } = useFetchExcel(filePath);
+ const { status, containerRef, error } = useFetchExcel(filePath);
return (
{
ref={containerRef}
style={{ height: '100%', width: '100%' }}
>
- {status || }
+ {status || {error}}
);
};
diff --git a/web/src/pages/document-viewer/hooks.ts b/web/src/pages/document-viewer/hooks.ts
index 29149998d..aff4c5e02 100644
--- a/web/src/pages/document-viewer/hooks.ts
+++ b/web/src/pages/document-viewer/hooks.ts
@@ -3,18 +3,38 @@ import axios from 'axios';
import mammoth from 'mammoth';
import { useCallback, useEffect, useRef, useState } from 'react';
-const useFetchDocument = () => {
- const fetchDocument = useCallback((api: string) => {
- return axios.get(api, { responseType: 'arraybuffer' });
+export const useCatchError = (api: string) => {
+ const [error, setError] = useState('');
+ const fetchDocument = useCallback(async () => {
+ const ret = await axios.get(api);
+ const { data } = ret;
+ if (!(data instanceof ArrayBuffer) && data.retcode !== 0) {
+ setError(data.retmsg);
+ }
+ return ret;
+ }, [api]);
+
+ useEffect(() => {
+ fetchDocument();
+ }, [fetchDocument]);
+
+ return { fetchDocument, error };
+};
+
+export const useFetchDocument = () => {
+ const fetchDocument = useCallback(async (api: string) => {
+ const ret = await axios.get(api, { responseType: 'arraybuffer' });
+ return ret;
}, []);
- return fetchDocument;
+ return { fetchDocument };
};
export const useFetchExcel = (filePath: string) => {
const [status, setStatus] = useState(true);
- const fetchDocument = useFetchDocument();
+ const { fetchDocument } = useFetchDocument();
const containerRef = useRef(null);
+ const { error } = useCatchError(filePath);
const fetchDocumentAsync = useCallback(async () => {
let myExcelPreviewer;
@@ -39,13 +59,14 @@ export const useFetchExcel = (filePath: string) => {
fetchDocumentAsync();
}, [fetchDocumentAsync]);
- return { status, containerRef };
+ return { status, containerRef, error };
};
export const useFetchDocx = (filePath: string) => {
const [succeed, setSucceed] = useState(true);
- const fetchDocument = useFetchDocument();
+ const { fetchDocument } = useFetchDocument();
const containerRef = useRef(null);
+ const { error } = useCatchError(filePath);
const fetchDocumentAsync = useCallback(async () => {
const jsonFile = await fetchDocument(filePath);
@@ -64,9 +85,8 @@ export const useFetchDocx = (filePath: string) => {
container.innerHTML = docEl.outerHTML;
}
})
- .catch((a) => {
+ .catch(() => {
setSucceed(false);
- console.warn('alexei: something went wrong', a);
});
}, [filePath, fetchDocument]);
@@ -74,5 +94,5 @@ export const useFetchDocx = (filePath: string) => {
fetchDocumentAsync();
}, [fetchDocumentAsync]);
- return { succeed, containerRef };
+ return { succeed, containerRef, error };
};
diff --git a/web/src/pages/document-viewer/pdf/index.tsx b/web/src/pages/document-viewer/pdf/index.tsx
index 284799638..ee8a8cd59 100644
--- a/web/src/pages/document-viewer/pdf/index.tsx
+++ b/web/src/pages/document-viewer/pdf/index.tsx
@@ -1,12 +1,14 @@
import { Skeleton } from 'antd';
import { PdfHighlighter, PdfLoader } from 'react-pdf-highlighter';
import FileError from '../file-error';
+import { useCatchError } from '../hooks';
interface IProps {
url: string;
}
-const DocumentPreviewer = ({ url }: IProps) => {
+const PdfPreviewer = ({ url }: IProps) => {
+ const { error } = useCatchError(url);
const resetHash = () => {};
return (
@@ -15,7 +17,7 @@ const DocumentPreviewer = ({ url }: IProps) => {
url={url}
beforeLoad={}
workerSrc="/pdfjs-dist/pdf.worker.min.js"
- errorMessage={}
+ errorMessage={{error}}
onError={(e) => {
console.warn(e);
}}
@@ -40,4 +42,4 @@ const DocumentPreviewer = ({ url }: IProps) => {
);
};
-export default DocumentPreviewer;
+export default PdfPreviewer;