diff --git a/apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx b/apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx index ed7184ef7..f493331ae 100644 --- a/apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx +++ b/apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx @@ -96,6 +96,9 @@ export const DocumentPreferencesResetDialog = ({
  • Delegate document ownership
  • +
  • + Allow document rejection +
  • {showAiFeatures && (
  • AI features diff --git a/apps/remix/app/components/forms/document-preferences-form.tsx b/apps/remix/app/components/forms/document-preferences-form.tsx index 29e566c79..d9465d2cb 100644 --- a/apps/remix/app/components/forms/document-preferences-form.tsx +++ b/apps/remix/app/components/forms/document-preferences-form.tsx @@ -43,6 +43,7 @@ export type TDocumentPreferencesFormSchema = { signatureTypes: DocumentSignatureType[]; defaultRecipients: TDefaultRecipients | null; delegateDocumentOwnership: boolean | null; + allowDocumentRejection: boolean | null; aiFeaturesEnabled: boolean | null; }; @@ -57,6 +58,7 @@ type SettingsSubset = Pick< | 'drawSignatureEnabled' | 'defaultRecipients' | 'delegateDocumentOwnership' + | 'allowDocumentRejection' | 'aiFeaturesEnabled' >; @@ -77,6 +79,7 @@ const getDocumentPreferencesFormValues = (settings: SettingsSubset): TDocumentPr signatureTypes: extractTeamSignatureSettings({ ...settings }), defaultRecipients: settings.defaultRecipients ? ZDefaultRecipientsSchema.parse(settings.defaultRecipients) : null, delegateDocumentOwnership: settings.delegateDocumentOwnership, + allowDocumentRejection: settings.allowDocumentRejection, aiFeaturesEnabled: settings.aiFeaturesEnabled, }; }; @@ -101,6 +104,7 @@ export const DocumentPreferencesForm = ({ settings, onFormSubmit, canInherit }: }), defaultRecipients: ZDefaultRecipientsSchema.nullable(), delegateDocumentOwnership: z.boolean().nullable(), + allowDocumentRejection: z.boolean().nullable(), aiFeaturesEnabled: z.boolean().nullable(), }); @@ -486,6 +490,60 @@ export const DocumentPreferencesForm = ({ settings, onFormSubmit, canInherit }: )} /> + ( + Allow Document Rejection} + testId="allow-document-rejection" + > + + + + + + + Controls whether recipients can reject newly created documents from the signing page. Existing + documents keep their current setting. You can change it per document in the document settings. + + + + )} + /> + {isAiFeaturesConfigured && ( + Allow document rejection}> + + {booleanValue(settings.allowDocumentRejection, inheritedSettings?.allowDocumentRejection)} + + + Typed signature}> {booleanValue(settings.typedSignatureEnabled, inheritedSettings?.typedSignatureEnabled)} diff --git a/apps/remix/app/components/general/document-signing/document-signing-page-view-v1.tsx b/apps/remix/app/components/general/document-signing/document-signing-page-view-v1.tsx index 4fa8077a0..4b8758485 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-page-view-v1.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-page-view-v1.tsx @@ -261,7 +261,9 @@ export const DocumentSigningPageViewV1 = ({
    - + {documentMeta.allowDocumentRejection && ( + + )}
    diff --git a/apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx b/apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx index ea60d1819..410afbbc4 100644 --- a/apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx +++ b/apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx @@ -110,6 +110,7 @@ export const ZAddSettingsFormSchema = z.object({ signatureTypes: z.array(z.nativeEnum(DocumentSignatureType)).min(1, { message: msg`At least one signature type must be enabled`.id, }), + allowDocumentRejection: z.boolean(), envelopeExpirationPeriod: ZEnvelopeExpirationPeriod.nullish(), reminderSettings: ZEnvelopeReminderSettings.nullish(), }), @@ -200,6 +201,7 @@ export const EnvelopeEditorSettingsDialog = ({ trigger, ...props }: EnvelopeEdit emailReplyTo: envelope.documentMeta.emailReplyTo ?? undefined, emailSettings: ZDocumentEmailSettingsSchema.parse(envelope.documentMeta.emailSettings), signatureTypes: extractTeamSignatureSettings(envelope.documentMeta), + allowDocumentRejection: envelope.documentMeta.allowDocumentRejection, envelopeExpirationPeriod: envelope.documentMeta?.envelopeExpirationPeriod ?? null, reminderSettings: envelope.documentMeta?.reminderSettings ?? null, }, @@ -249,6 +251,7 @@ export const EnvelopeEditorSettingsDialog = ({ trigger, ...props }: EnvelopeEdit message, subject, emailReplyTo, + allowDocumentRejection, envelopeExpirationPeriod, reminderSettings, } = data.meta; @@ -278,6 +281,7 @@ export const EnvelopeEditorSettingsDialog = ({ trigger, ...props }: EnvelopeEdit drawSignatureEnabled: signatureTypes.includes(DocumentSignatureType.DRAW), typedSignatureEnabled: signatureTypes.includes(DocumentSignatureType.TYPE), uploadSignatureEnabled: signatureTypes.includes(DocumentSignatureType.UPLOAD), + allowDocumentRejection, envelopeExpirationPeriod, reminderSettings, }, @@ -465,6 +469,52 @@ export const EnvelopeEditorSettingsDialog = ({ trigger, ...props }: EnvelopeEdit /> )} + ( + + + Allow Document Rejection + + + + + + + + Controls whether recipients can reject the document from the signing page. + + + + + + + + + + + + )} + /> + {settings.allowConfigureDateFormat && (