import React, { useState, useCallback, useEffect } from 'react' /* Upload slots — hidden const STEM_TYPES = [ { name: 'guitar', label: 'Guitar', icon: '🎸' }, { name: 'drums', label: 'Drums', icon: '🥁' }, { name: 'bass', label: 'Bass', icon: '🎸' }, { name: 'synth', label: 'Synth', icon: '🎹' }, { name: 'click_record', label: 'Click Record', icon: '⏱️' } ] */ function FileUpload({ onUpload, onLoadPreset, loading, error, onClearError, cacheStatus = {} }) { const [presets, setPresets] = useState([]) const [selectedPreset, setSelectedPreset] = useState('') useEffect(() => { fetch('/api/presets') .then(r => r.json()) .then(data => setPresets(data.presets || [])) .catch(() => {}) }, []) /* Upload slots — hidden const [stems, setStems] = useState({ guitar: null, drums: null, bass: null, synth: null, click_record: null }) const [midiFiles, setMidiFiles] = useState([]) const [midiDragActive, setMidiDragActive] = useState(false) const handleStemSelect = useCallback((stemType, file) => { setStems(prev => ({ ...prev, [stemType]: file })) }, []) const handleStemRemove = useCallback((stemType) => { setStems(prev => ({ ...prev, [stemType]: null })) }, []) const handleMidiSelect = useCallback((e) => { const selectedFiles = Array.from(e.target.files).filter(f => f.name.toLowerCase().endsWith('.mid') || f.name.toLowerCase().endsWith('.midi') ) setMidiFiles(prev => [...prev, ...selectedFiles]) }, []) const handleMidiRemove = useCallback((index) => { setMidiFiles(prev => prev.filter((_, i) => i !== index)) }, []) const handleMidiDrag = useCallback((e) => { e.preventDefault() e.stopPropagation() if (e.type === 'dragenter' || e.type === 'dragover') { setMidiDragActive(true) } else if (e.type === 'dragleave') { setMidiDragActive(false) } }, []) const handleMidiDrop = useCallback((e) => { e.preventDefault() e.stopPropagation() setMidiDragActive(false) const droppedFiles = Array.from(e.dataTransfer.files).filter(f => f.name.toLowerCase().endsWith('.mid') || f.name.toLowerCase().endsWith('.midi') ) setMidiFiles(prev => [...prev, ...droppedFiles]) }, []) const handleSubmit = useCallback(async () => { const formData = new FormData() Object.entries(stems).forEach(([name, file]) => { if (file) formData.append(name, file) }) midiFiles.forEach(file => { formData.append('midi', file) }) await onUpload(formData) }, [stems, midiFiles, onUpload]) const stemCount = Object.values(stems).filter(f => f !== null).length const hasFiles = stemCount > 0 */ return (
{file.name}
{(file.size / 1024 / 1024).toFixed(1)} MB