import { useState, useCallback } from 'react'; interface FileItem { name: string; type: "file" | "directory" | "link"; path: string; size?: number; modified?: string; permissions?: string; owner?: string; group?: string; } export function useFileSelection() { const [selectedFiles, setSelectedFiles] = useState([]); const selectFile = useCallback((file: FileItem, multiSelect = false) => { if (multiSelect) { setSelectedFiles(prev => { const isSelected = prev.some(f => f.path === file.path); if (isSelected) { return prev.filter(f => f.path !== file.path); } else { return [...prev, file]; } }); } else { setSelectedFiles([file]); } }, []); const selectRange = useCallback((files: FileItem[], startFile: FileItem, endFile: FileItem) => { const startIndex = files.findIndex(f => f.path === startFile.path); const endIndex = files.findIndex(f => f.path === endFile.path); if (startIndex !== -1 && endIndex !== -1) { const start = Math.min(startIndex, endIndex); const end = Math.max(startIndex, endIndex); const rangeFiles = files.slice(start, end + 1); setSelectedFiles(rangeFiles); } }, []); const selectAll = useCallback((files: FileItem[]) => { setSelectedFiles([...files]); }, []); const clearSelection = useCallback(() => { setSelectedFiles([]); }, []); const toggleSelection = useCallback((file: FileItem) => { setSelectedFiles(prev => { const isSelected = prev.some(f => f.path === file.path); if (isSelected) { return prev.filter(f => f.path !== file.path); } else { return [...prev, file]; } }); }, []); const isSelected = useCallback((file: FileItem) => { return selectedFiles.some(f => f.path === file.path); }, [selectedFiles]); const getSelectedCount = useCallback(() => { return selectedFiles.length; }, [selectedFiles]); return { selectedFiles, selectFile, selectRange, selectAll, clearSelection, toggleSelection, isSelected, getSelectedCount, setSelectedFiles }; }