import { useState, useEffect } from 'react'; import './MediaGallery.css'; function MediaGallery({ kaNumber, token, onInsertMedia, isOpen, onToggle }) { const [media, setMedia] = useState([]); const [loading, setLoading] = useState(true); const [uploading, setUploading] = useState(false); const [error, setError] = useState(''); useEffect(() => { fetchMedia(); }, [kaNumber, isOpen]); const fetchMedia = async () => { try { const response = await fetch(`http://localhost:9000/api/articles/${kaNumber}/media`, { headers: { 'Authorization': `Bearer ${token}` } }); if (response.ok) { const data = await response.json(); setMedia(data); } else { setError('Failed to fetch media'); } } catch(err) { console.error('Error fetching media:', err); setError('Failed to load media'); } finally { setLoading(false); } }; const handleFileUpload = async (e) => { const file = e.target.files[0]; if (!file) return; setUploading(true); setError(''); const formData = new FormData(); formData.append('file', file); try { const response = await fetch(`/api/articles/${kaNumber}/media`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}` }, body: formData }); if (response.ok) { const newMedia = await response.json(); setMedia([...media, newMedia]); } else { const data = await response.json(); setError(data.error || 'Upload failed'); } } catch(err) { console.error('Failed to upload file:', err); setError('Failed to upload file'); } finally { setUploading(false); e.target.value = ''; } } const handleDelete = async (filename) => { if (!confirm('Are you sure you want to delete this file?')) return; try { const response = await fetch(`/api/articles/${kaNumber}/media/${filename}`, { method: 'DELETE', headers: { 'Authorization': `Bearer ${token}` } }); if (response.ok) { setMedia(media.filter(m => m.filename !== filename)); } else { alert('Failed to delete file'); } } catch(err) { console.error('Error deleting file:', err); alert('Failed to delete file'); } }; return ( <>

Media Gallery - {kaNumber}

{error &&
{error}
} {loading ? (
Loading media...
) : media.length === 0 ? (
📷

No Media Yet

Click "Upload Media" to add images or videos to this article.

) : (
{media.map(item => (
{item.type === 'image' ? ( {item.filename} onInsertMedia(item)} /> ) : (
onInsertMedia(item)}> 🎥 Video
)}
{item.filename}
))}
)}
); } export default MediaGallery;