diff --git a/packages/api/v1/schema.ts b/packages/api/v1/schema.ts index 8b4c27187..e253787ad 100644 --- a/packages/api/v1/schema.ts +++ b/packages/api/v1/schema.ts @@ -24,6 +24,7 @@ import { } from '@documenso/lib/types/document-auth'; import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email'; import { ZFieldMetaPrefillFieldsSchema, ZFieldMetaSchema } from '@documenso/lib/types/field-meta'; +import { AttachmentSchema } from '@documenso/prisma/generated/zod/modelSchema/AttachmentSchema'; extendZodWithOpenApi(z); @@ -176,6 +177,13 @@ export const ZCreateDocumentMutationSchema = z.object({ description: 'The globalActionAuth property is only available for Enterprise accounts.', }), formValues: z.record(z.string(), z.union([z.string(), z.boolean(), z.number()])).optional(), + attachments: AttachmentSchema.pick({ + id: true, + label: true, + url: true, + }) + .array() + .optional(), }); export type TCreateDocumentMutationSchema = z.infer; diff --git a/packages/lib/server-only/document/update-document.ts b/packages/lib/server-only/document/update-document.ts index f93661583..bf7a3b687 100644 --- a/packages/lib/server-only/document/update-document.ts +++ b/packages/lib/server-only/document/update-document.ts @@ -8,6 +8,7 @@ import type { ApiRequestMetadata } from '@documenso/lib/universal/extract-reques import type { CreateDocumentAuditLogDataResponse } from '@documenso/lib/utils/document-audit-logs'; import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs'; import { prisma } from '@documenso/prisma'; +import type { Attachment } from '@documenso/prisma/generated/zod/modelSchema/AttachmentSchema'; import { AppError, AppErrorCode } from '../../errors/app-error'; import type { TDocumentAccessAuthTypes, TDocumentActionAuthTypes } from '../../types/document-auth'; @@ -24,6 +25,7 @@ export type UpdateDocumentOptions = { globalAccessAuth?: TDocumentAccessAuthTypes | null; globalActionAuth?: TDocumentActionAuthTypes | null; useLegacyFieldInsertion?: boolean; + attachments?: Pick[]; }; requestMetadata: ApiRequestMetadata; }; @@ -258,6 +260,15 @@ export const updateDocument = async ({ visibility: data.visibility as DocumentVisibility, useLegacyFieldInsertion: data.useLegacyFieldInsertion, authOptions, + attachments: { + deleteMany: {}, + create: + data.attachments?.map((attachment) => ({ + type: 'LINK', + label: attachment.label, + url: attachment.url, + })) || [], + }, }, }); diff --git a/packages/lib/types/document.ts b/packages/lib/types/document.ts index 80e8ec9b1..ba48f45a2 100644 --- a/packages/lib/types/document.ts +++ b/packages/lib/types/document.ts @@ -60,7 +60,14 @@ export const ZDocumentSchema = DocumentSchema.pick({ }).nullable(), recipients: ZRecipientLiteSchema.array(), fields: ZFieldSchema.array(), - attachments: AttachmentSchema.array(), + attachments: AttachmentSchema.pick({ + id: true, + type: true, + label: true, + url: true, + }) + .array() + .optional(), }); export type TDocument = z.infer; diff --git a/packages/trpc/server/document-router/update-document.types.ts b/packages/trpc/server/document-router/update-document.types.ts index e0f91b482..b9e6026b0 100644 --- a/packages/trpc/server/document-router/update-document.types.ts +++ b/packages/trpc/server/document-router/update-document.types.ts @@ -8,6 +8,7 @@ import { ZDocumentActionAuthTypesSchema, } from '@documenso/lib/types/document-auth'; import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email'; +import AttachmentSchema from '@documenso/prisma/generated/zod/modelSchema/AttachmentSchema'; import type { TrpcRouteMeta } from '../trpc'; import { @@ -45,6 +46,13 @@ export const ZUpdateDocumentRequestSchema = z.object({ globalAccessAuth: ZDocumentAccessAuthTypesSchema.nullish(), globalActionAuth: ZDocumentActionAuthTypesSchema.nullish(), useLegacyFieldInsertion: z.boolean().optional(), + attachments: AttachmentSchema.pick({ + id: true, + label: true, + url: true, + }) + .array() + .optional(), }) .optional(), meta: z diff --git a/packages/ui/primitives/document-flow/add-settings.tsx b/packages/ui/primitives/document-flow/add-settings.tsx index 875ac02f5..1a3175c2b 100644 --- a/packages/ui/primitives/document-flow/add-settings.tsx +++ b/packages/ui/primitives/document-flow/add-settings.tsx @@ -147,6 +147,8 @@ export const AddSettingsFormPartial = ({ formId: nanoid(12), label: '', url: '', + // fix this + id: '', }); }; diff --git a/packages/ui/primitives/document-flow/add-settings.types.ts b/packages/ui/primitives/document-flow/add-settings.types.ts index b185b0817..481322a40 100644 --- a/packages/ui/primitives/document-flow/add-settings.types.ts +++ b/packages/ui/primitives/document-flow/add-settings.types.ts @@ -11,6 +11,7 @@ import { ZDocumentActionAuthTypesSchema, } from '@documenso/lib/types/document-auth'; import { isValidRedirectUrl } from '@documenso/lib/utils/is-valid-redirect-url'; +import { AttachmentSchema } from '@documenso/prisma/generated/zod/modelSchema/AttachmentSchema'; import { ZDocumentMetaDateFormatSchema, ZDocumentMetaTimezoneSchema, @@ -58,13 +59,16 @@ export const ZAddSettingsFormSchema = 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 TAddSettingsFormSchema = z.infer;