import React, { useState, useEffect } from 'react'; import { Box, FormControlLabel, Checkbox, Typography, Paper, Divider, Alert } from '@mui/material'; import InfoIcon from '@mui/icons-material/Info'; import FacebookIcon from '@mui/icons-material/Facebook'; import InstagramIcon from '@mui/icons-material/Instagram'; import MusicNoteIcon from '@mui/icons-material/MusicNote'; const ICON_MAP = { 'Facebook': FacebookIcon, 'Instagram': InstagramIcon, 'MusicNote': MusicNoteIcon, }; /** * ConsentCheckboxes Component * * GDPR-konforme Einwilligungsabfrage für Bildveröffentlichung * - Pflicht: Werkstatt-Anzeige Zustimmung * - Optional: Social Media Plattform-Zustimmungen */ function ConsentCheckboxes({ onConsentChange, consents, disabled = false }) { const [platforms, setPlatforms] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { // Lade verfügbare Plattformen vom Backend fetchPlatforms(); }, []); const fetchPlatforms = async () => { try { const response = await fetch('/api/social-media/platforms'); if (!response.ok) { throw new Error('Failed to load platforms'); } const data = await response.json(); setPlatforms(data); setError(null); } catch (error) { console.error('Error loading platforms:', error); setError('Plattformen konnten nicht geladen werden'); } finally { setLoading(false); } }; const handleWorkshopChange = (event) => { onConsentChange({ ...consents, workshopConsent: event.target.checked }); }; const handleSocialMediaChange = (platformId) => (event) => { const updatedConsents = { ...consents }; const platformConsents = updatedConsents.socialMediaConsents || []; if (event.target.checked) { // Füge Consent hinzu platformConsents.push({ platformId, consented: true }); } else { // Entferne Consent const index = platformConsents.findIndex(c => c.platformId === platformId); if (index > -1) { platformConsents.splice(index, 1); } } updatedConsents.socialMediaConsents = platformConsents; onConsentChange(updatedConsents); }; const isPlatformChecked = (platformId) => { return consents.socialMediaConsents?.some(c => c.platformId === platformId) || false; }; return ( {/* Aufklärungshinweis */} } sx={{ mb: 3 }}> Wichtiger Hinweis Alle hochgeladenen Inhalte werden vom Hobbyhimmel-Team geprüft, bevor sie angezeigt oder veröffentlicht werden. Wir behalten uns vor, Inhalte nicht zu zeigen oder rechtswidrige Inhalte zu entfernen. Nach dem Upload erhalten Sie eine Gruppen-ID als Referenz für die Kontaktaufnahme. {/* Pflicht-Zustimmung: Werkstatt-Anzeige */} Anzeige in der Werkstatt * } label={ Ich willige ein, dass meine hochgeladenen Bilder auf dem Monitor in der offenen Werkstatt des Hobbyhimmels angezeigt werden dürfen. Die Bilder sind nur lokal im Hobbyhimmel sichtbar und werden nicht über das Internet zugänglich gemacht. (Pflichtfeld) } /> {/* Optional: Social Media Veröffentlichung */} Social Media Veröffentlichung (optional) Ich willige ein, dass meine Bilder und Texte auf folgenden Social Media Plattformen veröffentlicht werden dürfen (inklusive aller angegebenen Informationen wie Name und Beschreibung): {loading ? ( Lade Plattformen... ) : error ? ( {error} ) : ( {platforms.map(platform => { const IconComponent = ICON_MAP[platform.icon_name] || InfoIcon; return ( } label={ {platform.display_name} } /> ); })} )} {/* Widerrufs-Hinweis */} Widerruf Ihrer Einwilligung: Sie können Ihre Einwilligung jederzeit widerrufen. Kontaktieren Sie uns hierzu mit Ihrer Gruppen-ID unter:{' '} it@hobbyhimmel.de ); } export default ConsentCheckboxes;