"use client"; import { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { api } from "@/lib/api"; import type { NotificationPreferences } from "@/lib/types"; const REMINDER_OPTIONS = [ { value: 14, label: "14 Tage" }, { value: 7, label: "7 Tage" }, { value: 3, label: "3 Tage" }, { value: 1, label: "1 Tag" }, ]; export function NotificationSettings() { const queryClient = useQueryClient(); const [saved, setSaved] = useState(false); const { data: prefs, isLoading } = useQuery({ queryKey: ["notification-preferences"], queryFn: () => api.get("/api/notification-preferences"), }); const [reminderDays, setReminderDays] = useState([]); const [emailEnabled, setEmailEnabled] = useState(true); const [dailyDigest, setDailyDigest] = useState(false); const [initialized, setInitialized] = useState(false); // Sync state from server once loaded if (prefs && !initialized) { setReminderDays(prefs.deadline_reminder_days); setEmailEnabled(prefs.email_enabled); setDailyDigest(prefs.daily_digest); setInitialized(true); } const update = useMutation({ mutationFn: (input: { deadline_reminder_days: number[]; email_enabled: boolean; daily_digest: boolean; }) => api.put("/api/notification-preferences", input), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["notification-preferences"], }); setSaved(true); setTimeout(() => setSaved(false), 2000); }, }); function toggleDay(day: number) { setReminderDays((prev) => prev.includes(day) ? prev.filter((d) => d !== day) : [...prev, day].sort((a, b) => b - a), ); } function handleSave() { update.mutate({ deadline_reminder_days: reminderDays, email_enabled: emailEnabled, daily_digest: dailyDigest, }); } if (isLoading) { return (
); } return (
{/* Reminder days */}

Fristen-Erinnerungen

Erinnern Sie mich vor Fristablauf:

{REMINDER_OPTIONS.map((opt) => ( ))}
{/* Email toggle */} {/* Daily digest toggle */} {/* Save */}
{saved && ( Gespeichert )}
); }