Spaces:
Paused
Paused
| import { | |
| useCreateChunk, | |
| useDeleteChunk, | |
| useSelectChunkList, | |
| } from '@/hooks/chunk-hooks'; | |
| import { useSetModalState, useShowDeleteConfirm } from '@/hooks/common-hooks'; | |
| import { useGetKnowledgeSearchParams } from '@/hooks/route-hook'; | |
| import { IChunk } from '@/interfaces/database/knowledge'; | |
| import { buildChunkHighlights } from '@/utils/document-util'; | |
| import { useCallback, useMemo, useState } from 'react'; | |
| import { IHighlight } from 'react-pdf-highlighter'; | |
| import { ChunkTextMode } from './constant'; | |
| export const useHandleChunkCardClick = () => { | |
| const [selectedChunkId, setSelectedChunkId] = useState<string>(''); | |
| const handleChunkCardClick = useCallback((chunkId: string) => { | |
| setSelectedChunkId(chunkId); | |
| }, []); | |
| return { handleChunkCardClick, selectedChunkId }; | |
| }; | |
| export const useGetSelectedChunk = (selectedChunkId: string) => { | |
| const data = useSelectChunkList(); | |
| return ( | |
| data?.data?.find((x) => x.chunk_id === selectedChunkId) ?? ({} as IChunk) | |
| ); | |
| }; | |
| export const useGetChunkHighlights = (selectedChunkId: string) => { | |
| const [size, setSize] = useState({ width: 849, height: 1200 }); | |
| const selectedChunk: IChunk = useGetSelectedChunk(selectedChunkId); | |
| const highlights: IHighlight[] = useMemo(() => { | |
| return buildChunkHighlights(selectedChunk, size); | |
| }, [selectedChunk, size]); | |
| const setWidthAndHeight = useCallback((width: number, height: number) => { | |
| setSize((pre) => { | |
| if (pre.height !== height || pre.width !== width) { | |
| return { height, width }; | |
| } | |
| return pre; | |
| }); | |
| }, []); | |
| return { highlights, setWidthAndHeight }; | |
| }; | |
| // Switch chunk text to be fully displayed or ellipse | |
| export const useChangeChunkTextMode = () => { | |
| const [textMode, setTextMode] = useState<ChunkTextMode>(ChunkTextMode.Full); | |
| const changeChunkTextMode = useCallback((mode: ChunkTextMode) => { | |
| setTextMode(mode); | |
| }, []); | |
| return { textMode, changeChunkTextMode }; | |
| }; | |
| export const useDeleteChunkByIds = (): { | |
| removeChunk: (chunkIds: string[], documentId: string) => Promise<number>; | |
| } => { | |
| const { deleteChunk } = useDeleteChunk(); | |
| const showDeleteConfirm = useShowDeleteConfirm(); | |
| const removeChunk = useCallback( | |
| (chunkIds: string[], documentId: string) => () => { | |
| return deleteChunk({ chunkIds, documentId }); | |
| }, | |
| [deleteChunk], | |
| ); | |
| const onRemoveChunk = useCallback( | |
| (chunkIds: string[], documentId: string): Promise<number> => { | |
| return showDeleteConfirm({ onOk: removeChunk(chunkIds, documentId) }); | |
| }, | |
| [removeChunk, showDeleteConfirm], | |
| ); | |
| return { | |
| removeChunk: onRemoveChunk, | |
| }; | |
| }; | |
| export const useUpdateChunk = () => { | |
| const [chunkId, setChunkId] = useState<string | undefined>(''); | |
| const { | |
| visible: chunkUpdatingVisible, | |
| hideModal: hideChunkUpdatingModal, | |
| showModal, | |
| } = useSetModalState(); | |
| const { createChunk, loading } = useCreateChunk(); | |
| const { documentId } = useGetKnowledgeSearchParams(); | |
| const onChunkUpdatingOk = useCallback( | |
| async ({ content, keywords }: { content: string; keywords: string }) => { | |
| const retcode = await createChunk({ | |
| content_with_weight: content, | |
| doc_id: documentId, | |
| chunk_id: chunkId, | |
| important_kwd: keywords, // keywords | |
| }); | |
| if (retcode === 0) { | |
| hideChunkUpdatingModal(); | |
| } | |
| }, | |
| [createChunk, hideChunkUpdatingModal, chunkId, documentId], | |
| ); | |
| const handleShowChunkUpdatingModal = useCallback( | |
| async (id?: string) => { | |
| setChunkId(id); | |
| showModal(); | |
| }, | |
| [showModal], | |
| ); | |
| return { | |
| chunkUpdatingLoading: loading, | |
| onChunkUpdatingOk, | |
| chunkUpdatingVisible, | |
| hideChunkUpdatingModal, | |
| showChunkUpdatingModal: handleShowChunkUpdatingModal, | |
| chunkId, | |
| documentId, | |
| }; | |
| }; | |