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 82693eed..f92f3d61 100644 --- a/lib/custom_wizard/wizard.rb +++ b/lib/custom_wizard/wizard.rb @@ -247,6 +247,26 @@ class CustomWizard::Wizard set_submissions(submissions) end + def filter_conditional_fields + included_fields = steps.map { |s| s.fields.map { |f| f.id } }.flatten + 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 + %w{ + submitted_at + route_to + saved_param + } + end + def final_cleanup! if id == user.custom_fields['redirect_to_wizard'] user.custom_fields.delete('redirect_to_wizard') diff --git a/spec/requests/custom_wizard/steps_controller_spec.rb b/spec/requests/custom_wizard/steps_controller_spec.rb index c58f13a2..2424274b 100644 --- a/spec/requests/custom_wizard/steps_controller_spec.rb +++ b/spec/requests/custom_wizard/steps_controller_spec.rb @@ -249,4 +249,33 @@ describe CustomWizard::StepsController do expect(response.status).to eq(200) expect(response.parsed_body['final']).to eq(true) end + + it "excludes the non-included conditional fields from the submissions" do + new_template = wizard_template.dup + new_template['steps'][1]['fields'][0]['condition'] = wizard_field_condition_template['condition'] + CustomWizard::Template.save(new_template, skip_jobs: true) + + put '/w/super-mega-fun-wizard/steps/step_1.json', params: { + fields: { + step_1_field_1: "Condition will pass" + } + } + + put '/w/super-mega-fun-wizard/steps/step_2.json', params: { + fields: { + step_2_field_1: "1995-04-23" + } + } + + put '/w/super-mega-fun-wizard/steps/step_1.json', params: { + fields: { + 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).not_to include("step_2_field_1") + end end