import React, { useCallback, useEffect, useState } from 'react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { ChevronRight, Clock3, FolderOpen, Grid2X2, List as ListIcon, LoaderCircle, Search, Upload, } from 'lucide-react' import FileList from './FileList' import FileGrid from './FileGrid' import Banner from './StatusBanner' import { headerNames } from '@/config/navigation' import ContextActions, {fileOptions} from './ContextActions' export default function DriveExplorer({ controller, user }) { const { view, setParent, trail, items, stats, query, setQuery, search, loading, error, setError, note, setNote, layout, setLayout, sort, setSort, display, goRoot, openEntry, startAction, performItemAction, filesInput, isTrash, canWrite, activeSpace, } = controller const [context, setContext] = useState(null) const closeContext = useCallback(() => setContext(null), []) const openContext = (item,x,y) => { const options=fileOptions(item,isTrash,view==='shared') if (options.length) setContext({item,x,y,options}) } useEffect(() => { if (context && !display.some(item => item.id === context.item.id && item.space_id === context.item.space_id)) closeContext() }, [display, context, closeContext]) useEffect(() => { closeContext() }, [view, activeSpace?.id, closeContext]) // In "Partagés avec moi", space statistics belong to the last selected // space. Count the displayed shared files and folders instead. const visibleCounts = loading ? null : view === 'shared' ? { folders: display.filter(item => item.is_folder).length, files: display.filter(item => !item.is_folder).length } : view === 'files' ? stats : null const title = search ? `« ${search} »` : trail.length && !search ? trail.at(-1)?.name : view === 'files' ? (activeSpace?.display_name || headerNames[view]) : (view === 'shared' ? 'Partagés avec moi' : headerNames[view]) return (
setQuery(event.target.value)} placeholder="Rechercher dans mes fichiers…" aria-label="Rechercher" />
{!isTrash &&
{(view === 'files' || view === 'shared') && !search && trail.map(folder => ( ))} {view !== 'files' && view !== 'shared' && <> {headerNames[view]} }
}

{title}

{isTrash && (

)}

{loading ? 'Chargement…' : `${items.length} élément${items.length > 1 ? 's' : ''}`} {!canWrite ? ' · lecture seule' : ''}

Trier :
{error &&
setError('')} />
} {note &&
setNote('')} />
}
{loading ? (
Chargement des fichiers…
) : !display.length ? (

{isTrash ? 'La corbeille est vide' : search ? 'Aucun résultat' : view === 'shared' ? 'Aucun fichier partagé' : 'Cet espace est vide'}

{isTrash ? 'Les fichiers et dossiers supprimés apparaîtront ici.' : search ? 'Essaie un autre nom de fichier.' : view === 'shared' ? 'Les éléments que d’autres utilisateurs partagent avec toi apparaîtront ici.' : 'Importe tes premiers fichiers ou crée un dossier pour commencer à organiser ton espace.'}

{!isTrash && !search && canWrite && ( )}
) : layout === 'list' ? ( {} : openEntry} onActions={startAction} onContext={openContext} /> ) : ( {} : openEntry} onActions={startAction} onContext={openContext} /> )}
performItemAction(context.item,type)} />
) }