diff --git a/app/assets/stylesheets/budgets/groups/index.scss b/app/assets/stylesheets/budgets/groups/index.scss
new file mode 100644
index 000000000..aec73efc7
--- /dev/null
+++ b/app/assets/stylesheets/budgets/groups/index.scss
@@ -0,0 +1,7 @@
+.budget-groups-index {
+
+ > header {
+ @extend %budget-header;
+ @include full-width-background($adjust-padding: true);
+ }
+}
diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss
index bb15ed9c0..0cc0850b3 100644
--- a/app/assets/stylesheets/layout.scss
+++ b/app/assets/stylesheets/layout.scss
@@ -67,6 +67,7 @@ body {
main {
display: block;
+ &.budget-groups-index,
&.budget-investment-new,
&.debate-new,
&.proposal-new,
diff --git a/app/components/budgets/groups/index_component.html.erb b/app/components/budgets/groups/index_component.html.erb
new file mode 100644
index 000000000..e577bad50
--- /dev/null
+++ b/app/components/budgets/groups/index_component.html.erb
@@ -0,0 +1,8 @@
+<% content_for :canonical do %>
+ <%= render "shared/canonical", href: budget_groups_url %>
+<% end %>
+
+
+ <%= header(before: back_link_to(budget_path(budget))) %>
+ <%= render Budgets::GroupsAndHeadingsComponent.new(budget) %>
+
diff --git a/app/components/budgets/groups/index_component.rb b/app/components/budgets/groups/index_component.rb
new file mode 100644
index 000000000..29740fb24
--- /dev/null
+++ b/app/components/budgets/groups/index_component.rb
@@ -0,0 +1,12 @@
+class Budgets::Groups::IndexComponent < ApplicationComponent
+ include Header
+ attr_reader :budget
+
+ def initialize(budget)
+ @budget = budget
+ end
+
+ def title
+ t("budgets.groups.show.title")
+ end
+end
diff --git a/app/components/budgets/investments_list_component.html.erb b/app/components/budgets/investments_list_component.html.erb
index 04042e634..a9ee965af 100644
--- a/app/components/budgets/investments_list_component.html.erb
+++ b/app/components/budgets/investments_list_component.html.erb
@@ -14,7 +14,7 @@
<%= link_to t("budgets.investments_list.see_all"),
- budget_investments_path(budget),
+ see_all_path,
class: "button expanded" %>
diff --git a/app/components/budgets/investments_list_component.rb b/app/components/budgets/investments_list_component.rb
index 9803c4ee2..86157d4c2 100644
--- a/app/components/budgets/investments_list_component.rb
+++ b/app/components/budgets/investments_list_component.rb
@@ -17,4 +17,12 @@ class Budgets::InvestmentsListComponent < ApplicationComponent
budget.investments.none
end
end
+
+ def see_all_path
+ if budget.single_heading?
+ budget_investments_path(budget)
+ else
+ budget_groups_path(budget)
+ end
+ end
end
diff --git a/app/components/concerns/header.rb b/app/components/concerns/header.rb
index fe62a0d9b..9b1b21937 100644
--- a/app/components/concerns/header.rb
+++ b/app/components/concerns/header.rb
@@ -1,7 +1,7 @@
module Header
extend ActiveSupport::Concern
- def header(&block)
+ def header(before: nil, &block)
provide(:title) do
[
t("#{namespace}.header.title", default: ""),
@@ -17,11 +17,7 @@ module Header
end
tag.header do
- if block_given?
- content_tag(heading_tag, title) + capture(&block)
- else
- content_tag(heading_tag, title)
- end
+ safe_join([before, content_tag(heading_tag, title), (capture(&block) if block_given?)].compact)
end
end
diff --git a/app/controllers/budgets/groups_controller.rb b/app/controllers/budgets/groups_controller.rb
index b0aebafad..5fc81d0fb 100644
--- a/app/controllers/budgets/groups_controller.rb
+++ b/app/controllers/budgets/groups_controller.rb
@@ -5,7 +5,7 @@ module Budgets
feature_flag :budgets
before_action :load_budget
- before_action :load_group
+ before_action :load_group, only: [:show]
authorize_resource :budget
authorize_resource :group, class: "Budget::Group"
@@ -15,6 +15,9 @@ module Budgets
def show
end
+ def index
+ end
+
private
def load_budget
diff --git a/app/views/budgets/groups/index.html.erb b/app/views/budgets/groups/index.html.erb
new file mode 100644
index 000000000..7f0a9477d
--- /dev/null
+++ b/app/views/budgets/groups/index.html.erb
@@ -0,0 +1 @@
+<%= render Budgets::Groups::IndexComponent.new(@budget) %>
diff --git a/config/routes/budget.rb b/config/routes/budget.rb
index 416bdf88e..6d173af87 100644
--- a/config/routes/budget.rb
+++ b/config/routes/budget.rb
@@ -1,5 +1,5 @@
resources :budgets, only: [:show, :index] do
- resources :groups, controller: "budgets/groups", only: [:show]
+ resources :groups, controller: "budgets/groups", only: [:show, :index]
resources :investments, controller: "budgets/investments" do
member do
put :flag
diff --git a/spec/components/budgets/investments_list_component_spec.rb b/spec/components/budgets/investments_list_component_spec.rb
index 35b91bcef..d22b9f941 100644
--- a/spec/components/budgets/investments_list_component_spec.rb
+++ b/spec/components/budgets/investments_list_component_spec.rb
@@ -170,7 +170,7 @@ describe Budgets::InvestmentsListComponent, type: :component do
render_inline Budgets::InvestmentsListComponent.new(budget)
expect(page).to have_link "See all investments",
- href: budget_investments_path(budget)
+ href: budget_groups_path(budget)
end
end
end
diff --git a/spec/system/budgets/groups_spec.rb b/spec/system/budgets/groups_spec.rb
index be69d2ece..99488b4f8 100644
--- a/spec/system/budgets/groups_spec.rb
+++ b/spec/system/budgets/groups_spec.rb
@@ -53,4 +53,16 @@ describe "Budget Groups" do
expect(page).to have_current_path budget_path(budget)
end
end
+
+ context "Index" do
+ scenario "Render headings" do
+ create(:budget_heading, group: group, name: "New heading name")
+
+ visit budget_groups_path(budget)
+
+ expect(page).to have_content "Select a heading"
+ expect(page).to have_link "New heading name"
+ expect(page).to have_link "Go back", href: budget_path(budget)
+ end
+ end
end