From 4a9aae98060c90577bcdd46f4e81c8f67c791cb9 Mon Sep 17 00:00:00 2001 From: decabeza Date: Mon, 4 May 2020 12:44:18 +0200 Subject: [PATCH] Add groups index page When render the investment list component with the link "see all investments", now we redirect to groups index page when a budget has multiple headings. --- app/assets/stylesheets/budgets/groups/index.scss | 7 +++++++ app/assets/stylesheets/layout.scss | 1 + .../budgets/groups/index_component.html.erb | 8 ++++++++ app/components/budgets/groups/index_component.rb | 12 ++++++++++++ .../budgets/investments_list_component.html.erb | 2 +- app/components/budgets/investments_list_component.rb | 8 ++++++++ app/components/concerns/header.rb | 8 ++------ app/controllers/budgets/groups_controller.rb | 5 ++++- app/views/budgets/groups/index.html.erb | 1 + config/routes/budget.rb | 2 +- .../budgets/investments_list_component_spec.rb | 2 +- spec/system/budgets/groups_spec.rb | 12 ++++++++++++ 12 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 app/assets/stylesheets/budgets/groups/index.scss create mode 100644 app/components/budgets/groups/index_component.html.erb create mode 100644 app/components/budgets/groups/index_component.rb create mode 100644 app/views/budgets/groups/index.html.erb 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