import { useEffect, useState } from "react"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { apiRequest } from "@/lib/queryClient"; import { toast } from "@/hooks/use-toast"; type Props = { onClose: () => void; defaultValues?: { id?: number; npiNumber: string; providerName: string; }; }; export function NpiProviderForm({ onClose, defaultValues }: Props) { const [npiNumber, setNpiNumber] = useState( defaultValues?.npiNumber || "" ); const [providerName, setProviderName] = useState( defaultValues?.providerName || "" ); const queryClient = useQueryClient(); const mutation = useMutation({ mutationFn: async () => { const payload = { npiNumber: npiNumber.trim(), providerName: providerName.trim(), }; const url = defaultValues?.id ? `/api/npiProviders/${defaultValues.id}` : "/api/npiProviders/"; const method = defaultValues?.id ? "PUT" : "POST"; const res = await apiRequest(method, url, payload); if (!res.ok) { const err = await res.json().catch(() => null); throw new Error(err?.message || "Failed to save NPI provider"); } return res.json(); }, onSuccess: () => { toast({ title: `NPI provider ${ defaultValues?.id ? "updated" : "created" }.`, }); queryClient.invalidateQueries({ queryKey: ["/api/npiProviders/"], }); onClose(); }, onError: (error: any) => { toast({ title: "Error", description: error.message, variant: "destructive", }); }, }); useEffect(() => { setNpiNumber(defaultValues?.npiNumber || ""); setProviderName(defaultValues?.providerName || ""); }, [defaultValues]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!npiNumber || !providerName) { toast({ title: "Error", description: "All fields are required.", variant: "destructive", }); return; } mutation.mutate(); }; return (