diff --git a/web/src/pages/document-viewer/index.tsx b/web/src/pages/document-viewer/index.tsx index 763c6ca3a..798e75c23 100644 --- a/web/src/pages/document-viewer/index.tsx +++ b/web/src/pages/document-viewer/index.tsx @@ -2,6 +2,8 @@ import { Images } from '@/constants/common'; import { api_host } from '@/utils/api'; import { Flex } from 'antd'; import { useParams, useSearchParams } from 'umi'; +import Md from './md'; +import Text from './text'; import Docx from './docx'; import Excel from './excel'; import Image from './image'; @@ -31,6 +33,9 @@ const DocumentViewer = () => { )} + {ext === 'md' && } + {ext === 'txt' && } + {ext === 'pdf' && } {(ext === 'xlsx' || ext === 'xls') && } diff --git a/web/src/pages/document-viewer/md/index.tsx b/web/src/pages/document-viewer/md/index.tsx new file mode 100644 index 000000000..f96cbafb3 --- /dev/null +++ b/web/src/pages/document-viewer/md/index.tsx @@ -0,0 +1,34 @@ +import React, { useEffect, useState } from 'react'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import FileError from '../file-error'; + +interface MdProps { + filePath: string; +} + +const Md: React.FC = ({ filePath }) => { + const [content, setContent] = useState(''); + const [error, setError] = useState(null); + + useEffect(() => { + setError(null); + fetch(filePath) + .then((res) => { + if (!res.ok) throw new Error('Failed to fetch markdown file'); + return res.text(); + }) + .then((text) => setContent(text)) + .catch((err) => setError(err.message)) + }, [filePath]); + + if (error) return ({error}); + + return ( +
+ {content} +
+ ); +}; + +export default Md; diff --git a/web/src/pages/document-viewer/text/index.tsx b/web/src/pages/document-viewer/text/index.tsx new file mode 100644 index 000000000..750dfb189 --- /dev/null +++ b/web/src/pages/document-viewer/text/index.tsx @@ -0,0 +1,32 @@ +import React, { useEffect, useState } from 'react'; +import FileError from '../file-error'; + +interface TxtProps { + filePath: string; +} + +const Md: React.FC = ({ filePath }) => { + const [content, setContent] = useState(''); + const [error, setError] = useState(null); + + useEffect(() => { + setError(null); + fetch(filePath) + .then((res) => { + if (!res.ok) throw new Error('Failed to fetch text file'); + return res.text(); + }) + .then((text) => setContent(text)) + .catch((err) => setError(err.message)) + }, [filePath]); + + if (error) return ({error}); + + return ( +
+ {content} +
+ ); +}; + +export default Md;