import { useMemo } from 'react'; import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { DocumentSource, DocumentStatus as DocumentStatusEnum } from '@prisma/client'; import { InfoIcon } from 'lucide-react'; import { DateTime } from 'luxon'; import { useSearchParams } from 'react-router'; import { z } from 'zod'; import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params'; import { ZUrlSearchParamsSchema } from '@documenso/lib/types/search-params'; import { trpc } from '@documenso/trpc/react'; 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 { SelectItem } from '@documenso/ui/primitives/select'; import { Skeleton } from '@documenso/ui/primitives/skeleton'; import { TableCell } from '@documenso/ui/primitives/table'; import { Tooltip, TooltipContent, TooltipTrigger } from '@documenso/ui/primitives/tooltip'; import { SearchParamSelector } from '~/components/forms/search-param-selector'; import { DocumentSearch } from '~/components/general/document/document-search'; import { DocumentStatus } from '~/components/general/document/document-status'; import { StackAvatarsWithTooltip } from '~/components/general/stack-avatars-with-tooltip'; import { DocumentsTableActionButton } from '~/components/tables/documents-table-action-button'; import { DocumentsTableActionDropdown } from '~/components/tables/documents-table-action-dropdown'; import { DataTableTitle } from '~/components/tables/documents-table-title'; import { useCurrentTeam } from '~/providers/team'; import { PeriodSelector } from '../period-selector'; const DOCUMENT_SOURCE_LABELS: { [key in DocumentSource]: MessageDescriptor } = { DOCUMENT: msg`Document`, TEMPLATE: msg`Template`, TEMPLATE_DIRECT_LINK: msg`Direct link`, }; const ZDocumentSearchParamsSchema = ZUrlSearchParamsSchema.extend({ source: z .nativeEnum(DocumentSource) .optional() .catch(() => undefined), status: z .nativeEnum(DocumentStatusEnum) .optional() .catch(() => undefined), }); type TemplatePageViewDocumentsTableProps = { templateId: number; }; export const TemplatePageViewDocumentsTable = ({ templateId, }: TemplatePageViewDocumentsTableProps) => { const { _, i18n } = useLingui(); const [searchParams] = useSearchParams(); const updateSearchParams = useUpdateSearchParams(); const team = useCurrentTeam(); const parsedSearchParams = ZDocumentSearchParamsSchema.parse( Object.fromEntries(searchParams ?? []), ); const { data, isLoading, isLoadingError } = trpc.document.find.useQuery( { templateId, page: parsedSearchParams.page, perPage: parsedSearchParams.perPage, query: parsedSearchParams.query, source: parsedSearchParams.source, status: parsedSearchParams.status, }, { placeholderData: (previousData) => previousData, }, ); const onPaginationChange = (page: number, perPage: number) => { updateSearchParams({ page, perPage, }); }; const results = data ?? { data: [], perPage: 10, currentPage: 1, totalPages: 1, }; const columns = useMemo(() => { return [ { header: _(msg`Created`), accessorKey: 'createdAt', cell: ({ row }) => i18n.date(row.original.createdAt, { ...DateTime.DATETIME_SHORT, hourCycle: 'h12' }), }, { header: _(msg`Title`), cell: ({ row }) => , }, { header: _(msg`Recipient`), accessorKey: 'recipient', cell: ({ row }) => ( ), }, { header: _(msg`Status`), accessorKey: 'status', cell: ({ row }) => , size: 140, }, { header: () => (
Source
  • Template

    This document was created by you or a team member using the template above.

  • Direct Link

    This document was created using a direct link.

), accessorKey: 'type', cell: ({ row }) => (
{_(DOCUMENT_SOURCE_LABELS[row.original.source])}
), }, { id: 'actions', header: _(msg`Actions`), cell: ({ row }) => (
), }, ] satisfies DataTableColumnDef<(typeof results)['data'][number]>[]; }, []); return (
[...DocumentStatusEnum.COMPLETED].includes(value as unknown as string) } > Any Status Completed Pending Draft [...DocumentSource.TEMPLATE].includes(value as unknown as string) } > Any Source Template Direct Link
), }} > {(table) => }
); };