@@ -10,18 +10,22 @@ def set_request_logging_attributes
1010
1111 def show
1212 return redirect_to form_page_path ( @form . id , @form . form_slug , current_context . next_page_slug ) unless current_context . can_visit? ( @step . id )
13- return redirect_to review_file_page if answered_file_question?
13+ return redirect_to review_file_page if @step . answered_file_question?
1414
15- back_link ( @step . id )
1615 setup_instance_vars_for_view
1716 end
1817
1918 def save
2019 page_params = params . fetch ( :question , { } ) . permit ( *@step . params )
21- @step . update! ( page_params )
20+ @step . assign_question_attributes ( page_params )
2221
23- if current_context . save_step ( @step )
24- current_context . clear_submission_details if is_first_page?
22+ current_context . clear_submission_details if is_first_page?
23+
24+ validation_context = @step . autocomplete_selection_question? ? :skip_none_of_the_above_question_validation : nil
25+ if current_context . save_step ( @step , context : validation_context )
26+ # Redirect before logging when the question has multiple pages so that we don't send multiple form started
27+ # metrics to CloudWatch if this is the first question.
28+ return redirect_to selection_none_of_the_above_page if redirect_to_none_of_the_above_page?
2529
2630 unless mode . preview?
2731 LogEventService . new ( current_context , @step , request , changing_existing_answer , page_params ) . log_page_save
@@ -56,46 +60,61 @@ def answer_index
5660 end
5761
5862 def setup_instance_vars_for_view
59- @is_question = true
60- @question_edit_link = "#{ Settings . forms_admin . base_url } /forms/#{ @form . id } /pages-by-external-id/#{ @step . id } /edit-question"
63+ @question_edit_link = question_edit_link
6164 @save_url = save_url
65+ @back_link = back_link ( @step . id )
66+ end
67+
68+ def question_edit_link
69+ "#{ Settings . forms_admin . base_url } /forms/#{ @form . id } /pages-by-external-id/#{ @step . id } /edit-question"
70+ end
71+
72+ def save_url
73+ save_form_page_path ( @form . id , @form . form_slug , @step . id , changing_existing_answer : @changing_existing_answer , answer_index :)
6274 end
6375
6476 def changing_existing_answer
6577 @changing_existing_answer = ActiveModel ::Type ::Boolean . new . cast ( params [ :changing_existing_answer ] )
6678 end
6779
6880 def back_link ( page_slug )
81+ return check_your_answers_path ( form_id : current_context . form . id ) if changing_existing_answer
82+
6983 previous_step = current_context . previous_step ( page_slug )
84+ return nil unless previous_step
7085
71- if changing_existing_answer
72- @back_link = check_your_answers_path ( form_id : current_context . form . id )
73- elsif previous_step
74- @back_link = previous_step . repeatable? ? add_another_answer_path ( form_id : current_context . form . id , form_slug : current_context . form . form_slug , page_slug : previous_step . id ) : form_page_path ( @form . id , @form . form_slug , previous_step . page_id )
86+ if previous_step . repeatable?
87+ add_another_answer_path ( form_id : current_context . form . id , form_slug : current_context . form . form_slug , page_slug : previous_step . id )
88+ else
89+ form_page_path ( @form . id , @form . form_slug , previous_step . page_id )
7590 end
7691 end
7792
7893 def redirect_post_save
79- return redirect_to review_file_page , success : t ( "banner.success.file_uploaded" ) if answered_file_question?
94+ return redirect_to review_file_page , success : t ( "banner.success.file_uploaded" ) if @step . answered_file_question?
8095 return redirect_to exit_page_path ( form_id : @form . id , form_slug : @form . form_slug , page_slug : @step . id ) if @step . exit_page_condition_matches?
8196
8297 redirect_to next_page
8398 end
8499
85100 def redirect_if_not_answered_file_question
86- unless @step . question . is_a? ( Question :: File ) && @step . question . file_uploaded ?
101+ unless @step . answered_file_question ?
87102 redirect_to form_page_path ( @form . id , @form . form_slug , @step . id )
88103 end
89104 end
90105
91- def answered_file_question ?
92- @step . question . is_a? ( Question :: File ) && @step . question . file_uploaded ?
106+ def redirect_to_none_of_the_above_page ?
107+ @step . autocomplete_selection_question? && @step . question . show_none_of_the_above_question ?
93108 end
94109
95110 def review_file_page
96111 review_file_path ( form_id : @form . id , form_slug : @form . form_slug , page_slug : @step . id , changing_existing_answer :)
97112 end
98113
114+ def selection_none_of_the_above_page
115+ selection_none_of_the_above_path ( form_id : @form . id , form_slug : @form . form_slug , page_slug : @step . id )
116+ end
117+
99118 def next_page
100119 if changing_existing_answer
101120 return next_step_changing
@@ -166,9 +185,5 @@ def admin_edit_condition_url(form_id, page_id)
166185 def is_first_page?
167186 current_context . form . start_page . to_s == @step . id
168187 end
169-
170- def save_url
171- save_form_page_path ( @form . id , @form . form_slug , @step . id , changing_existing_answer : @changing_existing_answer , answer_index :)
172- end
173188 end
174189end
0 commit comments