import { useEffect, useMemo, useState, useTransition } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { ChevronDownIcon, ChevronUpIcon, ChevronsUpDown, Loader } from 'lucide-react'; import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value'; import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params'; import type { DataTableColumnDef } from '@documenso/ui/primitives/data-table'; import { DataTable } from '@documenso/ui/primitives/data-table'; import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination'; import { Input } from '@documenso/ui/primitives/input'; export type SigningVolume = { id: number; name: string; email: string; signingVolume: number; createdAt: Date; planId: string; userId?: number | null; teamId?: number | null; isTeam: boolean; }; type LeaderboardTableProps = { signingVolume: SigningVolume[]; totalPages: number; perPage: number; page: number; sortBy: 'name' | 'createdAt' | 'signingVolume'; sortOrder: 'asc' | 'desc'; }; export const AdminLeaderboardTable = ({ signingVolume, totalPages, perPage, page, sortBy, sortOrder, }: LeaderboardTableProps) => { const { _, i18n } = useLingui(); const [isPending, startTransition] = useTransition(); const updateSearchParams = useUpdateSearchParams(); const [searchString, setSearchString] = useState(''); const debouncedSearchString = useDebouncedValue(searchString, 1000); const columns = useMemo(() => { return [ { header: () => (