"use client" import { AlertTriangle, Plus, Save } from "lucide-react" import { Button } from "@/shared/components/ui/button" import { Alert, AlertTitle } from "@/shared/components/ui/alert" import { FieldGroup } from "@/shared/components/ui/field" import { Rhform, RhfTextField, RhfTextareaField, RhfCheckboxField, } from "@/shared/components/form" import { toast } from "sonner" import { useAuthApi } from "@/shared/useApi" import { useResourceForm } from "@/shared/hooks/use-resource-form" import { useFormMutation } from "@/shared/hooks/use-form-mutation" import { taxFormSchema, type TaxFormValues } from "./tax.schema" import { TAX_ROUTES } from "@garage/api" // ── Props ── export type TaxFormProps = { resourceId?: string | null initialData?: unknown onSuccess?: () => void } // ── Default values ── const DEFAULT_VALUES: TaxFormValues = { title: "", note: "", rate: 0, is_default: false, } // ── Mapping helpers ── function mapToFormValues(data: unknown): TaxFormValues { const d = (data as any)?.data ?? data ?? {} return { title: d.title ?? "", note: d.note ?? "", rate: d.rate ? Number(d.rate) : 0, is_default: d.is_default ?? false, } } function mapFormToPayload(values: TaxFormValues) { return { title: values.title, note: values.note || undefined, rate: values.rate, is_default: values.is_default, } } // ── Component ── export function TaxForm({ resourceId, initialData, onSuccess }: TaxFormProps) { const api = useAuthApi() const { form, isEditing } = useResourceForm({ schema: taxFormSchema, defaultValues: DEFAULT_VALUES, resourceId, initialData, queryKey: [TAX_ROUTES.BY_ID, resourceId], mapToFormValues, }) const { mutate, error, isPending } = useFormMutation(form, { mutationFn: (values: TaxFormValues) => { const payload = mapFormToPayload(values) const promise = isEditing && resourceId ? api.taxes.update(resourceId, payload) : api.taxes.create(payload) toast.promise(promise, { loading: isEditing ? "Updating tax..." : "Creating tax...", success: isEditing ? "Tax updated successfully" : "Tax created successfully", error: isEditing ? "Failed to update tax" : "Failed to create tax", }) return promise }, onSuccess: () => { form.reset() onSuccess?.() }, }) return ( mutate(values)}> {error && ( {isEditing ? "Failed to update tax" : "Failed to create tax"} {error.message} )} ) }