"use client"; import { useState } from "react"; import { toast } from "sonner"; 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 [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("Failed to save nutrition goals"); return; } toast.success("Nutrition goals saved"); } catch { toast.error("Failed to save nutrition goals"); } finally { setSaving(false); } } return (
setCaloriesKcal(e.target.value)} placeholder="e.g. 2000" />
setProteinG(e.target.value)} placeholder="e.g. 50" />
setCarbsG(e.target.value)} placeholder="e.g. 250" />
setFatG(e.target.value)} placeholder="e.g. 70" />
); }