diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index 22af24d9..0059cd9b 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -182,12 +182,14 @@ module Api def submissions_params permitted_attrs = [ :send_email, :send_sms, :bcc_completed, :completed_redirect_url, :reply_to, :go_to_last, + :hide_optional_fields, :require_phone_2fa, :require_email_2fa, :expire_at, :name, { variables: {}, message: %i[subject body], submitters: [[:send_email, :send_sms, :completed_redirect_url, :uuid, :name, :email, :role, :completed, :phone, :application_key, :external_id, :reply_to, :go_to_last, + :hide_optional_fields, :require_phone_2fa, :require_email_2fa, :order, :index, :invite_by, { metadata: {}, values: {}, roles: [], readonly_fields: [], message: %i[subject body], fields: [:name, :uuid, :default_value, :value, :title, :description, diff --git a/app/controllers/api/submitters_controller.rb b/app/controllers/api/submitters_controller.rb index e56eb8b8..552b6b78 100644 --- a/app/controllers/api/submitters_controller.rb +++ b/app/controllers/api/submitters_controller.rb @@ -85,6 +85,7 @@ module Api submitter_params.permit( :send_email, :send_sms, :reply_to, :completed_redirect_url, :uuid, :name, :email, :role, :completed, :phone, :application_key, :external_id, :go_to_last, :require_phone_2fa, :require_email_2fa, + :hide_optional_fields, { metadata: {}, values: {}, readonly_fields: [], message: %i[subject body], fields: [[:name, :uuid, :default_value, :value, :required, :readonly, :validation_pattern, :invalid_message, diff --git a/app/javascript/form.js b/app/javascript/form.js index 1fbd54c8..27440c5d 100644 --- a/app/javascript/form.js +++ b/app/javascript/form.js @@ -28,6 +28,7 @@ safeRegisterElement('submission-form', class extends HTMLElement { canSendEmail: this.dataset.canSendEmail === 'true', previousSignatureValue: this.dataset.previousSignatureValue, goToLast: this.dataset.goToLast === 'true', + hideOptionalFields: this.dataset.hideOptionalFields === 'true', isDemo: this.dataset.isDemo === 'true', attribution: this.dataset.attribution !== 'false', scrollPadding: this.dataset.scrollPadding || '-80px', diff --git a/app/javascript/submission_form/form.vue b/app/javascript/submission_form/form.vue index dc224fad..73d070ea 100644 --- a/app/javascript/submission_form/form.vue +++ b/app/javascript/submission_form/form.vue @@ -830,6 +830,11 @@ export default { required: false, default: true }, + hideOptionalFields: { + type: Boolean, + required: false, + default: false + }, isDemo: { type: Boolean, required: false, @@ -1089,7 +1094,7 @@ export default { const cache = {} - return sortedFields.reduce((acc, f) => { + const steps = sortedFields.reduce((acc, f) => { const prevStep = acc[acc.length - 1] if (this.checkFieldConditions(f, cache) && this.checkFieldDocumentsConditions(f)) { @@ -1102,6 +1107,16 @@ export default { return acc }, []) + + if (!this.hideOptionalFields) { + return steps + } + + const requiredOnlySteps = steps + .map((fields) => fields.filter((f) => f.required)) + .filter((fields) => fields.length) + + return requiredOnlySteps.length ? requiredOnlySteps : steps }, formulaFields () { const cache = {} diff --git a/app/views/submit_form/_submission_form.html.erb b/app/views/submit_form/_submission_form.html.erb index 0c13d8c7..e36c4023 100644 --- a/app/views/submit_form/_submission_form.html.erb +++ b/app/views/submit_form/_submission_form.html.erb @@ -2,4 +2,4 @@ <% data_fields = Submissions.filtered_conditions_fields(submitter).to_json %> <% invite_submitters = (submitter.submission.template_submitters || submitter.submission.template.submitters).select { |s| s['invite_by_uuid'] == submitter.uuid && submitter.submission.submitters.none? { |e| e.uuid == s['uuid'] } }.to_json %> <% optional_invite_submitters = (submitter.submission.template_submitters || submitter.submission.template.submitters).select { |s| s['optional_invite_by_uuid'] == submitter.uuid && submitter.submission.submitters.none? { |e| e.uuid == s['uuid'] } }.to_json %> - + diff --git a/docs/openapi.json b/docs/openapi.json index 9afd740c..ea0edcea 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -1715,6 +1715,11 @@ "type": "string", "description": "Specify Reply-To address to use in the notification emails." }, + "hide_optional_fields": { + "type": "boolean", + "description": "Set `true` to hide optional fields in the guided stepper when viewing the signing form.", + "default": false + }, "expire_at": { "type": "string", "description": "Specify the expiration date and time after which the submission becomes unavailable for signature.", @@ -1793,6 +1798,11 @@ "type": "string", "description": "Specify Reply-To address to use in the notification emails for this submitter." }, + "hide_optional_fields": { + "type": "boolean", + "description": "Set `true` to hide optional fields in the guided stepper when viewing the signing form.", + "default": false + }, "completed_redirect_url": { "type": "string", "description": "Submitter specific URL to redirect to after the submission completion." @@ -6529,6 +6539,11 @@ "type": "string", "description": "Submitter specific URL to redirect to after the submission completion." }, + "hide_optional_fields": { + "type": "boolean", + "description": "Set `true` to hide optional fields in the guided stepper when viewing the signing form.", + "default": false + }, "require_phone_2fa": { "type": "boolean", "description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.", diff --git a/lib/params/submission_create_validator.rb b/lib/params/submission_create_validator.rb index 39b4f3cd..c3646101 100644 --- a/lib/params/submission_create_validator.rb +++ b/lib/params/submission_create_validator.rb @@ -40,6 +40,7 @@ module Params boolean(params, :send_email) boolean(params, :send_sms) + boolean(params, :hide_optional_fields) type(params, :order, String) type(params, :completed_redirect_url, String) type(params, :bcc_completed, String) @@ -90,6 +91,7 @@ module Params type(submitter_params, :metadata, Hash) boolean(submitter_params, :send_email) boolean(submitter_params, :send_sms) + boolean(submitter_params, :hide_optional_fields) type(submitter_params, :completed_redirect_url, String) type(submitter_params, :fields, Array) @@ -109,6 +111,7 @@ module Params boolean(params, :send_email) boolean(params, :send_sms) + boolean(params, :hide_optional_fields) type(params, :order, String) type(params, :completed_redirect_url, String) type(params, :bcc_completed, String) diff --git a/lib/submitters.rb b/lib/submitters.rb index c557dd3e..e1018159 100644 --- a/lib/submitters.rb +++ b/lib/submitters.rb @@ -162,6 +162,7 @@ module Submitters preferences['bcc_completed'] = params['bcc_completed'] if params.key?('bcc_completed') preferences['reply_to'] = params['reply_to'] if params.key?('reply_to') preferences['go_to_last'] = params['go_to_last'] if params.key?('go_to_last') + preferences['hide_optional_fields'] = params['hide_optional_fields'].in?(TRUE_VALUES) if params.key?('hide_optional_fields') preferences['completed_redirect_url'] = params['completed_redirect_url'] if params.key?('completed_redirect_url') preferences