Skip to content

Commit aa1f605

Browse files
authored
fix(kb): auto-refresh documents after connector sync and remove redundant invalidations (#3601)
1 parent 8906439 commit aa1f605

File tree

4 files changed

+20
-44
lines changed

4 files changed

+20
-44
lines changed

apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import { startTransition, useCallback, useEffect, useMemo, useRef, useState } from 'react'
44
import { createLogger } from '@sim/logger'
5-
import { useQueryClient } from '@tanstack/react-query'
65
import { ChevronDown, ChevronUp, FileText, Pencil, Tag } from 'lucide-react'
76
import { useParams, useRouter, useSearchParams } from 'next/navigation'
87
import {
@@ -41,7 +40,6 @@ import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/provide
4140
import { useContextMenu } from '@/app/workspace/[workspaceId]/w/components/sidebar/hooks'
4241
import { useDocument, useDocumentChunks, useKnowledgeBase } from '@/hooks/kb/use-knowledge'
4342
import {
44-
knowledgeKeys,
4543
useBulkChunkOperation,
4644
useDeleteDocument,
4745
useDocumentChunkSearchQuery,
@@ -137,7 +135,6 @@ export function Document({
137135
knowledgeBaseName,
138136
documentName,
139137
}: DocumentProps) {
140-
const queryClient = useQueryClient()
141138
const { workspaceId } = useParams()
142139
const router = useRouter()
143140
const searchParams = useSearchParams()
@@ -704,9 +701,7 @@ export function Document({
704701
},
705702
{
706703
onSuccess: (result) => {
707-
if (operation === 'delete' || result.errorCount > 0) {
708-
refreshChunks()
709-
} else {
704+
if (operation !== 'delete' && result.errorCount === 0) {
710705
chunks.forEach((chunk) => {
711706
updateChunk(chunk.id, { enabled: operation === 'enable' })
712707
})
@@ -789,12 +784,6 @@ export function Document({
789784
setContextMenuChunk(null)
790785
}, [closeContextMenu])
791786

792-
const handleDocumentTagsUpdate = useCallback(() => {
793-
queryClient.invalidateQueries({
794-
queryKey: knowledgeKeys.document(knowledgeBaseId, documentId),
795-
})
796-
}, [knowledgeBaseId, documentId, queryClient])
797-
798787
const prevDocumentIdRef = useRef<string>(documentId)
799788
const isNavigatingToNewDoc = prevDocumentIdRef.current !== documentId
800789

@@ -1121,7 +1110,6 @@ export function Document({
11211110
knowledgeBaseId={knowledgeBaseId}
11221111
documentId={documentId}
11231112
documentData={documentData}
1124-
onDocumentUpdate={handleDocumentTagsUpdate}
11251113
/>
11261114

11271115
<DeleteChunkModal

apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,13 @@ export function KnowledgeBase({
271271
refresh: refreshKnowledgeBase,
272272
} = useKnowledgeBase(id)
273273

274+
const { data: connectors = [], isLoading: isLoadingConnectors } = useConnectorList(id)
275+
const hasSyncingConnectors = connectors.some((c) => c.status === 'syncing')
276+
const hasSyncingConnectorsRef = useRef(hasSyncingConnectors)
277+
useEffect(() => {
278+
hasSyncingConnectorsRef.current = hasSyncingConnectors
279+
}, [hasSyncingConnectors])
280+
274281
const {
275282
documents,
276283
pagination,
@@ -292,24 +299,24 @@ export function KnowledgeBase({
292299
const hasPending = data?.documents?.some(
293300
(doc) => doc.processingStatus === 'pending' || doc.processingStatus === 'processing'
294301
)
295-
return hasPending ? 3000 : false
302+
if (hasPending) return 3000
303+
if (hasSyncingConnectorsRef.current) return 5000
304+
return false
296305
},
297306
enabledFilter,
298307
tagFilters: activeTagFilters.length > 0 ? activeTagFilters : undefined,
299308
})
300309

301310
const { tagDefinitions } = useKnowledgeBaseTagDefinitions(id)
302311

303-
const { data: connectors = [], isLoading: isLoadingConnectors } = useConnectorList(id)
304-
const hasSyncingConnectors = connectors.some((c) => c.status === 'syncing')
305-
306312
const prevHadSyncingRef = useRef(false)
307313
useEffect(() => {
308314
if (prevHadSyncingRef.current && !hasSyncingConnectors) {
309315
refreshKnowledgeBase()
316+
refreshDocuments()
310317
}
311318
prevHadSyncingRef.current = hasSyncingConnectors
312-
}, [hasSyncingConnectors, refreshKnowledgeBase])
319+
}, [hasSyncingConnectors, refreshKnowledgeBase, refreshDocuments])
313320

314321
const router = useRouter()
315322

@@ -406,7 +413,6 @@ export function KnowledgeBase({
406413
},
407414
{
408415
onSuccess: () => {
409-
refreshDocuments()
410416
logger.info(`Document retry initiated successfully for: ${docId}`)
411417
},
412418
onError: (err) => {
@@ -480,7 +486,6 @@ export function KnowledgeBase({
480486
{ knowledgeBaseId: id, documentId: documentToDelete },
481487
{
482488
onSuccess: () => {
483-
refreshDocuments()
484489
setSelectedDocuments((prev) => {
485490
const newSet = new Set(prev)
486491
newSet.delete(documentToDelete)
@@ -575,7 +580,6 @@ export function KnowledgeBase({
575580
logger.info(`Successfully enabled ${result.successCount} documents`)
576581
setSelectedDocuments(new Set())
577582
setIsSelectAllMode(false)
578-
refreshDocuments()
579583
},
580584
}
581585
)
@@ -623,7 +627,6 @@ export function KnowledgeBase({
623627
logger.info(`Successfully disabled ${result.successCount} documents`)
624628
setSelectedDocuments(new Set())
625629
setIsSelectAllMode(false)
626-
refreshDocuments()
627630
},
628631
}
629632
)
@@ -671,7 +674,6 @@ export function KnowledgeBase({
671674
{
672675
onSuccess: (result) => {
673676
logger.info(`Successfully deleted ${result.successCount} documents`)
674-
refreshDocuments()
675677
setSelectedDocuments(new Set())
676678
setIsSelectAllMode(false)
677679
},
@@ -696,7 +698,6 @@ export function KnowledgeBase({
696698
{
697699
onSuccess: (result) => {
698700
logger.info(`Successfully deleted ${result.successCount} documents`)
699-
refreshDocuments()
700701
setSelectedDocuments(new Set())
701702
},
702703
onSettled: () => {

apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/base-tags-modal/base-tags-modal.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ interface BaseTagsModalProps {
9191
}
9292

9393
export function BaseTagsModal({ open, onOpenChange, knowledgeBaseId }: BaseTagsModalProps) {
94-
const { tagDefinitions: kbTagDefinitions, fetchTagDefinitions: refreshTagDefinitions } =
95-
useKnowledgeBaseTagDefinitions(knowledgeBaseId)
94+
const { tagDefinitions: kbTagDefinitions } = useKnowledgeBaseTagDefinitions(knowledgeBaseId)
9695

9796
const createTagMutation = useCreateTagDefinition()
9897
const deleteTagMutation = useDeleteTagDefinition()
@@ -219,7 +218,7 @@ export function BaseTagsModal({ open, onOpenChange, knowledgeBaseId }: BaseTagsM
219218
fieldType: createTagForm.fieldType,
220219
})
221220

222-
await Promise.all([refreshTagDefinitions(), fetchTagUsage()])
221+
await fetchTagUsage()
223222

224223
setCreateTagForm({
225224
displayName: '',
@@ -240,7 +239,7 @@ export function BaseTagsModal({ open, onOpenChange, knowledgeBaseId }: BaseTagsM
240239
tagDefinitionId: selectedTag.id,
241240
})
242241

243-
await Promise.all([refreshTagDefinitions(), fetchTagUsage()])
242+
await fetchTagUsage()
244243

245244
setDeleteTagDialogOpen(false)
246245
setSelectedTag(null)

apps/sim/hooks/queries/kb/connectors.ts

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ export function useCreateConnector() {
153153
mutationFn: createConnector,
154154
onSuccess: (_, { knowledgeBaseId }) => {
155155
queryClient.invalidateQueries({
156-
queryKey: connectorKeys.list(knowledgeBaseId),
156+
queryKey: knowledgeKeys.detail(knowledgeBaseId),
157157
})
158158
},
159159
})
@@ -198,12 +198,9 @@ export function useUpdateConnector() {
198198

199199
return useMutation({
200200
mutationFn: updateConnector,
201-
onSuccess: (_, { knowledgeBaseId, connectorId }) => {
202-
queryClient.invalidateQueries({
203-
queryKey: connectorKeys.list(knowledgeBaseId),
204-
})
201+
onSuccess: (_, { knowledgeBaseId }) => {
205202
queryClient.invalidateQueries({
206-
queryKey: connectorKeys.detail(knowledgeBaseId, connectorId),
203+
queryKey: connectorKeys.all(knowledgeBaseId),
207204
})
208205
},
209206
})
@@ -239,9 +236,6 @@ export function useDeleteConnector() {
239236
return useMutation({
240237
mutationFn: deleteConnector,
241238
onSuccess: (_, { knowledgeBaseId }) => {
242-
queryClient.invalidateQueries({
243-
queryKey: connectorKeys.list(knowledgeBaseId),
244-
})
245239
queryClient.invalidateQueries({
246240
queryKey: knowledgeKeys.detail(knowledgeBaseId),
247241
})
@@ -270,13 +264,7 @@ export function useTriggerSync() {
270264

271265
return useMutation({
272266
mutationFn: triggerSync,
273-
onSuccess: (_, { knowledgeBaseId, connectorId }) => {
274-
queryClient.invalidateQueries({
275-
queryKey: connectorKeys.list(knowledgeBaseId),
276-
})
277-
queryClient.invalidateQueries({
278-
queryKey: connectorKeys.detail(knowledgeBaseId, connectorId),
279-
})
267+
onSuccess: (_, { knowledgeBaseId }) => {
280268
queryClient.invalidateQueries({
281269
queryKey: knowledgeKeys.detail(knowledgeBaseId),
282270
})

0 commit comments

Comments
 (0)