22
33import { useEffect , useMemo , useRef , useState } from 'react'
44import { createLogger } from '@sim/logger'
5+ import { useQueryClient } from '@tanstack/react-query'
56import { X } from 'lucide-react'
67import { useParams } from 'next/navigation'
78import { Button , Combobox } from '@/components/emcn/components'
89import { Progress } from '@/components/ui/progress'
910import { cn } from '@/lib/core/utils/cn'
10- import type { WorkspaceFileRecord } from '@/lib/uploads/contexts/workspace'
1111import { getExtensionFromMimeType } from '@/lib/uploads/utils/file-utils'
1212import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-sub-block-value'
13+ import { useWorkspaceFiles , workspaceFilesKeys } from '@/hooks/queries/workspace-files'
1314import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
1415import { useWorkflowStore } from '@/stores/workflows/workflow/store'
1516
@@ -150,8 +151,6 @@ export function FileUpload({
150151 const [ storeValue , setStoreValue ] = useSubBlockValue ( blockId , subBlockId )
151152 const [ uploadingFiles , setUploadingFiles ] = useState < UploadingFile [ ] > ( [ ] )
152153 const [ uploadProgress , setUploadProgress ] = useState ( 0 )
153- const [ workspaceFiles , setWorkspaceFiles ] = useState < WorkspaceFileRecord [ ] > ( [ ] )
154- const [ loadingWorkspaceFiles , setLoadingWorkspaceFiles ] = useState ( false )
155154 const [ uploadError , setUploadError ] = useState < string | null > ( null )
156155 const [ inputValue , setInputValue ] = useState ( '' )
157156
@@ -163,25 +162,14 @@ export function FileUpload({
163162 const params = useParams ( )
164163 const workspaceId = params ?. workspaceId as string
165164
166- const value = isPreview ? previewValue : storeValue
167-
168- const loadWorkspaceFiles = async ( ) => {
169- if ( ! workspaceId || isPreview ) return
170-
171- try {
172- setLoadingWorkspaceFiles ( true )
173- const response = await fetch ( `/api/workspaces/${ workspaceId } /files` )
174- const data = await response . json ( )
165+ const queryClient = useQueryClient ( )
166+ const {
167+ data : workspaceFiles = [ ] ,
168+ isLoading : loadingWorkspaceFiles ,
169+ refetch : refetchWorkspaceFiles ,
170+ } = useWorkspaceFiles ( workspaceId )
175171
176- if ( data . success ) {
177- setWorkspaceFiles ( data . files || [ ] )
178- }
179- } catch ( error ) {
180- logger . error ( 'Error loading workspace files:' , error )
181- } finally {
182- setLoadingWorkspaceFiles ( false )
183- }
184- }
172+ const value = isPreview ? previewValue : storeValue
185173
186174 /**
187175 * Checks if a file's MIME type matches the accepted types
@@ -226,10 +214,6 @@ export function FileUpload({
226214 return ! isAlreadySelected
227215 } )
228216
229- useEffect ( ( ) => {
230- void loadWorkspaceFiles ( )
231- } , [ workspaceId ] )
232-
233217 /**
234218 * Opens file dialog
235219 */
@@ -394,7 +378,7 @@ export function FileUpload({
394378 setUploadError ( null )
395379
396380 if ( workspaceId ) {
397- void loadWorkspaceFiles ( )
381+ void queryClient . invalidateQueries ( { queryKey : workspaceFilesKeys . lists ( ) } )
398382 }
399383
400384 if ( uploadedFiles . length === 1 ) {
@@ -726,7 +710,7 @@ export function FileUpload({
726710 value = { inputValue }
727711 onChange = { handleComboboxChange }
728712 onOpenChange = { ( open ) => {
729- if ( open ) void loadWorkspaceFiles ( )
713+ if ( open ) void refetchWorkspaceFiles ( )
730714 } }
731715 placeholder = { loadingWorkspaceFiles ? 'Loading files...' : '+ Add More' }
732716 disabled = { disabled || loadingWorkspaceFiles }
@@ -746,7 +730,7 @@ export function FileUpload({
746730 onInputChange = { handleComboboxChange }
747731 onClear = { ( e ) => handleRemoveFile ( filesArray [ 0 ] , e ) }
748732 onOpenChange = { ( open ) => {
749- if ( open ) void loadWorkspaceFiles ( )
733+ if ( open ) void refetchWorkspaceFiles ( )
750734 } }
751735 disabled = { disabled }
752736 isLoading = { loadingWorkspaceFiles }
@@ -763,7 +747,7 @@ export function FileUpload({
763747 value = { inputValue }
764748 onChange = { handleComboboxChange }
765749 onOpenChange = { ( open ) => {
766- if ( open ) void loadWorkspaceFiles ( )
750+ if ( open ) void refetchWorkspaceFiles ( )
767751 } }
768752 placeholder = { loadingWorkspaceFiles ? 'Loading files...' : 'Select or upload file' }
769753 disabled = { disabled || loadingWorkspaceFiles }
0 commit comments