"use client"; import { useRouter } from "next/navigation"; import { useEffect, useState, useTransition } from "react"; import { toast } from "sonner"; import { updatePreferencesAction } from "@/app/(dashboard)/ajustes/actions"; import { useFont } from "@/components/font-provider"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { FONT_OPTIONS, getFontVariable } from "@/public/fonts/font_index"; interface PreferencesFormProps { disableMagnetlines: boolean; systemFont: string; moneyFont: string; } export function PreferencesForm({ disableMagnetlines, systemFont: initialSystemFont, moneyFont: initialMoneyFont, }: PreferencesFormProps) { const router = useRouter(); const [isPending, startTransition] = useTransition(); const [magnetlinesDisabled, setMagnetlinesDisabled] = useState(disableMagnetlines); const [selectedSystemFont, setSelectedSystemFont] = useState(initialSystemFont); const [selectedMoneyFont, setSelectedMoneyFont] = useState(initialMoneyFont); const fontCtx = useFont(); // Live preview: update CSS vars when font selection changes useEffect(() => { fontCtx.setSystemFont(selectedSystemFont); }, [selectedSystemFont, fontCtx.setSystemFont]); useEffect(() => { fontCtx.setMoneyFont(selectedMoneyFont); }, [selectedMoneyFont, fontCtx.setMoneyFont]); const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); startTransition(async () => { const result = await updatePreferencesAction({ disableMagnetlines: magnetlinesDisabled, systemFont: selectedSystemFont, moneyFont: selectedMoneyFont, }); if (result.success) { toast.success(result.message); router.refresh(); } else { toast.error(result.error); } }); }; return (
{/* Seção 1: Tipografia */}

Tipografia

Personalize as fontes usadas na interface e nos valores monetários.

{/* Fonte do sistema */}

Suas finanças em um só lugar

{/* Fonte de valores */}

R$ 1.234,56

{/* Seção 3: Dashboard */}

Dashboard

Opções que afetam a experiência no painel principal.

Remove o recurso de linhas magnéticas do sistema.

); }