<%= form_with(model: @case_contact, url: wizard_path(nil, case_contact_id: @case_contact.id), local: true, id: "casa-contact-form", class: "component-validated-form") do |form| %>
- <%= render(Form::TitleComponent.new(title: @case_contact.decorate.form_title, subtitle: "Contact details", step: @page, total_steps: @total_pages, navigable: Form::StepNavigationComponent.new(nav_back: leave_case_contacts_form_path, nav_next: next_wizard_path))) %>
+ <%= render(Form::TitleComponent.new(title: @case_contact.decorate.form_title, subtitle: "Contact details", step: @page, total_steps: @total_pages, navigable: Form::StepNavigationComponent.new(nav_back: nil, nav_next: next_wizard_path))) %>
<%= render "/shared/error_messages", resource: @case_contact %>
From 11fba7935f4a1909d6e7c780094cfb3f92bb2a51 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Wed, 17 Jul 2024 15:41:54 -0500
Subject: [PATCH 15/26] [#5777] Add spec for step navigation component
---
.../form/step_navigation_component.html.erb | 12 ++++++++++--
.../form/step_navigation_component_spec.rb | 19 +++++++++++++++++++
2 files changed, 29 insertions(+), 2 deletions(-)
create mode 100644 spec/components/form/step_navigation_component_spec.rb
diff --git a/app/components/form/step_navigation_component.html.erb b/app/components/form/step_navigation_component.html.erb
index c8d729f8ae..35dc06aa90 100644
--- a/app/components/form/step_navigation_component.html.erb
+++ b/app/components/form/step_navigation_component.html.erb
@@ -7,7 +7,11 @@
title: "Back step",
aria: { label: "Back step" },
disabled: !@nav_back do %>
- <%= link_to @nav_back, title: "Back step", aria: { label: "Back step" } do %>
+ <% if @nav_back.present? %>
+ <%= link_to @nav_back, title: "Back step", aria: { label: "Back step" } do %>
+
+ <% end %>
+ <% elsif %>
<% end %>
<% end %>
@@ -19,7 +23,11 @@
title: "Next step",
aria: { label: "Next step" },
disabled: !@nav_next do %>
- <%= link_to @nav_next, title: "Next step", aria: { label: "Next step" } do %>
+ <% if @nav_next.present? %>
+ <%= link_to @nav_next, title: "Next step", aria: { label: "Next step" } do %>
+
+ <% end %>
+ <% elsif %>
<% end %>
<% end %>
diff --git a/spec/components/form/step_navigation_component_spec.rb b/spec/components/form/step_navigation_component_spec.rb
new file mode 100644
index 0000000000..37b9c8c10e
--- /dev/null
+++ b/spec/components/form/step_navigation_component_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require "rails_helper"
+
+RSpec.describe Form::StepNavigationComponent, type: :component do
+ context "can handle enabled button" do
+ it "enables button if value exists" do
+ render_inline(described_class.new(nav_back: '/details'))
+ expect(page).to have_selector(:link_or_button, 'Back step')
+ end
+ end
+
+ context "can handle disabled button" do
+ it "disables buttons if value is nil" do
+ render_inline(described_class.new())
+ expect(page).not_to have_selector(:link_or_button, 'Next step')
+ end
+ end
+end
From 032207d5b7834cc5de8612ac72e0a544f86a5b25 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Wed, 17 Jul 2024 15:43:38 -0500
Subject: [PATCH 16/26] [#5777] Update existing spec after modifying component
---
spec/components/form/title_component_spec.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/spec/components/form/title_component_spec.rb b/spec/components/form/title_component_spec.rb
index 3c1cfe0c82..d837e44901 100644
--- a/spec/components/form/title_component_spec.rb
+++ b/spec/components/form/title_component_spec.rb
@@ -9,6 +9,7 @@
let(:total_steps) { nil }
let(:notes) { nil }
let(:autosave) { nil }
+ let(:navigable) { nil }
before(:each) do
render_inline(described_class.new(title: title, subtitle: subtitle, step: step, total_steps: total_steps, notes: notes, autosave: autosave))
From f6e0073bfd19ec9c66e6c29704273a9267b5b147 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Wed, 17 Jul 2024 15:58:03 -0500
Subject: [PATCH 17/26] [#5777] :broom:
---
spec/components/form/step_navigation_component_spec.rb | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/spec/components/form/step_navigation_component_spec.rb b/spec/components/form/step_navigation_component_spec.rb
index 37b9c8c10e..bc4c2b2409 100644
--- a/spec/components/form/step_navigation_component_spec.rb
+++ b/spec/components/form/step_navigation_component_spec.rb
@@ -5,15 +5,15 @@
RSpec.describe Form::StepNavigationComponent, type: :component do
context "can handle enabled button" do
it "enables button if value exists" do
- render_inline(described_class.new(nav_back: '/details'))
- expect(page).to have_selector(:link_or_button, 'Back step')
+ render_inline(described_class.new(nav_back: "/details"))
+ expect(page).to have_selector(:link_or_button, "Back step")
end
end
-
+
context "can handle disabled button" do
it "disables buttons if value is nil" do
- render_inline(described_class.new())
- expect(page).not_to have_selector(:link_or_button, 'Next step')
+ render_inline(described_class.new)
+ expect(page).not_to have_selector(:link_or_button, "Next step")
end
end
end
From 5d249acc1a90c38060e528c1ecdfc835e9b71658 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Wed, 17 Jul 2024 16:10:26 -0500
Subject: [PATCH 18/26] [#5777] Refactor large method
---
.../case_contacts/form_controller.rb | 39 ++++++++++---------
1 file changed, 21 insertions(+), 18 deletions(-)
diff --git a/app/controllers/case_contacts/form_controller.rb b/app/controllers/case_contacts/form_controller.rb
index 0a1f607255..24cef7cd5d 100644
--- a/app/controllers/case_contacts/form_controller.rb
+++ b/app/controllers/case_contacts/form_controller.rb
@@ -9,36 +9,21 @@ class CaseContacts::FormController < ApplicationController
# wizard_path
def show
- authorize @case_contact
+ manage_form_step
get_cases_and_contact_types
- @page = wizard_steps.index(step) + 1
- @total_pages = steps.count
-
render_wizard
wizard_path
end
def update
- authorize @case_contact
- @page = wizard_steps.index(step) + 1
- @total_pages = steps.count
- @nav_step = params[:nav_step]
-
+ manage_form_step(step_navigation: true)
params[:case_contact][:status] = step.to_s if !@case_contact.active?
remove_unwanted_contact_types
remove_nil_draft_ids
-
if CaseContactUpdateService.new(@case_contact).update_attrs(case_contact_params)
respond_to do |format|
format.html {
- if @nav_step.present?
- jump_to(@nav_step.split("/").last.to_sym)
- render_wizard @case_contact, {}, {case_contact_id: @case_contact.id}
- elsif step == steps.last
- finish_editing
- else
- render_wizard @case_contact, {}, {case_contact_id: @case_contact.id}
- end
+ manage_navigation
}
format.json { head :ok }
end
@@ -59,6 +44,13 @@ def set_case_contact
@case_contact = CaseContact.find(params[:case_contact_id])
end
+ def manage_form_step(step_navigation: false)
+ authorize @case_contact
+ @page = wizard_steps.index(step) + 1
+ @total_pages = steps.count
+ @nav_step = params[:nav_step] if step_navigation
+ end
+
def get_cases_and_contact_types
@casa_cases = policy_scope(current_organization.casa_cases)
@casa_cases = @casa_cases.where(id: @case_contact.casa_case_id) if @case_contact.active?
@@ -72,6 +64,17 @@ def get_cases_and_contact_types
@selected_contact_type_ids = @case_contact.contact_type_ids
end
+ def manage_navigation
+ if @nav_step.present?
+ jump_to(@nav_step.split("/").last.to_sym)
+ render_wizard @case_contact, {}, {case_contact_id: @case_contact.id}
+ elsif step == steps.last
+ finish_editing
+ else
+ render_wizard @case_contact, {}, {case_contact_id: @case_contact.id}
+ end
+ end
+
def finish_editing
message = ""
send_reimbursement_email(@case_contact)
From 1f980b543b1442107f3a023e2a6c047b41426b1a Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Mon, 22 Jul 2024 11:23:44 -0500
Subject: [PATCH 19/26] [#5777] Reset gemfile lock
---
Gemfile.lock | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index 14e3368d55..5ccdadf4ce 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -328,6 +328,8 @@ GEM
racc (~> 1.4)
nokogiri (1.16.6-x86_64-darwin)
racc (~> 1.4)
+ nokogiri (1.16.6-x86_64-linux)
+ racc (~> 1.4)
noticed (2.4.0)
rails (>= 6.1.0)
oj (3.16.4)
@@ -568,9 +570,9 @@ GEM
PLATFORMS
arm64-darwin-21
ruby
- x86_64-darwin-19
x86_64-darwin-21
x86_64-darwin-23
+ x86_64-linux
DEPENDENCIES
after_party
@@ -661,4 +663,4 @@ RUBY VERSION
ruby 3.2.2p53
BUNDLED WITH
- 2.5.15
+ 2.5.14
\ No newline at end of file
From 06f41e0331898b55fc8af20d4d28c227bd9b03f1 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Mon, 22 Jul 2024 11:24:11 -0500
Subject: [PATCH 20/26] :broom:
---
Gemfile.lock | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index 5ccdadf4ce..0f39f6bca7 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -663,4 +663,4 @@ RUBY VERSION
ruby 3.2.2p53
BUNDLED WITH
- 2.5.14
\ No newline at end of file
+ 2.5.14
From c665b64a42e2dd4ec25d0e04464b5f5fc5400f72 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Mon, 22 Jul 2024 11:24:35 -0500
Subject: [PATCH 21/26] :broom:
---
Gemfile.lock | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index 0f39f6bca7..5ccdadf4ce 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -663,4 +663,4 @@ RUBY VERSION
ruby 3.2.2p53
BUNDLED WITH
- 2.5.14
+ 2.5.14
\ No newline at end of file
From aef0fdfa6c76eb5cb235cf6726dc671c17eceb2b Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Mon, 22 Jul 2024 14:44:03 -0500
Subject: [PATCH 22/26] Test
---
Gemfile.lock | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index 5ccdadf4ce..f44d98428f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -663,4 +663,6 @@ RUBY VERSION
ruby 3.2.2p53
BUNDLED WITH
- 2.5.14
\ No newline at end of file
+ 2.5.14
+
+
\ No newline at end of file
From c1ebc07d00214b0ace5ddb24767fdbbcc445c502 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Mon, 22 Jul 2024 14:44:29 -0500
Subject: [PATCH 23/26] Fix
---
Gemfile.lock | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index f44d98428f..5ccdadf4ce 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -663,6 +663,4 @@ RUBY VERSION
ruby 3.2.2p53
BUNDLED WITH
- 2.5.14
-
-
\ No newline at end of file
+ 2.5.14
\ No newline at end of file
From 1f09e29f6938eb01e7170f9cf62c527266df6608 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Mon, 22 Jul 2024 14:45:33 -0500
Subject: [PATCH 24/26] Revert
---
Gemfile.lock | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index 5ccdadf4ce..0f39f6bca7 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -663,4 +663,4 @@ RUBY VERSION
ruby 3.2.2p53
BUNDLED WITH
- 2.5.14
\ No newline at end of file
+ 2.5.14
From 744d82f8342fea886926a0afcd7071a3f354c638 Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Mon, 22 Jul 2024 14:58:22 -0500
Subject: [PATCH 25/26] [#5777] Refactor with slot
---
app/components/form/title_component.html.erb | 4 ++--
app/components/form/title_component.rb | 8 +++++---
app/views/case_contacts/form/details.html.erb | 4 +++-
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/app/components/form/title_component.html.erb b/app/components/form/title_component.html.erb
index f9f2131d3f..26873dd92b 100644
--- a/app/components/form/title_component.html.erb
+++ b/app/components/form/title_component.html.erb
@@ -11,8 +11,8 @@
<% if @progress %>
- <% if @navigable %>
- <%= render(@navigable) %>
+ <% if navigable %>
+ <%= navigable %>
<% end %>
<%= @steps_in_text %>
diff --git a/app/components/form/title_component.rb b/app/components/form/title_component.rb
index 7229dd4910..33cad6ee16 100644
--- a/app/components/form/title_component.rb
+++ b/app/components/form/title_component.rb
@@ -1,16 +1,18 @@
# frozen_string_literal: true
class Form::TitleComponent < ViewComponent::Base
- def initialize(title:, subtitle:, step: nil, total_steps: nil, notes: nil, autosave: false, navigable: nil)
+ # `Form::StepNavigationComponent` is defined in another file, so we can refer to it by class name.
+ renders_one :navigable, Form::StepNavigationComponent
+
+ def initialize(title:, subtitle:, step: nil, total_steps: nil, notes: nil, autosave: false)
@title = title
@subtitle = subtitle
@notes = notes
@autosave = autosave
- @navigable = navigable
if step && total_steps
@steps_in_text = "Step #{step} of #{total_steps}"
@progress = (step.to_d / total_steps.to_d) * 100
end
end
-end
+end
\ No newline at end of file
diff --git a/app/views/case_contacts/form/details.html.erb b/app/views/case_contacts/form/details.html.erb
index c6ce860b53..c9850302c8 100644
--- a/app/views/case_contacts/form/details.html.erb
+++ b/app/views/case_contacts/form/details.html.erb
@@ -1,6 +1,8 @@
<%= form_with(model: @case_contact, url: wizard_path(nil, case_contact_id: @case_contact.id), local: true, id: "casa-contact-form", class: "component-validated-form") do |form| %>
- <%= render(Form::TitleComponent.new(title: @case_contact.decorate.form_title, subtitle: "Contact details", step: @page, total_steps: @total_pages, navigable: Form::StepNavigationComponent.new(nav_back: nil, nav_next: next_wizard_path))) %>
+ <%= render(Form::TitleComponent.new(title: @case_contact.decorate.form_title, subtitle: "Contact details", step: @page, total_steps: @total_pages)) do |component| %>
+ <% component.with_navigable(nav_back: nil, nav_next: next_wizard_path) %>
+ <% end %>
<%= render "/shared/error_messages", resource: @case_contact %>
From ee3feb3e00a4ccc96a876c9a42ebe97f64192cfa Mon Sep 17 00:00:00 2001
From: Priya Power <49959312+priyapower@users.noreply.github.com>
Date: Mon, 22 Jul 2024 15:02:01 -0500
Subject: [PATCH 26/26] :broom:
---
app/components/form/title_component.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/components/form/title_component.rb b/app/components/form/title_component.rb
index 33cad6ee16..9b94cc37c3 100644
--- a/app/components/form/title_component.rb
+++ b/app/components/form/title_component.rb
@@ -3,7 +3,7 @@
class Form::TitleComponent < ViewComponent::Base
# `Form::StepNavigationComponent` is defined in another file, so we can refer to it by class name.
renders_one :navigable, Form::StepNavigationComponent
-
+
def initialize(title:, subtitle:, step: nil, total_steps: nil, notes: nil, autosave: false)
@title = title
@subtitle = subtitle
@@ -15,4 +15,4 @@ def initialize(title:, subtitle:, step: nil, total_steps: nil, notes: nil, autos
@progress = (step.to_d / total_steps.to_d) * 100
end
end
-end
\ No newline at end of file
+end