balibabu
fix: filter knowledge list by keywords and clear the selected file list after the file is uploaded successfully and add ellipsis pattern to chunk list (#628)
8e109c7
import { useOneNamespaceEffectsLoading } from '@/hooks/storeHooks'; | |
import { IChunk, IKnowledgeFile } from '@/interfaces/database/knowledge'; | |
import { buildChunkHighlights } from '@/utils/documentUtils'; | |
import { useCallback, useMemo, useState } from 'react'; | |
import { IHighlight } from 'react-pdf-highlighter'; | |
import { useSelector } from 'umi'; | |
import { ChunkTextMode } from './constant'; | |
export const useSelectDocumentInfo = () => { | |
const documentInfo: IKnowledgeFile = useSelector( | |
(state: any) => state.chunkModel.documentInfo, | |
); | |
return documentInfo; | |
}; | |
export const useSelectChunkList = () => { | |
const chunkList: IChunk[] = useSelector( | |
(state: any) => state.chunkModel.data, | |
); | |
return chunkList; | |
}; | |
export const useHandleChunkCardClick = () => { | |
const [selectedChunkId, setSelectedChunkId] = useState<string>(''); | |
const handleChunkCardClick = useCallback((chunkId: string) => { | |
setSelectedChunkId(chunkId); | |
}, []); | |
return { handleChunkCardClick, selectedChunkId }; | |
}; | |
export const useGetSelectedChunk = (selectedChunkId: string) => { | |
const chunkList: IChunk[] = useSelectChunkList(); | |
return ( | |
chunkList.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 = (width: number, height: number) => { | |
setSize((pre) => { | |
if (pre.height !== height || pre.width !== width) { | |
return { height, width }; | |
} | |
return pre; | |
}); | |
}; | |
return { highlights, setWidthAndHeight }; | |
}; | |
export const useSelectChunkListLoading = () => { | |
return useOneNamespaceEffectsLoading('chunkModel', [ | |
'create_hunk', | |
'chunk_list', | |
'switch_chunk', | |
]); | |
}; | |
// 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 }; | |
}; | |