From 2802813c76d7942d07018e17bab911344712b3a4 Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Wed, 12 Nov 2025 18:22:30 +1100 Subject: [PATCH] fix: add default values for envelope field meta (#2181) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🙏 --- packages/lib/types/field-meta.ts | 49 +++++++++++++++++++ .../envelope-router/create-envelope.types.ts | 4 +- .../create-envelope-fields.types.ts | 4 +- .../update-envelope-fields.types.ts | 4 +- 4 files changed, 55 insertions(+), 6 deletions(-) diff --git a/packages/lib/types/field-meta.ts b/packages/lib/types/field-meta.ts index b406f5d00..96de93634 100644 --- a/packages/lib/types/field-meta.ts +++ b/packages/lib/types/field-meta.ts @@ -372,3 +372,52 @@ export const FIELD_META_DEFAULT_VALUES: Record = { [FieldType.CHECKBOX]: FIELD_CHECKBOX_META_DEFAULT_VALUES, [FieldType.DROPDOWN]: FIELD_DROPDOWN_META_DEFAULT_VALUES, } as const; + +export const ZEnvelopeFieldAndMetaSchema = z.discriminatedUnion('type', [ + z.object({ + type: z.literal(FieldType.SIGNATURE), + fieldMeta: ZSignatureFieldMeta.optional().default(FIELD_SIGNATURE_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.FREE_SIGNATURE), + fieldMeta: z.undefined(), + }), + z.object({ + type: z.literal(FieldType.INITIALS), + fieldMeta: ZInitialsFieldMeta.optional().default(FIELD_INITIALS_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.NAME), + fieldMeta: ZNameFieldMeta.optional().default(FIELD_NAME_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.EMAIL), + fieldMeta: ZEmailFieldMeta.optional().default(FIELD_EMAIL_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.DATE), + fieldMeta: ZDateFieldMeta.optional().default(FIELD_DATE_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.TEXT), + fieldMeta: ZTextFieldMeta.optional().default(FIELD_TEXT_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.NUMBER), + fieldMeta: ZNumberFieldMeta.optional().default(FIELD_NUMBER_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.RADIO), + fieldMeta: ZRadioFieldMeta.optional().default(FIELD_RADIO_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.CHECKBOX), + fieldMeta: ZCheckboxFieldMeta.optional().default(FIELD_CHECKBOX_META_DEFAULT_VALUES), + }), + z.object({ + type: z.literal(FieldType.DROPDOWN), + fieldMeta: ZDropdownFieldMeta.optional().default(FIELD_DROPDOWN_META_DEFAULT_VALUES), + }), +]); + +type TEnvelopeFieldAndMeta = z.infer; diff --git a/packages/trpc/server/envelope-router/create-envelope.types.ts b/packages/trpc/server/envelope-router/create-envelope.types.ts index 222e3d80e..3ee653910 100644 --- a/packages/trpc/server/envelope-router/create-envelope.types.ts +++ b/packages/trpc/server/envelope-router/create-envelope.types.ts @@ -16,7 +16,7 @@ import { ZClampedFieldWidthSchema, ZFieldPageNumberSchema, } from '@documenso/lib/types/field'; -import { ZFieldAndMetaSchema } from '@documenso/lib/types/field-meta'; +import { ZEnvelopeFieldAndMetaSchema } from '@documenso/lib/types/field-meta'; import { zodFormData } from '../../utils/zod-form-data'; import { @@ -55,7 +55,7 @@ export const ZCreateEnvelopePayloadSchema = z.object({ recipients: z .array( ZCreateRecipientSchema.extend({ - fields: ZFieldAndMetaSchema.and( + fields: ZEnvelopeFieldAndMetaSchema.and( z.object({ identifier: z .union([z.string(), z.number()]) diff --git a/packages/trpc/server/envelope-router/envelope-fields/create-envelope-fields.types.ts b/packages/trpc/server/envelope-router/envelope-fields/create-envelope-fields.types.ts index 128c2cceb..065195d04 100644 --- a/packages/trpc/server/envelope-router/envelope-fields/create-envelope-fields.types.ts +++ b/packages/trpc/server/envelope-router/envelope-fields/create-envelope-fields.types.ts @@ -8,7 +8,7 @@ import { ZFieldPageNumberSchema, ZFieldSchema, } from '@documenso/lib/types/field'; -import { ZFieldAndMetaSchema } from '@documenso/lib/types/field-meta'; +import { ZEnvelopeFieldAndMetaSchema } from '@documenso/lib/types/field-meta'; import type { TrpcRouteMeta } from '../../trpc'; @@ -22,7 +22,7 @@ export const createEnvelopeFieldsMeta: TrpcRouteMeta = { }, }; -const ZCreateFieldSchema = ZFieldAndMetaSchema.and( +const ZCreateFieldSchema = ZEnvelopeFieldAndMetaSchema.and( z.object({ recipientId: z.number().describe('The ID of the recipient to create the field for'), envelopeItemId: z diff --git a/packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.types.ts b/packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.types.ts index 0bead4d95..8dd96394d 100644 --- a/packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.types.ts +++ b/packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.types.ts @@ -8,7 +8,7 @@ import { ZFieldPageNumberSchema, ZFieldSchema, } from '@documenso/lib/types/field'; -import { ZFieldAndMetaSchema } from '@documenso/lib/types/field-meta'; +import { ZEnvelopeFieldAndMetaSchema } from '@documenso/lib/types/field-meta'; import type { TrpcRouteMeta } from '../../trpc'; @@ -22,7 +22,7 @@ export const updateEnvelopeFieldsMeta: TrpcRouteMeta = { }, }; -const ZUpdateFieldSchema = ZFieldAndMetaSchema.and( +const ZUpdateFieldSchema = ZEnvelopeFieldAndMetaSchema.and( z.object({ id: z.number().describe('The ID of the field to update.'), envelopeItemId: z