import { zEmail } from '@documenso/lib/utils/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 { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@documenso/ui/primitives/select'; import { useToast } from '@documenso/ui/primitives/use-toast'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { type Field, type Recipient, RecipientRole, type Signature, SigningStatus } from '@prisma/client'; import { useMemo } from 'react'; import { useForm } from 'react-hook-form'; import { useRevalidator } from 'react-router'; import { z } from 'zod'; const RECIPIENT_ROLE_LABELS: Record = { [RecipientRole.SIGNER]: 'Signer', [RecipientRole.APPROVER]: 'Approver', [RecipientRole.CC]: 'CC', [RecipientRole.VIEWER]: 'Viewer', [RecipientRole.ASSISTANT]: 'Assistant', }; const ZAdminUpdateRecipientFormSchema = z.object({ name: z.string().min(1), email: zEmail(), role: z.nativeEnum(RecipientRole), }); 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, role: recipient.role, }, }); const { mutateAsync: updateRecipient } = trpc.admin.recipient.update.useMutation(); const columns = useMemo(() => { return [ { header: _(msg`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, role }: TAdminUpdateRecipientFormSchema) => { try { await updateRecipient({ id: recipient.id, name, email, role, }); 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 )} /> ( Role )} />

Fields

); };