import { createFileRoute, useNavigate } from '@tanstack/react-router' import { useQuery } from '@tanstack/react-query' import { useState } from 'react' import { globalMemberListOptions, type MemberWithAccount } from '@/api/members' import { usePagination } from '@/hooks/use-pagination' import { DataTable, type Column } from '@/components/shared/data-table' import { Badge } from '@/components/ui/badge' import { Input } from '@/components/ui/input' import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { Search, Plus, MoreVertical, Pencil, Users } from 'lucide-react' export const Route = createFileRoute('/_authenticated/members/')({ validateSearch: (search: Record) => ({ page: Number(search.page) || 1, limit: Number(search.limit) || 25, q: (search.q as string) || undefined, sort: (search.sort as string) || undefined, order: (search.order as 'asc' | 'desc') || 'asc', }), component: MembersListPage, }) function MembersListPage() { const navigate = useNavigate() const { params, setPage, setSearch, setSort } = usePagination() const [searchInput, setSearchInput] = useState(params.q ?? '') const { data, isLoading } = useQuery(globalMemberListOptions(params)) function handleSearchSubmit(e: React.FormEvent) { e.preventDefault() setSearch(searchInput) } const memberColumns: Column[] = [ { key: 'memberNumber', header: '#', render: (row) => {row.memberNumber ?? '-'}, }, { key: 'last_name', header: 'Name', sortable: true, render: (row) => {row.firstName} {row.lastName}, }, { key: 'email', header: 'Email', sortable: true, render: (row) => row.email ?? -, }, { key: 'phone', header: 'Phone', render: (row) => row.phone ?? -, }, { key: 'accountName', header: 'Account', render: (row) => row.accountName ?? -, }, { key: 'status', header: 'Status', render: (row) => row.isMinor ? Minor : Adult, }, { key: 'actions', header: '', render: (row) => ( navigate({ to: '/members/$memberId', params: { memberId: row.id } })}> Edit navigate({ to: '/accounts/$accountId', params: { accountId: row.accountId } })}> View Account ), }, ] return (

Members

setSearchInput(e.target.value)} className="pl-9" />
navigate({ to: '/members/$memberId', params: { memberId: member.id } })} />
) }