import React, { useState } from 'react' import { listPresetNames } from '../utils/presetManifest' /* 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 getBundledPresets() { try { return { presets: listPresetNames(), catalogError: null } } catch (err) { return { presets: [], catalogError: err.message } } } function FileUpload({ onLoadPreset, loading, error, onClearError }) { const [{ presets, catalogError }] = useState(getBundledPresets) const [selectedPreset, setSelectedPreset] = useState('') /* 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 || catalogError) && (
{error || catalogError} {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