From cf12c3cc1fbd75645824c6d730106031016dd37a Mon Sep 17 00:00:00 2001 From: balibabu Date: Mon, 22 Jul 2024 15:54:15 +0800 Subject: [PATCH] fix: reference file with 'docx' type can not open #844 (#1635) ### What problem does this PR solve? fix: reference file with 'docx' type can not open #844 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --- web/src/components/message-item/index.tsx | 9 +++---- web/src/components/new-document-link.tsx | 26 ++++++++++++++++--- .../testing-result/select-files.tsx | 20 ++++++++------ web/src/pages/document-viewer/index.tsx | 3 ++- .../pages/file-manager/action-cell/index.tsx | 13 +++++----- web/src/utils/documentUtils.ts | 5 ++++ 6 files changed, 52 insertions(+), 24 deletions(-) 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) && (