import { useState, useEffect } from 'react'; import { supabase } from '../../lib/supabase'; export default function AdminPanel() { const [entries, setEntries] = useState([]); const [loading, setLoading] = useState(true); const [selectedEntry, setSelectedEntry] = useState(null); const emptyEntry = { date: new Date().toLocaleDateString('de-DE'), title: '', description: '', slug: '', image: '', content: [] }; // Load data from Supabase on component mount useEffect(() => { loadEntries(); }, []); const loadEntries = async () => { try { const { data, error } = await supabase .from('devlog_entries') .select('*') .order('created_at', { ascending: false }); if (error) throw error; setEntries(data || []); } catch (error) { console.error('Fehler beim Laden der Einträge:', error); alert('Fehler beim Laden der Daten'); } finally { setLoading(false); } }; const handleSave = async (entry, index = null) => { // Entferne das 'index' und 'editIndex' Feld aus dem Entry const cleanEntry = { ...entry }; delete cleanEntry.index; delete cleanEntry.editIndex; delete cleanEntry.id; // Remove id for new entries let updatedEntries; if (index !== null) { // Bearbeite bestehenden Eintrag - keep the original id const originalEntry = entries[index]; cleanEntry.id = originalEntry.id; updatedEntries = entries.map((e, i) => i === index ? cleanEntry : e); } else { // Füge neuen Eintrag hinzu updatedEntries = [...entries, cleanEntry]; } try { const response = await fetch('/api/update-devlog', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(updatedEntries), }); if (!response.ok) throw new Error('Fehler beim Speichern'); // Reload data from Supabase to get updated entries with IDs await loadEntries(); setSelectedEntry(null); } catch (error) { console.error('Fehler:', error); alert('Fehler beim Speichern der Änderungen'); } }; const EntryForm = ({ entry, onSave }) => { const [formData, setFormData] = useState(entry); const [contentList, setContentList] = useState(entry.content || []); const handleContentAdd = (type) => { setContentList([...contentList, { type, value: '' }]); }; const handleContentChange = (index, value) => { const newContent = [...contentList]; newContent[index].value = value; setContentList(newContent); setFormData({ ...formData, content: newContent }); }; const handleContentRemove = (index) => { setContentList(contentList.filter((_, i) => i !== index)); setFormData({ ...formData, content: contentList.filter((_, i) => i !== index) }); }; return (
setFormData({ ...formData, title: e.target.value })} className="w-full p-2 border rounded" /> setFormData({ ...formData, description: e.target.value })} className="w-full p-2 border rounded" /> setFormData({ ...formData, slug: e.target.value })} className="w-full p-2 border rounded" /> setFormData({ ...formData, image: e.target.value })} className="w-full p-2 border rounded" />

Inhalt

{contentList.map((content, index) => (