'use client' import { useState, useEffect } from 'react' interface Stat { id: string; wert: string; label: string; reihenfolge: number } const inp: React.CSSProperties = { width: '100%', padding: '8px 12px', borderRadius: '6px', border: '1px solid var(--border-color)', background: 'var(--bg)', color: 'var(--text-primary)', fontSize: '14px', boxSizing: 'border-box' } const lbl: React.CSSProperties = { fontSize: '11px', fontWeight: 600, textTransform: 'uppercase', letterSpacing: '1px', color: 'var(--text-muted)', display: 'block', marginBottom: '6px' } export function UeberUnsVerwaltung() { const [eyebrowText, setEyebrowText] = useState('Klein, aber fein') const [absatz1, setAbsatz1] = useState('') const [absatz2, setAbsatz2] = useState('') const [bildUrl, setBildUrl] = useState(null) const [stats, setStats] = useState([]) const [newStat, setNewStat] = useState({ wert: '', label: '' }) const [saving, setSaving] = useState(false) const [saved, setSaved] = useState(false) const [uploading, setUploading] = useState(false) const [loading, setLoading] = useState(true) useEffect(() => { fetch('/api/admin/ueber-uns').then(r => r.json()).then(({ content: c, stats: s }) => { if (c) { setEyebrowText(c.eyebrow_text ?? 'Klein, aber fein'); setAbsatz1(c.absatz1 ?? ''); setAbsatz2(c.absatz2 ?? ''); setBildUrl(c.bild_url ?? null) } setStats(s ?? []) setLoading(false) }) }, []) async function handleSave(e: React.FormEvent) { e.preventDefault(); setSaving(true) await fetch('/api/admin/ueber-uns', { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ eyebrow_text: eyebrowText, absatz1, absatz2, bild_url: bildUrl }) }) setSaving(false); setSaved(true); setTimeout(() => setSaved(false), 2000) } async function handleBildUpload(e: React.ChangeEvent) { const file = e.target.files?.[0] if (!file) return setUploading(true) const fd = new FormData(); fd.append('file', file) const res = await fetch('/api/admin/ueber-uns/upload', { method: 'POST', body: fd }) const { url, error } = await res.json() if (url) setBildUrl(url) else alert(error ?? 'Upload fehlgeschlagen') setUploading(false) } async function addStat() { if (!newStat.wert.trim() || !newStat.label.trim()) return const res = await fetch('/api/admin/ueber-uns/stats', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...newStat, reihenfolge: stats.length }) }) const { stat } = await res.json() setStats(prev => [...prev, stat]); setNewStat({ wert: '', label: '' }) } async function deleteStat(id: string) { await fetch(`/api/admin/ueber-uns/stats/${id}`, { method: 'DELETE' }) setStats(prev => prev.filter(s => s.id !== id)) } if (loading) return

Lade…

return (
setEyebrowText(e.target.value)} placeholder="z. B. Klein, aber fein" />