Skip to content

Commit 59b68d2

Browse files
committed
fix(knowledge): infinite render on 0 kbs
1 parent c7ee74e commit 59b68d2

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

apps/sim/hooks/use-knowledge.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ export function useKnowledgeBasesList() {
9898
getKnowledgeBasesList,
9999
knowledgeBasesList,
100100
loadingKnowledgeBasesList,
101+
knowledgeBasesListLoaded,
101102
addKnowledgeBase,
102103
removeKnowledgeBase,
103104
clearKnowledgeBasesList,
@@ -108,7 +109,8 @@ export function useKnowledgeBasesList() {
108109
const maxRetries = 3
109110

110111
useEffect(() => {
111-
if (knowledgeBasesList.length > 0 || loadingKnowledgeBasesList) return
112+
// Only load if we haven't loaded before AND we're not currently loading
113+
if (knowledgeBasesListLoaded || loadingKnowledgeBasesList) return
112114

113115
let isMounted = true
114116
let retryTimeoutId: NodeJS.Timeout | null = null
@@ -160,7 +162,7 @@ export function useKnowledgeBasesList() {
160162
clearTimeout(retryTimeoutId)
161163
}
162164
}
163-
}, [knowledgeBasesList.length, loadingKnowledgeBasesList]) // Removed getKnowledgeBasesList from dependencies
165+
}, [knowledgeBasesListLoaded, loadingKnowledgeBasesList, getKnowledgeBasesList])
164166

165167
const refreshList = async () => {
166168
try {
@@ -185,6 +187,7 @@ export function useKnowledgeBasesList() {
185187
useKnowledgeStore.setState({
186188
knowledgeBasesList: [],
187189
loadingKnowledgeBasesList: false,
190+
knowledgeBasesListLoaded: false, // Reset store's loaded state
188191
})
189192

190193
try {

apps/sim/stores/knowledge/store.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ interface KnowledgeStore {
8888
loadingDocuments: Set<string>
8989
loadingChunks: Set<string>
9090
loadingKnowledgeBasesList: boolean
91+
knowledgeBasesListLoaded: boolean
9192

9293
// Actions
9394
getKnowledgeBase: (id: string) => Promise<KnowledgeBaseData | null>
@@ -138,6 +139,7 @@ export const useKnowledgeStore = create<KnowledgeStore>((set, get) => ({
138139
loadingDocuments: new Set(),
139140
loadingChunks: new Set(),
140141
loadingKnowledgeBasesList: false,
142+
knowledgeBasesListLoaded: false,
141143

142144
getCachedKnowledgeBase: (id: string) => {
143145
return get().knowledgeBases[id] || null
@@ -363,8 +365,8 @@ export const useKnowledgeStore = create<KnowledgeStore>((set, get) => ({
363365
getKnowledgeBasesList: async () => {
364366
const state = get()
365367

366-
// Return cached list if it exists
367-
if (state.knowledgeBasesList.length > 0) {
368+
// Return cached list if we have already loaded it before (prevents infinite loops when empty)
369+
if (state.knowledgeBasesListLoaded) {
368370
return state.knowledgeBasesList
369371
}
370372

@@ -409,6 +411,7 @@ export const useKnowledgeStore = create<KnowledgeStore>((set, get) => ({
409411
set({
410412
knowledgeBasesList,
411413
loadingKnowledgeBasesList: false,
414+
knowledgeBasesListLoaded: true, // Mark as loaded regardless of result to prevent infinite loops
412415
})
413416

414417
logger.info(`Knowledge bases list loaded: ${knowledgeBasesList.length} items`)
@@ -420,7 +423,10 @@ export const useKnowledgeStore = create<KnowledgeStore>((set, get) => ({
420423
logger.error('Error fetching knowledge bases list:', error)
421424

422425
// Always set loading to false, even on error
423-
set({ loadingKnowledgeBasesList: false })
426+
set({
427+
loadingKnowledgeBasesList: false,
428+
knowledgeBasesListLoaded: true, // Mark as loaded even on error to prevent infinite retries
429+
})
424430

425431
// Don't throw on AbortError (timeout or cancellation)
426432
if (error instanceof Error && error.name === 'AbortError') {
@@ -748,7 +754,10 @@ export const useKnowledgeStore = create<KnowledgeStore>((set, get) => ({
748754
},
749755

750756
clearKnowledgeBasesList: () => {
751-
set({ knowledgeBasesList: [] })
757+
set({
758+
knowledgeBasesList: [],
759+
knowledgeBasesListLoaded: false, // Reset loaded state to allow reloading
760+
})
752761
logger.info('Knowledge bases list cleared')
753762
},
754763
}))

0 commit comments

Comments
 (0)