feat: add support for attachments in template management

- Enhanced TemplateEditForm to include attachments in the template data.
- Updated createDocumentFromTemplate to handle attachment creation.
- Modified updateTemplate to manage attachment updates and deletions.
- Integrated attachments into ZTemplateSchema and ZAddTemplateSettingsFormSchema for validation.
- Improved getTemplateById to fetch attachments alongside other template data.
This commit is contained in:
Catalin Documenso
2025-05-06 15:48:52 +03:00
parent d10ec437cf
commit cec25ac719
9 changed files with 94 additions and 10 deletions

View File

@ -124,6 +124,11 @@ export const AddTemplateSettingsFormPartial = ({
emailSettings: ZDocumentEmailSettingsSchema.parse(template?.templateMeta?.emailSettings),
signatureTypes: extractTeamSignatureSettings(template?.templateMeta),
},
attachments: template.attachments?.map((attachment) => ({
...attachment,
id: String(attachment.id),
formId: String(attachment.id),
})),
},
});
@ -138,12 +143,20 @@ export const AddTemplateSettingsFormPartial = ({
const onAddAttachment = () => {
appendAttachment({
id: nanoid(12),
formId: nanoid(12),
label: '',
link: '',
url: '',
});
};
const onRemoveAttachment = (index: number) => {
removeAttachment(index);
const updatedAttachments = attachments.filter((_, idx) => idx !== index);
form.setValue('attachments', updatedAttachments);
};
const { stepIndex, currentStep, totalSteps, previousStep } = useStep();
const distributionMethod = form.watch('meta.distributionMethod');
@ -622,7 +635,7 @@ export const AddTemplateSettingsFormPartial = ({
<div className="flex-1">
<FormField
control={form.control}
name={`attachments.${index}.link`}
name={`attachments.${index}.url`}
render={({ field }) => (
<FormItem>
<FormLabel className="flex flex-row items-center">
@ -641,7 +654,7 @@ export const AddTemplateSettingsFormPartial = ({
<div className="flex-none pt-8">
<button
onClick={() => removeAttachment(index)}
onClick={() => onRemoveAttachment(index)}
className="hover:bg-muted rounded-md"
>
<Trash className="h-4 w-4" />

View File

@ -13,6 +13,7 @@ import {
} from '@documenso/lib/types/document-auth';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { isValidRedirectUrl } from '@documenso/lib/utils/is-valid-redirect-url';
import { AttachmentSchema } from '@documenso/prisma/generated/zod/modelSchema/AttachmentSchema';
import {
ZDocumentMetaDateFormatSchema,
ZDocumentMetaTimezoneSchema,
@ -55,13 +56,16 @@ export const ZAddTemplateSettingsFormSchema = z.object({
message: msg`At least one signature type must be enabled`.id,
}),
}),
attachments: z.array(
z.object({
attachments: AttachmentSchema.pick({
id: true,
label: true,
url: true,
})
.extend({
formId: z.string().min(1),
label: z.string(),
link: z.string(),
}),
),
})
.array()
.optional(),
});
export type TAddTemplateSettingsFormSchema = z.infer<typeof ZAddTemplateSettingsFormSchema>;