"use client"; import { useEffect, useState } from "react"; export function NotificationPreferences() { const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [message, setMessage] = useState(null); const [emailStatusChange, setEmailStatusChange] = useState(true); const [emailJobAlerts, setEmailJobAlerts] = useState(true); const [inAppStatusChange, setInAppStatusChange] = useState(true); const [inAppJobAlerts, setInAppJobAlerts] = useState(true); const [digestFrequency, setDigestFrequency] = useState("IMMEDIATE"); useEffect(() => { async function loadPreferences() { try { const res = await fetch("/api/notifications/preferences"); const data = await res.json(); if (res.ok && data.preferences) { setEmailStatusChange(data.preferences.emailStatusChange ?? true); setEmailJobAlerts(data.preferences.emailJobAlerts ?? true); setInAppStatusChange(data.preferences.inAppStatusChange ?? true); setInAppJobAlerts(data.preferences.inAppJobAlerts ?? true); setDigestFrequency(data.preferences.digestFrequency || "IMMEDIATE"); } } catch (err) { console.error("Failed to load notification preferences:", err); } finally { setLoading(false); } } loadPreferences(); }, []); const handleSave = async () => { setSaving(true); setMessage(null); try { const res = await fetch("/api/notifications/preferences", { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ emailStatusChange, emailJobAlerts, inAppStatusChange, inAppJobAlerts, digestFrequency, }), }); if (res.ok) { setMessage("Notification preferences saved successfully."); } else { const data = await res.json(); setMessage("Failed to save: " + (data.error || "Unknown error")); } } catch (err: any) { setMessage("Error: " + err.message); } finally { setSaving(false); } }; if (loading) { return
Loading notification preferences...
; } return (

🔔 Notification Preferences

Configure how and when you receive status updates and job alert notifications.

{message && (
{message}
)}
{/* Application Status Changes */}

Application Status Changes

{/* Saved Search / Job Alerts */}

Job Alerts & Matching Jobs

{/* Email Frequency / Digest Mode */}

If set to Daily Digest, non-critical email alerts are batched into a daily summary.

); }