diff --git a/web/src/components/api-service/hooks.ts b/web/src/components/api-service/hooks.ts index 16878d84d..8d82ef31a 100644 --- a/web/src/components/api-service/hooks.ts +++ b/web/src/components/api-service/hooks.ts @@ -9,7 +9,7 @@ import { useFetchManualSystemTokenList, useFetchSystemTokenList, useRemoveSystemToken, -} from '@/hooks/user-setting-hooks'; +} from '@/hooks/use-user-setting-request'; import { IStats } from '@/interfaces/database/chat'; import { useQueryClient } from '@tanstack/react-query'; import { message } from 'antd'; diff --git a/web/src/components/chunk-method-dialog/hooks.ts b/web/src/components/chunk-method-dialog/hooks.ts index b53088577..f6f4f80c7 100644 --- a/web/src/components/chunk-method-dialog/hooks.ts +++ b/web/src/components/chunk-method-dialog/hooks.ts @@ -1,4 +1,4 @@ -import { useSelectParserList } from '@/hooks/user-setting-hooks'; +import { useSelectParserList } from '@/hooks/use-user-setting-request'; import { useCallback, useMemo } from 'react'; const ParserListMap = new Map([ diff --git a/web/src/components/chunk-method-modal/hooks.ts b/web/src/components/chunk-method-modal/hooks.ts index 2af14f8e1..635843a38 100644 --- a/web/src/components/chunk-method-modal/hooks.ts +++ b/web/src/components/chunk-method-modal/hooks.ts @@ -1,6 +1,6 @@ import { DocumentParserType } from '@/constants/knowledge'; import { useHandleChunkMethodSelectChange } from '@/hooks/logic-hooks'; -import { useSelectParserList } from '@/hooks/user-setting-hooks'; +import { useSelectParserList } from '@/hooks/use-user-setting-request'; import { FormInstance } from 'antd'; import { useCallback, useEffect, useMemo, useState } from 'react'; diff --git a/web/src/components/chunk-method-modal/index.tsx b/web/src/components/chunk-method-modal/index.tsx index 904aded76..27106ada5 100644 --- a/web/src/components/chunk-method-modal/index.tsx +++ b/web/src/components/chunk-method-modal/index.tsx @@ -21,7 +21,7 @@ import { useFetchParserListOnMount, useShowAutoKeywords } from './hooks'; import { DocumentParserType } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; -import { useFetchKnowledgeBaseConfiguration } from '@/hooks/knowledge-hooks'; +import { useFetchKnowledgeBaseConfiguration } from '@/hooks/use-knowledge-request'; import { IParserConfig } from '@/interfaces/database/document'; import { IChangeParserConfigRequestBody } from '@/interfaces/request/document'; import { get } from 'lodash'; diff --git a/web/src/components/embed-dialog/use-show-embed-dialog.ts b/web/src/components/embed-dialog/use-show-embed-dialog.ts index c8ac12032..ef3eda566 100644 --- a/web/src/components/embed-dialog/use-show-embed-dialog.ts +++ b/web/src/components/embed-dialog/use-show-embed-dialog.ts @@ -1,5 +1,5 @@ import { useSetModalState, useTranslate } from '@/hooks/common-hooks'; -import { useFetchManualSystemTokenList } from '@/hooks/user-setting-hooks'; +import { useFetchManualSystemTokenList } from '@/hooks/use-user-setting-request'; import { useCallback } from 'react'; import message from '../ui/message'; diff --git a/web/src/components/file-icon/index.tsx b/web/src/components/file-icon/index.tsx index 7579b64aa..207af0563 100644 --- a/web/src/components/file-icon/index.tsx +++ b/web/src/components/file-icon/index.tsx @@ -1,7 +1,7 @@ import { getExtension } from '@/utils/document-util'; import SvgIcon from '../svg-icon'; -import { useFetchDocumentThumbnailsByIds } from '@/hooks/document-hooks'; +import { useFetchDocumentThumbnailsByIds } from '@/hooks/use-document-request'; import { useEffect } from 'react'; import styles from './index.less'; diff --git a/web/src/components/floating-chat-widget-markdown.tsx b/web/src/components/floating-chat-widget-markdown.tsx index 04e066c21..b4a7db1f2 100644 --- a/web/src/components/floating-chat-widget-markdown.tsx +++ b/web/src/components/floating-chat-widget-markdown.tsx @@ -1,9 +1,10 @@ import Image from '@/components/image'; import SvgIcon from '@/components/svg-icon'; + import { useFetchDocumentThumbnailsByIds, useGetDocumentUrl, -} from '@/hooks/document-hooks'; +} from '@/hooks/use-document-request'; import { IReference, IReferenceChunk } from '@/interfaces/database/chat'; import { currentReg, diff --git a/web/src/components/indented-tree/modal.tsx b/web/src/components/indented-tree/modal.tsx index b038237a2..d7d7a4a21 100644 --- a/web/src/components/indented-tree/modal.tsx +++ b/web/src/components/indented-tree/modal.tsx @@ -1,7 +1,7 @@ import { useTranslation } from 'react-i18next'; import IndentedTree from './indented-tree'; -import { useFetchKnowledgeGraph } from '@/hooks/knowledge-hooks'; +import { useFetchKnowledgeGraph } from '@/hooks/use-knowledge-request'; import { IModalProps } from '@/interfaces/common'; import { Modal } from 'antd'; diff --git a/web/src/components/knowledge-base-item.tsx b/web/src/components/knowledge-base-item.tsx index cb907df56..47a7ba2c0 100644 --- a/web/src/components/knowledge-base-item.tsx +++ b/web/src/components/knowledge-base-item.tsx @@ -1,6 +1,6 @@ import { DocumentParserType } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; -import { useFetchKnowledgeList } from '@/hooks/knowledge-hooks'; +import { useFetchKnowledgeList } from '@/hooks/use-knowledge-request'; import { useBuildQueryVariableOptions } from '@/pages/agent/hooks/use-get-begin-query'; import { UserOutlined } from '@ant-design/icons'; import { Avatar as AntAvatar, Form, Select, Space } from 'antd'; diff --git a/web/src/components/layout-recognize-form-field.tsx b/web/src/components/layout-recognize-form-field.tsx index 43f0abccb..2b2dc7eda 100644 --- a/web/src/components/layout-recognize-form-field.tsx +++ b/web/src/components/layout-recognize-form-field.tsx @@ -1,6 +1,6 @@ import { LlmModelType } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; -import { useSelectLlmOptionsByModelType } from '@/hooks/llm-hooks'; +import { useSelectLlmOptionsByModelType } from '@/hooks/use-llm-request'; import { cn } from '@/lib/utils'; import { camelCase } from 'lodash'; import { ReactNode, useMemo } from 'react'; diff --git a/web/src/components/layout-recognize.tsx b/web/src/components/layout-recognize.tsx index b5642c37f..13ec88e65 100644 --- a/web/src/components/layout-recognize.tsx +++ b/web/src/components/layout-recognize.tsx @@ -1,6 +1,6 @@ import { LlmModelType } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; -import { useSelectLlmOptionsByModelType } from '@/hooks/llm-hooks'; +import { useSelectLlmOptionsByModelType } from '@/hooks/use-llm-request'; import { Form, Select } from 'antd'; import { camelCase } from 'lodash'; import { useMemo } from 'react'; diff --git a/web/src/components/llm-select/index.tsx b/web/src/components/llm-select/index.tsx index fa65b95c3..93a81b94f 100644 --- a/web/src/components/llm-select/index.tsx +++ b/web/src/components/llm-select/index.tsx @@ -1,5 +1,5 @@ import { LlmModelType } from '@/constants/knowledge'; -import { useComposeLlmOptionsByModelTypes } from '@/hooks/llm-hooks'; +import { useComposeLlmOptionsByModelTypes } from '@/hooks/use-llm-request'; import { Popover as AntPopover, Select as AntSelect } from 'antd'; import LlmSettingItems from '../llm-setting-items'; diff --git a/web/src/components/llm-select/next.tsx b/web/src/components/llm-select/next.tsx index 955896f30..28ec9d68e 100644 --- a/web/src/components/llm-select/next.tsx +++ b/web/src/components/llm-select/next.tsx @@ -1,5 +1,5 @@ import { LlmModelType } from '@/constants/knowledge'; -import { useComposeLlmOptionsByModelTypes } from '@/hooks/llm-hooks'; +import { useComposeLlmOptionsByModelTypes } from '@/hooks/use-llm-request'; import * as SelectPrimitive from '@radix-ui/react-select'; import { forwardRef, memo, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/web/src/components/llm-setting-items/index.tsx b/web/src/components/llm-setting-items/index.tsx index caa471da5..98d9e23e0 100644 --- a/web/src/components/llm-setting-items/index.tsx +++ b/web/src/components/llm-setting-items/index.tsx @@ -7,7 +7,7 @@ import { Flex, Form, InputNumber, Select, Slider, Switch, Tooltip } from 'antd'; import camelCase from 'lodash/camelCase'; import { useTranslate } from '@/hooks/common-hooks'; -import { useComposeLlmOptionsByModelTypes } from '@/hooks/llm-hooks'; +import { useComposeLlmOptionsByModelTypes } from '@/hooks/use-llm-request'; import { setChatVariableEnabledFieldValuePage } from '@/utils/chat'; import { QuestionCircleOutlined } from '@ant-design/icons'; import { useCallback, useMemo } from 'react'; diff --git a/web/src/components/llm-setting-items/llm-form-field.tsx b/web/src/components/llm-setting-items/llm-form-field.tsx index 79809f3e8..594c17df4 100644 --- a/web/src/components/llm-setting-items/llm-form-field.tsx +++ b/web/src/components/llm-setting-items/llm-form-field.tsx @@ -1,5 +1,5 @@ import { LlmModelType } from '@/constants/knowledge'; -import { useComposeLlmOptionsByModelTypes } from '@/hooks/llm-hooks'; +import { useComposeLlmOptionsByModelTypes } from '@/hooks/use-llm-request'; import { useTranslation } from 'react-i18next'; import { SelectWithSearch } from '../originui/select-with-search'; import { RAGFlowFormItem } from '../ragflow-form'; diff --git a/web/src/components/markdown-content/index.tsx b/web/src/components/markdown-content/index.tsx index 99d45de6b..d0c0bf42f 100644 --- a/web/src/components/markdown-content/index.tsx +++ b/web/src/components/markdown-content/index.tsx @@ -13,11 +13,11 @@ import remarkGfm from 'remark-gfm'; import remarkMath from 'remark-math'; import { visitParents } from 'unist-util-visit-parents'; -import { useFetchDocumentThumbnailsByIds } from '@/hooks/document-hooks'; import { useTranslation } from 'react-i18next'; import 'katex/dist/katex.min.css'; // `rehype-katex` does not import the CSS for you +import { useFetchDocumentThumbnailsByIds } from '@/hooks/use-document-request'; import { currentReg, preprocessLaTeX, diff --git a/web/src/components/next-markdown-content/index.tsx b/web/src/components/next-markdown-content/index.tsx index 20466bc48..8e114f593 100644 --- a/web/src/components/next-markdown-content/index.tsx +++ b/web/src/components/next-markdown-content/index.tsx @@ -13,7 +13,6 @@ import remarkGfm from 'remark-gfm'; import remarkMath from 'remark-math'; import { visitParents } from 'unist-util-visit-parents'; -import { useFetchDocumentThumbnailsByIds } from '@/hooks/document-hooks'; import { useTranslation } from 'react-i18next'; import 'katex/dist/katex.min.css'; // `rehype-katex` does not import the CSS for you @@ -26,6 +25,7 @@ import { showImage, } from '@/utils/chat'; +import { useFetchDocumentThumbnailsByIds } from '@/hooks/use-document-request'; import { cn } from '@/lib/utils'; import classNames from 'classnames'; import { omit } from 'lodash'; diff --git a/web/src/components/pdf-previewer/index.tsx b/web/src/components/pdf-previewer/index.tsx index 1bb44383e..349d4b67c 100644 --- a/web/src/components/pdf-previewer/index.tsx +++ b/web/src/components/pdf-previewer/index.tsx @@ -1,7 +1,3 @@ -import { - useGetChunkHighlights, - useGetDocumentUrl, -} from '@/hooks/document-hooks'; import { IReferenceChunk } from '@/interfaces/database/chat'; import { IChunk } from '@/interfaces/database/knowledge'; import FileError from '@/pages/document-viewer/file-error'; @@ -17,6 +13,10 @@ import { } from 'react-pdf-highlighter'; import { useCatchDocumentError } from './hooks'; +import { + useGetChunkHighlights, + useGetDocumentUrl, +} from '@/hooks/use-document-request'; import styles from './index.less'; interface IProps { diff --git a/web/src/components/rerank.tsx b/web/src/components/rerank.tsx index ca7f3bc2c..62ffe01e5 100644 --- a/web/src/components/rerank.tsx +++ b/web/src/components/rerank.tsx @@ -1,6 +1,6 @@ import { LlmModelType } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; -import { useSelectLlmOptionsByModelType } from '@/hooks/llm-hooks'; +import { useSelectLlmOptionsByModelType } from '@/hooks/use-llm-request'; import { Select as AntSelect, Form, message, Slider } from 'antd'; import { useCallback } from 'react'; import { useFormContext } from 'react-hook-form'; diff --git a/web/src/components/retrieval-documents/index.tsx b/web/src/components/retrieval-documents/index.tsx index b41e9e020..88789a85e 100644 --- a/web/src/components/retrieval-documents/index.tsx +++ b/web/src/components/retrieval-documents/index.tsx @@ -5,7 +5,7 @@ import SelectFiles from './select-files'; import { useAllTestingResult, useSelectTestingResult, -} from '@/hooks/knowledge-hooks'; +} from '@/hooks/use-knowledge-request'; import { useTranslation } from 'react-i18next'; import styles from './index.less'; diff --git a/web/src/components/retrieval-documents/select-files.tsx b/web/src/components/retrieval-documents/select-files.tsx index 68d9171d8..66afd3d8c 100644 --- a/web/src/components/retrieval-documents/select-files.tsx +++ b/web/src/components/retrieval-documents/select-files.tsx @@ -3,7 +3,7 @@ import { useTranslate } from '@/hooks/common-hooks'; import { useAllTestingResult, useSelectTestingResult, -} from '@/hooks/knowledge-hooks'; +} from '@/hooks/use-knowledge-request'; import { ITestingDocument } from '@/interfaces/database/knowledge'; import { EyeOutlined } from '@ant-design/icons'; import { Button, Table, TableProps, Tooltip } from 'antd'; diff --git a/web/src/components/shared-badge.tsx b/web/src/components/shared-badge.tsx index e5c7e950d..05d4a893b 100644 --- a/web/src/components/shared-badge.tsx +++ b/web/src/components/shared-badge.tsx @@ -1,4 +1,4 @@ -import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; +import { useFetchUserInfo } from '@/hooks/use-user-setting-request'; import { PropsWithChildren } from 'react'; export function SharedBadge({ children }: PropsWithChildren) { diff --git a/web/src/hooks/chunk-hooks.ts b/web/src/hooks/chunk-hooks.ts deleted file mode 100644 index 77f05b7de..000000000 --- a/web/src/hooks/chunk-hooks.ts +++ /dev/null @@ -1,210 +0,0 @@ -import { ResponseGetType, ResponseType } from '@/interfaces/database/base'; -import { IChunk, IKnowledgeFile } from '@/interfaces/database/knowledge'; -import kbService from '@/services/knowledge-service'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useDebounce } from 'ahooks'; -import { PaginationProps, message } from 'antd'; -import { useCallback, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { - useGetPaginationWithRouter, - useHandleSearchChange, -} from './logic-hooks'; -import { - useGetKnowledgeSearchParams, - useSetPaginationParams, -} from './route-hook'; - -export interface IChunkListResult { - searchString?: string; - handleInputChange?: React.ChangeEventHandler; - pagination: PaginationProps; - setPagination?: (pagination: { page: number; pageSize: number }) => void; - available: number | undefined; - handleSetAvailable: (available: number | undefined) => void; -} - -export const useFetchNextChunkList = (): ResponseGetType<{ - data: IChunk[]; - total: number; - documentInfo: IKnowledgeFile; -}> & - IChunkListResult => { - const { pagination, setPagination } = useGetPaginationWithRouter(); - const { documentId } = useGetKnowledgeSearchParams(); - const { searchString, handleInputChange } = useHandleSearchChange(); - const [available, setAvailable] = useState(); - const debouncedSearchString = useDebounce(searchString, { wait: 500 }); - - const { data, isFetching: loading } = useQuery({ - queryKey: [ - 'fetchChunkList', - documentId, - pagination.current, - pagination.pageSize, - debouncedSearchString, - available, - ], - placeholderData: (previousData) => - previousData ?? { data: [], total: 0, documentInfo: {} }, // https://github.com/TanStack/query/issues/8183 - gcTime: 0, - queryFn: async () => { - const { data } = await kbService.chunk_list({ - doc_id: documentId, - page: pagination.current, - size: pagination.pageSize, - available_int: available, - keywords: searchString, - }); - if (data.code === 0) { - const res = data.data; - return { - data: res.chunks, - total: res.total, - documentInfo: res.doc, - }; - } - - return ( - data?.data ?? { - data: [], - total: 0, - documentInfo: {}, - } - ); - }, - }); - - const onInputChange: React.ChangeEventHandler = useCallback( - (e) => { - setPagination({ page: 1 }); - handleInputChange(e); - }, - [handleInputChange, setPagination], - ); - - const handleSetAvailable = useCallback( - (a: number | undefined) => { - setPagination({ page: 1 }); - setAvailable(a); - }, - [setAvailable, setPagination], - ); - - return { - data, - loading, - pagination, - setPagination, - searchString, - handleInputChange: onInputChange, - available, - handleSetAvailable, - }; -}; - -export const useSelectChunkList = () => { - const queryClient = useQueryClient(); - const data = queryClient.getQueriesData<{ - data: IChunk[]; - total: number; - documentInfo: IKnowledgeFile; - }>({ queryKey: ['fetchChunkList'] }); - - return data?.at(-1)?.[1]; -}; - -export const useDeleteChunk = () => { - const queryClient = useQueryClient(); - const { setPaginationParams } = useSetPaginationParams(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteChunk'], - mutationFn: async (params: { chunkIds: string[]; doc_id: string }) => { - const { data } = await kbService.rm_chunk(params); - if (data.code === 0) { - setPaginationParams(1); - queryClient.invalidateQueries({ queryKey: ['fetchChunkList'] }); - } - return data?.code; - }, - }); - - return { data, loading, deleteChunk: mutateAsync }; -}; - -export const useSwitchChunk = () => { - const { t } = useTranslation(); - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['switchChunk'], - mutationFn: async (params: { - chunk_ids?: string[]; - available_int?: number; - doc_id: string; - }) => { - const { data } = await kbService.switch_chunk(params); - if (data.code === 0) { - message.success(t('message.modified')); - queryClient.invalidateQueries({ queryKey: ['fetchChunkList'] }); - } - return data?.code; - }, - }); - - return { data, loading, switchChunk: mutateAsync }; -}; - -export const useCreateChunk = () => { - const { t } = useTranslation(); - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['createChunk'], - mutationFn: async (payload: any) => { - let service = kbService.create_chunk; - if (payload.chunk_id) { - service = kbService.set_chunk; - } - const { data } = await service(payload); - if (data.code === 0) { - message.success(t('message.created')); - setTimeout(() => { - queryClient.invalidateQueries({ queryKey: ['fetchChunkList'] }); - }, 1000); // Delay to ensure the list is updated - } - return data?.code; - }, - }); - - return { data, loading, createChunk: mutateAsync }; -}; - -export const useFetchChunk = (chunkId?: string): ResponseType => { - const { data } = useQuery({ - queryKey: ['fetchChunk'], - enabled: !!chunkId, - initialData: {}, - gcTime: 0, - queryFn: async () => { - const data = await kbService.get_chunk({ - chunk_id: chunkId, - }); - - return data; - }, - }); - - return data; -}; diff --git a/web/src/hooks/document-hooks.ts b/web/src/hooks/document-hooks.ts deleted file mode 100644 index f33ef6108..000000000 --- a/web/src/hooks/document-hooks.ts +++ /dev/null @@ -1,482 +0,0 @@ -import { IReferenceChunk } from '@/interfaces/database/chat'; -import { IDocumentInfo } from '@/interfaces/database/document'; -import { IChunk } from '@/interfaces/database/knowledge'; -import { - IChangeParserConfigRequestBody, - IDocumentMetaRequestBody, -} from '@/interfaces/request/document'; -import i18n from '@/locales/config'; -import kbService, { listDocument } from '@/services/knowledge-service'; -import api, { api_host } from '@/utils/api'; -import { buildChunkHighlights } from '@/utils/document-util'; -import { post } from '@/utils/request'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { UploadFile, message } from 'antd'; -import { get } from 'lodash'; -import { useCallback, useMemo, useState } from 'react'; -import { IHighlight } from 'react-pdf-highlighter'; -import { useParams } from 'umi'; -import { - useGetPaginationWithRouter, - useHandleSearchChange, -} from './logic-hooks'; -import { - useGetKnowledgeSearchParams, - useSetPaginationParams, -} from './route-hook'; - -export const useGetDocumentUrl = (documentId?: string) => { - const getDocumentUrl = useCallback( - (id?: string) => { - return `${api_host}/document/get/${documentId || id}`; - }, - [documentId], - ); - - return getDocumentUrl; -}; - -export const useGetChunkHighlights = ( - selectedChunk: IChunk | IReferenceChunk, -) => { - const [size, setSize] = useState({ width: 849, height: 1200 }); - - const highlights: IHighlight[] = useMemo(() => { - return buildChunkHighlights(selectedChunk, size); - }, [selectedChunk, size]); - - const setWidthAndHeight = (width: number, height: number) => { - setSize((pre) => { - if (pre.height !== height || pre.width !== width) { - return { height, width }; - } - return pre; - }); - }; - - return { highlights, setWidthAndHeight }; -}; - -export const useFetchNextDocumentList = () => { - const { knowledgeId } = useGetKnowledgeSearchParams(); - const { searchString, handleInputChange } = useHandleSearchChange(); - const { pagination, setPagination } = useGetPaginationWithRouter(); - const { id } = useParams(); - - const { data, isFetching: loading } = useQuery<{ - docs: IDocumentInfo[]; - total: number; - }>({ - queryKey: ['fetchDocumentList', searchString, pagination], - initialData: { docs: [], total: 0 }, - refetchInterval: 15000, - enabled: !!knowledgeId || !!id, - queryFn: async () => { - const ret = await listDocument({ - kb_id: knowledgeId || id, - keywords: searchString, - page_size: pagination.pageSize, - page: pagination.current, - }); - if (ret.data.code === 0) { - return ret.data.data; - } - - return { - docs: [], - total: 0, - }; - }, - }); - - const onInputChange: React.ChangeEventHandler = useCallback( - (e) => { - setPagination({ page: 1 }); - handleInputChange(e); - }, - [handleInputChange, setPagination], - ); - - return { - loading, - searchString, - documents: data.docs, - pagination: { ...pagination, total: data?.total }, - handleInputChange: onInputChange, - setPagination, - }; -}; - -export const useSetNextDocumentStatus = () => { - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['updateDocumentStatus'], - mutationFn: async ({ - status, - documentId, - }: { - status: boolean; - documentId: string | string[]; - }) => { - const ids = Array.isArray(documentId) ? documentId : [documentId]; - const { data } = await kbService.document_change_status({ - doc_ids: ids, - status: Number(status), - }); - if (data.code === 0) { - message.success(i18n.t('message.modified')); - queryClient.invalidateQueries({ queryKey: ['fetchDocumentList'] }); - } - return data; - }, - }); - - return { setDocumentStatus: mutateAsync, data, loading }; -}; - -export const useSaveNextDocumentName = () => { - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['saveDocumentName'], - mutationFn: async ({ - name, - documentId, - }: { - name: string; - documentId: string; - }) => { - const { data } = await kbService.document_rename({ - doc_id: documentId, - name: name, - }); - if (data.code === 0) { - message.success(i18n.t('message.renamed')); - queryClient.invalidateQueries({ queryKey: ['fetchDocumentList'] }); - } - return data.code; - }, - }); - - return { loading, saveName: mutateAsync, data }; -}; - -export const useCreateNextDocument = () => { - const { knowledgeId } = useGetKnowledgeSearchParams(); - const { setPaginationParams, page } = useSetPaginationParams(); - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['createDocument'], - mutationFn: async (name: string) => { - const { data } = await kbService.document_create({ - name, - kb_id: knowledgeId, - }); - if (data.code === 0) { - if (page === 1) { - queryClient.invalidateQueries({ queryKey: ['fetchDocumentList'] }); - } else { - setPaginationParams(); // fetch document list - } - - message.success(i18n.t('message.created')); - } - return data.code; - }, - }); - - return { createDocument: mutateAsync, loading, data }; -}; - -export const useSetNextDocumentParser = () => { - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['setDocumentParser'], - mutationFn: async ({ - parserId, - documentId, - parserConfig, - }: { - parserId: string; - documentId: string; - parserConfig: IChangeParserConfigRequestBody; - }) => { - const { data } = await kbService.document_change_parser({ - parser_id: parserId, - doc_id: documentId, - parser_config: parserConfig, - }); - if (data.code === 0) { - queryClient.invalidateQueries({ queryKey: ['fetchDocumentList'] }); - - message.success(i18n.t('message.modified')); - } - return data.code; - }, - }); - - return { setDocumentParser: mutateAsync, data, loading }; -}; - -export const useUploadNextDocument = () => { - const queryClient = useQueryClient(); - const { knowledgeId } = useGetKnowledgeSearchParams(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['uploadDocument'], - mutationFn: async (fileList: UploadFile[]) => { - const formData = new FormData(); - formData.append('kb_id', knowledgeId); - fileList.forEach((file: any) => { - formData.append('file', file); - }); - - try { - const ret = await kbService.document_upload(formData); - const code = get(ret, 'data.code'); - - if (code === 0 || code === 500) { - queryClient.invalidateQueries({ queryKey: ['fetchDocumentList'] }); - } - return ret?.data; - } catch (error) { - console.warn(error); - return { - code: 500, - message: error + '', - }; - } - }, - }); - - return { uploadDocument: mutateAsync, loading, data }; -}; - -export const useNextWebCrawl = () => { - const { knowledgeId } = useGetKnowledgeSearchParams(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['webCrawl'], - mutationFn: async ({ name, url }: { name: string; url: string }) => { - const formData = new FormData(); - formData.append('name', name); - formData.append('url', url); - formData.append('kb_id', knowledgeId); - - const ret = await kbService.web_crawl(formData); - const code = get(ret, 'data.code'); - if (code === 0) { - message.success(i18n.t('message.uploaded')); - } - - return code; - }, - }); - - return { - data, - loading, - webCrawl: mutateAsync, - }; -}; - -export const useRunNextDocument = () => { - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['runDocumentByIds'], - mutationFn: async ({ - documentIds, - run, - shouldDelete, - }: { - documentIds: string[]; - run: number; - shouldDelete: boolean; - }) => { - queryClient.invalidateQueries({ - queryKey: ['fetchDocumentList'], - }); - - const ret = await kbService.document_run({ - doc_ids: documentIds, - run, - delete: shouldDelete, - }); - const code = get(ret, 'data.code'); - if (code === 0) { - queryClient.invalidateQueries({ queryKey: ['fetchDocumentList'] }); - message.success(i18n.t('message.operated')); - } - - return code; - }, - }); - - return { runDocumentByIds: mutateAsync, loading, data }; -}; - -export const useFetchDocumentInfosByIds = () => { - const [ids, setDocumentIds] = useState([]); - - const idList = useMemo(() => { - return ids.filter((x) => typeof x === 'string' && x !== ''); - }, [ids]); - - const { data } = useQuery({ - queryKey: ['fetchDocumentInfos', idList], - enabled: idList.length > 0, - initialData: [], - queryFn: async () => { - const { data } = await kbService.document_infos({ doc_ids: idList }); - if (data.code === 0) { - return data.data; - } - - return []; - }, - }); - - return { data, setDocumentIds }; -}; - -export const useFetchDocumentThumbnailsByIds = () => { - const [ids, setDocumentIds] = useState([]); - const { data } = useQuery>({ - queryKey: ['fetchDocumentThumbnails', ids], - enabled: ids.length > 0, - initialData: {}, - queryFn: async () => { - const { data } = await kbService.document_thumbnails({ doc_ids: ids }); - if (data.code === 0) { - return data.data; - } - return {}; - }, - }); - - return { data, setDocumentIds }; -}; - -export const useRemoveNextDocument = () => { - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['removeDocument'], - mutationFn: async (documentIds: string | string[]) => { - const { data } = await kbService.document_rm({ doc_id: documentIds }); - if (data.code === 0) { - message.success(i18n.t('message.deleted')); - queryClient.invalidateQueries({ queryKey: ['fetchDocumentList'] }); - } - return data.code; - }, - }); - - return { data, loading, removeDocument: mutateAsync }; -}; - -export const useDeleteDocument = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteDocument'], - mutationFn: async (documentIds: string[]) => { - const data = await kbService.document_delete({ doc_ids: documentIds }); - - return data; - }, - }); - - return { data, loading, deleteDocument: mutateAsync }; -}; - -export const useParseDocument = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['parseDocument'], - mutationFn: async (url: string) => { - try { - const data = await post(api.parse, { url }); - if (data?.code === 0) { - message.success(i18n.t('message.uploaded')); - } - return data; - } catch (error) { - message.error('error'); - } - }, - }); - - return { parseDocument: mutateAsync, data, loading }; -}; - -export const useSetDocumentMeta = () => { - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['setDocumentMeta'], - mutationFn: async (params: IDocumentMetaRequestBody) => { - try { - const { data } = await kbService.setMeta({ - meta: params.meta, - doc_id: params.documentId, - }); - - if (data?.code === 0) { - queryClient.invalidateQueries({ queryKey: ['fetchDocumentList'] }); - - message.success(i18n.t('message.modified')); - } - return data?.code; - } catch (error) { - message.error('error'); - } - }, - }); - - return { setDocumentMeta: mutateAsync, data, loading }; -}; diff --git a/web/src/hooks/file-manager-hooks.ts b/web/src/hooks/file-manager-hooks.ts deleted file mode 100644 index 32cf21a18..000000000 --- a/web/src/hooks/file-manager-hooks.ts +++ /dev/null @@ -1,293 +0,0 @@ -import message from '@/components/ui/message'; -import { ResponseType } from '@/interfaces/database/base'; -import { IFolder } from '@/interfaces/database/file-manager'; -import { IConnectRequestBody } from '@/interfaces/request/file-manager'; -import fileManagerService from '@/services/file-manager-service'; -import { downloadFileFromBlob } from '@/utils/file-util'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { PaginationProps, UploadFile } from 'antd'; -import React, { useCallback } from 'react'; -import { useTranslation } from 'react-i18next'; -import { useSearchParams } from 'umi'; -import { - useGetPaginationWithRouter, - useHandleSearchChange, -} from './logic-hooks'; -import { useSetPaginationParams } from './route-hook'; - -export const useGetFolderId = () => { - const [searchParams] = useSearchParams(); - const id = searchParams.get('folderId') as string; - - return id ?? ''; -}; - -export interface IListResult { - searchString: string; - handleInputChange: React.ChangeEventHandler; - pagination: PaginationProps; - setPagination: (pagination: { page: number; pageSize: number }) => void; - loading: boolean; -} - -export const useFetchPureFileList = () => { - const { mutateAsync, isPending: loading } = useMutation({ - mutationKey: ['fetchPureFileList'], - gcTime: 0, - - mutationFn: async (parentId: string) => { - const { data } = await fileManagerService.listFile({ - parent_id: parentId, - }); - - return data; - }, - }); - - return { loading, fetchList: mutateAsync }; -}; - -export const useFetchFileList = (): ResponseType & IListResult => { - const { searchString, handleInputChange } = useHandleSearchChange(); - const { pagination, setPagination } = useGetPaginationWithRouter(); - const id = useGetFolderId(); - - const { data, isFetching: loading } = useQuery({ - queryKey: [ - 'fetchFileList', - { - id, - searchString, - ...pagination, - }, - ], - initialData: {}, - gcTime: 0, - queryFn: async () => { - const { data } = await fileManagerService.listFile({ - parent_id: id, - keywords: searchString, - page_size: pagination.pageSize, - page: pagination.current, - }); - - return data; - }, - }); - - const onInputChange: React.ChangeEventHandler = useCallback( - (e) => { - setPagination({ page: 1 }); - handleInputChange(e); - }, - [handleInputChange, setPagination], - ); - - return { - ...data, - searchString, - handleInputChange: onInputChange, - pagination: { ...pagination, total: data?.data?.total }, - setPagination, - loading, - }; -}; - -export const useDeleteFile = () => { - const { setPaginationParams } = useSetPaginationParams(); - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteFile'], - mutationFn: async (params: { fileIds: string[]; parentId: string }) => { - const { data } = await fileManagerService.removeFile(params); - if (data.code === 0) { - setPaginationParams(1); // TODO: There should be a better way to paginate the request list - queryClient.invalidateQueries({ queryKey: ['fetchFileList'] }); - } - return data.code; - }, - }); - - return { data, loading, deleteFile: mutateAsync }; -}; - -export const useDownloadFile = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['downloadFile'], - mutationFn: async (params: { id: string; filename?: string }) => { - const response = await fileManagerService.getFile({}, params.id); - const blob = new Blob([response.data], { type: response.data.type }); - downloadFileFromBlob(blob, params.filename); - }, - }); - return { data, loading, downloadFile: mutateAsync }; -}; - -export const useRenameFile = () => { - const queryClient = useQueryClient(); - const { t } = useTranslation(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['renameFile'], - mutationFn: async (params: { fileId: string; name: string }) => { - const { data } = await fileManagerService.renameFile(params); - if (data.code === 0) { - message.success(t('message.renamed')); - queryClient.invalidateQueries({ queryKey: ['fetchFileList'] }); - } - return data.code; - }, - }); - - return { data, loading, renameFile: mutateAsync }; -}; - -export const useFetchParentFolderList = (): IFolder[] => { - const id = useGetFolderId(); - const { data } = useQuery({ - queryKey: ['fetchParentFolderList', id], - initialData: [], - enabled: !!id, - queryFn: async () => { - const { data } = await fileManagerService.getAllParentFolder({ - fileId: id, - }); - - return data?.data?.parent_folders?.toReversed() ?? []; - }, - }); - - return data; -}; - -export const useCreateFolder = () => { - const { setPaginationParams } = useSetPaginationParams(); - const queryClient = useQueryClient(); - const { t } = useTranslation(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['createFolder'], - mutationFn: async (params: { parentId: string; name: string }) => { - const { data } = await fileManagerService.createFolder({ - ...params, - type: 'folder', - }); - if (data.code === 0) { - message.success(t('message.created')); - setPaginationParams(1); - queryClient.invalidateQueries({ queryKey: ['fetchFileList'] }); - } - return data.code; - }, - }); - - return { data, loading, createFolder: mutateAsync }; -}; - -export const useUploadFile = () => { - const { setPaginationParams } = useSetPaginationParams(); - const { t } = useTranslation(); - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['uploadFile'], - mutationFn: async (params: { - fileList: UploadFile[]; - parentId: string; - }) => { - const fileList = params.fileList; - const pathList = params.fileList.map( - (file) => (file as any).webkitRelativePath, - ); - const formData = new FormData(); - formData.append('parent_id', params.parentId); - fileList.forEach((file: any, index: number) => { - formData.append('file', file); - formData.append('path', pathList[index]); - }); - try { - const ret = await fileManagerService.uploadFile(formData); - if (ret?.data.code === 0) { - message.success(t('message.uploaded')); - setPaginationParams(1); - queryClient.invalidateQueries({ queryKey: ['fetchFileList'] }); - } - return ret?.data?.code; - } catch (error) { - console.log('🚀 ~ useUploadFile ~ error:', error); - } - }, - }); - - return { data, loading, uploadFile: mutateAsync }; -}; - -export const useConnectToKnowledge = () => { - const queryClient = useQueryClient(); - const { t } = useTranslation(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['connectFileToKnowledge'], - mutationFn: async (params: IConnectRequestBody) => { - const { data } = await fileManagerService.connectFileToKnowledge(params); - if (data.code === 0) { - message.success(t('message.operated')); - queryClient.invalidateQueries({ queryKey: ['fetchFileList'] }); - } - return data.code; - }, - }); - - return { data, loading, connectFileToKnowledge: mutateAsync }; -}; - -export interface IMoveFileBody { - src_file_ids: string[]; - dest_file_id: string; // target folder id -} - -export const useMoveFile = () => { - const queryClient = useQueryClient(); - const { t } = useTranslation(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['moveFile'], - mutationFn: async (params: IMoveFileBody) => { - const { data } = await fileManagerService.moveFile(params); - if (data.code === 0) { - message.success(t('message.operated')); - queryClient.invalidateQueries({ queryKey: ['fetchFileList'] }); - } - return data.code; - }, - }); - - return { data, loading, moveFile: mutateAsync }; -}; diff --git a/web/src/hooks/flow-hooks.ts b/web/src/hooks/flow-hooks.ts deleted file mode 100644 index d65452181..000000000 --- a/web/src/hooks/flow-hooks.ts +++ /dev/null @@ -1,316 +0,0 @@ -import { DSL, IFlow } from '@/interfaces/database/flow'; -import { IDebugSingleRequestBody } from '@/interfaces/request/flow'; -import i18n from '@/locales/config'; -import { useGetSharedChatSearchParams } from '@/pages/next-chats/hooks/use-send-shared-message'; -import flowService from '@/services/flow-service'; -import { buildMessageListWithUuid } from '@/utils/chat'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { message } from 'antd'; -import { set } from 'lodash'; -import get from 'lodash/get'; -import { useParams } from 'umi'; - -export const useFetchFlowList = (): { data: IFlow[]; loading: boolean } => { - const { data, isFetching: loading } = useQuery({ - queryKey: ['fetchFlowList'], - initialData: [], - gcTime: 0, - queryFn: async () => { - const { data } = await flowService.listCanvas(); - - return data?.data ?? []; - }, - }); - - return { data, loading }; -}; - -export const useFetchListVersion = ( - canvas_id: string, -): { - data: { - created_at: string; - title: string; - id: string; - }[]; - loading: boolean; -} => { - const { data, isFetching: loading } = useQuery({ - queryKey: ['fetchListVersion'], - initialData: [], - gcTime: 0, - queryFn: async () => { - const { data } = await flowService.getListVersion({}, canvas_id); - - return data?.data ?? []; - }, - }); - - return { data, loading }; -}; - -export const useFetchVersion = ( - version_id?: string, -): { - data?: IFlow; - loading: boolean; -} => { - const { data, isFetching: loading } = useQuery({ - queryKey: ['fetchVersion', version_id], - initialData: undefined, - gcTime: 0, - enabled: !!version_id, // Only call API when both values are provided - queryFn: async () => { - if (!version_id) return undefined; - - const { data } = await flowService.getVersion({}, version_id); - - return data?.data ?? undefined; - }, - }); - - return { data, loading }; -}; - -export const useFetchFlow = (): { - data: IFlow; - loading: boolean; - refetch: () => void; -} => { - const { id } = useParams(); - const { sharedId } = useGetSharedChatSearchParams(); - - const { - data, - isFetching: loading, - refetch, - } = useQuery({ - queryKey: ['flowDetail'], - initialData: {} as IFlow, - refetchOnReconnect: false, - refetchOnMount: false, - refetchOnWindowFocus: false, - gcTime: 0, - queryFn: async () => { - const { data } = await flowService.getCanvas({}, sharedId || id); - - const messageList = buildMessageListWithUuid( - get(data, 'data.dsl.messages', []), - ); - set(data, 'data.dsl.messages', messageList); - - return data?.data ?? {}; - }, - }); - - return { data, loading, refetch }; -}; - -export const useSettingFlow = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['SettingFlow'], - mutationFn: async (params: any) => { - const ret = await flowService.settingCanvas(params); - if (ret?.data?.code === 0) { - message.success('success'); - } else { - message.error(ret?.data?.data); - } - return ret; - }, - }); - - return { data, loading, settingFlow: mutateAsync }; -}; - -export const useFetchFlowSSE = (): { - data: IFlow; - loading: boolean; - refetch: () => void; -} => { - const { sharedId } = useGetSharedChatSearchParams(); - - const { - data, - isFetching: loading, - refetch, - } = useQuery({ - queryKey: ['flowDetailSSE'], - initialData: {} as IFlow, - refetchOnReconnect: false, - refetchOnMount: false, - refetchOnWindowFocus: false, - gcTime: 0, - queryFn: async () => { - if (!sharedId) return {}; - const { data } = await flowService.getCanvasSSE({}, sharedId); - - const messageList = buildMessageListWithUuid( - get(data, 'data.dsl.messages', []), - ); - set(data, 'data.dsl.messages', messageList); - - return data?.data ?? {}; - }, - }); - - return { data, loading, refetch }; -}; - -export const useSetFlow = () => { - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['setFlow'], - mutationFn: async (params: { - id?: string; - title?: string; - dsl?: DSL; - avatar?: string; - }) => { - const { data = {} } = await flowService.setCanvas(params); - if (data.code === 0) { - message.success( - i18n.t(`message.${params?.id ? 'modified' : 'created'}`), - ); - queryClient.invalidateQueries({ queryKey: ['fetchFlowList'] }); - } - return data; - }, - }); - - return { data, loading, setFlow: mutateAsync }; -}; - -export const useDeleteFlow = () => { - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteFlow'], - mutationFn: async (canvasIds: string[]) => { - const { data } = await flowService.removeCanvas({ canvasIds }); - if (data.code === 0) { - queryClient.invalidateQueries({ - queryKey: ['infiniteFetchFlowListTeam'], - }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, deleteFlow: mutateAsync }; -}; - -export const useRunFlow = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['runFlow'], - mutationFn: async (params: { id: string; dsl: DSL }) => { - const { data } = await flowService.runCanvas(params); - if (data.code === 0) { - message.success(i18n.t(`message.modified`)); - } - return data?.data ?? {}; - }, - }); - - return { data, loading, runFlow: mutateAsync }; -}; - -export const useResetFlow = () => { - const { id } = useParams(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['resetFlow'], - mutationFn: async () => { - const { data } = await flowService.resetCanvas({ id }); - return data; - }, - }); - - return { data, loading, resetFlow: mutateAsync }; -}; - -export const useTestDbConnect = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['testDbConnect'], - mutationFn: async (params: any) => { - const ret = await flowService.testDbConnect(params); - if (ret?.data?.code === 0) { - message.success(ret?.data?.data); - } else { - message.error(ret?.data?.data); - } - return ret; - }, - }); - - return { data, loading, testDbConnect: mutateAsync }; -}; - -export const useFetchInputElements = (componentId?: string) => { - const { id } = useParams(); - - const { data, isPending: loading } = useQuery({ - queryKey: ['fetchInputElements', id, componentId], - initialData: [], - enabled: !!id && !!componentId, - retryOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: false, - gcTime: 0, - queryFn: async () => { - try { - const { data } = await flowService.getInputElements({ - id, - component_id: componentId, - }); - return data?.data ?? []; - } catch (error) { - console.log('🚀 ~ queryFn: ~ error:', error); - } - }, - }); - - return { data, loading }; -}; - -export const useDebugSingle = () => { - const { id } = useParams(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['debugSingle'], - mutationFn: async (params: IDebugSingleRequestBody) => { - const ret = await flowService.debugSingle({ id, ...params }); - if (ret?.data?.code !== 0) { - message.error(ret?.data?.message); - } - return ret?.data?.data; - }, - }); - - return { data, loading, debugSingle: mutateAsync }; -}; diff --git a/web/src/hooks/knowledge-hooks.ts b/web/src/hooks/knowledge-hooks.ts deleted file mode 100644 index ae0c8d6f2..000000000 --- a/web/src/hooks/knowledge-hooks.ts +++ /dev/null @@ -1,498 +0,0 @@ -import { ResponsePostType } from '@/interfaces/database/base'; -import { - IKnowledge, - IKnowledgeGraph, - IRenameTag, - ITestingResult, -} from '@/interfaces/database/knowledge'; -import i18n from '@/locales/config'; -import kbService, { - deleteKnowledgeGraph, - getKnowledgeGraph, - listDataset, - listTag, - removeTag, - renameTag, -} from '@/services/knowledge-service'; -import { - useInfiniteQuery, - useIsMutating, - useMutation, - useMutationState, - useQuery, - useQueryClient, -} from '@tanstack/react-query'; -import { useDebounce } from 'ahooks'; -import { message } from 'antd'; -import { useState } from 'react'; -import { useParams, useSearchParams } from 'umi'; -import { useHandleSearchChange } from './logic-hooks'; -import { useSetPaginationParams } from './route-hook'; - -export const useKnowledgeBaseId = (): string => { - const [searchParams] = useSearchParams(); - const { id } = useParams(); - const knowledgeBaseId = searchParams.get('id') || id; - - return knowledgeBaseId || ''; -}; - -export const useFetchKnowledgeBaseConfiguration = () => { - const knowledgeBaseId = useKnowledgeBaseId(); - - const { data, isFetching: loading } = useQuery({ - queryKey: ['fetchKnowledgeDetail'], - initialData: {} as IKnowledge, - gcTime: 0, - queryFn: async () => { - const { data } = await kbService.get_kb_detail({ - kb_id: knowledgeBaseId, - }); - return data?.data ?? {}; - }, - }); - - return { data, loading }; -}; - -export const useFetchKnowledgeList = ( - shouldFilterListWithoutDocument: boolean = false, -): { - list: IKnowledge[]; - loading: boolean; -} => { - const { data, isFetching: loading } = useQuery({ - queryKey: ['fetchKnowledgeList'], - initialData: [], - gcTime: 0, // https://tanstack.com/query/latest/docs/framework/react/guides/caching?from=reactQueryV3 - queryFn: async () => { - const { data } = await listDataset(); - const list = data?.data?.kbs ?? []; - return shouldFilterListWithoutDocument - ? list.filter((x: IKnowledge) => x.chunk_num > 0) - : list; - }, - }); - - return { list: data, loading }; -}; - -export const useSelectKnowledgeOptions = () => { - const { list } = useFetchKnowledgeList(); - - const options = list?.map((item) => ({ - label: item.name, - value: item.id, - })); - - return options; -}; - -export const useInfiniteFetchKnowledgeList = () => { - const { searchString, handleInputChange } = useHandleSearchChange(); - const debouncedSearchString = useDebounce(searchString, { wait: 500 }); - - const PageSize = 30; - - const { - data, - error, - fetchNextPage, - hasNextPage, - isFetching, - isFetchingNextPage, - status, - } = useInfiniteQuery({ - queryKey: ['infiniteFetchKnowledgeList', debouncedSearchString], - queryFn: async ({ pageParam }) => { - const { data } = await listDataset({ - page: pageParam, - page_size: PageSize, - keywords: debouncedSearchString, - }); - const list = data?.data ?? []; - return list; - }, - initialPageParam: 1, - getNextPageParam: (lastPage, pages, lastPageParam) => { - if (lastPageParam * PageSize <= lastPage.total) { - return lastPageParam + 1; - } - return undefined; - }, - }); - return { - data, - loading: isFetching, - error, - fetchNextPage, - hasNextPage, - isFetching, - isFetchingNextPage, - status, - handleInputChange, - searchString, - }; -}; - -export const useCreateKnowledge = () => { - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['infiniteFetchKnowledgeList'], - mutationFn: async (params: { id?: string; name: string }) => { - const { data = {} } = await kbService.createKb(params); - if (data.code === 0) { - message.success( - i18n.t(`message.${params?.id ? 'modified' : 'created'}`), - ); - queryClient.invalidateQueries({ queryKey: ['fetchKnowledgeList'] }); - } - return data; - }, - }); - - return { data, loading, createKnowledge: mutateAsync }; -}; - -export const useDeleteKnowledge = () => { - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteKnowledge'], - mutationFn: async (id: string) => { - const { data } = await kbService.rmKb({ kb_id: id }); - if (data.code === 0) { - message.success(i18n.t(`message.deleted`)); - queryClient.invalidateQueries({ - queryKey: ['infiniteFetchKnowledgeList'], - }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, deleteKnowledge: mutateAsync }; -}; - -//#region knowledge configuration - -export const useUpdateKnowledge = (shouldFetchList = false) => { - const knowledgeBaseId = useKnowledgeBaseId(); - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['saveKnowledge'], - mutationFn: async (params: Record) => { - const { data = {} } = await kbService.updateKb({ - kb_id: params?.kb_id ? params?.kb_id : knowledgeBaseId, - ...params, - }); - if (data.code === 0) { - message.success(i18n.t(`message.updated`)); - if (shouldFetchList) { - queryClient.invalidateQueries({ - queryKey: ['fetchKnowledgeListByPage'], - }); - } else { - queryClient.invalidateQueries({ queryKey: ['fetchKnowledgeDetail'] }); - } - } - return data; - }, - }); - - return { data, loading, saveKnowledgeConfiguration: mutateAsync }; -}; - -//#endregion - -//#region Retrieval testing - -export const useTestChunkRetrieval = (): ResponsePostType & { - testChunk: (...params: any[]) => void; -} => { - const knowledgeBaseId = useKnowledgeBaseId(); - const { page, size: pageSize } = useSetPaginationParams(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['testChunk'], // This method is invalid - gcTime: 0, - mutationFn: async (values: any) => { - const { data } = await kbService.retrieval_test({ - ...values, - kb_id: values.kb_id ?? knowledgeBaseId, - page, - size: pageSize, - }); - if (data.code === 0) { - const res = data.data; - return { - ...res, - documents: res.doc_aggs, - }; - } - return ( - data?.data ?? { - chunks: [], - documents: [], - total: 0, - } - ); - }, - }); - - return { - data: data ?? { chunks: [], documents: [], total: 0 }, - loading, - testChunk: mutateAsync, - }; -}; - -export const useTestChunkAllRetrieval = (): ResponsePostType & { - testChunkAll: (...params: any[]) => void; -} => { - const knowledgeBaseId = useKnowledgeBaseId(); - const { page, size: pageSize } = useSetPaginationParams(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['testChunkAll'], // This method is invalid - gcTime: 0, - mutationFn: async (values: any) => { - const { data } = await kbService.retrieval_test({ - ...values, - kb_id: values.kb_id ?? knowledgeBaseId, - doc_ids: [], - page, - size: pageSize, - }); - if (data.code === 0) { - const res = data.data; - return { - ...res, - documents: res.doc_aggs, - }; - } - return ( - data?.data ?? { - chunks: [], - documents: [], - total: 0, - } - ); - }, - }); - - return { - data: data ?? { chunks: [], documents: [], total: 0 }, - loading, - testChunkAll: mutateAsync, - }; -}; - -export const useChunkIsTesting = () => { - return useIsMutating({ mutationKey: ['testChunk'] }) > 0; -}; - -export const useSelectTestingResult = (): ITestingResult => { - const data = useMutationState({ - filters: { mutationKey: ['testChunk'] }, - select: (mutation) => { - return mutation.state.data; - }, - }); - return (data.at(-1) ?? { - chunks: [], - documents: [], - total: 0, - }) as ITestingResult; -}; - -export const useSelectIsTestingSuccess = () => { - const status = useMutationState({ - filters: { mutationKey: ['testChunk'] }, - select: (mutation) => { - return mutation.state.status; - }, - }); - return status.at(-1) === 'success'; -}; - -export const useAllTestingSuccess = () => { - const status = useMutationState({ - filters: { mutationKey: ['testChunkAll'] }, - select: (mutation) => { - return mutation.state.status; - }, - }); - return status.at(-1) === 'success'; -}; - -export const useAllTestingResult = (): ITestingResult => { - const data = useMutationState({ - filters: { mutationKey: ['testChunkAll'] }, - select: (mutation) => { - return mutation.state.data; - }, - }); - return (data.at(-1) ?? { - chunks: [], - documents: [], - total: 0, - }) as ITestingResult; -}; -//#endregion - -//#region tags - -export const useFetchTagList = () => { - const knowledgeBaseId = useKnowledgeBaseId(); - - const { data, isFetching: loading } = useQuery>({ - queryKey: ['fetchTagList'], - initialData: [], - gcTime: 0, // https://tanstack.com/query/latest/docs/framework/react/guides/caching?from=reactQueryV3 - queryFn: async () => { - const { data } = await listTag(knowledgeBaseId); - const list = data?.data || []; - return list; - }, - }); - - return { list: data, loading }; -}; - -export const useDeleteTag = () => { - const knowledgeBaseId = useKnowledgeBaseId(); - - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteTag'], - mutationFn: async (tags: string[]) => { - const { data } = await removeTag(knowledgeBaseId, tags); - if (data.code === 0) { - message.success(i18n.t(`message.deleted`)); - queryClient.invalidateQueries({ - queryKey: ['fetchTagList'], - }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, deleteTag: mutateAsync }; -}; - -export const useRenameTag = () => { - const knowledgeBaseId = useKnowledgeBaseId(); - - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['renameTag'], - mutationFn: async (params: IRenameTag) => { - const { data } = await renameTag(knowledgeBaseId, params); - if (data.code === 0) { - message.success(i18n.t(`message.modified`)); - queryClient.invalidateQueries({ - queryKey: ['fetchTagList'], - }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, renameTag: mutateAsync }; -}; - -export const useTagIsRenaming = () => { - return useIsMutating({ mutationKey: ['renameTag'] }) > 0; -}; - -export const useFetchTagListByKnowledgeIds = () => { - const [knowledgeIds, setKnowledgeIds] = useState([]); - - const { data, isFetching: loading } = useQuery>({ - queryKey: ['fetchTagListByKnowledgeIds'], - enabled: knowledgeIds.length > 0, - initialData: [], - gcTime: 0, // https://tanstack.com/query/latest/docs/framework/react/guides/caching?from=reactQueryV3 - queryFn: async () => { - const { data } = await kbService.listTagByKnowledgeIds({ - kb_ids: knowledgeIds.join(','), - }); - const list = data?.data || []; - return list; - }, - }); - - return { list: data, loading, setKnowledgeIds }; -}; - -//#endregion - -export function useFetchKnowledgeGraph() { - const knowledgeBaseId = useKnowledgeBaseId(); - - const { data, isFetching: loading } = useQuery({ - queryKey: ['fetchKnowledgeGraph', knowledgeBaseId], - initialData: { graph: {}, mind_map: {} } as IKnowledgeGraph, - enabled: !!knowledgeBaseId, - gcTime: 0, - queryFn: async () => { - const { data } = await getKnowledgeGraph(knowledgeBaseId); - return data?.data; - }, - }); - - return { data, loading }; -} - -export const useRemoveKnowledgeGraph = () => { - const knowledgeBaseId = useKnowledgeBaseId(); - - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['removeKnowledgeGraph'], - mutationFn: async () => { - const { data } = await deleteKnowledgeGraph(knowledgeBaseId); - if (data.code === 0) { - message.success(i18n.t(`message.deleted`)); - queryClient.invalidateQueries({ - queryKey: ['fetchKnowledgeGraph'], - }); - } - return data?.code; - }, - }); - - return { data, loading, removeKnowledgeGraph: mutateAsync }; -}; diff --git a/web/src/hooks/logic-hooks.ts b/web/src/hooks/logic-hooks.ts index d2fb2cd50..dad471767 100644 --- a/web/src/hooks/logic-hooks.ts +++ b/web/src/hooks/logic-hooks.ts @@ -29,7 +29,7 @@ import { useTranslation } from 'react-i18next'; import { v4 as uuid } from 'uuid'; import { useTranslate } from './common-hooks'; import { useSetPaginationParams } from './route-hook'; -import { useFetchTenantInfo, useSaveSetting } from './user-setting-hooks'; +import { useFetchTenantInfo, useSaveSetting } from './use-user-setting-request'; export function usePrevious(value: T) { const ref = useRef(); diff --git a/web/src/hooks/use-agent-request.ts b/web/src/hooks/use-agent-request.ts index bbddf50d7..673cbd133 100644 --- a/web/src/hooks/use-agent-request.ts +++ b/web/src/hooks/use-agent-request.ts @@ -752,3 +752,37 @@ export function useCancelConversation() { return { data, loading, cancelConversation: mutateAsync }; } + +export const useFetchFlowSSE = (): { + data: IFlow; + loading: boolean; + refetch: () => void; +} => { + const { sharedId } = useGetSharedChatSearchParams(); + + const { + data, + isFetching: loading, + refetch, + } = useQuery({ + queryKey: ['flowDetailSSE'], + initialData: {} as IFlow, + refetchOnReconnect: false, + refetchOnMount: false, + refetchOnWindowFocus: false, + gcTime: 0, + queryFn: async () => { + if (!sharedId) return {}; + const { data } = await agentService.getCanvasSSE(sharedId); + + const messageList = buildMessageListWithUuid( + get(data, 'data.dsl.messages', []), + ); + set(data, 'data.dsl.messages', messageList); + + return data?.data ?? {}; + }, + }); + + return { data, loading, refetch }; +}; diff --git a/web/src/hooks/use-chat-request.ts b/web/src/hooks/use-chat-request.ts index 0213acbb3..c88ce71f9 100644 --- a/web/src/hooks/use-chat-request.ts +++ b/web/src/hooks/use-chat-request.ts @@ -459,7 +459,7 @@ export function useUploadAndParseFile() { const { data } = await chatService.uploadAndParse( { - url: api.upload_and_parse(conversationId || id), + url: api.upload_and_parse, signal: controller.current.signal, data: formData, onUploadProgress: ({ progress }) => { diff --git a/web/src/hooks/use-chunk-request.ts b/web/src/hooks/use-chunk-request.ts index c896dd304..32c47ca84 100644 --- a/web/src/hooks/use-chunk-request.ts +++ b/web/src/hooks/use-chunk-request.ts @@ -1,17 +1,108 @@ -import message from '@/components/ui/message'; -import { ResponseGetType } from '@/interfaces/database/base'; +import { ResponseGetType, ResponseType } from '@/interfaces/database/base'; import { IChunk, IKnowledgeFile } from '@/interfaces/database/knowledge'; import kbService from '@/services/knowledge-service'; -import { useMutation, useQuery } from '@tanstack/react-query'; +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useDebounce } from 'ahooks'; +import { PaginationProps, message } from 'antd'; import { useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { IChunkListResult } from './chunk-hooks'; import { useGetPaginationWithRouter, useHandleSearchChange, } from './logic-hooks'; -import { useGetKnowledgeSearchParams } from './route-hook'; +import { + useGetKnowledgeSearchParams, + useSetPaginationParams, +} from './route-hook'; + +export interface IChunkListResult { + searchString?: string; + handleInputChange?: React.ChangeEventHandler; + pagination: PaginationProps; + setPagination?: (pagination: { page: number; pageSize: number }) => void; + available: number | undefined; + handleSetAvailable: (available: number | undefined) => void; +} + +export const useSelectChunkList = () => { + const queryClient = useQueryClient(); + const data = queryClient.getQueriesData<{ + data: IChunk[]; + total: number; + documentInfo: IKnowledgeFile; + }>({ queryKey: ['fetchChunkList'] }); + + return data?.at(-1)?.[1]; +}; + +export const useDeleteChunk = () => { + const queryClient = useQueryClient(); + const { setPaginationParams } = useSetPaginationParams(); + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: ['deleteChunk'], + mutationFn: async (params: { chunkIds: string[]; doc_id: string }) => { + const { data } = await kbService.rm_chunk(params); + if (data.code === 0) { + setPaginationParams(1); + queryClient.invalidateQueries({ queryKey: ['fetchChunkList'] }); + } + return data?.code; + }, + }); + + return { data, loading, deleteChunk: mutateAsync }; +}; + +export const useCreateChunk = () => { + const { t } = useTranslation(); + const queryClient = useQueryClient(); + + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: ['createChunk'], + mutationFn: async (payload: any) => { + let service = kbService.create_chunk; + if (payload.chunk_id) { + service = kbService.set_chunk; + } + const { data } = await service(payload); + if (data.code === 0) { + message.success(t('message.created')); + setTimeout(() => { + queryClient.invalidateQueries({ queryKey: ['fetchChunkList'] }); + }, 1000); // Delay to ensure the list is updated + } + return data?.code; + }, + }); + + return { data, loading, createChunk: mutateAsync }; +}; + +export const useFetchChunk = (chunkId?: string): ResponseType => { + const { data } = useQuery({ + queryKey: ['fetchChunk'], + enabled: !!chunkId, + initialData: {}, + gcTime: 0, + queryFn: async () => { + const data = await kbService.get_chunk({ + chunk_id: chunkId, + }); + + return data; + }, + }); + + return data; +}; export const useFetchNextChunkList = ( enabled = true, diff --git a/web/src/hooks/use-document-request.ts b/web/src/hooks/use-document-request.ts index 7e2e646d6..805956eda 100644 --- a/web/src/hooks/use-document-request.ts +++ b/web/src/hooks/use-document-request.ts @@ -1,20 +1,27 @@ import { useHandleFilterSubmit } from '@/components/list-filter-bar/use-handle-filter-submit'; +import { post } from '@/utils/next-request'; + import message from '@/components/ui/message'; import { ResponseType } from '@/interfaces/database/base'; +import { IReferenceChunk } from '@/interfaces/database/chat'; import { IDocumentInfo, IDocumentInfoFilter, } from '@/interfaces/database/document'; +import { IChunk } from '@/interfaces/database/knowledge'; import { IChangeParserConfigRequestBody, IDocumentMetaRequestBody, } from '@/interfaces/request/document'; import i18n from '@/locales/config'; import kbService, { listDocument } from '@/services/knowledge-service'; +import api, { api_host } from '@/utils/api'; +import { buildChunkHighlights } from '@/utils/document-util'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useDebounce } from 'ahooks'; import { get } from 'lodash'; import { useCallback, useMemo, useState } from 'react'; +import { IHighlight } from 'react-pdf-highlighter'; import { useParams } from 'umi'; import { useGetPaginationWithRouter, @@ -36,6 +43,9 @@ export const enum DocumentApiAction { SetDocumentMeta = 'setDocumentMeta', FetchDocumentFilter = 'fetchDocumentFilter', CreateDocument = 'createDocument', + WebCrawl = 'webCrawl', + FetchDocumentThumbnails = 'fetchDocumentThumbnails', + ParseDocument = 'parseDocument', } export const useUploadNextDocument = () => { @@ -430,3 +440,108 @@ export const useCreateDocument = () => { return { createDocument: mutateAsync, loading, data }; }; + +export const useGetDocumentUrl = (documentId?: string) => { + const getDocumentUrl = useCallback( + (id?: string) => { + return `${api_host}/document/get/${documentId || id}`; + }, + [documentId], + ); + + return getDocumentUrl; +}; + +export const useGetChunkHighlights = ( + selectedChunk: IChunk | IReferenceChunk, +) => { + const [size, setSize] = useState({ width: 849, height: 1200 }); + + const highlights: IHighlight[] = useMemo(() => { + return buildChunkHighlights(selectedChunk, size); + }, [selectedChunk, size]); + + const setWidthAndHeight = (width: number, height: number) => { + setSize((pre) => { + if (pre.height !== height || pre.width !== width) { + return { height, width }; + } + return pre; + }); + }; + + return { highlights, setWidthAndHeight }; +}; + +export const useNextWebCrawl = () => { + const { knowledgeId } = useGetKnowledgeSearchParams(); + + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: [DocumentApiAction.WebCrawl], + mutationFn: async ({ name, url }: { name: string; url: string }) => { + const formData = new FormData(); + formData.append('name', name); + formData.append('url', url); + formData.append('kb_id', knowledgeId); + + const ret = await kbService.web_crawl(formData); + const code = get(ret, 'data.code'); + if (code === 0) { + message.success(i18n.t('message.uploaded')); + } + + return code; + }, + }); + + return { + data, + loading, + webCrawl: mutateAsync, + }; +}; + +export const useFetchDocumentThumbnailsByIds = () => { + const [ids, setDocumentIds] = useState([]); + const { data } = useQuery>({ + queryKey: [DocumentApiAction.FetchDocumentThumbnails, ids], + enabled: ids.length > 0, + initialData: {}, + queryFn: async () => { + const { data } = await kbService.document_thumbnails({ doc_ids: ids }); + if (data.code === 0) { + return data.data; + } + return {}; + }, + }); + + return { data, setDocumentIds }; +}; + +export const useParseDocument = () => { + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: [DocumentApiAction.ParseDocument], + mutationFn: async (url: string) => { + try { + const { data } = await post(api.parse, { url }); + if (data?.code === 0) { + message.success(i18n.t('message.uploaded')); + } + return data; + } catch (error) { + message.error('error'); + } + }, + }); + + return { parseDocument: mutateAsync, data, loading }; +}; diff --git a/web/src/hooks/use-file-request.ts b/web/src/hooks/use-file-request.ts index 68455f3ab..b8e22ca3c 100644 --- a/web/src/hooks/use-file-request.ts +++ b/web/src/hooks/use-file-request.ts @@ -3,7 +3,9 @@ import { IFetchFileListResult, IFolder, } from '@/interfaces/database/file-manager'; +import { IConnectRequestBody } from '@/interfaces/request/file-manager'; import fileManagerService from '@/services/file-manager-service'; +import { downloadFileFromBlob } from '@/utils/file-util'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useDebounce } from 'ahooks'; import { PaginationProps } from 'antd'; @@ -23,6 +25,10 @@ export const enum FileApiAction { CreateFolder = 'createFolder', FetchParentFolderList = 'fetchParentFolderList', DeleteFile = 'deleteFile', + DownloadFile = 'downloadFile', + RenameFile = 'renameFile', + ConnectFileToKnowledge = 'connectFileToKnowledge', + FetchPureFileList = 'fetchPureFileList', } export const useGetFolderId = () => { @@ -229,3 +235,85 @@ export const useDeleteFile = () => { return { data, loading, deleteFile: mutateAsync }; }; + +export const useDownloadFile = () => { + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: [FileApiAction.DownloadFile], + mutationFn: async (params: { id: string; filename?: string }) => { + const response = await fileManagerService.getFile({}, params.id); + const blob = new Blob([response.data], { type: response.data.type }); + downloadFileFromBlob(blob, params.filename); + }, + }); + return { data, loading, downloadFile: mutateAsync }; +}; + +export const useRenameFile = () => { + const queryClient = useQueryClient(); + const { t } = useTranslation(); + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: [FileApiAction.RenameFile], + mutationFn: async (params: { fileId: string; name: string }) => { + const { data } = await fileManagerService.renameFile(params); + if (data.code === 0) { + message.success(t('message.renamed')); + queryClient.invalidateQueries({ + queryKey: [FileApiAction.FetchFileList], + }); + } + return data.code; + }, + }); + + return { data, loading, renameFile: mutateAsync }; +}; + +export const useConnectToKnowledge = () => { + const queryClient = useQueryClient(); + const { t } = useTranslation(); + + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: [FileApiAction.ConnectFileToKnowledge], + mutationFn: async (params: IConnectRequestBody) => { + const { data } = await fileManagerService.connectFileToKnowledge(params); + if (data.code === 0) { + message.success(t('message.operated')); + queryClient.invalidateQueries({ + queryKey: [FileApiAction.FetchFileList], + }); + } + return data.code; + }, + }); + + return { data, loading, connectFileToKnowledge: mutateAsync }; +}; + +export const useFetchPureFileList = () => { + const { mutateAsync, isPending: loading } = useMutation({ + mutationKey: [FileApiAction.FetchPureFileList], + gcTime: 0, + + mutationFn: async (parentId: string) => { + const { data } = await fileManagerService.listFile({ + parent_id: parentId, + }); + + return data; + }, + }); + + return { loading, fetchList: mutateAsync }; +}; diff --git a/web/src/hooks/use-knowledge-request.ts b/web/src/hooks/use-knowledge-request.ts index 5caaa6633..daaa28715 100644 --- a/web/src/hooks/use-knowledge-request.ts +++ b/web/src/hooks/use-knowledge-request.ts @@ -1,10 +1,13 @@ import { useHandleFilterSubmit } from '@/components/list-filter-bar/use-handle-filter-submit'; import message from '@/components/ui/message'; +import { ResponsePostType } from '@/interfaces/database/base'; import { IKnowledge, IKnowledgeGraph, IKnowledgeResult, INextTestingResult, + IRenameTag, + ITestingResult, } from '@/interfaces/database/knowledge'; import { ITestRetrievalRequestBody } from '@/interfaces/request/knowledge'; import i18n from '@/locales/config'; @@ -12,8 +15,17 @@ import kbService, { deleteKnowledgeGraph, getKnowledgeGraph, listDataset, + listTag, + removeTag, + renameTag, } from '@/services/knowledge-service'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import { + useIsMutating, + useMutation, + useMutationState, + useQuery, + useQueryClient, +} from '@tanstack/react-query'; import { useDebounce } from 'ahooks'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useParams, useSearchParams } from 'umi'; @@ -21,6 +33,7 @@ import { useGetPaginationWithRouter, useHandleSearchChange, } from './logic-hooks'; +import { useSetPaginationParams } from './route-hook'; export const enum KnowledgeApiAction { TestRetrieval = 'testRetrieval', @@ -354,3 +367,252 @@ export const useFetchKnowledgeList = ( return { list: data, loading }; }; + +export const useSelectKnowledgeOptions = () => { + const { list } = useFetchKnowledgeList(); + + const options = list?.map((item) => ({ + label: item.name, + value: item.id, + })); + + return options; +}; + +//#region tags +export const useRenameTag = () => { + const knowledgeBaseId = useKnowledgeBaseId(); + + const queryClient = useQueryClient(); + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: ['renameTag'], + mutationFn: async (params: IRenameTag) => { + const { data } = await renameTag(knowledgeBaseId, params); + if (data.code === 0) { + message.success(i18n.t(`message.modified`)); + queryClient.invalidateQueries({ + queryKey: ['fetchTagList'], + }); + } + return data?.data ?? []; + }, + }); + + return { data, loading, renameTag: mutateAsync }; +}; + +export const useTagIsRenaming = () => { + return useIsMutating({ mutationKey: ['renameTag'] }) > 0; +}; + +export const useFetchTagListByKnowledgeIds = () => { + const [knowledgeIds, setKnowledgeIds] = useState([]); + + const { data, isFetching: loading } = useQuery>({ + queryKey: ['fetchTagListByKnowledgeIds'], + enabled: knowledgeIds.length > 0, + initialData: [], + gcTime: 0, // https://tanstack.com/query/latest/docs/framework/react/guides/caching?from=reactQueryV3 + queryFn: async () => { + const { data } = await kbService.listTagByKnowledgeIds({ + kb_ids: knowledgeIds.join(','), + }); + const list = data?.data || []; + return list; + }, + }); + + return { list: data, loading, setKnowledgeIds }; +}; + +export const useFetchTagList = () => { + const knowledgeBaseId = useKnowledgeBaseId(); + + const { data, isFetching: loading } = useQuery>({ + queryKey: ['fetchTagList'], + initialData: [], + gcTime: 0, // https://tanstack.com/query/latest/docs/framework/react/guides/caching?from=reactQueryV3 + queryFn: async () => { + const { data } = await listTag(knowledgeBaseId); + const list = data?.data || []; + return list; + }, + }); + + return { list: data, loading }; +}; + +export const useDeleteTag = () => { + const knowledgeBaseId = useKnowledgeBaseId(); + + const queryClient = useQueryClient(); + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: ['deleteTag'], + mutationFn: async (tags: string[]) => { + const { data } = await removeTag(knowledgeBaseId, tags); + if (data.code === 0) { + message.success(i18n.t(`message.deleted`)); + queryClient.invalidateQueries({ + queryKey: ['fetchTagList'], + }); + } + return data?.data ?? []; + }, + }); + + return { data, loading, deleteTag: mutateAsync }; +}; + +// #endregion + +//#region Retrieval testing + +export const useTestChunkRetrieval = (): ResponsePostType & { + testChunk: (...params: any[]) => void; +} => { + const knowledgeBaseId = useKnowledgeBaseId(); + const { page, size: pageSize } = useSetPaginationParams(); + + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: ['testChunk'], // This method is invalid + gcTime: 0, + mutationFn: async (values: any) => { + const { data } = await kbService.retrieval_test({ + ...values, + kb_id: values.kb_id ?? knowledgeBaseId, + page, + size: pageSize, + }); + if (data.code === 0) { + const res = data.data; + return { + ...res, + documents: res.doc_aggs, + }; + } + return ( + data?.data ?? { + chunks: [], + documents: [], + total: 0, + } + ); + }, + }); + + return { + data: data ?? { chunks: [], documents: [], total: 0 }, + loading, + testChunk: mutateAsync, + }; +}; + +export const useTestChunkAllRetrieval = (): ResponsePostType & { + testChunkAll: (...params: any[]) => void; +} => { + const knowledgeBaseId = useKnowledgeBaseId(); + const { page, size: pageSize } = useSetPaginationParams(); + + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: ['testChunkAll'], // This method is invalid + gcTime: 0, + mutationFn: async (values: any) => { + const { data } = await kbService.retrieval_test({ + ...values, + kb_id: values.kb_id ?? knowledgeBaseId, + doc_ids: [], + page, + size: pageSize, + }); + if (data.code === 0) { + const res = data.data; + return { + ...res, + documents: res.doc_aggs, + }; + } + return ( + data?.data ?? { + chunks: [], + documents: [], + total: 0, + } + ); + }, + }); + + return { + data: data ?? { chunks: [], documents: [], total: 0 }, + loading, + testChunkAll: mutateAsync, + }; +}; + +export const useChunkIsTesting = () => { + return useIsMutating({ mutationKey: ['testChunk'] }) > 0; +}; + +export const useSelectTestingResult = (): ITestingResult => { + const data = useMutationState({ + filters: { mutationKey: ['testChunk'] }, + select: (mutation) => { + return mutation.state.data; + }, + }); + return (data.at(-1) ?? { + chunks: [], + documents: [], + total: 0, + }) as ITestingResult; +}; + +export const useSelectIsTestingSuccess = () => { + const status = useMutationState({ + filters: { mutationKey: ['testChunk'] }, + select: (mutation) => { + return mutation.state.status; + }, + }); + return status.at(-1) === 'success'; +}; + +export const useAllTestingSuccess = () => { + const status = useMutationState({ + filters: { mutationKey: ['testChunkAll'] }, + select: (mutation) => { + return mutation.state.status; + }, + }); + return status.at(-1) === 'success'; +}; + +export const useAllTestingResult = (): ITestingResult => { + const data = useMutationState({ + filters: { mutationKey: ['testChunkAll'] }, + select: (mutation) => { + return mutation.state.data; + }, + }); + return (data.at(-1) ?? { + chunks: [], + documents: [], + total: 0, + }) as ITestingResult; +}; +//#endregion diff --git a/web/src/hooks/use-llm-request.ts b/web/src/hooks/use-llm-request.ts deleted file mode 100644 index 9608e4737..000000000 --- a/web/src/hooks/use-llm-request.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { LlmModelType } from '@/constants/knowledge'; -import userService from '@/services/user-service'; -import { useQuery } from '@tanstack/react-query'; - -import { - IThirdOAIModelCollection as IThirdAiModelCollection, - IThirdOAIModel, -} from '@/interfaces/database/llm'; -import { buildLlmUuid } from '@/utils/llm-util'; - -export const enum LLMApiAction { - LlmList = 'llmList', -} - -export const useFetchLlmList = (modelType?: LlmModelType) => { - const { data } = useQuery({ - queryKey: [LLMApiAction.LlmList], - initialData: {}, - queryFn: async () => { - const { data } = await userService.llm_list({ model_type: modelType }); - - return data?.data ?? {}; - }, - }); - - return data; -}; - -type IThirdOAIModelWithUuid = IThirdOAIModel & { uuid: string }; - -export function useSelectFlatLlmList(modelType?: LlmModelType) { - const llmList = useFetchLlmList(modelType); - - return Object.values(llmList).reduce((pre, cur) => { - pre.push(...cur.map((x) => ({ ...x, uuid: buildLlmUuid(x) }))); - - return pre; - }, []); -} - -export function useFindLlmByUuid(modelType?: LlmModelType) { - const flatList = useSelectFlatLlmList(modelType); - - return (uuid: string) => { - return flatList.find((x) => x.uuid === uuid); - }; -} diff --git a/web/src/hooks/llm-hooks.tsx b/web/src/hooks/use-llm-request.tsx similarity index 93% rename from web/src/hooks/llm-hooks.tsx rename to web/src/hooks/use-llm-request.tsx index fb83d2974..260cd47f9 100644 --- a/web/src/hooks/llm-hooks.tsx +++ b/web/src/hooks/use-llm-request.tsx @@ -20,11 +20,15 @@ import { DefaultOptionType } from 'antd/es/select'; import { useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -export const useFetchLlmList = ( - modelType?: LlmModelType, -): IThirdAiModelCollection => { - const { data } = useQuery({ - queryKey: ['llmList'], +import { buildLlmUuid } from '@/utils/llm-util'; + +export const enum LLMApiAction { + LlmList = 'llmList', +} + +export const useFetchLlmList = (modelType?: LlmModelType) => { + const { data } = useQuery({ + queryKey: [LLMApiAction.LlmList], initialData: {}, queryFn: async () => { const { data } = await userService.llm_list({ model_type: modelType }); @@ -36,24 +40,25 @@ export const useFetchLlmList = ( return data; }; -export const useSelectLlmOptions = () => { - const llmInfo: IThirdOAIModelCollection = useFetchLlmList(); +type IThirdOAIModelWithUuid = IThirdOAIModel & { uuid: string }; - const embeddingModelOptions = useMemo(() => { - return Object.entries(llmInfo).map(([key, value]) => { - return { - label: key, - options: value.map((x) => ({ - label: getRealModelName(x.llm_name), - value: `${x.llm_name}@${x.fid}`, - disabled: !x.available, - })), - }; - }); - }, [llmInfo]); +export function useSelectFlatLlmList(modelType?: LlmModelType) { + const llmList = useFetchLlmList(modelType); - return embeddingModelOptions; -}; + return Object.values(llmList).reduce((pre, cur) => { + pre.push(...cur.map((x) => ({ ...x, uuid: buildLlmUuid(x) }))); + + return pre; + }, []); +} + +export function useFindLlmByUuid(modelType?: LlmModelType) { + const flatList = useSelectFlatLlmList(modelType); + + return (uuid: string) => { + return flatList.find((x) => x.uuid === uuid); + }; +} function buildLlmOptionsWithIcon(x: IThirdOAIModel) { return { diff --git a/web/src/hooks/login-hooks.ts b/web/src/hooks/use-login-request.ts similarity index 86% rename from web/src/hooks/login-hooks.ts rename to web/src/hooks/use-login-request.ts index 4bd63cc17..908ef4c2a 100644 --- a/web/src/hooks/login-hooks.ts +++ b/web/src/hooks/use-login-request.ts @@ -6,9 +6,6 @@ import userService, { } from '@/services/user-service'; import authorizationUtil, { redirectToLogin } from '@/utils/authorization-util'; import { useMutation, useQuery } from '@tanstack/react-query'; -import { Form } from 'antd'; -import { FormInstance } from 'antd/lib'; -import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; export interface ILoginRequestBody { @@ -134,19 +131,3 @@ export const useLogout = () => { return { data, loading, logout: mutateAsync }; }; - -export const useHandleSubmittable = (form: FormInstance) => { - const [submittable, setSubmittable] = useState(false); - - // Watch all values - const values = Form.useWatch([], form); - - useEffect(() => { - form - .validateFields({ validateOnly: true }) - .then(() => setSubmittable(true)) - .catch(() => setSubmittable(false)); - }, [form, values]); - - return { submittable }; -}; diff --git a/web/src/hooks/system-hooks.ts b/web/src/hooks/use-system-request.ts similarity index 100% rename from web/src/hooks/system-hooks.ts rename to web/src/hooks/use-system-request.ts diff --git a/web/src/hooks/user-setting-hooks.tsx b/web/src/hooks/user-setting-hooks.tsx deleted file mode 100644 index c43f5005b..000000000 --- a/web/src/hooks/user-setting-hooks.tsx +++ /dev/null @@ -1,433 +0,0 @@ -import message from '@/components/ui/message'; -import { LanguageTranslationMap } from '@/constants/common'; -import { ResponseGetType } from '@/interfaces/database/base'; -import { IToken } from '@/interfaces/database/chat'; -import { ITenantInfo } from '@/interfaces/database/knowledge'; -import { ILangfuseConfig } from '@/interfaces/database/system'; -import { - ISystemStatus, - ITenant, - ITenantUser, - IUserInfo, -} from '@/interfaces/database/user-setting'; -import { ISetLangfuseConfigRequestBody } from '@/interfaces/request/system'; -import userService, { - addTenantUser, - agreeTenant, - deleteTenantUser, - listTenant, - listTenantUser, -} from '@/services/user-service'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { Modal } from 'antd'; -import DOMPurify from 'dompurify'; -import { isEmpty } from 'lodash'; -import { useCallback, useMemo, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { history } from 'umi'; - -export const useFetchUserInfo = (): ResponseGetType => { - const { i18n } = useTranslation(); - - const { data, isFetching: loading } = useQuery({ - queryKey: ['userInfo'], - initialData: {}, - gcTime: 0, - queryFn: async () => { - const { data } = await userService.user_info(); - if (data.code === 0) { - i18n.changeLanguage( - LanguageTranslationMap[ - data.data.language as keyof typeof LanguageTranslationMap - ], - ); - } - return data?.data ?? {}; - }, - }); - - return { data, loading }; -}; - -export const useFetchTenantInfo = ( - showEmptyModelWarn = false, -): ResponseGetType => { - const { t } = useTranslation(); - const { data, isFetching: loading } = useQuery({ - queryKey: ['tenantInfo', showEmptyModelWarn], - initialData: {}, - gcTime: 0, - queryFn: async () => { - const { data: res } = await userService.get_tenant_info(); - if (res.code === 0) { - // llm_id is chat_id - // asr_id is speech2txt - const { data } = res; - if ( - showEmptyModelWarn && - (isEmpty(data.embd_id) || isEmpty(data.llm_id)) - ) { - Modal.warning({ - title: t('common.warn'), - content: ( -
- ), - onOk() { - history.push('/user-setting/model'); - }, - }); - } - data.chat_id = data.llm_id; - data.speech2text_id = data.asr_id; - - return data; - } - - return res; - }, - }); - - return { data, loading }; -}; - -export const useSelectParserList = (): Array<{ - value: string; - label: string; -}> => { - const { data: tenantInfo } = useFetchTenantInfo(true); - const parserList = useMemo(() => { - const parserArray: Array = tenantInfo?.parser_ids?.split(',') ?? []; - return parserArray.map((x) => { - const arr = x.split(':'); - return { value: arr[0], label: arr[1] }; - }); - }, [tenantInfo]); - - return parserList; -}; - -export const useSaveSetting = () => { - const queryClient = useQueryClient(); - const { t } = useTranslation(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['saveSetting'], - mutationFn: async ( - userInfo: { new_password: string } | Partial, - ) => { - const { data } = await userService.setting(userInfo); - if (data.code === 0) { - message.success(t('message.modified')); - queryClient.invalidateQueries({ queryKey: ['userInfo'] }); - } - return data?.code; - }, - }); - - return { data, loading, saveSetting: mutateAsync }; -}; - -export const useFetchSystemVersion = () => { - const [version, setVersion] = useState(''); - const [loading, setLoading] = useState(false); - - const fetchSystemVersion = useCallback(async () => { - try { - setLoading(true); - const { data } = await userService.getSystemVersion(); - if (data.code === 0) { - setVersion(data.data); - setLoading(false); - } - } catch (error) { - setLoading(false); - } - }, []); - - return { fetchSystemVersion, version, loading }; -}; - -export const useFetchSystemStatus = () => { - const [systemStatus, setSystemStatus] = useState( - {} as ISystemStatus, - ); - const [loading, setLoading] = useState(false); - - const fetchSystemStatus = useCallback(async () => { - setLoading(true); - const { data } = await userService.getSystemStatus(); - if (data.code === 0) { - setSystemStatus(data.data); - setLoading(false); - } - }, []); - - return { - systemStatus, - fetchSystemStatus, - loading, - }; -}; - -export const useFetchManualSystemTokenList = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['fetchManualSystemTokenList'], - mutationFn: async () => { - const { data } = await userService.listToken(); - - return data?.data ?? []; - }, - }); - - return { data, loading, fetchSystemTokenList: mutateAsync }; -}; - -export const useFetchSystemTokenList = () => { - const { - data, - isFetching: loading, - refetch, - } = useQuery({ - queryKey: ['fetchSystemTokenList'], - initialData: [], - gcTime: 0, - queryFn: async () => { - const { data } = await userService.listToken(); - - return data?.data ?? []; - }, - }); - - return { data, loading, refetch }; -}; - -export const useRemoveSystemToken = () => { - const queryClient = useQueryClient(); - const { t } = useTranslation(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['removeSystemToken'], - mutationFn: async (token: string) => { - const { data } = await userService.removeToken({}, token); - if (data.code === 0) { - message.success(t('message.deleted')); - queryClient.invalidateQueries({ queryKey: ['fetchSystemTokenList'] }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, removeToken: mutateAsync }; -}; - -export const useCreateSystemToken = () => { - const queryClient = useQueryClient(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['createSystemToken'], - mutationFn: async (params: Record) => { - const { data } = await userService.createToken(params); - if (data.code === 0) { - queryClient.invalidateQueries({ queryKey: ['fetchSystemTokenList'] }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, createToken: mutateAsync }; -}; - -export const useListTenantUser = () => { - const { data: tenantInfo } = useFetchTenantInfo(); - const tenantId = tenantInfo.tenant_id; - const { - data, - isFetching: loading, - refetch, - } = useQuery({ - queryKey: ['listTenantUser', tenantId], - initialData: [], - gcTime: 0, - enabled: !!tenantId, - queryFn: async () => { - const { data } = await listTenantUser(tenantId); - - return data?.data ?? []; - }, - }); - - return { data, loading, refetch }; -}; - -export const useAddTenantUser = () => { - const { data: tenantInfo } = useFetchTenantInfo(); - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['addTenantUser'], - mutationFn: async (email: string) => { - const { data } = await addTenantUser(tenantInfo.tenant_id, email); - if (data.code === 0) { - queryClient.invalidateQueries({ queryKey: ['listTenantUser'] }); - } - return data?.code; - }, - }); - - return { data, loading, addTenantUser: mutateAsync }; -}; - -export const useDeleteTenantUser = () => { - const { data: tenantInfo } = useFetchTenantInfo(); - const queryClient = useQueryClient(); - const { t } = useTranslation(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteTenantUser'], - mutationFn: async ({ - userId, - tenantId, - }: { - userId: string; - tenantId?: string; - }) => { - const { data } = await deleteTenantUser({ - tenantId: tenantId ?? tenantInfo.tenant_id, - userId, - }); - if (data.code === 0) { - message.success(t('message.deleted')); - queryClient.invalidateQueries({ queryKey: ['listTenantUser'] }); - queryClient.invalidateQueries({ queryKey: ['listTenant'] }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, deleteTenantUser: mutateAsync }; -}; - -export const useListTenant = () => { - const { data: tenantInfo } = useFetchTenantInfo(); - const tenantId = tenantInfo.tenant_id; - const { - data, - isFetching: loading, - refetch, - } = useQuery({ - queryKey: ['listTenant', tenantId], - initialData: [], - gcTime: 0, - enabled: !!tenantId, - queryFn: async () => { - const { data } = await listTenant(); - - return data?.data ?? []; - }, - }); - - return { data, loading, refetch }; -}; - -export const useAgreeTenant = () => { - const queryClient = useQueryClient(); - const { t } = useTranslation(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['agreeTenant'], - mutationFn: async (tenantId: string) => { - const { data } = await agreeTenant(tenantId); - if (data.code === 0) { - message.success(t('message.operated')); - queryClient.invalidateQueries({ queryKey: ['listTenant'] }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, agreeTenant: mutateAsync }; -}; - -export const useSetLangfuseConfig = () => { - const { t } = useTranslation(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['setLangfuseConfig'], - mutationFn: async (params: ISetLangfuseConfigRequestBody) => { - const { data } = await userService.setLangfuseConfig(params); - if (data.code === 0) { - message.success(t('message.operated')); - } - return data?.code; - }, - }); - - return { data, loading, setLangfuseConfig: mutateAsync }; -}; - -export const useDeleteLangfuseConfig = () => { - const { t } = useTranslation(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteLangfuseConfig'], - mutationFn: async () => { - const { data } = await userService.deleteLangfuseConfig(); - if (data.code === 0) { - message.success(t('message.deleted')); - } - return data?.code; - }, - }); - - return { data, loading, deleteLangfuseConfig: mutateAsync }; -}; - -export const useFetchLangfuseConfig = () => { - const { data, isFetching: loading } = useQuery({ - queryKey: ['fetchLangfuseConfig'], - gcTime: 0, - queryFn: async () => { - const { data } = await userService.getLangfuseConfig(); - - return data?.data; - }, - }); - - return { data, loading }; -}; diff --git a/web/src/layouts/components/right-toolbar/index.tsx b/web/src/layouts/components/right-toolbar/index.tsx index 9ef097a4d..3a2e0af56 100644 --- a/web/src/layouts/components/right-toolbar/index.tsx +++ b/web/src/layouts/components/right-toolbar/index.tsx @@ -8,7 +8,10 @@ import User from '../user'; import { useTheme } from '@/components/theme-provider'; import { LanguageList, LanguageMap, ThemeEnum } from '@/constants/common'; import { useChangeLanguage } from '@/hooks/logic-hooks'; -import { useFetchUserInfo, useListTenant } from '@/hooks/user-setting-hooks'; +import { + useFetchUserInfo, + useListTenant, +} from '@/hooks/use-user-setting-request'; import { TenantRole } from '@/pages/user-setting/constants'; import { BellRing, CircleHelp, MoonIcon, SunIcon } from 'lucide-react'; import { useNavigate } from 'umi'; diff --git a/web/src/layouts/components/user/index.tsx b/web/src/layouts/components/user/index.tsx index 833c32d70..a5537f6a2 100644 --- a/web/src/layouts/components/user/index.tsx +++ b/web/src/layouts/components/user/index.tsx @@ -1,4 +1,4 @@ -import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; +import { useFetchUserInfo } from '@/hooks/use-user-setting-request'; import { Avatar } from 'antd'; import React from 'react'; import { history } from 'umi'; diff --git a/web/src/layouts/next-header.tsx b/web/src/layouts/next-header.tsx index 20afe1ce1..870e32794 100644 --- a/web/src/layouts/next-header.tsx +++ b/web/src/layouts/next-header.tsx @@ -13,7 +13,7 @@ import { LanguageList, LanguageMap, ThemeEnum } from '@/constants/common'; import { useChangeLanguage } from '@/hooks/logic-hooks'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { useNavigateWithFromState } from '@/hooks/route-hook'; -import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; +import { useFetchUserInfo } from '@/hooks/use-user-setting-request'; import { Routes } from '@/routes'; import { camelCase } from 'lodash'; import { diff --git a/web/src/pages/agent/canvas/node/retrieval-node.tsx b/web/src/pages/agent/canvas/node/retrieval-node.tsx index 9c6b76110..c28ba4f7b 100644 --- a/web/src/pages/agent/canvas/node/retrieval-node.tsx +++ b/web/src/pages/agent/canvas/node/retrieval-node.tsx @@ -1,6 +1,6 @@ import { NodeCollapsible } from '@/components/collapse'; import { RAGFlowAvatar } from '@/components/ragflow-avatar'; -import { useFetchKnowledgeList } from '@/hooks/knowledge-hooks'; +import { useFetchKnowledgeList } from '@/hooks/use-knowledge-request'; import { IRetrievalNode } from '@/interfaces/database/flow'; import { NodeProps, Position } from '@xyflow/react'; import classNames from 'classnames'; diff --git a/web/src/pages/agent/chat/box.tsx b/web/src/pages/agent/chat/box.tsx index df4d006b2..855e1f5a2 100644 --- a/web/src/pages/agent/chat/box.tsx +++ b/web/src/pages/agent/chat/box.tsx @@ -11,7 +11,7 @@ import { useFetchAgent, useUploadCanvasFileWithProgress, } from '@/hooks/use-agent-request'; -import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; +import { useFetchUserInfo } from '@/hooks/use-user-setting-request'; import { buildMessageUuidWithRole } from '@/utils/chat'; import { memo, useCallback } from 'react'; import { useParams } from 'umi'; diff --git a/web/src/pages/agent/debug-content/popover-form.tsx b/web/src/pages/agent/debug-content/popover-form.tsx index 9465d903b..7cd0b8909 100644 --- a/web/src/pages/agent/debug-content/popover-form.tsx +++ b/web/src/pages/agent/debug-content/popover-form.tsx @@ -7,7 +7,7 @@ import { } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { Popover, PopoverContent } from '@/components/ui/popover'; -import { useParseDocument } from '@/hooks/document-hooks'; +import { useParseDocument } from '@/hooks/use-document-request'; import { IModalProps } from '@/interfaces/common'; import { zodResolver } from '@hookform/resolvers/zod'; import { PropsWithChildren } from 'react'; @@ -37,7 +37,7 @@ export const PopoverForm = ({ defaultValues: values, resolver: zodResolver(FormSchema), }); - const { parseDocument, loading } = useParseDocument(); + const { parseDocument } = useParseDocument(); const { t } = useTranslation(); // useResetFormOnCloseModal({ diff --git a/web/src/pages/agent/form/parser-form/video-form-fields.tsx b/web/src/pages/agent/form/parser-form/video-form-fields.tsx index 628b8dc9c..3f37a9864 100644 --- a/web/src/pages/agent/form/parser-form/video-form-fields.tsx +++ b/web/src/pages/agent/form/parser-form/video-form-fields.tsx @@ -1,5 +1,5 @@ import { LlmModelType } from '@/constants/knowledge'; -import { useComposeLlmOptionsByModelTypes } from '@/hooks/llm-hooks'; +import { useComposeLlmOptionsByModelTypes } from '@/hooks/use-llm-request'; import { LargeModelFormField, OutputFormatFormFieldProps, diff --git a/web/src/pages/agent/hooks/use-show-dialog.ts b/web/src/pages/agent/hooks/use-show-dialog.ts index 6178e3fbc..454ee086b 100644 --- a/web/src/pages/agent/hooks/use-show-dialog.ts +++ b/web/src/pages/agent/hooks/use-show-dialog.ts @@ -5,7 +5,7 @@ import { useCreateSystemToken, useFetchSystemTokenList, useRemoveSystemToken, -} from '@/hooks/user-setting-hooks'; +} from '@/hooks/use-user-setting-request'; import { IStats } from '@/interfaces/database/chat'; import { useQueryClient } from '@tanstack/react-query'; import { useCallback } from 'react'; diff --git a/web/src/pages/agents/agent-log-detail-modal.tsx b/web/src/pages/agents/agent-log-detail-modal.tsx index 88c1327b8..d6455263b 100644 --- a/web/src/pages/agents/agent-log-detail-modal.tsx +++ b/web/src/pages/agents/agent-log-detail-modal.tsx @@ -1,7 +1,7 @@ import MessageItem from '@/components/next-message-item'; import { Modal } from '@/components/ui/modal/modal'; import { useFetchAgent } from '@/hooks/use-agent-request'; -import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; +import { useFetchUserInfo } from '@/hooks/use-user-setting-request'; import { IAgentLogMessage } from '@/interfaces/database/agent'; import { IMessage, diff --git a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-creating-modal/index.tsx b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-creating-modal/index.tsx index de1baaf9d..cb2c3a933 100644 --- a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-creating-modal/index.tsx +++ b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-creating-modal/index.tsx @@ -17,7 +17,7 @@ import { Modal } from '@/components/ui/modal/modal'; import Space from '@/components/ui/space'; import { Switch } from '@/components/ui/switch'; import { Textarea } from '@/components/ui/textarea'; -import { useFetchChunk } from '@/hooks/chunk-hooks'; +import { useFetchChunk } from '@/hooks/use-chunk-request'; import { IModalProps } from '@/interfaces/common'; import React, { useCallback, useEffect, useState } from 'react'; import { FieldValues, FormProvider, useForm } from 'react-hook-form'; diff --git a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-creating-modal/tag-feature-item.tsx b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-creating-modal/tag-feature-item.tsx index 3c9f92c78..77219ce7c 100644 --- a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-creating-modal/tag-feature-item.tsx +++ b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-creating-modal/tag-feature-item.tsx @@ -8,8 +8,10 @@ import { FormMessage, } from '@/components/ui/form'; import { NumberInput } from '@/components/ui/input'; -import { useFetchTagListByKnowledgeIds } from '@/hooks/knowledge-hooks'; -import { useFetchKnowledgeBaseConfiguration } from '@/hooks/use-knowledge-request'; +import { + useFetchKnowledgeBaseConfiguration, + useFetchTagListByKnowledgeIds, +} from '@/hooks/use-knowledge-request'; import { CircleMinus, Plus } from 'lucide-react'; import { useCallback, useEffect, useMemo } from 'react'; import { useFieldArray, useFormContext } from 'react-hook-form'; diff --git a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-toolbar/index.tsx b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-toolbar/index.tsx index 6a513ba78..e1c7c6ae5 100644 --- a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-toolbar/index.tsx +++ b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-toolbar/index.tsx @@ -1,8 +1,11 @@ import { ReactComponent as FilterIcon } from '@/assets/filter.svg'; import { KnowledgeRouteKey } from '@/constants/knowledge'; -import { IChunkListResult, useSelectChunkList } from '@/hooks/chunk-hooks'; import { useTranslate } from '@/hooks/common-hooks'; -import { useKnowledgeBaseId } from '@/hooks/knowledge-hooks'; +import { + IChunkListResult, + useSelectChunkList, +} from '@/hooks/use-chunk-request'; +import { useKnowledgeBaseId } from '@/hooks/use-knowledge-request'; import { ArrowLeftOutlined, CheckCircleOutlined, diff --git a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/hooks.ts b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/hooks.ts index cb546b226..790fced39 100644 --- a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/hooks.ts +++ b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/hooks.ts @@ -1,10 +1,10 @@ +import { useSetModalState, useShowDeleteConfirm } from '@/hooks/common-hooks'; +import { useGetKnowledgeSearchParams } from '@/hooks/route-hook'; import { useCreateChunk, useDeleteChunk, useSelectChunkList, -} from '@/hooks/chunk-hooks'; -import { useSetModalState, useShowDeleteConfirm } from '@/hooks/common-hooks'; -import { useGetKnowledgeSearchParams } from '@/hooks/route-hook'; +} from '@/hooks/use-chunk-request'; import { IChunk } from '@/interfaces/database/knowledge'; import { buildChunkHighlights } from '@/utils/document-util'; import { useCallback, useMemo, useState } from 'react'; diff --git a/web/src/pages/chunk/parsed-result/add-knowledge/index.tsx b/web/src/pages/chunk/parsed-result/add-knowledge/index.tsx index 18187cf4e..7434edc61 100644 --- a/web/src/pages/chunk/parsed-result/add-knowledge/index.tsx +++ b/web/src/pages/chunk/parsed-result/add-knowledge/index.tsx @@ -1,9 +1,9 @@ -import { useKnowledgeBaseId } from '@/hooks/knowledge-hooks'; import { useNavigateWithFromState, useSecondPathName, useThirdPathName, } from '@/hooks/route-hook'; +import { useKnowledgeBaseId } from '@/hooks/use-knowledge-request'; import { Breadcrumb } from 'antd'; import { ItemType } from 'antd/es/breadcrumb/Breadcrumb'; import { useMemo } from 'react'; diff --git a/web/src/pages/dataflow-result/components/chunk-creating-modal/index.tsx b/web/src/pages/dataflow-result/components/chunk-creating-modal/index.tsx index 66cf4d619..7cad7eec1 100644 --- a/web/src/pages/dataflow-result/components/chunk-creating-modal/index.tsx +++ b/web/src/pages/dataflow-result/components/chunk-creating-modal/index.tsx @@ -17,7 +17,7 @@ import { Modal } from '@/components/ui/modal/modal'; import Space from '@/components/ui/space'; import { Switch } from '@/components/ui/switch'; import { Textarea } from '@/components/ui/textarea'; -import { useFetchChunk } from '@/hooks/chunk-hooks'; +import { useFetchChunk } from '@/hooks/use-chunk-request'; import { IModalProps } from '@/interfaces/common'; import { Trash2 } from 'lucide-react'; import React, { useCallback, useEffect, useState } from 'react'; diff --git a/web/src/pages/dataflow-result/components/chunk-creating-modal/tag-feature-item.tsx b/web/src/pages/dataflow-result/components/chunk-creating-modal/tag-feature-item.tsx index 3c9f92c78..77219ce7c 100644 --- a/web/src/pages/dataflow-result/components/chunk-creating-modal/tag-feature-item.tsx +++ b/web/src/pages/dataflow-result/components/chunk-creating-modal/tag-feature-item.tsx @@ -8,8 +8,10 @@ import { FormMessage, } from '@/components/ui/form'; import { NumberInput } from '@/components/ui/input'; -import { useFetchTagListByKnowledgeIds } from '@/hooks/knowledge-hooks'; -import { useFetchKnowledgeBaseConfiguration } from '@/hooks/use-knowledge-request'; +import { + useFetchKnowledgeBaseConfiguration, + useFetchTagListByKnowledgeIds, +} from '@/hooks/use-knowledge-request'; import { CircleMinus, Plus } from 'lucide-react'; import { useCallback, useEffect, useMemo } from 'react'; import { useFieldArray, useFormContext } from 'react-hook-form'; diff --git a/web/src/pages/dataflow-result/components/chunk-toolbar/index.tsx b/web/src/pages/dataflow-result/components/chunk-toolbar/index.tsx index 6a513ba78..e1c7c6ae5 100644 --- a/web/src/pages/dataflow-result/components/chunk-toolbar/index.tsx +++ b/web/src/pages/dataflow-result/components/chunk-toolbar/index.tsx @@ -1,8 +1,11 @@ import { ReactComponent as FilterIcon } from '@/assets/filter.svg'; import { KnowledgeRouteKey } from '@/constants/knowledge'; -import { IChunkListResult, useSelectChunkList } from '@/hooks/chunk-hooks'; import { useTranslate } from '@/hooks/common-hooks'; -import { useKnowledgeBaseId } from '@/hooks/knowledge-hooks'; +import { + IChunkListResult, + useSelectChunkList, +} from '@/hooks/use-chunk-request'; +import { useKnowledgeBaseId } from '@/hooks/use-knowledge-request'; import { ArrowLeftOutlined, CheckCircleOutlined, diff --git a/web/src/pages/dataflow-result/hooks.ts b/web/src/pages/dataflow-result/hooks.ts index 4c4ad590a..07d4da149 100644 --- a/web/src/pages/dataflow-result/hooks.ts +++ b/web/src/pages/dataflow-result/hooks.ts @@ -1,9 +1,9 @@ import { TimelineNode } from '@/components/originui/timeline'; import message from '@/components/ui/message'; -import { useCreateChunk, useDeleteChunk } from '@/hooks/chunk-hooks'; import { useSetModalState, useShowDeleteConfirm } from '@/hooks/common-hooks'; import { useGetKnowledgeSearchParams } from '@/hooks/route-hook'; import { useFetchMessageTrace } from '@/hooks/use-agent-request'; +import { useCreateChunk, useDeleteChunk } from '@/hooks/use-chunk-request'; import kbService from '@/services/knowledge-service'; import { formatSecondsToHumanReadable } from '@/utils/date'; import { buildChunkHighlights } from '@/utils/document-util'; diff --git a/web/src/pages/dataset/dataset-setting/category-panel.tsx b/web/src/pages/dataset/dataset-setting/category-panel.tsx index 06b2af743..4ab7fd0e9 100644 --- a/web/src/pages/dataset/dataset-setting/category-panel.tsx +++ b/web/src/pages/dataset/dataset-setting/category-panel.tsx @@ -1,6 +1,6 @@ import SvgIcon from '@/components/svg-icon'; import { useTranslate } from '@/hooks/common-hooks'; -import { useSelectParserList } from '@/hooks/user-setting-hooks'; +import { useSelectParserList } from '@/hooks/use-user-setting-request'; import { Col, Divider, Empty, Row, Typography } from 'antd'; import DOMPurify from 'dompurify'; import camelCase from 'lodash/camelCase'; diff --git a/web/src/pages/dataset/dataset-setting/components/tag-item.tsx b/web/src/pages/dataset/dataset-setting/components/tag-item.tsx index 241fc240a..9ae160caf 100644 --- a/web/src/pages/dataset/dataset-setting/components/tag-item.tsx +++ b/web/src/pages/dataset/dataset-setting/components/tag-item.tsx @@ -9,7 +9,7 @@ import { } from '@/components/ui/form'; import { MultiSelect } from '@/components/ui/multi-select'; import { FormLayout } from '@/constants/form'; -import { useFetchKnowledgeList } from '@/hooks/knowledge-hooks'; +import { useFetchKnowledgeList } from '@/hooks/use-knowledge-request'; import { Form, Select, Space } from 'antd'; import DOMPurify from 'dompurify'; import { useFormContext, useWatch } from 'react-hook-form'; diff --git a/web/src/pages/dataset/dataset-setting/hooks.ts b/web/src/pages/dataset/dataset-setting/hooks.ts index f9efe1d08..db67bda21 100644 --- a/web/src/pages/dataset/dataset-setting/hooks.ts +++ b/web/src/pages/dataset/dataset-setting/hooks.ts @@ -1,9 +1,9 @@ import { LlmModelType } from '@/constants/knowledge'; import { useSetModalState } from '@/hooks/common-hooks'; -import { useSelectLlmOptionsByModelType } from '@/hooks/llm-hooks'; import { useFetchKnowledgeBaseConfiguration } from '@/hooks/use-knowledge-request'; -import { useSelectParserList } from '@/hooks/user-setting-hooks'; +import { useSelectLlmOptionsByModelType } from '@/hooks/use-llm-request'; +import { useSelectParserList } from '@/hooks/use-user-setting-request'; import kbService from '@/services/knowledge-service'; import { useIsFetching } from '@tanstack/react-query'; import { pick } from 'lodash'; diff --git a/web/src/pages/dataset/dataset-setting/tag-table/index.tsx b/web/src/pages/dataset/dataset-setting/tag-table/index.tsx index a2e38018c..73036e03a 100644 --- a/web/src/pages/dataset/dataset-setting/tag-table/index.tsx +++ b/web/src/pages/dataset/dataset-setting/tag-table/index.tsx @@ -33,7 +33,7 @@ import { TooltipProvider, TooltipTrigger, } from '@/components/ui/tooltip'; -import { useDeleteTag, useFetchTagList } from '@/hooks/knowledge-hooks'; +import { useDeleteTag, useFetchTagList } from '@/hooks/use-knowledge-request'; import { useCallback, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useRenameKnowledgeTag } from '../hooks'; diff --git a/web/src/pages/dataset/dataset-setting/tag-table/rename-dialog/index.tsx b/web/src/pages/dataset/dataset-setting/tag-table/rename-dialog/index.tsx index 86b8780e8..ba861bddd 100644 --- a/web/src/pages/dataset/dataset-setting/tag-table/rename-dialog/index.tsx +++ b/web/src/pages/dataset/dataset-setting/tag-table/rename-dialog/index.tsx @@ -7,7 +7,7 @@ import { } from '@/components/ui/dialog'; import { LoadingButton } from '@/components/ui/loading-button'; import { TagRenameId } from '@/constants/knowledge'; -import { useTagIsRenaming } from '@/hooks/knowledge-hooks'; +import { useTagIsRenaming } from '@/hooks/use-knowledge-request'; import { IModalProps } from '@/interfaces/common'; import { useTranslation } from 'react-i18next'; import { RenameForm } from './rename-form'; diff --git a/web/src/pages/dataset/dataset-setting/tag-table/rename-dialog/rename-form.tsx b/web/src/pages/dataset/dataset-setting/tag-table/rename-dialog/rename-form.tsx index 9ba2407ab..c53349680 100644 --- a/web/src/pages/dataset/dataset-setting/tag-table/rename-dialog/rename-form.tsx +++ b/web/src/pages/dataset/dataset-setting/tag-table/rename-dialog/rename-form.tsx @@ -14,7 +14,7 @@ import { } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { TagRenameId } from '@/constants/knowledge'; -import { useRenameTag } from '@/hooks/knowledge-hooks'; +import { useRenameTag } from '@/hooks/use-knowledge-request'; import { IModalProps } from '@/interfaces/common'; import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/web/src/pages/dataset/dataset-setting/tag-word-cloud.tsx b/web/src/pages/dataset/dataset-setting/tag-word-cloud.tsx index b71ed69af..1aec04c10 100644 --- a/web/src/pages/dataset/dataset-setting/tag-word-cloud.tsx +++ b/web/src/pages/dataset/dataset-setting/tag-word-cloud.tsx @@ -1,4 +1,4 @@ -import { useFetchTagList } from '@/hooks/knowledge-hooks'; +import { useFetchTagList } from '@/hooks/use-knowledge-request'; import { Chart } from '@antv/g2'; import { sumBy } from 'lodash'; import { useCallback, useEffect, useMemo, useRef } from 'react'; diff --git a/web/src/pages/dataset/dataset/hooks.ts b/web/src/pages/dataset/dataset/hooks.ts index 68d3ef98b..b7e61bdf4 100644 --- a/web/src/pages/dataset/dataset/hooks.ts +++ b/web/src/pages/dataset/dataset/hooks.ts @@ -1,69 +1,11 @@ import { useSetModalState } from '@/hooks/common-hooks'; -import { useNextWebCrawl } from '@/hooks/document-hooks'; -import { useGetKnowledgeSearchParams } from '@/hooks/route-hook'; import { IDocumentInfo } from '@/interfaces/database/document'; import { formatDate, formatSecondsToHumanReadable } from '@/utils/date'; import { formatBytes } from '@/utils/file-util'; import { useCallback, useMemo, useState } from 'react'; -import { useNavigate } from 'umi'; import { ILogInfo } from '../process-log-modal'; import { RunningStatus } from './constant'; -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) => {}, []); - - return { linkToUploadPage, toChunk }; -}; - -export const useGetRowSelection = () => { - const [selectedRowKeys, setSelectedRowKeys] = useState([]); - - const rowSelection = { - selectedRowKeys, - onChange: (newSelectedRowKeys: React.Key[]) => { - setSelectedRowKeys(newSelectedRowKeys); - }, - }; - - return rowSelection; -}; - -export const useHandleWebCrawl = () => { - const { - visible: webCrawlUploadVisible, - hideModal: hideWebCrawlUploadModal, - showModal: showWebCrawlUploadModal, - } = useSetModalState(); - const { webCrawl, loading } = useNextWebCrawl(); - - const onWebCrawlUploadOk = useCallback( - async (name: string, url: string) => { - const ret = await webCrawl({ name, url }); - if (ret === 0) { - hideWebCrawlUploadModal(); - return 0; - } - return -1; - }, - [webCrawl, hideWebCrawlUploadModal], - ); - - return { - webCrawlUploadLoading: loading, - onWebCrawlUploadOk, - webCrawlUploadVisible, - hideWebCrawlUploadModal, - showWebCrawlUploadModal, - }; -}; - export const useShowLog = (documents: IDocumentInfo[]) => { const { showModal, hideModal, visible } = useSetModalState(); const [record, setRecord] = useState(); diff --git a/web/src/pages/datasets/use-display-owner.ts b/web/src/pages/datasets/use-display-owner.ts index 5e6304f43..a8b7a78d1 100644 --- a/web/src/pages/datasets/use-display-owner.ts +++ b/web/src/pages/datasets/use-display-owner.ts @@ -1,4 +1,4 @@ -import { useFetchTenantInfo } from '@/hooks/user-setting-hooks'; +import { useFetchTenantInfo } from '@/hooks/use-user-setting-request'; import { useCallback } from 'react'; export function useDisplayOwnerName() { diff --git a/web/src/pages/files/action-cell.tsx b/web/src/pages/files/action-cell.tsx index 490665c11..cb8ea0a4d 100644 --- a/web/src/pages/files/action-cell.tsx +++ b/web/src/pages/files/action-cell.tsx @@ -5,7 +5,7 @@ import { import { FileIcon } from '@/components/icon-font'; import NewDocumentLink from '@/components/new-document-link'; import { Button } from '@/components/ui/button'; -import { useDownloadFile } from '@/hooks/file-manager-hooks'; +import { useDownloadFile } from '@/hooks/use-file-request'; import { IFile } from '@/interfaces/database/file-manager'; import { cn } from '@/lib/utils'; import { diff --git a/web/src/pages/files/hooks.ts b/web/src/pages/files/hooks.ts index 171a25e29..026014d65 100644 --- a/web/src/pages/files/hooks.ts +++ b/web/src/pages/files/hooks.ts @@ -1,8 +1,5 @@ import { useSetModalState } from '@/hooks/common-hooks'; -import { - useConnectToKnowledge, - useRenameFile, -} from '@/hooks/file-manager-hooks'; +import { useConnectToKnowledge, useRenameFile } from '@/hooks/use-file-request'; import { IFile } from '@/interfaces/database/file-manager'; import { TableRowSelection } from 'antd/es/table/interface'; import { useCallback, useMemo, useState } from 'react'; diff --git a/web/src/pages/files/link-to-dataset-dialog.tsx b/web/src/pages/files/link-to-dataset-dialog.tsx index 02f805215..9be6cf14f 100644 --- a/web/src/pages/files/link-to-dataset-dialog.tsx +++ b/web/src/pages/files/link-to-dataset-dialog.tsx @@ -15,7 +15,7 @@ import { FormMessage, } from '@/components/ui/form'; import { MultiSelect } from '@/components/ui/multi-select'; -import { useSelectKnowledgeOptions } from '@/hooks/knowledge-hooks'; +import { useSelectKnowledgeOptions } from '@/hooks/use-knowledge-request'; import { IModalProps } from '@/interfaces/common'; import { zodResolver } from '@hookform/resolvers/zod'; import { Link2 } from 'lucide-react'; diff --git a/web/src/pages/files/move-dialog.tsx b/web/src/pages/files/move-dialog.tsx index e62cc9cd2..b02c728c7 100644 --- a/web/src/pages/files/move-dialog.tsx +++ b/web/src/pages/files/move-dialog.tsx @@ -10,7 +10,7 @@ import { DialogHeader, DialogTitle, } from '@/components/ui/dialog'; -import { useFetchPureFileList } from '@/hooks/file-manager-hooks'; +import { useFetchPureFileList } from '@/hooks/use-file-request'; import { IModalProps } from '@/interfaces/common'; import { IFile } from '@/interfaces/database/file-manager'; import { isEmpty } from 'lodash'; diff --git a/web/src/pages/login-next/index.tsx b/web/src/pages/login-next/index.tsx index 1db5e7fbf..7e8cbfc85 100644 --- a/web/src/pages/login-next/index.tsx +++ b/web/src/pages/login-next/index.tsx @@ -5,8 +5,8 @@ import { useLoginChannels, useLoginWithChannel, useRegister, -} from '@/hooks/login-hooks'; -import { useSystemConfig } from '@/hooks/system-hooks'; +} from '@/hooks/use-login-request'; +import { useSystemConfig } from '@/hooks/use-system-request'; import { rsaPsw } from '@/utils'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/web/src/pages/next-chats/chat/chat-box/multiple-chat-box.tsx b/web/src/pages/next-chats/chat/chat-box/multiple-chat-box.tsx index 828aaa0fd..53db05331 100644 --- a/web/src/pages/next-chats/chat/chat-box/multiple-chat-box.tsx +++ b/web/src/pages/next-chats/chat/chat-box/multiple-chat-box.tsx @@ -20,7 +20,7 @@ import { useGetChatSearchParams, useSetDialog, } from '@/hooks/use-chat-request'; -import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; +import { useFetchUserInfo } from '@/hooks/use-user-setting-request'; import { buildMessageUuidWithRole } from '@/utils/chat'; import { zodResolver } from '@hookform/resolvers/zod'; import { t } from 'i18next'; diff --git a/web/src/pages/next-chats/chat/chat-box/single-chat-box.tsx b/web/src/pages/next-chats/chat/chat-box/single-chat-box.tsx index 8d14eb82f..aac8f53d9 100644 --- a/web/src/pages/next-chats/chat/chat-box/single-chat-box.tsx +++ b/web/src/pages/next-chats/chat/chat-box/single-chat-box.tsx @@ -8,7 +8,7 @@ import { useFetchDialog, useGetChatSearchParams, } from '@/hooks/use-chat-request'; -import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; +import { useFetchUserInfo } from '@/hooks/use-user-setting-request'; import { buildMessageUuidWithRole } from '@/utils/chat'; import { useGetSendButtonDisabled, diff --git a/web/src/pages/next-chats/share/index.tsx b/web/src/pages/next-chats/share/index.tsx index 2ca8298a3..4d568ae40 100644 --- a/web/src/pages/next-chats/share/index.tsx +++ b/web/src/pages/next-chats/share/index.tsx @@ -5,7 +5,7 @@ import PdfSheet from '@/components/pdf-drawer'; import { useClickDrawer } from '@/components/pdf-drawer/hooks'; import { useSyncThemeFromParams } from '@/components/theme-provider'; import { MessageType, SharedFrom } from '@/constants/chat'; -import { useFetchFlowSSE } from '@/hooks/flow-hooks'; +import { useFetchFlowSSE } from '@/hooks/use-agent-request'; import { useFetchExternalChatInfo, useFetchNextConversationSSE, diff --git a/web/src/pages/next-search/document-preview-modal/index.tsx b/web/src/pages/next-search/document-preview-modal/index.tsx index 2019cfe7c..00da5a8d7 100644 --- a/web/src/pages/next-search/document-preview-modal/index.tsx +++ b/web/src/pages/next-search/document-preview-modal/index.tsx @@ -4,7 +4,7 @@ import { Modal } from '@/components/ui/modal/modal'; import { useGetChunkHighlights, useGetDocumentUrl, -} from '@/hooks/document-hooks'; +} from '@/hooks/use-document-request'; import { IModalProps } from '@/interfaces/common'; import { IReferenceChunk } from '@/interfaces/database/chat'; import { IChunk } from '@/interfaces/database/knowledge'; diff --git a/web/src/pages/next-search/hooks.ts b/web/src/pages/next-search/hooks.ts index f03b52826..885b72764 100644 --- a/web/src/pages/next-search/hooks.ts +++ b/web/src/pages/next-search/hooks.ts @@ -1,13 +1,15 @@ import message from '@/components/ui/message'; import { SharedFrom } from '@/constants/chat'; import { useSetModalState } from '@/hooks/common-hooks'; -import { useSelectTestingResult } from '@/hooks/knowledge-hooks'; import { useGetPaginationWithRouter, useSendMessageWithSse, } from '@/hooks/logic-hooks'; import { useSetPaginationParams } from '@/hooks/route-hook'; -import { useKnowledgeBaseId } from '@/hooks/use-knowledge-request'; +import { + useKnowledgeBaseId, + useSelectTestingResult, +} from '@/hooks/use-knowledge-request'; import { ResponsePostType } from '@/interfaces/database/base'; import { IAnswer } from '@/interfaces/database/chat'; import { ITestingResult } from '@/interfaces/database/knowledge'; diff --git a/web/src/pages/next-search/index.tsx b/web/src/pages/next-search/index.tsx index b869e8fc9..c9b5c909b 100644 --- a/web/src/pages/next-search/index.tsx +++ b/web/src/pages/next-search/index.tsx @@ -14,7 +14,7 @@ import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { useFetchTenantInfo, useFetchUserInfo, -} from '@/hooks/user-setting-hooks'; +} from '@/hooks/use-user-setting-request'; import { Send, Settings } from 'lucide-react'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/web/src/pages/next-search/markdown-content/index.tsx b/web/src/pages/next-search/markdown-content/index.tsx index 88107536c..00594e98f 100644 --- a/web/src/pages/next-search/markdown-content/index.tsx +++ b/web/src/pages/next-search/markdown-content/index.tsx @@ -14,7 +14,6 @@ import remarkGfm from 'remark-gfm'; import remarkMath from 'remark-math'; import { visitParents } from 'unist-util-visit-parents'; -import { useFetchDocumentThumbnailsByIds } from '@/hooks/document-hooks'; import { useTranslation } from 'react-i18next'; import 'katex/dist/katex.min.css'; // `rehype-katex` does not import the CSS for you @@ -33,6 +32,7 @@ import { PopoverContent, PopoverTrigger, } from '@/components/ui/popover'; +import { useFetchDocumentThumbnailsByIds } from '@/hooks/use-document-request'; import classNames from 'classnames'; import { omit } from 'lodash'; import { pipe } from 'lodash/fp'; diff --git a/web/src/pages/next-search/retrieval-documents/index.tsx b/web/src/pages/next-search/retrieval-documents/index.tsx index 0efeec303..f8f3d0399 100644 --- a/web/src/pages/next-search/retrieval-documents/index.tsx +++ b/web/src/pages/next-search/retrieval-documents/index.tsx @@ -19,7 +19,7 @@ import { useAllTestingResult, useChunkIsTesting, useSelectTestingResult, -} from '@/hooks/knowledge-hooks'; +} from '@/hooks/use-knowledge-request'; import { cn } from '@/lib/utils'; import { CheckIcon, ChevronDown, Files, XIcon } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; diff --git a/web/src/pages/next-search/search-setting.tsx b/web/src/pages/next-search/search-setting.tsx index 365c366cb..6b08bf184 100644 --- a/web/src/pages/next-search/search-setting.tsx +++ b/web/src/pages/next-search/search-setting.tsx @@ -29,12 +29,12 @@ import { RAGFlowSelect } from '@/components/ui/select'; import { Spin } from '@/components/ui/spin'; import { Switch } from '@/components/ui/switch'; import { Textarea } from '@/components/ui/textarea'; -import { useFetchKnowledgeList } from '@/hooks/knowledge-hooks'; +import { useFetchKnowledgeList } from '@/hooks/use-knowledge-request'; import { useComposeLlmOptionsByModelTypes, useSelectLlmOptionsByModelType, -} from '@/hooks/llm-hooks'; -import { useFetchTenantInfo } from '@/hooks/user-setting-hooks'; +} from '@/hooks/use-llm-request'; +import { useFetchTenantInfo } from '@/hooks/use-user-setting-request'; import { IKnowledge } from '@/interfaces/database/knowledge'; import { cn } from '@/lib/utils'; import { zodResolver } from '@hookform/resolvers/zod'; diff --git a/web/src/pages/profile-setting/sidebar/hooks.tsx b/web/src/pages/profile-setting/sidebar/hooks.tsx index e69bd6c3b..b50d1f52f 100644 --- a/web/src/pages/profile-setting/sidebar/hooks.tsx +++ b/web/src/pages/profile-setting/sidebar/hooks.tsx @@ -1,4 +1,4 @@ -import { useLogout } from '@/hooks/login-hooks'; +import { useLogout } from '@/hooks/use-login-request'; import { Routes } from '@/routes'; import { useCallback, useState } from 'react'; import { useNavigate } from 'umi'; diff --git a/web/src/pages/profile-setting/sidebar/index.tsx b/web/src/pages/profile-setting/sidebar/index.tsx index 4a1079874..98b62db91 100644 --- a/web/src/pages/profile-setting/sidebar/index.tsx +++ b/web/src/pages/profile-setting/sidebar/index.tsx @@ -1,8 +1,8 @@ import { RAGFlowAvatar } from '@/components/ragflow-avatar'; import ThemeToggle from '@/components/theme-toggle'; import { Button } from '@/components/ui/button'; -import { useLogout } from '@/hooks/login-hooks'; import { useSecondPathName } from '@/hooks/route-hook'; +import { useLogout } from '@/hooks/use-login-request'; import { useFetchUserInfo } from '@/hooks/use-user-setting-request'; import { cn } from '@/lib/utils'; import { Routes } from '@/routes'; diff --git a/web/src/pages/user-setting/setting-model/components/modal-card.tsx b/web/src/pages/user-setting/setting-model/components/modal-card.tsx index 3239a9470..3eac19d92 100644 --- a/web/src/pages/user-setting/setting-model/components/modal-card.tsx +++ b/web/src/pages/user-setting/setting-model/components/modal-card.tsx @@ -7,7 +7,7 @@ import { LlmIcon } from '@/components/svg-icon'; import { Button } from '@/components/ui/button'; import { Switch } from '@/components/ui/switch'; import { useSetModalState, useTranslate } from '@/hooks/common-hooks'; -import { LlmItem } from '@/hooks/llm-hooks'; +import { LlmItem } from '@/hooks/use-llm-request'; import { getRealModelName } from '@/utils/llm-util'; import { EditOutlined, SettingOutlined } from '@ant-design/icons'; import { ChevronsDown, ChevronsUp, Trash2 } from 'lucide-react'; diff --git a/web/src/pages/user-setting/setting-model/components/system-setting.tsx b/web/src/pages/user-setting/setting-model/components/system-setting.tsx index 398804fcd..dc6853e5d 100644 --- a/web/src/pages/user-setting/setting-model/components/system-setting.tsx +++ b/web/src/pages/user-setting/setting-model/components/system-setting.tsx @@ -12,7 +12,7 @@ import { useTranslate } from '@/hooks/common-hooks'; import { ISystemModelSettingSavingParams, useComposeLlmOptionsByModelTypes, -} from '@/hooks/llm-hooks'; +} from '@/hooks/use-llm-request'; import { CircleQuestionMark } from 'lucide-react'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useFetchSystemModelSettingOnMount } from '../hooks'; diff --git a/web/src/pages/user-setting/setting-model/components/un-add-model.tsx b/web/src/pages/user-setting/setting-model/components/un-add-model.tsx index 56e299b75..e73f32c95 100644 --- a/web/src/pages/user-setting/setting-model/components/un-add-model.tsx +++ b/web/src/pages/user-setting/setting-model/components/un-add-model.tsx @@ -3,7 +3,7 @@ import { LlmIcon } from '@/components/svg-icon'; import { Button } from '@/components/ui/button'; import { SearchInput } from '@/components/ui/input'; import { useTranslate } from '@/hooks/common-hooks'; -import { useSelectLlmList } from '@/hooks/llm-hooks'; +import { useSelectLlmList } from '@/hooks/use-llm-request'; import { Plus } from 'lucide-react'; import { FC, useMemo, useState } from 'react'; diff --git a/web/src/pages/user-setting/setting-model/components/used-model.tsx b/web/src/pages/user-setting/setting-model/components/used-model.tsx index 6555caafc..3973f6fb6 100644 --- a/web/src/pages/user-setting/setting-model/components/used-model.tsx +++ b/web/src/pages/user-setting/setting-model/components/used-model.tsx @@ -1,4 +1,4 @@ -import { LlmItem, useSelectLlmList } from '@/hooks/llm-hooks'; +import { LlmItem, useSelectLlmList } from '@/hooks/use-llm-request'; import { t } from 'i18next'; import { ModelProviderCard } from './modal-card'; diff --git a/web/src/pages/user-setting/setting-model/hooks.tsx b/web/src/pages/user-setting/setting-model/hooks.tsx index e50211299..4d0708a42 100644 --- a/web/src/pages/user-setting/setting-model/hooks.tsx +++ b/web/src/pages/user-setting/setting-model/hooks.tsx @@ -9,8 +9,8 @@ import { useSaveApiKey, useSaveTenantInfo, useSelectLlmOptionsByModelType, -} from '@/hooks/llm-hooks'; -import { useFetchTenantInfo } from '@/hooks/user-setting-hooks'; +} from '@/hooks/use-llm-request'; +import { useFetchTenantInfo } from '@/hooks/use-user-setting-request'; import { IAddLlmRequestBody } from '@/interfaces/request/llm'; import { getRealModelName } from '@/utils/llm-util'; import { useQueryClient } from '@tanstack/react-query'; diff --git a/web/src/pages/user-setting/setting-model/index.tsx b/web/src/pages/user-setting/setting-model/index.tsx index af398e33c..1e7086019 100644 --- a/web/src/pages/user-setting/setting-model/index.tsx +++ b/web/src/pages/user-setting/setting-model/index.tsx @@ -1,6 +1,6 @@ import Spotlight from '@/components/spotlight'; import { LLMFactory } from '@/constants/llm'; -import { LlmItem, useFetchMyLlmListDetailed } from '@/hooks/llm-hooks'; +import { LlmItem, useFetchMyLlmListDetailed } from '@/hooks/use-llm-request'; import { useCallback, useMemo } from 'react'; import { isLocalLlmFactory } from '../utils'; import SystemSetting from './components/system-setting'; diff --git a/web/src/pages/user-setting/setting-model/langfuse/index.tsx b/web/src/pages/user-setting/setting-model/langfuse/index.tsx index 5638a4d9f..83a2c8289 100644 --- a/web/src/pages/user-setting/setting-model/langfuse/index.tsx +++ b/web/src/pages/user-setting/setting-model/langfuse/index.tsx @@ -6,7 +6,7 @@ import { CardHeader, CardTitle, } from '@/components/ui/card'; -import { useFetchLangfuseConfig } from '@/hooks/user-setting-hooks'; +import { useFetchLangfuseConfig } from '@/hooks/use-user-setting-request'; import { Eye, Settings2 } from 'lucide-react'; import { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/web/src/pages/user-setting/setting-model/langfuse/langfuse-configuration-dialog.tsx b/web/src/pages/user-setting/setting-model/langfuse/langfuse-configuration-dialog.tsx index e0b3bfb02..54f5f881b 100644 --- a/web/src/pages/user-setting/setting-model/langfuse/langfuse-configuration-dialog.tsx +++ b/web/src/pages/user-setting/setting-model/langfuse/langfuse-configuration-dialog.tsx @@ -9,7 +9,7 @@ import { DialogTrigger, } from '@/components/ui/dialog'; import { LoadingButton } from '@/components/ui/loading-button'; -import { useDeleteLangfuseConfig } from '@/hooks/user-setting-hooks'; +import { useDeleteLangfuseConfig } from '@/hooks/use-user-setting-request'; import { IModalProps } from '@/interfaces/common'; import { ExternalLink, Trash2 } from 'lucide-react'; import { useCallback } from 'react'; diff --git a/web/src/pages/user-setting/setting-model/langfuse/langfuse-configuration-form.tsx b/web/src/pages/user-setting/setting-model/langfuse/langfuse-configuration-form.tsx index f2a7d6bfe..4a1e57a34 100644 --- a/web/src/pages/user-setting/setting-model/langfuse/langfuse-configuration-form.tsx +++ b/web/src/pages/user-setting/setting-model/langfuse/langfuse-configuration-form.tsx @@ -13,7 +13,7 @@ import { FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; -import { useFetchLangfuseConfig } from '@/hooks/user-setting-hooks'; +import { useFetchLangfuseConfig } from '@/hooks/use-user-setting-request'; import { IModalProps } from '@/interfaces/common'; import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/web/src/pages/user-setting/setting-model/langfuse/use-save-langfuse-configuration.tsx b/web/src/pages/user-setting/setting-model/langfuse/use-save-langfuse-configuration.tsx index 4e4a3f987..f2e1c66c0 100644 --- a/web/src/pages/user-setting/setting-model/langfuse/use-save-langfuse-configuration.tsx +++ b/web/src/pages/user-setting/setting-model/langfuse/use-save-langfuse-configuration.tsx @@ -1,5 +1,5 @@ import { useSetModalState } from '@/hooks/common-hooks'; -import { useSetLangfuseConfig } from '@/hooks/user-setting-hooks'; +import { useSetLangfuseConfig } from '@/hooks/use-user-setting-request'; import { ISetLangfuseConfigRequestBody } from '@/interfaces/request/system'; import { useCallback } from 'react'; diff --git a/web/src/pages/user-setting/setting-model/modal/system-model-setting-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/system-model-setting-modal/index.tsx index 4d82f5179..110a3317c 100644 --- a/web/src/pages/user-setting/setting-model/modal/system-model-setting-modal/index.tsx +++ b/web/src/pages/user-setting/setting-model/modal/system-model-setting-modal/index.tsx @@ -4,7 +4,7 @@ import { useTranslate } from '@/hooks/common-hooks'; import { ISystemModelSettingSavingParams, useComposeLlmOptionsByModelTypes, -} from '@/hooks/llm-hooks'; +} from '@/hooks/use-llm-request'; import { Form, Modal, Select } from 'antd'; import { useEffect } from 'react'; import { useFetchSystemModelSettingOnMount } from '../../hooks'; diff --git a/web/src/pages/user-setting/setting-team/hooks.ts b/web/src/pages/user-setting/setting-team/hooks.ts index 0cc65add2..81c7ed8e9 100644 --- a/web/src/pages/user-setting/setting-team/hooks.ts +++ b/web/src/pages/user-setting/setting-team/hooks.ts @@ -4,7 +4,7 @@ import { useAgreeTenant, useDeleteTenantUser, useFetchUserInfo, -} from '@/hooks/user-setting-hooks'; +} from '@/hooks/use-user-setting-request'; import { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/web/src/pages/user-setting/setting-team/index.tsx b/web/src/pages/user-setting/setting-team/index.tsx index 28d21f8ae..374400c74 100644 --- a/web/src/pages/user-setting/setting-team/index.tsx +++ b/web/src/pages/user-setting/setting-team/index.tsx @@ -3,7 +3,7 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { useFetchUserInfo, useListTenantUser, -} from '@/hooks/user-setting-hooks'; +} from '@/hooks/use-user-setting-request'; import { useTranslation } from 'react-i18next'; import Spotlight from '@/components/spotlight'; diff --git a/web/src/pages/user-setting/setting-team/tenant-table.tsx b/web/src/pages/user-setting/setting-team/tenant-table.tsx index 56e059158..8c6e54630 100644 --- a/web/src/pages/user-setting/setting-team/tenant-table.tsx +++ b/web/src/pages/user-setting/setting-team/tenant-table.tsx @@ -8,7 +8,10 @@ import { TableHeader, TableRow, } from '@/components/ui/table'; -import { useFetchUserInfo, useListTenant } from '@/hooks/user-setting-hooks'; +import { + useFetchUserInfo, + useListTenant, +} from '@/hooks/use-user-setting-request'; import { formatDate } from '@/utils/date'; import { ArrowDown, ArrowUp, ArrowUpDown, LogOut } from 'lucide-react'; import { useMemo, useState } from 'react'; diff --git a/web/src/pages/user-setting/setting-team/user-table.tsx b/web/src/pages/user-setting/setting-team/user-table.tsx index 18664c945..840e08a89 100644 --- a/web/src/pages/user-setting/setting-team/user-table.tsx +++ b/web/src/pages/user-setting/setting-team/user-table.tsx @@ -13,7 +13,7 @@ import { TableHeader, TableRow, } from '@/components/ui/table'; -import { useListTenantUser } from '@/hooks/user-setting-hooks'; +import { useListTenantUser } from '@/hooks/use-user-setting-request'; import { formatDate } from '@/utils/date'; import { upperFirst } from 'lodash'; import { ArrowDown, ArrowUp, ArrowUpDown, Trash2 } from 'lucide-react'; diff --git a/web/src/pages/user-setting/sidebar/hooks.tsx b/web/src/pages/user-setting/sidebar/hooks.tsx index 47415a4ea..f5c5ed7ea 100644 --- a/web/src/pages/user-setting/sidebar/hooks.tsx +++ b/web/src/pages/user-setting/sidebar/hooks.tsx @@ -1,4 +1,4 @@ -import { useLogout } from '@/hooks/login-hooks'; +import { useLogout } from '@/hooks/use-login-request'; import { Routes } from '@/routes'; import { useCallback, useEffect, useState } from 'react'; import { useLocation, useNavigate } from 'umi'; diff --git a/web/src/pages/user-setting/sidebar/index.tsx b/web/src/pages/user-setting/sidebar/index.tsx index 570f64b69..476bf9ce6 100644 --- a/web/src/pages/user-setting/sidebar/index.tsx +++ b/web/src/pages/user-setting/sidebar/index.tsx @@ -3,8 +3,8 @@ import { RAGFlowAvatar } from '@/components/ragflow-avatar'; import ThemeToggle from '@/components/theme-toggle'; import { Button } from '@/components/ui/button'; import { Domain } from '@/constants/common'; -import { useLogout } from '@/hooks/login-hooks'; import { useSecondPathName } from '@/hooks/route-hook'; +import { useLogout } from '@/hooks/use-login-request'; import { useFetchSystemVersion, useFetchUserInfo, diff --git a/web/src/services/flow-service.ts b/web/src/services/flow-service.ts deleted file mode 100644 index 49ed2faf0..000000000 --- a/web/src/services/flow-service.ts +++ /dev/null @@ -1,103 +0,0 @@ -import api from '@/utils/api'; -import registerServer from '@/utils/register-server'; -import request from '@/utils/request'; - -const { - getCanvas, - getCanvasSSE, - setCanvas, - getListVersion, - getVersion, - listCanvas, - resetCanvas, - removeCanvas, - runCanvas, - listTemplates, - testDbConnect, - getInputElements, - debug, - listCanvasTeam, - settingCanvas, - uploadCanvasFile, - trace, - inputForm, -} = api; - -const methods = { - getCanvas: { - url: getCanvas, - method: 'get', - }, - getCanvasSSE: { - url: getCanvasSSE, - method: 'get', - }, - setCanvas: { - url: setCanvas, - method: 'post', - }, - getListVersion: { - url: getListVersion, - method: 'get', - }, - getVersion: { - url: getVersion, - method: 'get', - }, - listCanvas: { - url: listCanvas, - method: 'get', - }, - resetCanvas: { - url: resetCanvas, - method: 'post', - }, - removeCanvas: { - url: removeCanvas, - method: 'post', - }, - runCanvas: { - url: runCanvas, - method: 'post', - }, - listTemplates: { - url: listTemplates, - method: 'get', - }, - testDbConnect: { - url: testDbConnect, - method: 'post', - }, - getInputElements: { - url: getInputElements, - method: 'get', - }, - debugSingle: { - url: debug, - method: 'post', - }, - listCanvasTeam: { - url: listCanvasTeam, - method: 'get', - }, - settingCanvas: { - url: settingCanvas, - method: 'post', - }, - uploadCanvasFile: { - url: uploadCanvasFile, - method: 'post', - }, - trace: { - url: trace, - method: 'get', - }, - inputForm: { - url: inputForm, - method: 'get', - }, -} as const; - -const flowService = registerServer(methods, request); - -export default flowService; diff --git a/web/src/utils/api.ts b/web/src/utils/api.ts index a0939155b..2b3f78373 100644 --- a/web/src/utils/api.ts +++ b/web/src/utils/api.ts @@ -107,7 +107,7 @@ export default { document_upload: `${api_host}/document/upload`, web_crawl: `${api_host}/document/web_crawl`, document_infos: `${api_host}/document/infos`, - upload_and_parse: (id: string) => `${api_host}/document/upload_info`, + upload_and_parse: `${api_host}/document/upload_info`, parse: `${api_host}/document/parse`, setMeta: `${api_host}/document/set_meta`, get_dataset_filter: `${api_host}/document/filter`, @@ -170,7 +170,7 @@ export default { listTemplates: `${api_host}/canvas/templates`, listCanvas: `${api_host}/canvas/list`, getCanvas: `${api_host}/canvas/get`, - getCanvasSSE: `${api_host}/canvas/getsse`, + getCanvasSSE: (canvasId: string) => `${api_host}/canvas/getsse/${canvasId}`, removeCanvas: `${api_host}/canvas/rm`, setCanvas: `${api_host}/canvas/set`, settingCanvas: `${api_host}/canvas/setting`,