@@ -35,7 +35,7 @@ import {
3535import { Input } from '@/components/ui/input'
3636import { SearchHighlight } from '@/components/ui/search-highlight'
3737import { Skeleton } from '@/components/ui/skeleton'
38- import type { ChunkData , DocumentData } from '@/lib/knowledge/types'
38+ import type { ChunkData } from '@/lib/knowledge/types'
3939import {
4040 CreateChunkModal ,
4141 DeleteChunkModal ,
@@ -45,11 +45,7 @@ import {
4545import { ActionBar } from '@/app/workspace/[workspaceId]/knowledge/[id]/components'
4646import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/providers/workspace-permissions-provider'
4747import { knowledgeKeys } from '@/hooks/queries/knowledge'
48- import {
49- useCachedDocuments ,
50- useCachedKnowledgeBase ,
51- useDocumentChunks ,
52- } from '@/hooks/use-knowledge'
48+ import { useDocument , useDocumentChunks , useKnowledgeBase } from '@/hooks/use-knowledge'
5349
5450const logger = createLogger ( 'Document' )
5551
@@ -271,15 +267,12 @@ export function Document({
271267 const currentPageFromURL = Number . parseInt ( searchParams . get ( 'page' ) || '1' , 10 )
272268 const userPermissions = useUserPermissionsContext ( )
273269
274- const cachedKnowledgeBase = useCachedKnowledgeBase ( knowledgeBaseId )
275- const cachedDocumentsData = useCachedDocuments ( knowledgeBaseId )
276-
277- /**
278- * Get cached document synchronously for immediate render
279- */
280- const getInitialCachedDocument = useCallback ( ( ) => {
281- return cachedDocumentsData ?. documents ?. find ( ( d : DocumentData ) => d . id === documentId ) || null
282- } , [ cachedDocumentsData , documentId ] )
270+ const { knowledgeBase } = useKnowledgeBase ( knowledgeBaseId )
271+ const {
272+ document : documentData ,
273+ isLoading : isLoadingDocument ,
274+ error : documentError ,
275+ } = useDocument ( knowledgeBaseId , documentId )
283276
284277 const [ showTagsModal , setShowTagsModal ] = useState ( false )
285278
@@ -298,9 +291,7 @@ export function Document({
298291 refreshChunks : initialRefreshChunks ,
299292 updateChunk : initialUpdateChunk ,
300293 isFetching : isFetchingChunks ,
301- } = useDocumentChunks ( knowledgeBaseId , documentId , currentPageFromURL , '' , {
302- enableClientSearch : false ,
303- } )
294+ } = useDocumentChunks ( knowledgeBaseId , documentId , currentPageFromURL )
304295
305296 const [ searchResults , setSearchResults ] = useState < ChunkData [ ] > ( [ ] )
306297 const [ isLoadingSearch , setIsLoadingSearch ] = useState ( false )
@@ -436,67 +427,16 @@ export function Document({
436427 const refreshChunks = showingSearch ? async ( ) => { } : initialRefreshChunks
437428 const updateChunk = showingSearch ? ( id : string , updates : any ) => { } : initialUpdateChunk
438429
439- const initialCachedDoc = getInitialCachedDocument ( )
440- const [ documentData , setDocumentData ] = useState < DocumentData | null > ( initialCachedDoc )
441- const [ isLoadingDocument , setIsLoadingDocument ] = useState ( ! initialCachedDoc )
442- const [ error , setError ] = useState < string | null > ( null )
443-
444430 const [ isCreateChunkModalOpen , setIsCreateChunkModalOpen ] = useState ( false )
445431 const [ chunkToDelete , setChunkToDelete ] = useState < ChunkData | null > ( null )
446432 const [ isDeleteModalOpen , setIsDeleteModalOpen ] = useState ( false )
447433 const [ isBulkOperating , setIsBulkOperating ] = useState ( false )
448434 const [ showDeleteDocumentDialog , setShowDeleteDocumentDialog ] = useState ( false )
449435 const [ isDeletingDocument , setIsDeletingDocument ] = useState ( false )
450436
451- const combinedError = error || searchError || initialError
437+ const combinedError = documentError || searchError || initialError
452438
453- useEffect ( ( ) => {
454- const fetchDocument = async ( ) => {
455- const cachedDoc = cachedDocumentsData ?. documents ?. find (
456- ( d : DocumentData ) => d . id === documentId
457- )
458-
459- if ( cachedDoc ) {
460- setDocumentData ( cachedDoc )
461- setIsLoadingDocument ( false )
462- return
463- }
464-
465- setIsLoadingDocument ( true )
466- setError ( null )
467-
468- try {
469- const response = await fetch ( `/api/knowledge/${ knowledgeBaseId } /documents/${ documentId } ` )
470-
471- if ( ! response . ok ) {
472- if ( response . status === 404 ) {
473- throw new Error ( 'Document not found' )
474- }
475- throw new Error ( `Failed to fetch document: ${ response . statusText } ` )
476- }
477-
478- const result = await response . json ( )
479-
480- if ( result . success ) {
481- setDocumentData ( result . data )
482- } else {
483- throw new Error ( result . error || 'Failed to fetch document' )
484- }
485- } catch ( err ) {
486- logger . error ( 'Error fetching document:' , err )
487- setError ( err instanceof Error ? err . message : 'An error occurred' )
488- } finally {
489- setIsLoadingDocument ( false )
490- }
491- }
492-
493- if ( knowledgeBaseId && documentId ) {
494- fetchDocument ( )
495- }
496- } , [ knowledgeBaseId , documentId , cachedDocumentsData ] )
497-
498- const effectiveKnowledgeBaseName =
499- cachedKnowledgeBase ?. name || knowledgeBaseName || 'Knowledge Base'
439+ const effectiveKnowledgeBaseName = knowledgeBase ?. name || knowledgeBaseName || 'Knowledge Base'
500440 const effectiveDocumentName = documentData ?. filename || documentName || 'Document'
501441
502442 const breadcrumbItems = [
@@ -702,15 +642,11 @@ export function Document({
702642
703643 const isAllSelected = displayChunks . length > 0 && selectedChunks . size === displayChunks . length
704644
705- const handleDocumentTagsUpdate = useCallback (
706- ( tagData : Record < string , string > ) => {
707- setDocumentData ( ( prev ) => ( prev ? { ...prev , ...tagData } : null ) )
708- queryClient . invalidateQueries ( {
709- queryKey : knowledgeKeys . detail ( knowledgeBaseId ) ,
710- } )
711- } ,
712- [ knowledgeBaseId , queryClient ]
713- )
645+ const handleDocumentTagsUpdate = useCallback ( ( ) => {
646+ queryClient . invalidateQueries ( {
647+ queryKey : knowledgeKeys . document ( knowledgeBaseId , documentId ) ,
648+ } )
649+ } , [ knowledgeBaseId , documentId , queryClient ] )
714650
715651 const prevDocumentIdRef = useRef < string > ( documentId )
716652 const isNavigatingToNewDoc = prevDocumentIdRef . current !== documentId
@@ -1139,7 +1075,7 @@ export function Document({
11391075 onNavigateToChunk = { ( chunk : ChunkData ) => {
11401076 setSelectedChunk ( chunk )
11411077 } }
1142- maxChunkSize = { cachedKnowledgeBase ?. chunkingConfig ?. maxSize }
1078+ maxChunkSize = { knowledgeBase ?. chunkingConfig ?. maxSize }
11431079 onNavigateToPage = { async ( page : number , selectChunk : 'first' | 'last' ) => {
11441080 await goToPage ( page )
11451081
0 commit comments