"use client"; import { useState } from "react"; import { toast } from "sonner"; import { useTranslations } from "next-intl"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; type NutritionGoals = { caloriesKcal: number | null; proteinG: number | null; carbsG: number | null; fatG: number | null; } | null; interface NutritionGoalsFormProps { initialGoals: NutritionGoals; } export function NutritionGoalsForm({ initialGoals }: NutritionGoalsFormProps) { const t = useTranslations("settings.nutritionGoals"); const [caloriesKcal, setCaloriesKcal] = useState( initialGoals?.caloriesKcal != null ? String(initialGoals.caloriesKcal) : "" ); const [proteinG, setProteinG] = useState( initialGoals?.proteinG != null ? String(initialGoals.proteinG) : "" ); const [carbsG, setCarbsG] = useState( initialGoals?.carbsG != null ? String(initialGoals.carbsG) : "" ); const [fatG, setFatG] = useState( initialGoals?.fatG != null ? String(initialGoals.fatG) : "" ); const [saving, setSaving] = useState(false); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setSaving(true); const body: Record = {}; if (caloriesKcal !== "") body.caloriesKcal = parseInt(caloriesKcal, 10); if (proteinG !== "") body.proteinG = parseInt(proteinG, 10); if (carbsG !== "") body.carbsG = parseInt(carbsG, 10); if (fatG !== "") body.fatG = parseInt(fatG, 10); try { const res = await fetch("/api/v1/users/me/nutrition-goals", { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(body), }); if (!res.ok) { toast.error(t("saveError")); return; } toast.success(t("saveSuccess")); } catch { toast.error(t("saveError")); } finally { setSaving(false); } } return (
setCaloriesKcal(e.target.value)} placeholder={t("caloriesPlaceholder")} />
setProteinG(e.target.value)} placeholder={t("proteinPlaceholder")} />
setCarbsG(e.target.value)} placeholder={t("carbsPlaceholder")} />
setFatG(e.target.value)} placeholder={t("fatPlaceholder")} />
); }