'use client' import { useState, useEffect } from 'react' interface KontaktInfo { telefon: string; email: string; adresse_zeile1: string; adresse_zeile2: string; formular_empfaenger: string } interface Oeffnungszeit { id: string; tag: string; von: string; bis: string; reihenfolge: number } interface SocialLink { id: string; platform: string; url: 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 KontaktVerwaltung() { const [info, setInfo] = useState({ telefon: '', email: '', adresse_zeile1: '', adresse_zeile2: '', formular_empfaenger: '' }) const [zeiten, setZeiten] = useState([]) const [social, setSocial] = useState([]) const [newZeit, setNewZeit] = useState({ tag: '', von: '', bis: '' }) const [newSocial, setNewSocial] = useState({ platform: '', url: '' }) const [saving, setSaving] = useState(false) const [saved, setSaved] = useState(false) const [loading, setLoading] = useState(true) useEffect(() => { fetch('/api/admin/kontakt').then(r => r.json()).then(({ info: i, oeffnungszeiten: z, social: s }) => { if (i) setInfo(i) setZeiten(z ?? []); setSocial(s ?? []); setLoading(false) }) }, []) async function handleSave(e: React.FormEvent) { e.preventDefault(); setSaving(true) await fetch('/api/admin/kontakt', { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(info) }) setSaving(false); setSaved(true); setTimeout(() => setSaved(false), 2000) } async function addZeit() { if (!newZeit.tag || !newZeit.von || !newZeit.bis) return const res = await fetch('/api/admin/kontakt/oeffnungszeiten', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...newZeit, reihenfolge: zeiten.length }) }) const { eintrag } = await res.json() setZeiten(prev => [...prev, eintrag]); setNewZeit({ tag: '', von: '', bis: '' }) } async function deleteZeit(id: string) { await fetch(`/api/admin/kontakt/oeffnungszeiten/${id}`, { method: 'DELETE' }) setZeiten(prev => prev.filter(z => z.id !== id)) } async function addSocial() { if (!newSocial.platform || !newSocial.url) return const res = await fetch('/api/admin/kontakt/social', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...newSocial, reihenfolge: social.length }) }) const { eintrag } = await res.json() setSocial(prev => [...prev, eintrag]); setNewSocial({ platform: '', url: '' }) } async function deleteSocial(id: string) { await fetch(`/api/admin/kontakt/social/${id}`, { method: 'DELETE' }) setSocial(prev => prev.filter(s => s.id !== id)) } if (loading) return

Lade…

return (
{([['telefon', 'Telefon'], ['email', 'E-Mail (Anzeige)'], ['adresse_zeile1', 'Adresse Zeile 1'], ['adresse_zeile2', 'Adresse Zeile 2'], ['formular_empfaenger', 'Formular-Empfänger (E-Mail)']] as [keyof KontaktInfo, string][]).map(([key, placeholder]) => ( setInfo(p => ({ ...p, [key]: e.target.value }))} placeholder={placeholder} /> ))}
{social.map(s => (
{s.platform} { await fetch(`/api/admin/kontakt/social/${s.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ url: e.target.value }) }) }} />
))}
setNewSocial(p => ({ ...p, platform: e.target.value }))} placeholder="Instagram" /> setNewSocial(p => ({ ...p, url: e.target.value }))} placeholder="https://…" />
{zeiten.map(z => (
{ await fetch(`/api/admin/kontakt/oeffnungszeiten/${z.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tag: e.target.value }) }) }} /> { await fetch(`/api/admin/kontakt/oeffnungszeiten/${z.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ von: e.target.value }) }) }} placeholder="8:00" /> { await fetch(`/api/admin/kontakt/oeffnungszeiten/${z.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ bis: e.target.value }) }) }} placeholder="18:00" />
))}
setNewZeit(p => ({ ...p, tag: e.target.value }))} placeholder="Montag – Freitag" /> setNewZeit(p => ({ ...p, von: e.target.value }))} placeholder="8:00" /> setNewZeit(p => ({ ...p, bis: e.target.value }))} placeholder="18:00" />
) }