import React, { useState, useEffect } from 'react'; import { Helmet } from 'react-helmet'; import { useNavigate } from 'react-router-dom'; import { Container } from '@mui/material'; import Navbar from '../ComponentUtils/Headers/Navbar'; import Footer from '../ComponentUtils/Footer'; import ImageGallery from '../ComponentUtils/ImageGallery'; const ModerationGroupsPage = () => { const [groups, setGroups] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [selectedGroup, setSelectedGroup] = useState(null); const [showImages, setShowImages] = useState(false); const navigate = useNavigate(); useEffect(() => { loadModerationGroups(); }, []); const loadModerationGroups = async () => { try { setLoading(true); const response = await fetch('/moderation/groups'); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); setGroups(data.groups); } catch (error) { console.error('Fehler beim Laden der Moderations-Gruppen:', error); setError('Fehler beim Laden der Gruppen'); } finally { setLoading(false); } }; const approveGroup = async (groupId, approved) => { try { const response = await fetch(`/groups/${groupId}/approve`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ approved: approved }) }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } // Update local state setGroups(groups.map(group => group.groupId === groupId ? { ...group, approved: approved } : group )); } catch (error) { console.error('Fehler beim Freigeben der Gruppe:', error); alert('Fehler beim Freigeben der Gruppe'); } }; const deleteImage = async (groupId, imageId) => { console.log('deleteImage called with:', { groupId, imageId }); console.log('API_URL:', window._env_.API_URL); try { // Use relative URL to go through Nginx proxy const url = `/groups/${groupId}/images/${imageId}`; console.log('DELETE request to:', url); const response = await fetch(url, { method: 'DELETE' }); console.log('Response status:', response.status); console.log('Response ok:', response.ok); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } // Remove image from selectedGroup if (selectedGroup && selectedGroup.groupId === groupId) { const updatedImages = selectedGroup.images.filter(img => img.id !== imageId); setSelectedGroup({ ...selectedGroup, images: updatedImages, imageCount: updatedImages.length }); } // Update group image count setGroups(groups.map(group => group.groupId === groupId ? { ...group, imageCount: group.imageCount - 1 } : group )); } catch (error) { console.error('Fehler beim Löschen des Bildes:', error); console.error('Error details:', error.message, error.stack); alert('Fehler beim Löschen des Bildes: ' + error.message); } }; const deleteGroup = async (groupId) => { if (!window.confirm('Gruppe wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.')) { return; } try { const response = await fetch(`/groups/${groupId}`, { method: 'DELETE' }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } setGroups(groups.filter(group => group.groupId !== groupId)); if (selectedGroup && selectedGroup.groupId === groupId) { setSelectedGroup(null); setShowImages(false); } } catch (error) { console.error('Fehler beim Löschen der Gruppe:', error); alert('Fehler beim Löschen der Gruppe'); } }; // Navigate to the dedicated group images page const viewGroupImages = (group) => { navigate(`/moderation/groups/${group.groupId}`); }; if (loading) { return
Jahr: {group.year}
Ersteller: {group.name}
{group.description && (Beschreibung: {group.description}
)}Bilder: {group.images.length}