import { useEffect, useMemo, useState, useTransition } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import type { Role, Subscription } from '@prisma/client'; import { Edit, Loader } from 'lucide-react'; import { Link } from 'react-router'; import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value'; import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params'; import { Button } from '@documenso/ui/primitives/button'; 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'; type UserData = { id: number; name: string | null; email: string; roles: Role[]; subscriptions?: SubscriptionLite[] | null; documentCount: number; }; type SubscriptionLite = Pick< Subscription, 'id' | 'status' | 'planId' | 'priceId' | 'createdAt' | 'periodEnd' >; type AdminDashboardUsersTableProps = { users: UserData[]; totalPages: number; perPage: number; page: number; }; export const AdminDashboardUsersTable = ({ users, totalPages, perPage, page, }: AdminDashboardUsersTableProps) => { const { _ } = useLingui(); const [isPending, startTransition] = useTransition(); const updateSearchParams = useUpdateSearchParams(); const [searchString, setSearchString] = useState(''); const debouncedSearchString = useDebouncedValue(searchString, 1000); const columns = useMemo(() => { return [ { header: 'ID', accessorKey: 'id', cell: ({ row }) =>