import React, { useState, useEffect, useCallback } from 'react'; import { workshop as workshopApi } from '../services/api.js'; import { useAuth } from '../services/AuthContext.jsx'; import { state, deserialize } from '../engine/state.js'; import { serialize } from '../engine/state.js'; import { rebuildGraph } from '../engine/audioEngine.js'; const TAGS = ['ambient', 'bass', 'drums', 'pad', 'lead', 'fx', 'chiptune', 'experimental']; function ShareModal({ onClose, onShared }) { const [title, setTitle] = useState(''); const [description, setDescription] = useState(''); const [selectedTags, setSelectedTags] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const handleShare = async () => { if (!title.trim()) { setError('Titulo requerido'); return; } if (state.modules.length === 0) { setError('No hay modulos en el canvas'); return; } setLoading(true); setError(''); try { const patchData = serialize(); await workshopApi.share({ title: title.trim(), description: description.trim(), tags: selectedTags, data: patchData, }); onShared?.(); onClose(); } catch (err) { setError(err.message); } setLoading(false); }; return (
e.stopPropagation()} style={{ gap: 14 }}>

Compartir Patch

setTitle(e.target.value)} />