diff --git a/app/components/admin/budget_investments/row_component.html.erb b/app/components/admin/budget_investments/row_component.html.erb new file mode 100644 index 000000000..e615a67c3 --- /dev/null +++ b/app/components/admin/budget_investments/row_component.html.erb @@ -0,0 +1,111 @@ + + + <%= investment.id %> + + + + <%= link_to investment.title, + admin_budget_budget_investment_path(budget_id: budget.id, + id: investment.id, + params: Budget::Investment.filter_params(params).to_h), + target: "_blank" %> + + + + <%= investment.total_votes %> + + + + <% if investment.administrator.present? %> + "> + <%= investment.administrator.description_or_name %> + + <% else %> + <%= t("admin.budget_investments.index.no_admin_assigned") %> + <% end %> + + + + <%= investment.author.name %> + + + + <% valuators = [investment.assigned_valuation_groups, investment.assigned_valuators].compact %> + <% no_valuators_assigned = t("admin.budget_investments.index.no_valuators_assigned") %> + <%= valuators.present? ? valuators.join(", ") : no_valuators_assigned %> + + + + <%= investment.heading.name %> + + + + <%= t("admin.budget_investments.index.feasibility.#{investment.feasibility}") %> + + + <% if budget.show_money? %> + + <%= investment.formatted_price %> + + <% end %> + + + <%= investment.valuation_finished? ? t("shared.yes") : t("shared.no") %> + + + + <% if can?(:admin_update, investment) %> + <%= form_for [:admin, budget, investment], remote: true, format: :json do |f| %> + <%= f.check_box :visible_to_valuators, + label: false, + class: "js-submit-on-change", + id: "budget_investment_visible_to_valuators" %> + <% end %> + <% else %> + <%= investment.visible_to_valuators? ? t("shared.yes") : t("shared.no") %> + <% end %> + + + + <% if investment.selected? %> + <%= link_to_if can?(:toggle_selection, investment), + t("admin.budget_investments.index.selected"), + toggle_selection_admin_budget_budget_investment_path( + budget, + investment, + filter: params[:filter], + sort_by: params[:sort_by], + min_total_supports: params[:min_total_supports], + max_total_supports: params[:max_total_supports], + advanced_filters: params[:advanced_filters], + page: params[:page] + ), + method: :patch, + remote: true, + class: "button small expanded" %> + <% elsif investment.feasible? && investment.valuation_finished? %> + <% if can?(:toggle_selection, investment) %> + <%= link_to t("admin.budget_investments.index.select"), + toggle_selection_admin_budget_budget_investment_path( + budget, + investment, + filter: params[:filter], + sort_by: params[:sort_by], + min_total_supports: params[:min_total_supports], + max_total_supports: params[:max_total_supports], + advanced_filters: params[:advanced_filters], + page: params[:page] + ), + method: :patch, + remote: true, + class: "button small hollow expanded" %> + <% end %> + <% end %> + + + <% if params[:advanced_filters]&.include?("selected") %> + + <%= investment.incompatible? ? t("shared.yes") : t("shared.no") %> + + <% end %> + diff --git a/app/components/admin/budget_investments/row_component.rb b/app/components/admin/budget_investments/row_component.rb new file mode 100644 index 000000000..96a429cf2 --- /dev/null +++ b/app/components/admin/budget_investments/row_component.rb @@ -0,0 +1,14 @@ +class Admin::BudgetInvestments::RowComponent < ApplicationComponent + attr_reader :investment + use_helpers :can? + + def initialize(investment) + @investment = investment + end + + private + + def budget + investment.budget + end +end diff --git a/app/views/admin/budget_investments/_investments.html.erb b/app/views/admin/budget_investments/_investments.html.erb index f378fd63a..05559b935 100644 --- a/app/views/admin/budget_investments/_investments.html.erb +++ b/app/views/admin/budget_investments/_investments.html.erb @@ -49,9 +49,7 @@ <% @investments.each do |investment| %> - - <%= render "/admin/budget_investments/select_investment", investment: investment %> - + <%= render Admin::BudgetInvestments::RowComponent.new(investment) %> <% end %> diff --git a/app/views/admin/budget_investments/_select_investment.html.erb b/app/views/admin/budget_investments/_select_investment.html.erb deleted file mode 100644 index 9753b35f9..000000000 --- a/app/views/admin/budget_investments/_select_investment.html.erb +++ /dev/null @@ -1,109 +0,0 @@ - - <%= investment.id %> - - - - <%= link_to investment.title, - admin_budget_budget_investment_path(budget_id: @budget.id, - id: investment.id, - params: Budget::Investment.filter_params(params).to_h), - target: "_blank" %> - - - - <%= investment.total_votes %> - - - - <% if investment.administrator.present? %> - "> - <%= investment.administrator.description_or_name %> - - <% else %> - <%= t("admin.budget_investments.index.no_admin_assigned") %> - <% end %> - - - - <%= investment.author.name %> - - - - <% valuators = [investment.assigned_valuation_groups, investment.assigned_valuators].compact %> - <% no_valuators_assigned = t("admin.budget_investments.index.no_valuators_assigned") %> - <%= valuators.present? ? valuators.join(", ") : no_valuators_assigned %> - - - - <%= investment.heading.name %> - - - - <%= t("admin.budget_investments.index.feasibility.#{investment.feasibility}") %> - - -<% if @budget.show_money? %> - - <%= investment.formatted_price %> - -<% end %> - - - <%= investment.valuation_finished? ? t("shared.yes") : t("shared.no") %> - - - - <% if can?(:admin_update, investment) %> - <%= form_for [:admin, investment.budget, investment], remote: true, format: :json do |f| %> - <%= f.check_box :visible_to_valuators, - label: false, - class: "js-submit-on-change", - id: "budget_investment_visible_to_valuators" %> - <% end %> - <% else %> - <%= investment.visible_to_valuators? ? t("shared.yes") : t("shared.no") %> - <% end %> - - - - <% if investment.selected? %> - <%= link_to_if can?(:toggle_selection, investment), - t("admin.budget_investments.index.selected"), - toggle_selection_admin_budget_budget_investment_path( - @budget, - investment, - filter: params[:filter], - sort_by: params[:sort_by], - min_total_supports: params[:min_total_supports], - max_total_supports: params[:max_total_supports], - advanced_filters: params[:advanced_filters], - page: params[:page] - ), - method: :patch, - remote: true, - class: "button small expanded" %> - <% elsif investment.feasible? && investment.valuation_finished? %> - <% if can?(:toggle_selection, investment) %> - <%= link_to t("admin.budget_investments.index.select"), - toggle_selection_admin_budget_budget_investment_path( - @budget, - investment, - filter: params[:filter], - sort_by: params[:sort_by], - min_total_supports: params[:min_total_supports], - max_total_supports: params[:max_total_supports], - advanced_filters: params[:advanced_filters], - page: params[:page] - ), - method: :patch, - remote: true, - class: "button small hollow expanded" %> - <% end %> - <% end %> - - -<% if params[:advanced_filters]&.include?("selected") %> - - <%= investment.incompatible? ? t("shared.yes") : t("shared.no") %> - -<% end %> diff --git a/app/views/admin/budget_investments/toggle_selection.js.erb b/app/views/admin/budget_investments/toggle_selection.js.erb index ecf457e8c..75fc98a36 100644 --- a/app/views/admin/budget_investments/toggle_selection.js.erb +++ b/app/views/admin/budget_investments/toggle_selection.js.erb @@ -1 +1,3 @@ -$("#<%= dom_id(@investment) %>").html("<%= j render("select_investment", investment: @investment) %>").trigger("inserted"); +$("#<%= dom_id(@investment) %>").replaceWith( + "<%= j render Admin::BudgetInvestments::RowComponent.new(@investment) %>" +).trigger("inserted"); diff --git a/spec/components/admin/budget_investments/row_component_spec.rb b/spec/components/admin/budget_investments/row_component_spec.rb new file mode 100644 index 000000000..4f7dfab7c --- /dev/null +++ b/spec/components/admin/budget_investments/row_component_spec.rb @@ -0,0 +1,9 @@ +require "rails_helper" + +describe Admin::BudgetInvestments::RowComponent, :admin do + it "uses a JSON request to update visible to valuators" do + render_inline Admin::BudgetInvestments::RowComponent.new(create(:budget_investment)) + + expect(page).to have_css "form[action$='json'] input[name$='[visible_to_valuators]']" + end +end diff --git a/spec/views/admin/budget_investments/select_investment_spec.rb b/spec/views/admin/budget_investments/select_investment_spec.rb deleted file mode 100644 index e04c6dd8f..000000000 --- a/spec/views/admin/budget_investments/select_investment_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require "rails_helper" - -describe "investment row" do - it "uses a JSON request to update visible to valuators" do - investment = create(:budget_investment) - @budget = investment.budget - sign_in(create(:administrator).user) - - render "admin/budget_investments/select_investment", investment: investment - - expect(rendered).to have_css "form[action$='json'] input[name$='[visible_to_valuators]']" - end -end