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 ( <>
Click "Upload Media" to add images or videos to this article.