mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 08:13:56 +10:00
chore: show signing order when creating a document from template (#1410)
### Templates without signing order  ### Template with signing order 
This commit is contained in:
@ -144,6 +144,7 @@ export const TemplatesDataTable = ({
|
|||||||
<div className="flex items-center gap-x-4">
|
<div className="flex items-center gap-x-4">
|
||||||
<UseTemplateDialog
|
<UseTemplateDialog
|
||||||
templateId={row.original.id}
|
templateId={row.original.id}
|
||||||
|
templateSigningOrder={row.original.templateMeta?.signingOrder}
|
||||||
recipients={row.original.Recipient}
|
recipients={row.original.Recipient}
|
||||||
documentRootPath={documentRootPath}
|
documentRootPath={documentRootPath}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -15,7 +15,9 @@ import {
|
|||||||
} from '@documenso/lib/constants/template';
|
} from '@documenso/lib/constants/template';
|
||||||
import { AppError } from '@documenso/lib/errors/app-error';
|
import { AppError } from '@documenso/lib/errors/app-error';
|
||||||
import type { Recipient } from '@documenso/prisma/client';
|
import type { Recipient } from '@documenso/prisma/client';
|
||||||
|
import { DocumentSigningOrder } from '@documenso/prisma/client';
|
||||||
import { trpc } from '@documenso/trpc/react';
|
import { trpc } from '@documenso/trpc/react';
|
||||||
|
import { cn } from '@documenso/ui/lib/utils';
|
||||||
import { Button } from '@documenso/ui/primitives/button';
|
import { Button } from '@documenso/ui/primitives/button';
|
||||||
import { Checkbox } from '@documenso/ui/primitives/checkbox';
|
import { Checkbox } from '@documenso/ui/primitives/checkbox';
|
||||||
import {
|
import {
|
||||||
@ -51,6 +53,7 @@ const ZAddRecipientsForNewDocumentSchema = z
|
|||||||
id: z.number(),
|
id: z.number(),
|
||||||
email: z.string().email(),
|
email: z.string().email(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
|
signingOrder: z.number().optional(),
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
@ -86,6 +89,7 @@ type TAddRecipientsForNewDocumentSchema = z.infer<typeof ZAddRecipientsForNewDoc
|
|||||||
|
|
||||||
export type UseTemplateDialogProps = {
|
export type UseTemplateDialogProps = {
|
||||||
templateId: number;
|
templateId: number;
|
||||||
|
templateSigningOrder?: DocumentSigningOrder | null;
|
||||||
recipients: Recipient[];
|
recipients: Recipient[];
|
||||||
documentRootPath: string;
|
documentRootPath: string;
|
||||||
};
|
};
|
||||||
@ -94,6 +98,7 @@ export function UseTemplateDialog({
|
|||||||
recipients,
|
recipients,
|
||||||
documentRootPath,
|
documentRootPath,
|
||||||
templateId,
|
templateId,
|
||||||
|
templateSigningOrder,
|
||||||
}: UseTemplateDialogProps) {
|
}: UseTemplateDialogProps) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
@ -108,21 +113,24 @@ export function UseTemplateDialog({
|
|||||||
resolver: zodResolver(ZAddRecipientsForNewDocumentSchema),
|
resolver: zodResolver(ZAddRecipientsForNewDocumentSchema),
|
||||||
defaultValues: {
|
defaultValues: {
|
||||||
sendDocument: false,
|
sendDocument: false,
|
||||||
recipients: recipients.map((recipient) => {
|
recipients: recipients
|
||||||
const isRecipientEmailPlaceholder = recipient.email.match(
|
.sort((a, b) => (a.signingOrder || 0) - (b.signingOrder || 0))
|
||||||
TEMPLATE_RECIPIENT_EMAIL_PLACEHOLDER_REGEX,
|
.map((recipient) => {
|
||||||
);
|
const isRecipientEmailPlaceholder = recipient.email.match(
|
||||||
|
TEMPLATE_RECIPIENT_EMAIL_PLACEHOLDER_REGEX,
|
||||||
|
);
|
||||||
|
|
||||||
const isRecipientNamePlaceholder = recipient.name.match(
|
const isRecipientNamePlaceholder = recipient.name.match(
|
||||||
TEMPLATE_RECIPIENT_NAME_PLACEHOLDER_REGEX,
|
TEMPLATE_RECIPIENT_NAME_PLACEHOLDER_REGEX,
|
||||||
);
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: recipient.id,
|
id: recipient.id,
|
||||||
name: !isRecipientNamePlaceholder ? recipient.name : '',
|
name: !isRecipientNamePlaceholder ? recipient.name : '',
|
||||||
email: !isRecipientEmailPlaceholder ? recipient.email : '',
|
email: !isRecipientEmailPlaceholder ? recipient.email : '',
|
||||||
};
|
signingOrder: recipient.signingOrder ?? undefined,
|
||||||
}),
|
};
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -203,6 +211,33 @@ export function UseTemplateDialog({
|
|||||||
<div className="custom-scrollbar -m-1 max-h-[60vh] space-y-4 overflow-y-auto p-1">
|
<div className="custom-scrollbar -m-1 max-h-[60vh] space-y-4 overflow-y-auto p-1">
|
||||||
{formRecipients.map((recipient, index) => (
|
{formRecipients.map((recipient, index) => (
|
||||||
<div className="flex w-full flex-row space-x-4" key={recipient.id}>
|
<div className="flex w-full flex-row space-x-4" key={recipient.id}>
|
||||||
|
{templateSigningOrder === DocumentSigningOrder.SEQUENTIAL && (
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name={`recipients.${index}.signingOrder`}
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem
|
||||||
|
className={cn('w-20', {
|
||||||
|
'mt-8': index === 0,
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
<FormControl>
|
||||||
|
<Input
|
||||||
|
{...field}
|
||||||
|
disabled
|
||||||
|
className="items-center justify-center"
|
||||||
|
value={
|
||||||
|
field.value?.toString() ||
|
||||||
|
recipients[index]?.signingOrder?.toString()
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name={`recipients.${index}.email`}
|
name={`recipients.${index}.email`}
|
||||||
|
|||||||
@ -51,6 +51,11 @@ export const findTemplates = async ({
|
|||||||
},
|
},
|
||||||
Field: true,
|
Field: true,
|
||||||
Recipient: true,
|
Recipient: true,
|
||||||
|
templateMeta: {
|
||||||
|
select: {
|
||||||
|
signingOrder: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
directLink: {
|
directLink: {
|
||||||
select: {
|
select: {
|
||||||
token: true,
|
token: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user