import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params'; import { TEAM_MEMBER_ROLE_MAP } from '@documenso/lib/constants/teams-translations'; import { ZUrlSearchParamsSchema } from '@documenso/lib/types/search-params'; import type { TeamMemberRole } from '@documenso/prisma/generated/types'; import { trpc } from '@documenso/trpc/react'; import { Badge } from '@documenso/ui/primitives/badge'; 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 { HoverCard, HoverCardContent, HoverCardTrigger } from '@documenso/ui/primitives/hover-card'; import { Skeleton } from '@documenso/ui/primitives/skeleton'; import { TableCell } from '@documenso/ui/primitives/table'; import { useLingui } from '@lingui/react'; import { useLingui as useLinguiMacro } from '@lingui/react/macro'; import { useMemo } from 'react'; import { Link, useSearchParams } from 'react-router'; type AdminUserTeamsTableProps = { userId: number; }; export const AdminUserTeamsTable = ({ userId }: AdminUserTeamsTableProps) => { const { i18n } = useLingui(); const { t } = useLinguiMacro(); const [searchParams] = useSearchParams(); const updateSearchParams = useUpdateSearchParams(); const parsedSearchParams = ZUrlSearchParamsSchema.parse(Object.fromEntries(searchParams ?? [])); const { data, isLoading, isLoadingError } = trpc.admin.user.findTeams.useQuery({ userId, query: parsedSearchParams.query, page: parsedSearchParams.page, perPage: parsedSearchParams.perPage, }); const onPaginationChange = (page: number, perPage: number) => { updateSearchParams({ page, perPage, }); }; const results = data ?? { data: [], perPage: 10, currentPage: 1, totalPages: 1, }; const columns = useMemo(() => { return [ { header: t`Team`, accessorKey: 'name', cell: ({ row }) => ( {row.original.name}
id
{row.original.id}
url
{row.original.url}
), }, { header: t`Organisation`, accessorKey: 'organisation', cell: ({ row }) => ( {row.original.organisation.name} ), }, { header: t`Role`, accessorKey: 'teamRole', cell: ({ row }) => ( {i18n._(TEAM_MEMBER_ROLE_MAP[row.original.teamRole as TeamMemberRole])} ), }, { header: t`Created At`, accessorKey: 'createdAt', cell: ({ row }) => i18n.date(row.original.createdAt), }, ] satisfies DataTableColumnDef<(typeof results)['data'][number]>[]; }, []); return ( ), }} > {(table) => table.getPageCount() > 1 ? : null } ); };