(
workspaceId?: string,
options?: {
enabled?: boolean
}
)
| 178 | * Uses React Query as single source of truth |
| 179 | */ |
| 180 | export function useKnowledgeBasesList( |
| 181 | workspaceId?: string, |
| 182 | options?: { |
| 183 | enabled?: boolean |
| 184 | } |
| 185 | ) { |
| 186 | const queryClient = useQueryClient() |
| 187 | const query = useKnowledgeBasesQuery(workspaceId, { enabled: options?.enabled ?? true }) |
| 188 | |
| 189 | const removeKnowledgeBase = useCallback( |
| 190 | (knowledgeBaseId: string) => { |
| 191 | queryClient.setQueryData<KnowledgeBaseData[]>( |
| 192 | knowledgeKeys.list(workspaceId), |
| 193 | (previous) => previous?.filter((kb) => kb.id !== knowledgeBaseId) ?? [] |
| 194 | ) |
| 195 | }, |
| 196 | [queryClient, workspaceId] |
| 197 | ) |
| 198 | |
| 199 | const updateKnowledgeBase = useCallback( |
| 200 | (id: string, updates: Partial<KnowledgeBaseData>) => { |
| 201 | queryClient.setQueryData<KnowledgeBaseData[]>( |
| 202 | knowledgeKeys.list(workspaceId), |
| 203 | (previous) => previous?.map((kb) => (kb.id === id ? { ...kb, ...updates } : kb)) ?? [] |
| 204 | ) |
| 205 | queryClient.setQueryData<KnowledgeBaseData>(knowledgeKeys.detail(id), (previous) => |
| 206 | previous ? { ...previous, ...updates } : previous |
| 207 | ) |
| 208 | }, |
| 209 | [queryClient, workspaceId] |
| 210 | ) |
| 211 | |
| 212 | const refreshList = useCallback(async () => { |
| 213 | await queryClient.invalidateQueries({ queryKey: knowledgeKeys.list(workspaceId) }) |
| 214 | }, [queryClient, workspaceId]) |
| 215 | |
| 216 | return { |
| 217 | knowledgeBases: query.data ?? [], |
| 218 | isLoading: query.isLoading, |
| 219 | isFetching: query.isFetching, |
| 220 | isPlaceholderData: query.isPlaceholderData, |
| 221 | error: query.error instanceof Error ? query.error.message : null, |
| 222 | refreshList, |
| 223 | removeKnowledgeBase, |
| 224 | updateKnowledgeBase, |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | /** |
| 229 | * Hook to manage chunks for a specific document |
no test coverage detected