From ff14570d64bc9d8bb1d4f7b96703d923e2ae4fca Mon Sep 17 00:00:00 2001 From: Faizaan Gagan Date: Wed, 12 May 2021 18:15:55 +0530 Subject: [PATCH] FIX: exclude conditional fields while saving step submission --- controllers/custom_wizard/steps.rb | 2 +- lib/custom_wizard/wizard.rb | 7 ++++--- spec/requests/custom_wizard/steps_controller_spec.rb | 10 +--------- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/controllers/custom_wizard/steps.rb b/controllers/custom_wizard/steps.rb index 277b94b2..5465d0dd 100644 --- a/controllers/custom_wizard/steps.rb +++ b/controllers/custom_wizard/steps.rb @@ -28,7 +28,7 @@ class CustomWizard::StepsController < ::ApplicationController current_step = @wizard.find_step(update[:step_id]) current_submission = @wizard.current_submission result = {} - + @wizard.filter_conditional_fields if current_step.conditional_final_step && !current_step.last_step current_step.force_final = true end diff --git a/lib/custom_wizard/wizard.rb b/lib/custom_wizard/wizard.rb index ab0f0f63..f92f3d61 100644 --- a/lib/custom_wizard/wizard.rb +++ b/lib/custom_wizard/wizard.rb @@ -243,19 +243,20 @@ class CustomWizard::Wizard return nil unless save_submissions submissions.pop(1) if unfinished? - submission = filter_conditional_fields(submission) submissions.push(submission) set_submissions(submissions) end - def filter_conditional_fields(submission) + def filter_conditional_fields included_fields = steps.map { |s| s.fields.map { |f| f.id } }.flatten - submission.select do |key, _| + filtered_submision = current_submission&.select do |key, _| key = key.to_s included_fields.include?(key) || required_fields.include?(key) || key.include?("action") end + + save_submission(filtered_submision) end def required_fields diff --git a/spec/requests/custom_wizard/steps_controller_spec.rb b/spec/requests/custom_wizard/steps_controller_spec.rb index c312cbb1..2424274b 100644 --- a/spec/requests/custom_wizard/steps_controller_spec.rb +++ b/spec/requests/custom_wizard/steps_controller_spec.rb @@ -272,16 +272,8 @@ describe CustomWizard::StepsController do step_1_field_1: "Condition will not pass" } } - wizard_id = response.parsed_body['wizard']['id'] - wizard = CustomWizard::Wizard.create(wizard_id, user) - submission = wizard.submissions.last - expect(submission.keys).to include("step_2_field_1") - put '/w/super-mega-fun-wizard/steps/step_2.json', params: { - fields: { - step_2_field_1: "1995-04-23" - } - } + wizard_id = response.parsed_body['wizard']['id'] wizard = CustomWizard::Wizard.create(wizard_id, user) submission = wizard.submissions.last expect(submission.keys).not_to include("step_2_field_1")