feat: enhance document management by adding attachments support

- Updated DocumentEditForm to include attachments in the document data.
- Modified getDocumentWithDetailsById to fetch attachments.
- Updated ZDocumentSchema to validate attachments.
- Enhanced AddSettingsFormPartial to handle attachments with default values and updated field names.
This commit is contained in:
Catalin Documenso
2025-04-29 14:11:11 +03:00
parent 7ac48cb3f5
commit 396a7db587
4 changed files with 17 additions and 3 deletions

View File

@ -185,6 +185,7 @@ export const DocumentEditForm = ({
visibility: data.visibility, visibility: data.visibility,
globalAccessAuth: data.globalAccessAuth ?? null, globalAccessAuth: data.globalAccessAuth ?? null,
globalActionAuth: data.globalActionAuth ?? null, globalActionAuth: data.globalActionAuth ?? null,
attachments: data.attachments ?? [],
}, },
meta: { meta: {
timezone, timezone,

View File

@ -27,6 +27,7 @@ export const getDocumentWithDetailsById = async ({
documentMeta: true, documentMeta: true,
recipients: true, recipients: true,
fields: true, fields: true,
attachments: true,
}, },
}); });

View File

@ -1,5 +1,6 @@
import type { z } from 'zod'; import type { z } from 'zod';
import { AttachmentSchema } from '@documenso/prisma/generated/zod/modelSchema/AttachmentSchema';
import { DocumentDataSchema } from '@documenso/prisma/generated/zod/modelSchema/DocumentDataSchema'; import { DocumentDataSchema } from '@documenso/prisma/generated/zod/modelSchema/DocumentDataSchema';
import { DocumentMetaSchema } from '@documenso/prisma/generated/zod/modelSchema/DocumentMetaSchema'; import { DocumentMetaSchema } from '@documenso/prisma/generated/zod/modelSchema/DocumentMetaSchema';
import { DocumentSchema } from '@documenso/prisma/generated/zod/modelSchema/DocumentSchema'; import { DocumentSchema } from '@documenso/prisma/generated/zod/modelSchema/DocumentSchema';
@ -59,6 +60,7 @@ export const ZDocumentSchema = DocumentSchema.pick({
}).nullable(), }).nullable(),
recipients: ZRecipientLiteSchema.array(), recipients: ZRecipientLiteSchema.array(),
fields: ZFieldSchema.array(), fields: ZFieldSchema.array(),
attachments: AttachmentSchema.array(),
}); });
export type TDocument = z.infer<typeof ZDocumentSchema>; export type TDocument = z.infer<typeof ZDocumentSchema>;

View File

@ -1,4 +1,4 @@
import { useEffect } from 'react'; import { useEffect, useId } from 'react';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { Trans } from '@lingui/react/macro'; import { Trans } from '@lingui/react/macro';
@ -89,11 +89,20 @@ export const AddSettingsFormPartial = ({
onSubmit, onSubmit,
}: AddSettingsFormProps) => { }: AddSettingsFormProps) => {
const { t } = useLingui(); const { t } = useLingui();
const initialId = useId();
const { documentAuthOption } = extractDocumentAuthMethods({ const { documentAuthOption } = extractDocumentAuthMethods({
documentAuth: document.authOptions, documentAuth: document.authOptions,
}); });
const defaultAttachments = [
{
formId: initialId,
label: '',
url: '',
},
];
const form = useForm<TAddSettingsFormSchema>({ const form = useForm<TAddSettingsFormSchema>({
resolver: zodResolver(ZAddSettingsFormSchema), resolver: zodResolver(ZAddSettingsFormSchema),
defaultValues: { defaultValues: {
@ -114,6 +123,7 @@ export const AddSettingsFormPartial = ({
language: document.documentMeta?.language ?? 'en', language: document.documentMeta?.language ?? 'en',
signatureTypes: extractTeamSignatureSettings(document.documentMeta), signatureTypes: extractTeamSignatureSettings(document.documentMeta),
}, },
attachments: document.attachments ?? defaultAttachments,
}, },
}); });
@ -136,7 +146,7 @@ export const AddSettingsFormPartial = ({
appendAttachment({ appendAttachment({
formId: nanoid(12), formId: nanoid(12),
label: '', label: '',
link: '', url: '',
}); });
}; };
@ -502,7 +512,7 @@ export const AddSettingsFormPartial = ({
<div className="flex-1"> <div className="flex-1">
<FormField <FormField
control={form.control} control={form.control}
name={`attachments.${index}.link`} name={`attachments.${index}.url`}
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel className="flex flex-row items-center"> <FormLabel className="flex flex-row items-center">