'use client'; import { DataTable } from '@/components/data-table'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { apiClient } from '@/lib/api-client'; import { KeygenUser } from '@/lib/types'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { ColumnDef } from '@tanstack/react-table'; import { format } from 'date-fns'; import { CreditCard as Edit, Ellipsis, Plus, Trash2 } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { toast } from 'sonner'; export default function UsersPage() { const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const router = useRouter(); const queryClient = useQueryClient(); const { data, isLoading } = useQuery({ queryKey: ['users'], queryFn: async () => await apiClient.getUsers(1, 10), }); const deleteMutation = useMutation({ mutationFn: async (id: string) => await apiClient.deleteUser(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['users'] }); setIsDeleteDialogOpen(false); setSelectedUser(null); toast.success('User deleted successfully'); }, onError: (error) => { toast.error(error.message); }, }); const handleDelete = () => { if (selectedUser) { deleteMutation.mutate(selectedUser.id); } }; const columns: ColumnDef[] = [ { accessorKey: 'attributes.email', header: 'Email', }, { accessorKey: 'attributes.firstName', header: 'First Name', cell: ({ row }) => row.original.attributes.firstName || 'N/A', }, { accessorKey: 'attributes.lastName', header: 'Last Name', cell: ({ row }) => row.original.attributes.lastName || 'N/A', }, { accessorKey: 'attributes.status', header: 'Status', cell: ({ row }) => { const status = row.original.attributes.status; return ( {status} ); }, }, { accessorKey: 'attributes.created', header: 'Created', cell: ({ row }) => format(new Date(row.original.attributes.created), 'MMM d, yyyy'), }, { id: 'actions', cell: ({ row }) => { const user = row.original; return ( router.push(`/dashboard/users/${user.id}`)} > Edit { setSelectedUser(user); setIsDeleteDialogOpen(true); }} className="text-red-600" > Delete ); }, }, ]; if (isLoading) { return ( <>

Loading users...

); } return ( <>

Users

Manage your registered users and their access

Delete User Are you sure you want to delete {selectedUser?.attributes.email}? This action cannot be undone.
); }