import { createFileRoute, Link, useNavigate } from "@tanstack/react-router"; import { ArrowLeft, Plus } from "lucide-react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { useCreateDistributor, trpc } from "shared-react"; const formSchema = z.object({ agency: z.string().min(1, "Agency name is required"), contact: z.string().min(1, "Contact person is required"), mobile: z .string() .length(10, "Valid 10-digit mobile number is required") .regex(/^\d{10}$/, "Must be 10 digits"), address: z.string().nullable().optional(), }); type FormValues = z.infer; export const Route = createFileRoute("/distributors/add")({ component: AddDistributorPage, staticData: { title: "Add Distributor", subtitle: "Register a new distributor agency", }, }); function AddDistributorPage() { const navigate = useNavigate(); const createMutation = useCreateDistributor(); const utils = trpc.useUtils(); const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(formSchema), defaultValues: { agency: "", contact: "", mobile: "", address: null, }, }); function onSubmit(values: FormValues) { createMutation.mutate( { agency: values.agency, contact: values.contact, mobile: values.mobile, address: values.address ?? null, }, { onSuccess: () => { utils.distributor.list.invalidate(); navigate({ to: "/distributors" }); }, }, ); } return (
Back to Distributors
{errors.agency && (

{errors.agency.message}

)}
{errors.contact && (

{errors.contact.message}

)}
{ e.target.value = e.target.value .replace(/\D/g, "") .slice(0, 10); }, })} placeholder="e.g. 9876500001" className={`w-full px-3.5 py-2.5 border rounded-md text-sm text-slate-900 bg-white transition-colors focus:outline-none focus:ring-[3px] focus:ring-blue-100 ${errors.mobile ? "border-red-600" : "border-slate-200 focus:border-blue-600"}`} /> {errors.mobile && (

{errors.mobile.message}

)}