import React, { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { apiRequest } from "@/lib/queryClient"; import { Button } from "../ui/button"; import { Edit, Delete, Plus } from "lucide-react"; import { DeleteConfirmationDialog } from "../ui/deleteDialog"; import { NpiProviderForm } from "./npiProviderForm"; type NpiProvider = { id: number; npiNumber: string; providerName: string; }; export function NpiProviderTable() { const queryClient = useQueryClient(); const [currentPage, setCurrentPage] = useState(1); const [modalOpen, setModalOpen] = useState(false); const [editingProvider, setEditingProvider] = useState(null); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [providerToDelete, setProviderToDelete] = useState(null); const providersPerPage = 5; const { data: providers = [], isLoading, error, } = useQuery({ queryKey: ["/api/npiProviders/"], queryFn: async () => { const res = await apiRequest("GET", "/api/npiProviders/"); if (!res.ok) throw new Error("Failed to fetch NPI providers"); return res.json() as Promise; }, }); const deleteMutation = useMutation({ mutationFn: async (provider: NpiProvider) => { const res = await apiRequest( "DELETE", `/api/npiProviders/${provider.id}` ); if (!res.ok) throw new Error("Failed to delete NPI provider"); return true; }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["/api/npiProviders/"], }); }, }); const handleDeleteClick = (provider: NpiProvider) => { setProviderToDelete(provider); setIsDeleteDialogOpen(true); }; const handleConfirmDelete = () => { if (!providerToDelete) return; deleteMutation.mutate(providerToDelete, { onSuccess: () => { setIsDeleteDialogOpen(false); setProviderToDelete(null); }, }); }; const indexOfLast = currentPage * providersPerPage; const indexOfFirst = indexOfLast - providersPerPage; const currentProviders = providers.slice( indexOfFirst, indexOfLast ); const totalPages = Math.ceil(providers.length / providersPerPage); return (

NPI Providers

{isLoading ? ( ) : error ? ( ) : currentProviders.length === 0 ? ( ) : ( currentProviders.map((provider) => ( )) )}
NPI Number Provider Name
Loading NPI providers...
Error loading NPI providers
No NPI providers found.
{provider.npiNumber} {provider.providerName}
{providers.length > providersPerPage && (
)} {modalOpen && ( setModalOpen(false)} /> )} setIsDeleteDialogOpen(false)} entityName={providerToDelete?.providerName} />
); }