diff --git a/apps/marketing/src/app/(marketing)/singleplayer/client.tsx b/apps/marketing/src/app/(marketing)/singleplayer/client.tsx index e0b55dbf5..9f1ebb289 100644 --- a/apps/marketing/src/app/(marketing)/singleplayer/client.tsx +++ b/apps/marketing/src/app/(marketing)/singleplayer/client.tsx @@ -256,6 +256,7 @@ export const SinglePlayerClient = () => { fields={fields} onSubmit={onSignSubmit} requireName={Boolean(fields.find((field) => field.type === 'NAME'))} + requireCustomText={Boolean(fields.find((field) => field.type === 'TEXT'))} requireSignature={Boolean(fields.find((field) => field.type === 'SIGNATURE'))} /> diff --git a/packages/trpc/server/singleplayer-router/helper.ts b/packages/trpc/server/singleplayer-router/helper.ts index 0ec0ba42d..32d03c0ac 100644 --- a/packages/trpc/server/singleplayer-router/helper.ts +++ b/packages/trpc/server/singleplayer-router/helper.ts @@ -22,6 +22,7 @@ export const mapField = ( .with(FieldType.DATE, () => DateTime.now().toFormat('yyyy-MM-dd hh:mm a')) .with(FieldType.EMAIL, () => signer.email) .with(FieldType.NAME, () => signer.name) + .with(FieldType.TEXT, () => signer.customText) .otherwise(() => ''); return { diff --git a/packages/trpc/server/singleplayer-router/schema.ts b/packages/trpc/server/singleplayer-router/schema.ts index 9fa56e7b1..412429fca 100644 --- a/packages/trpc/server/singleplayer-router/schema.ts +++ b/packages/trpc/server/singleplayer-router/schema.ts @@ -12,6 +12,7 @@ export const ZCreateSinglePlayerDocumentMutationSchema = z.object({ email: z.string().email().min(1), name: z.string(), signature: z.string(), + customText: z.string(), }), fields: z.array( z.object({ diff --git a/packages/ui/primitives/document-flow/add-signature.tsx b/packages/ui/primitives/document-flow/add-signature.tsx index 5accdca16..a90b46917 100644 --- a/packages/ui/primitives/document-flow/add-signature.tsx +++ b/packages/ui/primitives/document-flow/add-signature.tsx @@ -23,6 +23,7 @@ import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from ' import { Input } from '../input'; import { SignaturePad } from '../signature-pad'; import { useStep } from '../stepper'; +import { Textarea } from '../textarea'; import type { TAddSignatureFormSchema } from './add-signature.types'; import { ZAddSignatureFormSchema } from './add-signature.types'; import { @@ -44,6 +45,7 @@ export type AddSignatureFormProps = { onSubmit: (_data: TAddSignatureFormSchema) => Promise | void; requireName?: boolean; + requireCustomText?: boolean; requireSignature?: boolean; }; @@ -54,6 +56,7 @@ export const AddSignatureFormPartial = ({ onSubmit, requireName = false, + requireCustomText = false, requireSignature = true, }: AddSignatureFormProps) => { const { currentStep, totalSteps } = useStep(); @@ -70,6 +73,14 @@ export const AddSignatureFormPartial = ({ }); } + if (requireCustomText && val.customText.length === 0) { + ctx.addIssue({ + path: ['customText'], + code: 'custom', + message: 'Text is required', + }); + } + if (requireSignature && val.signature.length === 0) { ctx.addIssue({ path: ['signature'], @@ -85,6 +96,7 @@ export const AddSignatureFormPartial = ({ name: '', email: '', signature: '', + customText: '', }, }); @@ -131,6 +143,11 @@ export const AddSignatureFormPartial = ({ return !form.formState.errors.email; } + if (fieldType === FieldType.TEXT) { + await form.trigger('customText'); + return !form.formState.errors.customText; + } + return true; }; @@ -154,6 +171,11 @@ export const AddSignatureFormPartial = ({ customText: form.getValues('name'), inserted: true, })) + .with(FieldType.TEXT, () => ({ + ...field, + customText: form.getValues('customText'), + inserted: true, + })) .with(FieldType.SIGNATURE, () => { const value = form.getValues('signature'); @@ -302,6 +324,29 @@ export const AddSignatureFormPartial = ({ )} /> )} + + {requireCustomText && ( + ( + + Custom Text + +