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 (

Load a Demo Track

{/* Demo presets dropdown */} {presets.length > 0 && (
)} {/* Upload slots — hidden
{STEM_TYPES.map(({ name, label, icon }) => ( handleStemSelect(name, file)} onRemove={() => handleStemRemove(name)} disabled={loading} /> ))}
🎹 MIDI Files (Optional)
{midiFiles.length > 0 && (
{midiFiles.map((file, index) => (
{file.name} {(file.size / 1024).toFixed(1)} KB
))}
)}
*/} {/* Error display */} {error && (
{error}
)}
) } /* StemUploadCard — hidden function StemUploadCard({ name, label, icon, file, onSelect, onRemove, disabled }) { const [dragActive, setDragActive] = React.useState(false) const handleFileChange = (e) => { const selectedFile = e.target.files[0] if (selectedFile && selectedFile.name.toLowerCase().endsWith('.wav')) { onSelect(selectedFile) } } const handleDrag = (e) => { e.preventDefault() e.stopPropagation() if (e.type === 'dragenter' || e.type === 'dragover') { setDragActive(true) } else if (e.type === 'dragleave') { setDragActive(false) } } const handleDrop = (e) => { e.preventDefault() e.stopPropagation() setDragActive(false) const droppedFile = e.dataTransfer.files[0] if (droppedFile && droppedFile.name.toLowerCase().endsWith('.wav')) { onSelect(droppedFile) } } return (
{icon} {label}
{file && ( )}
{file ? (

{file.name}

{(file.size / 1024 / 1024).toFixed(1)} MB

) : ( )}
) } */ export default FileUpload