Extract budget form to a component

This way it will be easier to change it and reuse it.
This commit is contained in:
Javi Martín
2021-06-04 21:58:09 +02:00
parent e9fb95d8d7
commit 82e8de094b
8 changed files with 74 additions and 54 deletions

View File

@@ -0,0 +1,80 @@
<%= translatable_form_for [:admin, budget], html: { class: "budgets-form" } do |f| %>
<fieldset>
<legend><%= t("admin.budgets.edit.info.budget_settings") %></legend>
<%= render "shared/globalize_locales", resource: budget %>
<%= render "shared/errors", resource: budget %>
<%= f.translatable_fields do |translations_form| %>
<div class="small-12 medium-9 large-6 column end">
<%= translations_form.text_field :name,
maxlength: Budget.title_max_length,
hint: t("admin.budgets.edit.name_description") %>
</div>
<% end %>
<div class="small-12 medium-4 column">
<%= f.select :voting_style, voting_styles_select_options %>
</div>
<div class="small-12 medium-2 column end">
<%= f.select :currency_symbol, currency_symbol_select_options %>
</div>
</fieldset>
<fieldset>
<legend><%= t("admin.budgets.edit.info.staff_settings") %></legend>
<% %w[administrators valuators].each do |staff| %>
<div class="small-12 medium-6 large-3 column end">
<%= link_to t("admin.budgets.edit.#{staff}", count: budget.send(staff).count),
"#",
class: "button expanded hollow js-budget-show-#{staff}-list js-budget-show-users-list",
data: { toggle: "#{staff}_list", texts: t("admin.budgets.edit.#{staff}") } %>
</div>
<% end %>
<%= render "/admin/budgets/association", assignable_type: "administrators", assignables: admins, form: f %>
<%= render "/admin/budgets/association", assignable_type: "valuators", assignables: valuators, form: f %>
</fieldset>
<fieldset>
<legend><%= t("admin.budgets.edit.info.phases_settings") %></legend>
<div class="small-12 medium-6 column">
<%= f.select :phase, phases_select_options %>
</div>
<%= render Admin::Budgets::HelpComponent.new("budget_phases") %>
<%= render Admin::BudgetPhases::PhasesComponent.new(budget) %>
</fieldset>
<% if budget.persisted? %>
<%= render "admin/shared/show_results_fields", form: f %>
<% end %>
<div class="small-12 column">
<div class="clear small-12 medium-4 large-3 inline-block">
<%= f.submit nil, class: "button success" %>
</div>
<div class="float-right">
<% if display_calculate_winners_button?(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? %>
<%= link_to t("budgets.show.see_results"),
budget_results_path(budget),
class: "button hollow margin-left" %>
<% end %>
<% if budget.persisted? %>
<%= link_to t("admin.budgets.edit.delete"),
admin_budget_path(budget),
method: :delete,
class: "delete float-right margin-left" %>
<% end %>
</div>
</div>
<% end %>

View File

@@ -0,0 +1,38 @@
class Admin::Budgets::FormComponent < ApplicationComponent
include TranslatableFormHelper
include GlobalizeHelper
attr_reader :budget
delegate :display_calculate_winners_button?,
:calculate_winner_button_text,
:calculate_winners_admin_budget_path,
to: :helpers
def initialize(budget)
@budget = budget
end
def voting_styles_select_options
Budget::VOTING_STYLES.map do |style|
[Budget.human_attribute_name("voting_style_#{style}"), style]
end
end
def currency_symbol_select_options
Budget::CURRENCY_SYMBOLS.map { |cs| [cs, cs] }
end
def phases_select_options
Budget::Phase::PHASE_KINDS.map { |ph| [t("budgets.phase.#{ph}"), ph] }
end
private
def admins
@admins ||= Administrator.includes(:user)
end
def valuators
@valuators ||= Valuator.includes(:user).order(description: :asc).order("users.email ASC")
end
end