diff --git a/web/src/hooks/documentHooks.ts b/web/src/hooks/documentHooks.ts index a79f9d16a3..536da8bd23 100644 --- a/web/src/hooks/documentHooks.ts +++ b/web/src/hooks/documentHooks.ts @@ -1,8 +1,10 @@ -import { IChunk } from '@/interfaces/database/knowledge'; +import { IChunk, IKnowledgeFile } from '@/interfaces/database/knowledge'; import { api_host } from '@/utils/api'; import { buildChunkHighlights } from '@/utils/documentUtils'; -import { useMemo } from 'react'; +import { useCallback, useMemo } from 'react'; import { IHighlight } from 'react-pdf-highlighter'; +import { useDispatch, useSelector } from 'umi'; +import { useGetKnowledgeSearchParams } from './routeHook'; export const useGetDocumentUrl = (documentId: string) => { const url = useMemo(() => { @@ -19,3 +21,139 @@ export const useGetChunkHighlights = (selectedChunk: IChunk): IHighlight[] => { return highlights; }; + +export const useFetchDocumentList = () => { + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const dispatch = useDispatch(); + + const fetchKfList = useCallback(() => { + return dispatch({ + type: 'kFModel/getKfList', + payload: { + kb_id: knowledgeId, + }, + }); + }, [dispatch, knowledgeId]); + + return fetchKfList; +}; + +export const useSetDocumentStatus = () => { + const dispatch = useDispatch(); + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const setDocumentStatus = useCallback( + (status: boolean, documentId: string) => { + dispatch({ + type: 'kFModel/updateDocumentStatus', + payload: { + doc_id: documentId, + status: Number(status), + kb_id: knowledgeId, + }, + }); + }, + [dispatch, knowledgeId], + ); + + return setDocumentStatus; +}; + +export const useSelectDocumentList = () => { + const list: IKnowledgeFile[] = useSelector( + (state: any) => state.kFModel.data, + ); + return list; +}; + +export const useSaveDocumentName = () => { + const dispatch = useDispatch(); + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const saveName = useCallback( + (documentId: string, name: string) => { + return dispatch({ + type: 'kFModel/document_rename', + payload: { + doc_id: documentId, + name: name, + kb_id: knowledgeId, + }, + }); + }, + [dispatch, knowledgeId], + ); + + return saveName; +}; + +export const useCreateDocument = () => { + const dispatch = useDispatch(); + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const createDocument = useCallback( + (name: string) => { + try { + return dispatch({ + type: 'kFModel/document_create', + payload: { + name, + kb_id: knowledgeId, + }, + }); + } catch (errorInfo) { + console.log('Failed:', errorInfo); + } + }, + [dispatch, knowledgeId], + ); + + return createDocument; +}; + +export const useSetDocumentParser = () => { + const dispatch = useDispatch(); + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const setDocumentParser = useCallback( + (parserId: string, documentId: string) => { + try { + return dispatch({ + type: 'kFModel/document_change_parser', + payload: { + parser_id: parserId, + doc_id: documentId, + kb_id: knowledgeId, + }, + }); + } catch (errorInfo) { + console.log('Failed:', errorInfo); + } + }, + [dispatch, knowledgeId], + ); + + return setDocumentParser; +}; + +export const useRemoveDocument = (documentId: string) => { + const dispatch = useDispatch(); + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const removeDocument = useCallback(() => { + try { + return dispatch({ + type: 'kFModel/document_rm', + payload: { + doc_id: documentId, + kb_id: knowledgeId, + }, + }); + } catch (errorInfo) { + console.log('Failed:', errorInfo); + } + }, [dispatch, knowledgeId, documentId]); + + return removeDocument; +}; diff --git a/web/src/pages/add-knowledge/components/knowledge-file/segmentSetModal.tsx b/web/src/pages/add-knowledge/components/knowledge-file/chunk-method-modal.tsx similarity index 55% rename from web/src/pages/add-knowledge/components/knowledge-file/segmentSetModal.tsx rename to web/src/pages/add-knowledge/components/knowledge-file/chunk-method-modal.tsx index ea7a9e89b2..69d5e9168b 100644 --- a/web/src/pages/add-knowledge/components/knowledge-file/segmentSetModal.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-file/chunk-method-modal.tsx @@ -1,86 +1,69 @@ -import { - useFetchTenantInfo, - useSelectParserList, -} from '@/hooks/userSettingHook'; -import { Modal, Space, Tag } from 'antd'; -import React, { useEffect, useState } from 'react'; -import { useDispatch, useSelector } from 'umi'; -import styles from './index.less'; -const { CheckableTag } = Tag; -interface kFProps { - getKfList: () => void; - parser_id: string; - doc_id: string; -} -const SegmentSetModal: React.FC = ({ - getKfList, - parser_id, - doc_id, -}) => { - const dispatch = useDispatch(); - const kFModel = useSelector((state: any) => state.kFModel); - const [selectedTag, setSelectedTag] = useState(''); - const { isShowSegmentSetModal } = kFModel; - const parserList = useSelectParserList(); - - useFetchTenantInfo(); - - useEffect(() => { - setSelectedTag(parser_id); - }, [parser_id]); - - const handleCancel = () => { - dispatch({ - type: 'kFModel/updateState', - payload: { - isShowSegmentSetModal: false, - }, - }); - }; - - const handleOk = async () => { - const retcode = await dispatch({ - type: 'kFModel/document_change_parser', - payload: { - parser_id: selectedTag, - doc_id, - }, - }); - - if (retcode === 0 && getKfList) { - getKfList(); - handleCancel(); - } - }; - - const handleChange = (tag: string, checked: boolean) => { - const nextSelectedTag = checked ? tag : selectedTag; - setSelectedTag(nextSelectedTag); - }; - - return ( - - -
- {parserList.map((x) => { - return ( - handleChange(x.value, checked)} - > - {x.label} - - ); - })} -
-
-
- ); -}; -export default SegmentSetModal; +import { IModalManagerChildrenProps } from '@/components/modal-manager'; +import { + useFetchTenantInfo, + useSelectParserList, +} from '@/hooks/userSettingHook'; +import { Modal, Space, Tag } from 'antd'; +import React, { useEffect, useState } from 'react'; + +import styles from './index.less'; + +const { CheckableTag } = Tag; + +interface IProps extends Omit { + loading: boolean; + onOk: (parserId: string) => void; + showModal?(): void; + parser_id: string; +} + +const ChunkMethodModal: React.FC = ({ + parser_id, + onOk, + hideModal, + visible, +}) => { + const [selectedTag, setSelectedTag] = useState(''); + const parserList = useSelectParserList(); + + useFetchTenantInfo(); + + useEffect(() => { + setSelectedTag(parser_id); + }, [parser_id]); + + const handleOk = async () => { + onOk(selectedTag); + }; + + const handleChange = (tag: string, checked: boolean) => { + const nextSelectedTag = checked ? tag : selectedTag; + setSelectedTag(nextSelectedTag); + }; + + return ( + + +
+ {parserList.map((x) => { + return ( + handleChange(x.value, checked)} + > + {x.label} + + ); + })} +
+
+
+ ); +}; +export default ChunkMethodModal; diff --git a/web/src/pages/add-knowledge/components/knowledge-file/create-file-modal.tsx b/web/src/pages/add-knowledge/components/knowledge-file/create-file-modal.tsx new file mode 100644 index 0000000000..8e23d426db --- /dev/null +++ b/web/src/pages/add-knowledge/components/knowledge-file/create-file-modal.tsx @@ -0,0 +1,49 @@ +import { IModalManagerChildrenProps } from '@/components/modal-manager'; +import { Form, Input, Modal } from 'antd'; +import React from 'react'; + +type FieldType = { + name?: string; +}; + +interface IProps extends Omit { + loading: boolean; + onOk: (name: string) => void; + showModal?(): void; +} + +const FileCreatingModal: React.FC = ({ visible, hideModal, onOk }) => { + const [form] = Form.useForm(); + + const handleOk = async () => { + const values = await form.validateFields(); + onOk(values.name); + }; + + return ( + +
+ + label="File Name" + name="name" + rules={[{ required: true, message: 'Please input name!' }]} + > + + + +
+ ); +}; +export default FileCreatingModal; diff --git a/web/src/pages/add-knowledge/components/knowledge-file/createEFileModal.tsx b/web/src/pages/add-knowledge/components/knowledge-file/createEFileModal.tsx deleted file mode 100644 index 3447f20123..0000000000 --- a/web/src/pages/add-knowledge/components/knowledge-file/createEFileModal.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { Form, Input, Modal } from 'antd'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { useDispatch, useSelector } from 'umi'; - -type FieldType = { - name?: string; -}; -interface kFProps { - getKfList: () => void; - kb_id: string; -} - -const FileCreatingModal: React.FC = ({ getKfList, kb_id }) => { - const dispatch = useDispatch(); - const [form] = Form.useForm(); - const kFModel = useSelector((state: any) => state.kFModel); - const { isShowCEFwModal } = kFModel; - const { t } = useTranslation(); - - const handleCancel = () => { - dispatch({ - type: 'kFModel/updateState', - payload: { - isShowCEFwModal: false, - }, - }); - }; - - const createDocument = async () => { - try { - const values = await form.validateFields(); - const retcode = await dispatch({ - type: 'kFModel/document_create', - payload: { - name: values.name, - kb_id, - }, - }); - if (retcode === 0) { - getKfList && getKfList(); - } - } catch (errorInfo) { - console.log('Failed:', errorInfo); - } - }; - - const handleOk = async () => { - createDocument(); - }; - - return ( - -
- - label="File Name" - name="name" - rules={[{ required: true, message: 'Please input name!' }]} - > - - - -
- ); -}; -export default FileCreatingModal; diff --git a/web/src/pages/add-knowledge/components/knowledge-file/hooks.ts b/web/src/pages/add-knowledge/components/knowledge-file/hooks.ts new file mode 100644 index 0000000000..3618908b4b --- /dev/null +++ b/web/src/pages/add-knowledge/components/knowledge-file/hooks.ts @@ -0,0 +1,241 @@ +import { useSetModalState } from '@/hooks/commonHooks'; +import { + useCreateDocument, + useFetchDocumentList, + useSaveDocumentName, + useSetDocumentParser, +} from '@/hooks/documentHooks'; +import { useGetKnowledgeSearchParams } from '@/hooks/routeHook'; +import { useOneNamespaceEffectsLoading } from '@/hooks/storeHooks'; +import { useFetchTenantInfo } from '@/hooks/userSettingHook'; +import { Pagination } from '@/interfaces/common'; +import { IKnowledgeFile } from '@/interfaces/database/knowledge'; +import { PaginationProps } from 'antd'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useDispatch, useNavigate, useSelector } from 'umi'; +import { KnowledgeRouteKey } from './constant'; + +export const useFetchDocumentListOnMount = () => { + const { knowledgeId } = useGetKnowledgeSearchParams(); + const fetchDocumentList = useFetchDocumentList(); + const dispatch = useDispatch(); + + useFetchTenantInfo(); + + useEffect(() => { + if (knowledgeId) { + fetchDocumentList(); + dispatch({ + type: 'kFModel/pollGetDocumentList-start', + payload: knowledgeId, + }); + } + return () => { + dispatch({ + type: 'kFModel/pollGetDocumentList-stop', + }); + }; + }, [knowledgeId, dispatch, fetchDocumentList]); + + return { fetchDocumentList }; +}; + +export const useGetPagination = (fetchDocumentList: () => void) => { + const dispatch = useDispatch(); + const kFModel = useSelector((state: any) => state.kFModel); + + const setPagination = useCallback( + (pageNumber = 1, pageSize?: number) => { + const pagination: Pagination = { + current: pageNumber, + } as Pagination; + if (pageSize) { + pagination.pageSize = pageSize; + } + dispatch({ + type: 'kFModel/setPagination', + payload: pagination, + }); + }, + [dispatch], + ); + + const onPageChange: PaginationProps['onChange'] = useCallback( + (pageNumber: number, pageSize: number) => { + setPagination(pageNumber, pageSize); + fetchDocumentList(); + }, + [fetchDocumentList, setPagination], + ); + + const pagination: PaginationProps = useMemo(() => { + return { + showQuickJumper: true, + total: kFModel.total, + showSizeChanger: true, + current: kFModel.pagination.currentPage, + pageSize: kFModel.pagination.pageSize, + pageSizeOptions: [1, 2, 10, 20, 50, 100], + onChange: onPageChange, + }; + }, [kFModel, onPageChange]); + + return { + pagination, + setPagination, + total: kFModel.total, + searchString: kFModel.searchString, + }; +}; + +export const useSelectDocumentListLoading = () => { + return useOneNamespaceEffectsLoading('kFModel', [ + 'getKfList', + 'updateDocumentStatus', + ]); +}; + +export const useNavigateToOtherPage = () => { + const navigate = useNavigate(); + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const linkToUploadPage = useCallback(() => { + navigate(`/knowledge/dataset/upload?id=${knowledgeId}`); + }, [navigate, knowledgeId]); + + const toChunk = useCallback( + (id: string) => { + navigate( + `/knowledge/${KnowledgeRouteKey.Dataset}/chunk?id=${knowledgeId}&doc_id=${id}`, + ); + }, + [navigate, knowledgeId], + ); + + return { linkToUploadPage, toChunk }; +}; + +export const useHandleSearchChange = (setPagination: () => void) => { + const dispatch = useDispatch(); + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const throttledGetDocumentList = useCallback(() => { + dispatch({ + type: 'kFModel/throttledGetDocumentList', + payload: knowledgeId, + }); + }, [dispatch, knowledgeId]); + + const handleInputChange = useCallback( + (e: React.ChangeEvent) => { + const value = e.target.value; + dispatch({ type: 'kFModel/setSearchString', payload: value }); + setPagination(); + throttledGetDocumentList(); + }, + [setPagination, throttledGetDocumentList, dispatch], + ); + + return { handleInputChange }; +}; + +export const useSetSelectedRecord = () => { + const [currentRecord, setCurrentRecord] = useState( + {} as IKnowledgeFile, + ); + + const setRecord = (record: IKnowledgeFile) => () => { + setCurrentRecord(record); + }; + + return { currentRecord, setRecord }; +}; + +export const useRenameDocument = (documentId: string) => { + const saveName = useSaveDocumentName(); + + const { + visible: renameVisible, + hideModal: hideRenameModal, + showModal: showRenameModal, + } = useSetModalState(); + const loading = useOneNamespaceEffectsLoading('kFModel', ['document_rename']); + + const onRenameOk = useCallback( + async (name: string) => { + const ret = await saveName(documentId, name); + if (ret === 0) { + hideRenameModal(); + } + }, + [hideRenameModal, saveName, documentId], + ); + + return { + renameLoading: loading, + onRenameOk, + renameVisible, + hideRenameModal, + showRenameModal, + }; +}; + +export const useCreateEmptyDocument = () => { + const createDocument = useCreateDocument(); + + const { + visible: createVisible, + hideModal: hideCreateModal, + showModal: showCreateModal, + } = useSetModalState(); + const loading = useOneNamespaceEffectsLoading('kFModel', ['document_create']); + + const onCreateOk = useCallback( + async (name: string) => { + const ret = await createDocument(name); + if (ret === 0) { + hideCreateModal(); + } + }, + [hideCreateModal, createDocument], + ); + + return { + createLoading: loading, + onCreateOk, + createVisible, + hideCreateModal, + showCreateModal, + }; +}; + +export const useChangeDocumentParser = (documentId: string) => { + const setDocumentParser = useSetDocumentParser(); + + const { + visible: changeParserVisible, + hideModal: hideChangeParserModal, + showModal: showChangeParserModal, + } = useSetModalState(); + const loading = useOneNamespaceEffectsLoading('kFModel', [ + 'document_change_parser', + ]); + + const onChangeParserOk = useCallback( + async (parserId: string) => { + const ret = await setDocumentParser(parserId, documentId); + if (ret === 0) { + hideChangeParserModal(); + } + }, + [hideChangeParserModal, setDocumentParser, documentId], + ); + + return { + changeParserLoading: loading, + onChangeParserOk, + changeParserVisible, + hideChangeParserModal, + showChangeParserModal, + }; +}; diff --git a/web/src/pages/add-knowledge/components/knowledge-file/index.tsx b/web/src/pages/add-knowledge/components/knowledge-file/index.tsx index 02a159cf2a..7c36b6c1bf 100644 --- a/web/src/pages/add-knowledge/components/knowledge-file/index.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-file/index.tsx @@ -1,12 +1,9 @@ -import { KnowledgeRouteKey } from '@/constants/knowledge'; -import { useKnowledgeBaseId } from '@/hooks/knowledgeHook'; import { - useFetchTenantInfo, - useSelectParserList, -} from '@/hooks/userSettingHook'; -import { Pagination } from '@/interfaces/common'; + useSelectDocumentList, + useSetDocumentStatus, +} from '@/hooks/documentHooks'; +import { useSelectParserList } from '@/hooks/userSettingHook'; import { IKnowledgeFile } from '@/interfaces/database/knowledge'; -import { getOneNamespaceEffectsLoading } from '@/utils/storeUtil'; import { FileOutlined, FileTextOutlined, @@ -25,133 +22,57 @@ import { Tag, } from 'antd'; import type { ColumnsType } from 'antd/es/table'; -import { PaginationProps } from 'antd/lib'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { useDispatch, useNavigate, useSelector } from 'umi'; -import CreateEPModal from './createEFileModal'; -import styles from './index.less'; +import { useMemo } from 'react'; +import ChunkMethodModal from './chunk-method-modal'; +import CreateFileModal from './create-file-modal'; +import { + useChangeDocumentParser, + useCreateEmptyDocument, + useFetchDocumentListOnMount, + useGetPagination, + useHandleSearchChange, + useNavigateToOtherPage, + useRenameDocument, + useSetSelectedRecord, +} from './hooks'; import ParsingActionCell from './parsing-action-cell'; import ParsingStatusCell from './parsing-status-cell'; import RenameModal from './rename-modal'; -import SegmentSetModal from './segmentSetModal'; -const KnowledgeFile = () => { - const dispatch = useDispatch(); - const kFModel = useSelector((state: any) => state.kFModel); - const effects = useSelector((state: any) => state.loading.effects); - const { data, total } = kFModel; - const knowledgeBaseId = useKnowledgeBaseId(); +import styles from './index.less'; - const loading = getOneNamespaceEffectsLoading('kFModel', effects, [ - 'getKfList', - 'updateDocumentStatus', - ]); - const [doc_id, setDocId] = useState('0'); - const [parser_id, setParserId] = useState('0'); - let navigate = useNavigate(); +const KnowledgeFile = () => { + const data = useSelectDocumentList(); + const { fetchDocumentList } = useFetchDocumentListOnMount(); const parserList = useSelectParserList(); - - const getKfList = useCallback(() => { - const payload = { - kb_id: knowledgeBaseId, - }; - - dispatch({ - type: 'kFModel/getKfList', - payload, - }); - }, [dispatch, knowledgeBaseId]); - - const throttledGetDocumentList = () => { - dispatch({ - type: 'kFModel/throttledGetDocumentList', - payload: knowledgeBaseId, - }); - }; - - const setPagination = useCallback( - (pageNumber = 1, pageSize?: number) => { - const pagination: Pagination = { - current: pageNumber, - } as Pagination; - if (pageSize) { - pagination.pageSize = pageSize; - } - dispatch({ - type: 'kFModel/setPagination', - payload: pagination, - }); - }, - [dispatch], - ); - - const onPageChange: PaginationProps['onChange'] = useCallback( - (pageNumber: number, pageSize: number) => { - setPagination(pageNumber, pageSize); - getKfList(); - }, - [getKfList, setPagination], - ); - - const pagination: PaginationProps = useMemo(() => { - return { - showQuickJumper: true, - total, - showSizeChanger: true, - current: kFModel.pagination.currentPage, - pageSize: kFModel.pagination.pageSize, - pageSizeOptions: [1, 2, 10, 20, 50, 100], - onChange: onPageChange, - }; - }, [total, kFModel.pagination, onPageChange]); - - useEffect(() => { - if (knowledgeBaseId) { - getKfList(); - dispatch({ - type: 'kFModel/pollGetDocumentList-start', - payload: knowledgeBaseId, - }); - } - return () => { - dispatch({ - type: 'kFModel/pollGetDocumentList-stop', - }); - }; - }, [knowledgeBaseId, dispatch, getKfList]); - - const handleInputChange = ( - e: React.ChangeEvent, - ) => { - const value = e.target.value; - dispatch({ type: 'kFModel/setSearchString', payload: value }); - setPagination(); - throttledGetDocumentList(); - }; - - const onChangeStatus = (e: boolean, doc_id: string) => { - dispatch({ - type: 'kFModel/updateDocumentStatus', - payload: { - doc_id, - status: Number(e), - kb_id: knowledgeBaseId, - }, - }); - }; - - const showCEFModal = useCallback(() => { - dispatch({ - type: 'kFModel/updateState', - payload: { - isShowCEFwModal: true, - }, - }); - }, [dispatch]); - - const linkToUploadPage = useCallback(() => { - navigate(`/knowledge/dataset/upload?id=${knowledgeBaseId}`); - }, [navigate, knowledgeBaseId]); + const { pagination, setPagination, total, searchString } = + useGetPagination(fetchDocumentList); + const onChangeStatus = useSetDocumentStatus(); + const { linkToUploadPage, toChunk } = useNavigateToOtherPage(); + + const { handleInputChange } = useHandleSearchChange(setPagination); + const { currentRecord, setRecord } = useSetSelectedRecord(); + const { + renameLoading, + onRenameOk, + renameVisible, + hideRenameModal, + showRenameModal, + } = useRenameDocument(currentRecord.id); + const { + createLoading, + onCreateOk, + createVisible, + hideCreateModal, + showCreateModal, + } = useCreateEmptyDocument(); + const { + changeParserLoading, + onChangeParserOk, + changeParserVisible, + hideChangeParserModal, + showChangeParserModal, + } = useChangeDocumentParser(currentRecord.id); const actionItems: MenuProps['items'] = useMemo(() => { return [ @@ -172,7 +93,7 @@ const KnowledgeFile = () => { { type: 'divider' }, { key: '2', - onClick: showCEFModal, + onClick: showCreateModal, label: (
), diff --git a/web/src/pages/add-knowledge/components/knowledge-file/rename-modal/index.tsx b/web/src/pages/add-knowledge/components/knowledge-file/rename-modal/index.tsx index a80d7f469a..b93a17935a 100644 --- a/web/src/pages/add-knowledge/components/knowledge-file/rename-modal/index.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-file/rename-modal/index.tsx @@ -1,46 +1,30 @@ -import { useKnowledgeBaseId } from '@/hooks/knowledgeHook'; +import { IModalManagerChildrenProps } from '@/components/modal-manager'; import { Form, Input, Modal } from 'antd'; import { useEffect } from 'react'; -import { useDispatch, useSelector } from 'umi'; -const RenameModal = () => { +interface IProps extends Omit { + loading: boolean; + initialName: string; + onOk: (name: string) => void; + showModal?(): void; +} + +const RenameModal = ({ + visible, + onOk, + loading, + initialName, + hideModal, +}: IProps) => { const [form] = Form.useForm(); - const dispatch = useDispatch(); - const kFModel = useSelector((state: any) => state.kFModel); - const loading = useSelector( - (state: any) => state.loading.effects['kFModel/document_rename'], - ); - const knowledgeBaseId = useKnowledgeBaseId(); - const isModalOpen = kFModel.isShowRenameModal; - const initialName = kFModel.currentRecord?.name; - const documentId = kFModel.currentRecord?.id; type FieldType = { name?: string; }; - const closeModal = () => { - dispatch({ - type: 'kFModel/setIsShowRenameModal', - payload: false, - }); - }; - const handleOk = async () => { const ret = await form.validateFields(); - - dispatch({ - type: 'kFModel/document_rename', - payload: { - doc_id: documentId, - name: ret.name, - kb_id: knowledgeBaseId, - }, - }); - }; - - const handleCancel = () => { - closeModal(); + onOk(ret.name); }; const onFinish = (values: any) => { @@ -52,17 +36,17 @@ const RenameModal = () => { }; useEffect(() => { - if (isModalOpen) { + if (visible) { form.setFieldValue('name', initialName); } - }, [initialName, documentId, form, isModalOpen]); + }, [initialName, form, visible]); return (
{ {item.title} Category - {item.description} +

{item.title} Image Examples We've prepared detailed visual guides to make understanding easier diff --git a/web/src/pages/add-knowledge/components/knowledge-setting/index.tsx b/web/src/pages/add-knowledge/components/knowledge-setting/index.tsx index fa2c37700f..0ef3ff6178 100644 --- a/web/src/pages/add-knowledge/components/knowledge-setting/index.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-setting/index.tsx @@ -21,10 +21,10 @@ const Configuration = () => { - + - + diff --git a/web/src/pages/chat/index.tsx b/web/src/pages/chat/index.tsx index 88c3bca961..183914089b 100644 --- a/web/src/pages/chat/index.tsx +++ b/web/src/pages/chat/index.tsx @@ -1,4 +1,5 @@ import { ReactComponent as ChatAppCube } from '@/assets/svg/chat-app-cube.svg'; +import RenameModal from '@/components/rename-modal'; import { DeleteOutlined, EditOutlined, FormOutlined } from '@ant-design/icons'; import { Avatar, @@ -34,7 +35,6 @@ import { useSelectFirstDialogOnMount, } from './hooks'; -import RenameModal from '@/components/rename-modal'; import styles from './index.less'; const Chat = () => {