balibabu
commited on
Commit
·
8dff6d9
1
Parent(s):
e090e58
fix: display specific error message when previewing file error #868 (#869)
Browse files### What problem does this PR solve?
fix: display specific error message when previewing file error #868
### Type of change
- [x] Bug Fix (non-breaking change which fixes an issue)
web/src/pages/document-viewer/docx/index.tsx
CHANGED
|
@@ -5,7 +5,7 @@ import { useFetchDocx } from '../hooks';
|
|
| 5 |
import styles from './index.less';
|
| 6 |
|
| 7 |
const Docx = ({ filePath }: { filePath: string }) => {
|
| 8 |
-
const { succeed, containerRef } = useFetchDocx(filePath);
|
| 9 |
|
| 10 |
return (
|
| 11 |
<>
|
|
@@ -16,7 +16,7 @@ const Docx = ({ filePath }: { filePath: string }) => {
|
|
| 16 |
</div>
|
| 17 |
</section>
|
| 18 |
) : (
|
| 19 |
-
<FileError
|
| 20 |
)}
|
| 21 |
</>
|
| 22 |
);
|
|
|
|
| 5 |
import styles from './index.less';
|
| 6 |
|
| 7 |
const Docx = ({ filePath }: { filePath: string }) => {
|
| 8 |
+
const { succeed, containerRef, error } = useFetchDocx(filePath);
|
| 9 |
|
| 10 |
return (
|
| 11 |
<>
|
|
|
|
| 16 |
</div>
|
| 17 |
</section>
|
| 18 |
) : (
|
| 19 |
+
<FileError>{error}</FileError>
|
| 20 |
)}
|
| 21 |
</>
|
| 22 |
);
|
web/src/pages/document-viewer/excel/index.tsx
CHANGED
|
@@ -3,7 +3,7 @@ import FileError from '../file-error';
|
|
| 3 |
import { useFetchExcel } from '../hooks';
|
| 4 |
|
| 5 |
const Excel = ({ filePath }: { filePath: string }) => {
|
| 6 |
-
const { status, containerRef } = useFetchExcel(filePath);
|
| 7 |
|
| 8 |
return (
|
| 9 |
<div
|
|
@@ -11,7 +11,7 @@ const Excel = ({ filePath }: { filePath: string }) => {
|
|
| 11 |
ref={containerRef}
|
| 12 |
style={{ height: '100%', width: '100%' }}
|
| 13 |
>
|
| 14 |
-
{status || <FileError
|
| 15 |
</div>
|
| 16 |
);
|
| 17 |
};
|
|
|
|
| 3 |
import { useFetchExcel } from '../hooks';
|
| 4 |
|
| 5 |
const Excel = ({ filePath }: { filePath: string }) => {
|
| 6 |
+
const { status, containerRef, error } = useFetchExcel(filePath);
|
| 7 |
|
| 8 |
return (
|
| 9 |
<div
|
|
|
|
| 11 |
ref={containerRef}
|
| 12 |
style={{ height: '100%', width: '100%' }}
|
| 13 |
>
|
| 14 |
+
{status || <FileError>{error}</FileError>}
|
| 15 |
</div>
|
| 16 |
);
|
| 17 |
};
|
web/src/pages/document-viewer/hooks.ts
CHANGED
|
@@ -3,18 +3,38 @@ import axios from 'axios';
|
|
| 3 |
import mammoth from 'mammoth';
|
| 4 |
import { useCallback, useEffect, useRef, useState } from 'react';
|
| 5 |
|
| 6 |
-
const
|
| 7 |
-
const
|
| 8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
}, []);
|
| 10 |
|
| 11 |
-
return fetchDocument;
|
| 12 |
};
|
| 13 |
|
| 14 |
export const useFetchExcel = (filePath: string) => {
|
| 15 |
const [status, setStatus] = useState(true);
|
| 16 |
-
const fetchDocument = useFetchDocument();
|
| 17 |
const containerRef = useRef<HTMLDivElement>(null);
|
|
|
|
| 18 |
|
| 19 |
const fetchDocumentAsync = useCallback(async () => {
|
| 20 |
let myExcelPreviewer;
|
|
@@ -39,13 +59,14 @@ export const useFetchExcel = (filePath: string) => {
|
|
| 39 |
fetchDocumentAsync();
|
| 40 |
}, [fetchDocumentAsync]);
|
| 41 |
|
| 42 |
-
return { status, containerRef };
|
| 43 |
};
|
| 44 |
|
| 45 |
export const useFetchDocx = (filePath: string) => {
|
| 46 |
const [succeed, setSucceed] = useState(true);
|
| 47 |
-
const fetchDocument = useFetchDocument();
|
| 48 |
const containerRef = useRef<HTMLDivElement>(null);
|
|
|
|
| 49 |
|
| 50 |
const fetchDocumentAsync = useCallback(async () => {
|
| 51 |
const jsonFile = await fetchDocument(filePath);
|
|
@@ -64,9 +85,8 @@ export const useFetchDocx = (filePath: string) => {
|
|
| 64 |
container.innerHTML = docEl.outerHTML;
|
| 65 |
}
|
| 66 |
})
|
| 67 |
-
.catch((
|
| 68 |
setSucceed(false);
|
| 69 |
-
console.warn('alexei: something went wrong', a);
|
| 70 |
});
|
| 71 |
}, [filePath, fetchDocument]);
|
| 72 |
|
|
@@ -74,5 +94,5 @@ export const useFetchDocx = (filePath: string) => {
|
|
| 74 |
fetchDocumentAsync();
|
| 75 |
}, [fetchDocumentAsync]);
|
| 76 |
|
| 77 |
-
return { succeed, containerRef };
|
| 78 |
};
|
|
|
|
| 3 |
import mammoth from 'mammoth';
|
| 4 |
import { useCallback, useEffect, useRef, useState } from 'react';
|
| 5 |
|
| 6 |
+
export const useCatchError = (api: string) => {
|
| 7 |
+
const [error, setError] = useState('');
|
| 8 |
+
const fetchDocument = useCallback(async () => {
|
| 9 |
+
const ret = await axios.get(api);
|
| 10 |
+
const { data } = ret;
|
| 11 |
+
if (!(data instanceof ArrayBuffer) && data.retcode !== 0) {
|
| 12 |
+
setError(data.retmsg);
|
| 13 |
+
}
|
| 14 |
+
return ret;
|
| 15 |
+
}, [api]);
|
| 16 |
+
|
| 17 |
+
useEffect(() => {
|
| 18 |
+
fetchDocument();
|
| 19 |
+
}, [fetchDocument]);
|
| 20 |
+
|
| 21 |
+
return { fetchDocument, error };
|
| 22 |
+
};
|
| 23 |
+
|
| 24 |
+
export const useFetchDocument = () => {
|
| 25 |
+
const fetchDocument = useCallback(async (api: string) => {
|
| 26 |
+
const ret = await axios.get(api, { responseType: 'arraybuffer' });
|
| 27 |
+
return ret;
|
| 28 |
}, []);
|
| 29 |
|
| 30 |
+
return { fetchDocument };
|
| 31 |
};
|
| 32 |
|
| 33 |
export const useFetchExcel = (filePath: string) => {
|
| 34 |
const [status, setStatus] = useState(true);
|
| 35 |
+
const { fetchDocument } = useFetchDocument();
|
| 36 |
const containerRef = useRef<HTMLDivElement>(null);
|
| 37 |
+
const { error } = useCatchError(filePath);
|
| 38 |
|
| 39 |
const fetchDocumentAsync = useCallback(async () => {
|
| 40 |
let myExcelPreviewer;
|
|
|
|
| 59 |
fetchDocumentAsync();
|
| 60 |
}, [fetchDocumentAsync]);
|
| 61 |
|
| 62 |
+
return { status, containerRef, error };
|
| 63 |
};
|
| 64 |
|
| 65 |
export const useFetchDocx = (filePath: string) => {
|
| 66 |
const [succeed, setSucceed] = useState(true);
|
| 67 |
+
const { fetchDocument } = useFetchDocument();
|
| 68 |
const containerRef = useRef<HTMLDivElement>(null);
|
| 69 |
+
const { error } = useCatchError(filePath);
|
| 70 |
|
| 71 |
const fetchDocumentAsync = useCallback(async () => {
|
| 72 |
const jsonFile = await fetchDocument(filePath);
|
|
|
|
| 85 |
container.innerHTML = docEl.outerHTML;
|
| 86 |
}
|
| 87 |
})
|
| 88 |
+
.catch(() => {
|
| 89 |
setSucceed(false);
|
|
|
|
| 90 |
});
|
| 91 |
}, [filePath, fetchDocument]);
|
| 92 |
|
|
|
|
| 94 |
fetchDocumentAsync();
|
| 95 |
}, [fetchDocumentAsync]);
|
| 96 |
|
| 97 |
+
return { succeed, containerRef, error };
|
| 98 |
};
|
web/src/pages/document-viewer/pdf/index.tsx
CHANGED
|
@@ -1,12 +1,14 @@
|
|
| 1 |
import { Skeleton } from 'antd';
|
| 2 |
import { PdfHighlighter, PdfLoader } from 'react-pdf-highlighter';
|
| 3 |
import FileError from '../file-error';
|
|
|
|
| 4 |
|
| 5 |
interface IProps {
|
| 6 |
url: string;
|
| 7 |
}
|
| 8 |
|
| 9 |
-
const
|
|
|
|
| 10 |
const resetHash = () => {};
|
| 11 |
|
| 12 |
return (
|
|
@@ -15,7 +17,7 @@ const DocumentPreviewer = ({ url }: IProps) => {
|
|
| 15 |
url={url}
|
| 16 |
beforeLoad={<Skeleton active />}
|
| 17 |
workerSrc="/pdfjs-dist/pdf.worker.min.js"
|
| 18 |
-
errorMessage={<FileError
|
| 19 |
onError={(e) => {
|
| 20 |
console.warn(e);
|
| 21 |
}}
|
|
@@ -40,4 +42,4 @@ const DocumentPreviewer = ({ url }: IProps) => {
|
|
| 40 |
);
|
| 41 |
};
|
| 42 |
|
| 43 |
-
export default
|
|
|
|
| 1 |
import { Skeleton } from 'antd';
|
| 2 |
import { PdfHighlighter, PdfLoader } from 'react-pdf-highlighter';
|
| 3 |
import FileError from '../file-error';
|
| 4 |
+
import { useCatchError } from '../hooks';
|
| 5 |
|
| 6 |
interface IProps {
|
| 7 |
url: string;
|
| 8 |
}
|
| 9 |
|
| 10 |
+
const PdfPreviewer = ({ url }: IProps) => {
|
| 11 |
+
const { error } = useCatchError(url);
|
| 12 |
const resetHash = () => {};
|
| 13 |
|
| 14 |
return (
|
|
|
|
| 17 |
url={url}
|
| 18 |
beforeLoad={<Skeleton active />}
|
| 19 |
workerSrc="/pdfjs-dist/pdf.worker.min.js"
|
| 20 |
+
errorMessage={<FileError>{error}</FileError>}
|
| 21 |
onError={(e) => {
|
| 22 |
console.warn(e);
|
| 23 |
}}
|
|
|
|
| 42 |
);
|
| 43 |
};
|
| 44 |
|
| 45 |
+
export default PdfPreviewer;
|