Extract budget form to a component
This way it will be easier to change it and reuse it.
This commit is contained in:
80
app/components/admin/budgets/form_component.html.erb
Normal file
80
app/components/admin/budgets/form_component.html.erb
Normal 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 %>
|
||||
38
app/components/admin/budgets/form_component.rb
Normal file
38
app/components/admin/budgets/form_component.rb
Normal 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
|
||||
Reference in New Issue
Block a user