import React, { useState } from 'react'; import { Card } from '../ui/card'; import { Button } from '../ui/button'; import { SearchInput } from '../ui/input'; import { FileNode } from '../../types'; import { LayoutGrid, List, Filter, MoreVertical, Download, Trash2, Move, Folder, Music, Image as ImageIcon, File, CheckSquare, Square, Wand2, Stamp, Eye, ChevronRight } from 'lucide-react'; import { useToast } from '../../context/ToastContext'; import { AutoMetadataDetectionModal } from '../library/AutoMetadataDetectionModal'; import { WatermarkSettingsModal } from '../library/WatermarkSettingsModal'; import { FileDetailsView } from './FileDetailsView'; // Mock Files const MOCK_FILES: FileNode[] = [ { id: '1', name: 'Vocals_Main.wav', type: 'audio', size: '24 MB', modified: '2h ago', status: 'ready' }, { id: '2', name: 'Project_Alpha_v3', type: 'folder', size: '-', modified: '1d ago', status: 'ready' }, { id: '3', name: 'Bass_Drop_F#m.wav', type: 'audio', size: '12 MB', modified: '3d ago', status: 'processing' }, { id: '4', name: 'Album_Cover_Art.png', type: 'image', size: '4 MB', modified: '1w ago', status: 'ready' }, { id: '5', name: 'Reference_Track_01.mp3', type: 'audio', size: '8 MB', modified: '2w ago', status: 'ready' }, { id: '6', name: 'Legal_Contracts.pdf', type: 'document', size: '2 MB', modified: '3w ago', status: 'archived' }, { id: '7', name: 'Drums_Stem_02.wav', type: 'audio', size: '45 MB', modified: '1h ago', status: 'ready' }, ]; export const FileManagerView: React.FC = () => { const { addToast } = useToast(); const [viewMode, setViewMode] = useState<'list' | 'grid'>('list'); const [searchQuery, setSearchQuery] = useState(''); const [selectedFiles, setSelectedFiles] = useState([]); const [currentFolder, setCurrentFolder] = useState('Root'); // Navigation State const [selectedFileId, setSelectedFileId] = useState(null); // Modals const [showMetadataModal, setShowMetadataModal] = useState(false); const [showWatermarkModal, setShowWatermarkModal] = useState(false); // --- Handlers --- const handleFileClick = (file: FileNode) => { if (file.type === 'folder') { setCurrentFolder(file.name); addToast(`Navigated to ${file.name}`, 'info'); } else { setSelectedFileId(file.id); } }; const toggleSelection = (id: string) => { setSelectedFiles(prev => prev.includes(id) ? prev.filter(fid => fid !== id) : [...prev, id] ); }; const selectAll = () => { if (selectedFiles.length === MOCK_FILES.length) setSelectedFiles([]); else setSelectedFiles(MOCK_FILES.map(f => f.id)); }; const handleBulkAction = (action: string) => { addToast(`${action} ${selectedFiles.length} files`, 'success'); setSelectedFiles([]); }; const filteredFiles = MOCK_FILES.filter(f => f.name.toLowerCase().includes(searchQuery.toLowerCase())); // --- Render Detail View if selected --- if (selectedFileId) { return setSelectedFileId(null)} />; } // --- Main Render --- return (
{/* Header & Controls */}

FILE MANAGER

setCurrentFolder('Root')}>Root {currentFolder !== 'Root' && ( <> {currentFolder} )}
{/* Search & Filter Bar */}
setSearchQuery(e.target.value)} />
{selectedFiles.length > 0 ? (
{selectedFiles.length} Selected
) : (
)}
{/* Content Area */}
{viewMode === 'list' ? (
{filteredFiles.map((file) => ( ))}
{selectedFiles.length === MOCK_FILES.length ? : }
Name Type Size Modified Status Actions
toggleSelection(file.id)} className="cursor-pointer text-gray-500 hover:text-white"> {selectedFiles.includes(file.id) ? : }
handleFileClick(file)}> {file.type === 'folder' && } {file.type === 'audio' && } {file.type === 'image' && } {['document', 'archive', 'project'].includes(file.type) && } {file.name}
{file.type} {file.size} {file.modified}
{file.status}
) : (
{filteredFiles.map((file) => ( handleFileClick(file)} >
{ e.stopPropagation(); toggleSelection(file.id); }}> {selectedFiles.includes(file.id) ? : }
{file.type === 'folder' && } {file.type === 'audio' && } {file.type === 'image' && } {['document', 'archive', 'project'].includes(file.type) && }

{file.name}

{file.size}

))}
)}
{/* Modals */} {showMetadataModal && ( f.id === selectedFileId)?.name || 'Selected File' : 'Scan Library'} onClose={() => setShowMetadataModal(false)} onApply={(data) => { addToast(`Applied: ${data.genre} - ${data.bpm}BPM`, 'success'); setShowMetadataModal(false); }} /> )} {showWatermarkModal && ( setShowWatermarkModal(false)} onSave={() => addToast("Watermark settings updated", 'success')} /> )}
); };