import { createFileRoute } from "@tanstack/react-router"; import { Monitor, Moon, Sun } from "lucide-react"; import { useState } from "react"; import { toast } from "sonner"; import { type ThemePreference, useThemePreference } from "@/client/lib/theme"; import { authClient, useSession } from "@/lib/auth-client"; import { isHostedClientAuthMode } from "@/lib/auth-mode"; export const Route = createFileRoute("/_app/settings")({ component: SettingsPage, }); const THEME_OPTIONS: { value: ThemePreference; label: string; icon: typeof Sun; }[] = [ { value: "system", label: "System", icon: Monitor }, { value: "light", label: "Light", icon: Sun }, { value: "dark", label: "Dark", icon: Moon }, ]; function SettingsPage() { const isHosted = isHostedClientAuthMode(); const { themePreference, setThemePreference } = useThemePreference(); const { data: session, isPending: isSessionPending } = useSession(); const [isSaving, setIsSaving] = useState(false); const analyticsEnabled = session?.user?.analyticsOptedOut !== true; async function updateAnalyticsPreference(enabled: boolean) { setIsSaving(true); try { const result = await authClient.updateUser({ analyticsOptedOut: !enabled, }); if (result.error) { toast.error("We couldn't update your analytics setting."); } else { toast.success(enabled ? "Analytics enabled" : "Analytics disabled"); } } catch { toast.error("We couldn't update your analytics setting."); } finally { setIsSaving(false); } } return (
Help improve OpenSEO
Share analytics and usage data.