'use client'; import { useMemo, useState } from 'react'; import Link from 'next/link'; import { useSearchParams } from 'next/navigation'; import { msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { 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 { extractInitials } from '@documenso/lib/utils/recipient-formatter'; import { trpc } from '@documenso/trpc/react'; import { Avatar, AvatarFallback } from '@documenso/ui/primitives/avatar'; 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'; import { Tooltip, TooltipContent, TooltipTrigger } from '@documenso/ui/primitives/tooltip'; import { DocumentStatus } from '~/components/formatter/document-status'; // export type AdminDocumentResultsProps = {}; export const AdminDocumentResults = () => { const { _, i18n } = useLingui(); const searchParams = useSearchParams(); const updateSearchParams = useUpdateSearchParams(); const [term, setTerm] = useState(() => searchParams?.get?.('term') ?? ''); const debouncedTerm = useDebouncedValue(term, 500); const page = searchParams?.get?.('page') ? Number(searchParams.get('page')) : undefined; const perPage = searchParams?.get?.('perPage') ? Number(searchParams.get('perPage')) : undefined; const { data: findDocumentsData, isPending: isFindDocumentsLoading } = trpc.admin.findDocuments.useQuery( { query: debouncedTerm, page: page || 1, perPage: perPage || 20, }, { placeholderData: (previousData) => previousData, }, ); const results = findDocumentsData ?? { data: [], perPage: 20, currentPage: 1, totalPages: 1, }; const columns = useMemo(() => { return [ { header: _(msg`Created`), accessorKey: 'createdAt', cell: ({ row }) => i18n.date(row.original.createdAt), }, { header: _(msg`Title`), accessorKey: 'title', cell: ({ row }) => { return ( {row.original.title} ); }, }, { header: _(msg`Status`), accessorKey: 'status', cell: ({ row }) => , }, { header: _(msg`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 }) => i18n.date(row.original.updatedAt), }, ] satisfies DataTableColumnDef<(typeof results)['data'][number]>[]; }, []); const onPaginationChange = (newPage: number, newPerPage: number) => { updateSearchParams({ page: newPage, perPage: newPerPage, }); }; return (
setTerm(e.target.value)} />
{(table) => } {isFindDocumentsLoading && (
)}
); };