import { useMemo } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { type Field, type Recipient, type Signature, SigningStatus } from '@prisma/client'; import { useForm } from 'react-hook-form'; import { useRevalidator } from 'react-router'; import { z } from 'zod'; import { trpc } from '@documenso/trpc/react'; 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 { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@documenso/ui/primitives/form/form'; import { Input } from '@documenso/ui/primitives/input'; import { useToast } from '@documenso/ui/primitives/use-toast'; const ZAdminUpdateRecipientFormSchema = z.object({ name: z.string().min(1), email: z.string().email(), }); type TAdminUpdateRecipientFormSchema = z.infer; export type RecipientItemProps = { recipient: Recipient & { fields: Array< Field & { signature: Signature | null; } >; }; }; export const AdminDocumentRecipientItemTable = ({ recipient }: RecipientItemProps) => { const { _ } = useLingui(); const { toast } = useToast(); const { revalidate } = useRevalidator(); const form = useForm({ defaultValues: { name: recipient.name, email: recipient.email, }, }); const { mutateAsync: updateRecipient } = trpc.admin.recipient.update.useMutation(); const columns = useMemo(() => { return [ { header: 'ID', accessorKey: 'id', cell: ({ row }) =>
{row.original.id}
, }, { header: _(msg`Type`), accessorKey: 'type', cell: ({ row }) =>
{row.original.type}
, }, { header: _(msg`Inserted`), accessorKey: 'inserted', cell: ({ row }) =>
{row.original.inserted ? 'True' : 'False'}
, }, { header: _(msg`Value`), accessorKey: 'customText', cell: ({ row }) =>
{row.original.customText}
, }, { header: _(msg`Signature`), accessorKey: 'signature', cell: ({ row }) => (
{row.original.signature?.typedSignature && ( {row.original.signature.typedSignature} )} {row.original.signature?.signatureImageAsBase64 && ( Signature )}
), }, ] satisfies DataTableColumnDef<(typeof recipient)['fields'][number]>[]; }, []); const onUpdateRecipientFormSubmit = async ({ name, email }: TAdminUpdateRecipientFormSchema) => { try { await updateRecipient({ id: recipient.id, name, email, }); toast({ title: _(msg`Recipient updated`), description: _(msg`The recipient has been updated successfully`), }); await revalidate(); } catch (error) { toast({ title: _(msg`Failed to update recipient`), description: error.message, variant: 'destructive', }); } }; return (
( Name )} /> ( Email )} />

Fields

); };