"use client"; import { useState } from "react"; import { useTranslations } from "next-intl"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; type BillingDetails = { fullName?: string | null; addressLine1?: string | null; addressLine2?: string | null; city?: string | null; postalCode?: string | null; country?: string | null; phone?: string | null; }; export function BillingDetailsForm({ initialDetails }: { initialDetails: BillingDetails | null }) { const t = useTranslations("settingsForm"); const [details, setDetails] = useState(initialDetails ?? {}); const [saving, setSaving] = useState(false); const [error, setError] = useState(false); function setField(field: keyof BillingDetails, value: string) { setDetails((prev) => ({ ...prev, [field]: value })); } async function handleSave() { if (!details.fullName?.trim()) { setError(true); return; } setError(false); setSaving(true); try { const res = await fetch("/api/v1/users/me/billing-details", { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(details), }); if (!res.ok) throw new Error("Save failed"); toast.success(t("billingDetailsSaved")); } catch { toast.error(t("billingDetailsSaveFailed")); } finally { setSaving(false); } } return (
setField("fullName", e.target.value)} aria-invalid={error || undefined} /> {error &&

{t("billingFullNameRequired")}

}
setField("addressLine1", e.target.value)} />
setField("addressLine2", e.target.value)} />
setField("city", e.target.value)} />
setField("postalCode", e.target.value)} />
setField("country", e.target.value)} />
setField("phone", e.target.value)} />
); }