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-kodo-content-dim 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')} /> )}
); };