"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { Loader2Icon } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Label } from "@/components/ui/label"; import { MUTEABLE_NOTIFICATION_TYPES } from "@/lib/notifications/notificationTypes"; import { updatePreferences } from "@/app/(frontend)/account/actions"; interface PreferencesFormProps { mutedAll: boolean; mutedTypes: string[]; showCallsign: boolean; leadOrActual: "lead" | "actual"; discordEnabled: boolean; discordMutedTypes: string[]; } export function PreferencesForm({ mutedAll: initialMutedAll, mutedTypes: initialMutedTypes, showCallsign: initialShowCallsign, leadOrActual: initialLeadOrActual, discordEnabled: initialDiscordEnabled, discordMutedTypes: initialDiscordMutedTypes, }: PreferencesFormProps) { const router = useRouter(); const [mutedAll, setMutedAll] = useState(initialMutedAll); const [mutedTypes, setMutedTypes] = useState(initialMutedTypes); const [showCallsign, setShowCallsign] = useState(initialShowCallsign); const [leadOrActual, setLeadOrActual] = useState<"lead" | "actual">(initialLeadOrActual); const [discordEnabled, setDiscordEnabled] = useState(initialDiscordEnabled); const [discordMutedTypes, setDiscordMutedTypes] = useState(initialDiscordMutedTypes); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const [loading, setLoading] = useState(false); const toggleType = (value: string, checked: boolean) => { setMutedTypes((prev) => checked ? [...new Set([...prev, value])] : prev.filter((t) => t !== value), ); }; const toggleDiscordType = (value: string, checked: boolean) => { setDiscordMutedTypes((prev) => checked ? [...new Set([...prev, value])] : prev.filter((t) => t !== value), ); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(null); setSuccess(null); try { const res = await updatePreferences({ mutedAll, mutedTypes, showCallsign, leadOrActual, discordEnabled, discordMutedTypes, }); if (!res.success) { setError(res.error ?? "Failed to save preferences."); return; } setSuccess("Preferences saved."); router.refresh(); } catch { setError("Something went wrong. Please try again."); } finally { setLoading(false); } }; return (

Notifications

{MUTEABLE_NOTIFICATION_TYPES.map((t) => ( ))}

Display

Discord

{MUTEABLE_NOTIFICATION_TYPES.map((t) => ( ))}
{error &&

{error}

} {success &&

{success}

}
); }