From de3e6d211537b5665e81fafacc450633d60a4ac1 Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Sat, 15 Nov 2025 00:47:50 +1100 Subject: [PATCH] fix: embed editing updates (#2197) Allows empty recipients for embed template authoring. Also allows fixing the step to editing fields only for embedded authoring updates. --- .../configure-document-advanced-settings.tsx | 27 ---------- .../configure-document-recipients.tsx | 5 +- .../authoring/configure-document-view.tsx | 11 ++-- .../configure-document-view.types.ts | 16 +++++- .../embed/authoring/configure-fields-view.tsx | 42 ++++++++------- .../routes/embed+/v1+/authoring+/_layout.tsx | 4 +- .../v1+/authoring+/document.edit.$id.tsx | 21 ++++++-- .../embed+/v1+/authoring+/template.create.tsx | 1 + .../v1+/authoring+/template.edit.$id.tsx | 25 +++++++-- .../app/types/embed-authoring-base-schema.ts | 35 ++++++------ .../create-embedding-document.types.ts | 43 ++++++++------- .../create-embedding-template.types.ts | 35 ++++++------ .../update-embedding-document.types.ts | 2 +- .../update-embedding-template.ts | 14 ++--- .../update-embedding-template.types.ts | 24 +++++++-- packages/ui/primitives/recipient-selector.tsx | 54 +++++++++++-------- 16 files changed, 208 insertions(+), 151 deletions(-) diff --git a/apps/remix/app/components/embed/authoring/configure-document-advanced-settings.tsx b/apps/remix/app/components/embed/authoring/configure-document-advanced-settings.tsx index e6f533945..3e720f6d9 100644 --- a/apps/remix/app/components/embed/authoring/configure-document-advanced-settings.tsx +++ b/apps/remix/app/components/embed/authoring/configure-document-advanced-settings.tsx @@ -81,33 +81,6 @@ export const ConfigureDocumentAdvancedSettings = ({
- {/* ( - - - External ID - - - - - - - Add an external ID to the document. This can be used to identify the - document in external systems. - - - - - - - - - - )} - /> */} - {features.allowConfigureSignatureTypes && ( { - const signerNumber = signers.length + 1; const recipientSigningOrder = signers.length > 0 ? (signers[signers.length - 1]?.signingOrder || 0) + 1 : 1; appendSigner({ formId: nanoid(8), - name: isTemplate ? `Recipient ${signerNumber}` : '', - email: isTemplate ? `recipient.${signerNumber}@document.com` : '', + name: '', + email: '', role: RecipientRole.SIGNER, signingOrder: signingOrder === DocumentSigningOrder.SEQUENTIAL ? recipientSigningOrder : undefined, diff --git a/apps/remix/app/components/embed/authoring/configure-document-view.tsx b/apps/remix/app/components/embed/authoring/configure-document-view.tsx index cadd10d19..6d84eb003 100644 --- a/apps/remix/app/components/embed/authoring/configure-document-view.tsx +++ b/apps/remix/app/components/embed/authoring/configure-document-view.tsx @@ -25,9 +25,11 @@ import { ConfigureDocumentUpload } from './configure-document-upload'; import { type TConfigureEmbedFormSchema, ZConfigureEmbedFormSchema, + ZConfigureTemplateEmbedFormSchema, } from './configure-document-view.types'; export interface ConfigureDocumentViewProps { + type?: 'document' | 'template'; onSubmit: (data: TConfigureEmbedFormSchema) => void | Promise; defaultValues?: Partial; disableUpload?: boolean; @@ -35,6 +37,7 @@ export interface ConfigureDocumentViewProps { } export const ConfigureDocumentView = ({ + type = 'document', onSubmit, defaultValues, disableUpload, @@ -42,14 +45,16 @@ export const ConfigureDocumentView = ({ const { isTemplate } = useConfigureDocument(); const form = useForm({ - resolver: zodResolver(ZConfigureEmbedFormSchema), + resolver: zodResolver( + type === 'template' ? ZConfigureTemplateEmbedFormSchema : ZConfigureEmbedFormSchema, + ), defaultValues: { title: defaultValues?.title || '', signers: defaultValues?.signers || [ { formId: nanoid(8), - name: isTemplate ? `Recipient ${1}` : '', - email: isTemplate ? `recipient.${1}@document.com` : '', + name: '', + email: '', role: RecipientRole.SIGNER, signingOrder: 1, disabled: false, diff --git a/apps/remix/app/components/embed/authoring/configure-document-view.types.ts b/apps/remix/app/components/embed/authoring/configure-document-view.types.ts index 415d8e892..ce854ac42 100644 --- a/apps/remix/app/components/embed/authoring/configure-document-view.types.ts +++ b/apps/remix/app/components/embed/authoring/configure-document-view.types.ts @@ -17,7 +17,7 @@ export const ZConfigureEmbedFormSchema = z.object({ z.object({ nativeId: z.number().optional(), formId: z.string(), - name: z.string().min(1, { message: 'Name is required' }), + name: z.string(), email: z.string().email('Invalid email address'), role: z.enum(['SIGNER', 'CC', 'APPROVER', 'VIEWER', 'ASSISTANT']), signingOrder: z.number().optional(), @@ -48,3 +48,17 @@ export const ZConfigureEmbedFormSchema = z.object({ }) .optional(), }); + +export const ZConfigureTemplateEmbedFormSchema = ZConfigureEmbedFormSchema.extend({ + signers: z.array( + z.object({ + nativeId: z.number().optional(), + formId: z.string(), + name: z.string(), + email: z.union([z.string().length(0), z.string().email('Invalid email address')]), + role: z.enum(['SIGNER', 'CC', 'APPROVER', 'VIEWER', 'ASSISTANT']), + signingOrder: z.number().optional(), + disabled: z.boolean().optional(), + }), + ), +}); diff --git a/apps/remix/app/components/embed/authoring/configure-fields-view.tsx b/apps/remix/app/components/embed/authoring/configure-fields-view.tsx index aac5f6fc9..ed7057ee0 100644 --- a/apps/remix/app/components/embed/authoring/configure-fields-view.tsx +++ b/apps/remix/app/components/embed/authoring/configure-fields-view.tsx @@ -42,7 +42,7 @@ export type ConfigureFieldsViewProps = { configData: TConfigureEmbedFormSchema; documentData?: DocumentData; defaultValues?: Partial; - onBack: (data: TConfigureFieldsFormSchema) => void; + onBack?: (data: TConfigureFieldsFormSchema) => void; onSubmit: (data: TConfigureFieldsFormSchema) => void; }; @@ -481,15 +481,17 @@ export const ConfigureFieldsView = ({
- + {onBack && ( + + )} + {onBack && ( + + )} @@ -113,7 +131,7 @@ export const RecipientSelector = ({ - {recipientsByRoleToDisplay().map(([role, roleRecipients], roleIndex) => ( + {recipientsByRoleToDisplay.map(([role, roleRecipients], roleIndex) => (
{_(RECIPIENT_ROLES_DESCRIPTION[role].roleNamePlural)} @@ -154,13 +172,7 @@ export const RecipientSelector = ({ 'text-foreground/80': recipient.id === selectedRecipient?.id, })} > - {recipient.name && ( - - {recipient.name} ({recipient.email}) - - )} - - {!recipient.name && {recipient.email}} + {getRecipientLabel(recipient)}