| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import { useOneNamespaceEffectsLoading } from '@/hooks/store-hooks';
- 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 };
- };
|