diff --git a/web/src/components/message-item/index.tsx b/web/src/components/message-item/index.tsx
index 9026e1ce1..ea31ce3d9 100644
--- a/web/src/components/message-item/index.tsx
+++ b/web/src/components/message-item/index.tsx
@@ -1,7 +1,6 @@
import { ReactComponent as AssistantIcon } from '@/assets/svg/assistant.svg';
import { MessageType } from '@/constants/chat';
import { useTranslate } from '@/hooks/common-hooks';
-import { useGetDocumentUrl } from '@/hooks/document-hooks';
import { useSelectFileThumbnails } from '@/hooks/knowledge-hooks';
import { IReference, Message } from '@/interfaces/database/chat';
import { IChunk } from '@/interfaces/database/knowledge';
@@ -9,7 +8,7 @@ import classNames from 'classnames';
import { useMemo } from 'react';
import MarkdownContent from '@/pages/chat/markdown-content';
-import { getExtension, isPdf } from '@/utils/documentUtils';
+import { getExtension } from '@/utils/documentUtils';
import { Avatar, Flex, List } from 'antd';
import NewDocumentLink from '../new-document-link';
import SvgIcon from '../svg-icon';
@@ -35,7 +34,6 @@ const MessageItem = ({
const isAssistant = item.role === MessageType.Assistant;
const { t } = useTranslate('chat');
const fileThumbnails = useSelectFileThumbnails();
- const getDocumentUrl = useGetDocumentUrl();
const referenceDocumentList = useMemo(() => {
return reference?.doc_aggs ?? [];
@@ -114,8 +112,9 @@ const MessageItem = ({
)}
{item.doc_name}
diff --git a/web/src/components/new-document-link.tsx b/web/src/components/new-document-link.tsx
index 3cbc917ce..055e9d2ae 100644
--- a/web/src/components/new-document-link.tsx
+++ b/web/src/components/new-document-link.tsx
@@ -1,9 +1,16 @@
+import {
+ getExtension,
+ isSupportedPreviewDocumentType,
+} from '@/utils/documentUtils';
import React from 'react';
interface IProps extends React.PropsWithChildren {
- link: string;
+ link?: string;
preventDefault?: boolean;
color?: string;
+ documentName: string;
+ documentId?: string;
+ prefix?: string;
}
const NewDocumentLink = ({
@@ -11,12 +18,25 @@ const NewDocumentLink = ({
link,
preventDefault = false,
color = 'rgb(15, 79, 170)',
+ documentId,
+ documentName,
+ prefix = 'file',
}: IProps) => {
+ let nextLink = link;
+ const extension = getExtension(documentName);
+ if (!link) {
+ nextLink = `/document/${documentId}?ext=${extension}&prefix=${prefix}`;
+ }
+
return (
e.preventDefault()}
- href={link}
+ onClick={
+ !preventDefault || isSupportedPreviewDocumentType(extension)
+ ? undefined
+ : (e) => e.preventDefault()
+ }
+ href={nextLink}
rel="noreferrer"
style={{ color, wordBreak: 'break-all' }}
>
diff --git a/web/src/pages/add-knowledge/components/knowledge-testing/testing-result/select-files.tsx b/web/src/pages/add-knowledge/components/knowledge-testing/testing-result/select-files.tsx
index e992cebb7..ff4cd7090 100644
--- a/web/src/pages/add-knowledge/components/knowledge-testing/testing-result/select-files.tsx
+++ b/web/src/pages/add-knowledge/components/knowledge-testing/testing-result/select-files.tsx
@@ -1,9 +1,8 @@
-import { ReactComponent as NavigationPointerIcon } from '@/assets/svg/navigation-pointer.svg';
import NewDocumentLink from '@/components/new-document-link';
-import { useGetDocumentUrl } from '@/hooks/document-hooks';
+import { useTranslate } from '@/hooks/common-hooks';
import { ITestingDocument } from '@/interfaces/database/knowledge';
-import { isPdf } from '@/utils/documentUtils';
-import { Table, TableProps } from 'antd';
+import { EyeOutlined } from '@ant-design/icons';
+import { Button, Table, TableProps, Tooltip } from 'antd';
import { useDispatch, useSelector } from 'umi';
interface IProps {
@@ -14,9 +13,9 @@ const SelectFiles = ({ handleTesting }: IProps) => {
const documents: ITestingDocument[] = useSelector(
(state: any) => state.testingModel.documents,
);
+ const { t } = useTranslate('fileManager');
const dispatch = useDispatch();
- const getDocumentUrl = useGetDocumentUrl();
const columns: TableProps['columns'] = [
{
@@ -38,10 +37,15 @@ const SelectFiles = ({ handleTesting }: IProps) => {
width: 50,
render: (_, { doc_id, doc_name }) => (
-
+
+
+
),
},
diff --git a/web/src/pages/document-viewer/index.tsx b/web/src/pages/document-viewer/index.tsx
index b136558d7..6b2d1ce25 100644
--- a/web/src/pages/document-viewer/index.tsx
+++ b/web/src/pages/document-viewer/index.tsx
@@ -12,9 +12,10 @@ import styles from './index.less';
const DocumentViewer = () => {
const { id: documentId } = useParams();
- const api = `${api_host}/file/get/${documentId}`;
const [currentQueryParameters] = useSearchParams();
const ext = currentQueryParameters.get('ext');
+ const prefix = currentQueryParameters.get('prefix');
+ const api = `${api_host}/${prefix || 'file'}/get/${documentId}`;
return (
diff --git a/web/src/pages/file-manager/action-cell/index.tsx b/web/src/pages/file-manager/action-cell/index.tsx
index 4f2d06b3e..2b2854749 100644
--- a/web/src/pages/file-manager/action-cell/index.tsx
+++ b/web/src/pages/file-manager/action-cell/index.tsx
@@ -13,14 +13,12 @@ import { Button, Space, Tooltip } from 'antd';
import { useHandleDeleteFile } from '../hooks';
import NewDocumentLink from '@/components/new-document-link';
-import { SupportedPreviewDocumentTypes } from '@/constants/common';
-import { getExtension } from '@/utils/documentUtils';
+import {
+ getExtension,
+ isSupportedPreviewDocumentType,
+} from '@/utils/documentUtils';
import styles from './index.less';
-const isSupportedPreviewDocumentType = (fileExtension: string) => {
- return SupportedPreviewDocumentTypes.includes(fileExtension);
-};
-
interface IProps {
record: IFile;
setCurrentRecord: (record: any) => void;
@@ -118,8 +116,9 @@ const ActionCell = ({
)}
{isSupportedPreviewDocumentType(extension) && (