Extract calculate winners button to a component

This way we remove some duplication.
This commit is contained in:
Javi Martín
2021-08-21 22:56:02 +02:00
parent f4b338b65f
commit 4a42804a7d
6 changed files with 45 additions and 35 deletions

View File

@@ -0,0 +1,13 @@
<% if display_button? %>
<%= link_to text,
calculate_winners_admin_budget_path(budget),
method: :put,
class: html_class %>
<% elsif from_investments %>
<span class="button hollow disabled float-right clear">
<%= t("admin.budgets.winners.calculate") %>
</span>
<div class="callout warning clear">
<%= t("admin.budget_investments.index.cannot_calculate_winners") %>
</div>
<% end %>

View File

@@ -0,0 +1,30 @@
class Admin::Budgets::CalculateWinnersButtonComponent < ApplicationComponent
attr_reader :budget, :from_investments
def initialize(budget, from_investments: false)
@budget = budget
@from_investments = from_investments
end
private
def display_button?
budget.balloting_or_later?
end
def text
if budget.investments.winners.empty?
t("admin.budgets.winners.calculate")
else
t("admin.budgets.winners.recalculate")
end
end
def html_class
if from_investments
"button hollow float-right clear"
else
"button hollow"
end
end
end

View File

@@ -86,12 +86,7 @@
</div> </div>
<div class="float-right"> <div class="float-right">
<% if display_calculate_winners_button?(budget) %> <%= render Admin::Budgets::CalculateWinnersButtonComponent.new(budget) %>
<%= link_to calculate_winner_button_text(budget),
calculate_winners_admin_budget_path(budget),
method: :put,
class: "button hollow" %>
<% end %>
<% if budget.has_winning_investments? %> <% if budget.has_winning_investments? %>
<%= link_to t("budgets.show.see_results"), <%= link_to t("budgets.show.see_results"),

View File

@@ -5,10 +5,6 @@ class Admin::Budgets::FormComponent < ApplicationComponent
attr_reader :budget, :wizard attr_reader :budget, :wizard
alias_method :wizard?, :wizard alias_method :wizard?, :wizard
delegate :display_calculate_winners_button?,
:calculate_winner_button_text,
:calculate_winners_admin_budget_path,
to: :helpers
def initialize(budget, wizard: false) def initialize(budget, wizard: false)
@budget = budget @budget = budget

View File

@@ -33,18 +33,6 @@ module BudgetsHelper
budget.published? || current_user&.administrator? budget.published? || current_user&.administrator?
end end
def display_calculate_winners_button?(budget)
budget.balloting_or_later?
end
def calculate_winner_button_text(budget)
if budget.investments.winners.empty?
t("admin.budgets.winners.calculate")
else
t("admin.budgets.winners.recalculate")
end
end
def budget_subnav_items_for(budget) def budget_subnav_items_for(budget)
{ {
results: t("budgets.results.link"), results: t("budgets.results.link"),

View File

@@ -3,19 +3,7 @@
class: "float-right small clear" %> class: "float-right small clear" %>
<% if params[:advanced_filters].include?("winners") %> <% if params[:advanced_filters].include?("winners") %>
<% if display_calculate_winners_button?(@budget) %> <%= render Admin::Budgets::CalculateWinnersButtonComponent.new(@budget, from_investments: true) %>
<%= link_to calculate_winner_button_text(@budget),
calculate_winners_admin_budget_path(@budget),
method: :put,
class: "button hollow float-right clear" %>
<% else %>
<span class="button hollow disabled float-right clear">
<%= t("admin.budgets.winners.calculate") %>
</span>
<div class="callout warning clear">
<%= t("admin.budget_investments.index.cannot_calculate_winners") %>
</div>
<% end %>
<% end %> <% end %>
<% if @investments.any? %> <% if @investments.any? %>