Kalender-Warnschwelle konfigurierbar + Saison-Datepicker

- kalender_warnung_prozent Setting: Admin kann Grün→Orange-Schwelle einstellen
- Verfügbarkeits-API liefert Warnschwelle mit, BookingCalendar nutzt dynamischen Wert
- Saison-Start/Ende als Date-Picker statt Textfeld im Admin-Dashboard

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Michael
2026-03-03 20:24:44 +01:00
parent ccc6a9b4ec
commit bb20461cc2
3 changed files with 38 additions and 25 deletions

View File

@@ -564,25 +564,28 @@ export default function AdminDashboardPage() {
<div className="space-y-5 max-w-xl">
<h3 className="text-lg font-bold text-primary">Einstellungen</h3>
<div className="bg-white rounded-2xl border border-border divide-y divide-border/50">
{settings.map((s) => (
<div key={s.key} className="p-4 flex items-center gap-4">
<div className="flex-1">
<div className="font-medium text-sm">{s.beschreibung || s.key}</div>
<div className="text-[11px] text-text-muted font-mono">{s.key}</div>
{settings.map((s) => {
const isDate = s.key === 'saison_start' || s.key === 'saison_ende';
return (
<div key={s.key} className="p-4 flex items-center gap-4">
<div className="flex-1">
<div className="font-medium text-sm">{s.beschreibung || s.key}</div>
<div className="text-[11px] text-text-muted font-mono">{s.key}</div>
</div>
<input
type={isDate ? 'date' : 'text'}
defaultValue={s.value}
onBlur={(e) => {
if (e.target.value !== s.value) {
updateSetting(s.key, e.target.value);
}
}}
className="border border-border rounded-xl px-3 py-2.5 text-sm w-48 text-right"
aria-label={s.beschreibung || s.key}
/>
</div>
<input
type="text"
defaultValue={s.value}
onBlur={(e) => {
if (e.target.value !== s.value) {
updateSetting(s.key, e.target.value);
}
}}
className="border border-border rounded-xl px-3 py-2.5 text-sm w-48 text-right"
aria-label={s.beschreibung || s.key}
/>
</div>
))}
);
})}
</div>
<p className="text-xs text-text-muted">
Änderungen werden beim Verlassen des Feldes gespeichert.