'use client'; import { useTransition } from 'react'; import Link from 'next/link'; import { Loader } from 'lucide-react'; import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params'; import type { FindResultSet } from '@documenso/lib/types/find-result-set'; import { extractInitials } from '@documenso/lib/utils/recipient-formatter'; import type { Document, User } from '@documenso/prisma/client'; import { Avatar, AvatarFallback } from '@documenso/ui/primitives/avatar'; import { DataTable } from '@documenso/ui/primitives/data-table'; import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination'; import { Tooltip, TooltipContent, TooltipTrigger } from '@documenso/ui/primitives/tooltip'; import { DocumentStatus } from '~/components/formatter/document-status'; import { LocaleDate } from '~/components/formatter/locale-date'; export type DocumentsDataTableProps = { results: FindResultSet< Document & { User: Pick; } >; }; export const DocumentsDataTable = ({ results }: DocumentsDataTableProps) => { const [isPending, startTransition] = useTransition(); const updateSearchParams = useUpdateSearchParams(); const onPaginationChange = (page: number, perPage: number) => { startTransition(() => { updateSearchParams({ page, perPage, }); }); }; return (
, }, { header: 'Title', accessorKey: 'title', cell: ({ row }) => { return (
{row.original.title}
); }, }, { header: 'Owner', accessorKey: 'owner', cell: ({ row }) => { const avatarFallbackText = row.original.User.name ? extractInitials(row.original.User.name) : row.original.User.email.slice(0, 1).toUpperCase(); return ( {avatarFallbackText} {avatarFallbackText}
{row.original.User.name} {row.original.User.email}
); }, }, { header: 'Last updated', accessorKey: 'updatedAt', cell: ({ row }) => , }, { header: 'Status', accessorKey: 'status', cell: ({ row }) => , }, ]} data={results.data} perPage={results.perPage} currentPage={results.currentPage} totalPages={results.totalPages} onPaginationChange={onPaginationChange} > {(table) => }
{isPending && (
)}
); };