Extract budget form to a component
This way it will be easier to change it and reuse it.
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
<%= translatable_form_for [:admin, @budget], html: { class: "budgets-form" } do |f| %>
|
<%= translatable_form_for [:admin, budget], html: { class: "budgets-form" } do |f| %>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><%= t("admin.budgets.edit.info.budget_settings") %></legend>
|
<legend><%= t("admin.budgets.edit.info.budget_settings") %></legend>
|
||||||
<%= render "shared/globalize_locales", resource: @budget %>
|
<%= render "shared/globalize_locales", resource: budget %>
|
||||||
<%= render "shared/errors", resource: @budget %>
|
<%= render "shared/errors", resource: budget %>
|
||||||
|
|
||||||
<%= f.translatable_fields do |translations_form| %>
|
<%= f.translatable_fields do |translations_form| %>
|
||||||
<div class="small-12 medium-9 large-6 column end">
|
<div class="small-12 medium-9 large-6 column end">
|
||||||
@@ -13,11 +13,11 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="small-12 medium-4 column">
|
<div class="small-12 medium-4 column">
|
||||||
<%= f.select :voting_style, budget_voting_styles_select_options %>
|
<%= f.select :voting_style, voting_styles_select_options %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="small-12 medium-2 column end">
|
<div class="small-12 medium-2 column end">
|
||||||
<%= f.select :currency_symbol, budget_currency_symbol_select_options %>
|
<%= f.select :currency_symbol, currency_symbol_select_options %>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
@@ -26,28 +26,28 @@
|
|||||||
|
|
||||||
<% %w[administrators valuators].each do |staff| %>
|
<% %w[administrators valuators].each do |staff| %>
|
||||||
<div class="small-12 medium-6 large-3 column end">
|
<div class="small-12 medium-6 large-3 column end">
|
||||||
<%= link_to t("admin.budgets.edit.#{staff}", count: @budget.send(staff).count),
|
<%= 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",
|
class: "button expanded hollow js-budget-show-#{staff}-list js-budget-show-users-list",
|
||||||
data: { toggle: "#{staff}_list", texts: t("admin.budgets.edit.#{staff}") } %>
|
data: { toggle: "#{staff}_list", texts: t("admin.budgets.edit.#{staff}") } %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= render "/admin/budgets/association", assignable_type: "administrators", assignables: @admins, form: f %>
|
<%= render "/admin/budgets/association", assignable_type: "administrators", assignables: admins, form: f %>
|
||||||
<%= render "/admin/budgets/association", assignable_type: "valuators", assignables: @valuators, form: f %>
|
<%= render "/admin/budgets/association", assignable_type: "valuators", assignables: valuators, form: f %>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><%= t("admin.budgets.edit.info.phases_settings") %></legend>
|
<legend><%= t("admin.budgets.edit.info.phases_settings") %></legend>
|
||||||
<div class="small-12 medium-6 column">
|
<div class="small-12 medium-6 column">
|
||||||
<%= f.select :phase, budget_phases_select_options %>
|
<%= f.select :phase, phases_select_options %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= render Admin::Budgets::HelpComponent.new("budget_phases") %>
|
<%= render Admin::Budgets::HelpComponent.new("budget_phases") %>
|
||||||
<%= render Admin::BudgetPhases::PhasesComponent.new(@budget) %>
|
<%= render Admin::BudgetPhases::PhasesComponent.new(budget) %>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<% if @budget.persisted? %>
|
<% if budget.persisted? %>
|
||||||
<%= render "admin/shared/show_results_fields", form: f %>
|
<%= render "admin/shared/show_results_fields", form: f %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
@@ -57,21 +57,21 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="float-right">
|
<div class="float-right">
|
||||||
<% if display_calculate_winners_button?(@budget) %>
|
<% if display_calculate_winners_button?(budget) %>
|
||||||
<%= link_to calculate_winner_button_text(@budget),
|
<%= link_to calculate_winner_button_text(budget),
|
||||||
calculate_winners_admin_budget_path(@budget),
|
calculate_winners_admin_budget_path(budget),
|
||||||
method: :put,
|
method: :put,
|
||||||
class: "button hollow" %>
|
class: "button hollow" %>
|
||||||
<% end %>
|
<% 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"),
|
||||||
budget_results_path(@budget),
|
budget_results_path(budget),
|
||||||
class: "button hollow margin-left" %>
|
class: "button hollow margin-left" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if @budget.persisted? %>
|
<% if budget.persisted? %>
|
||||||
<%= link_to t("admin.budgets.edit.delete"),
|
<%= link_to t("admin.budgets.edit.delete"),
|
||||||
admin_budget_path(@budget),
|
admin_budget_path(budget),
|
||||||
method: :delete,
|
method: :delete,
|
||||||
class: "delete float-right margin-left" %>
|
class: "delete float-right margin-left" %>
|
||||||
<% end %>
|
<% 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
|
||||||
@@ -7,7 +7,6 @@ class Admin::BudgetsController < Admin::BaseController
|
|||||||
has_filters %w[all open finished], only: :index
|
has_filters %w[all open finished], only: :index
|
||||||
|
|
||||||
before_action :load_budget, except: [:index, :new, :create]
|
before_action :load_budget, except: [:index, :new, :create]
|
||||||
before_action :load_staff, only: [:new, :create, :edit, :update, :show]
|
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@@ -83,9 +82,4 @@ class Admin::BudgetsController < Admin::BaseController
|
|||||||
def load_budget
|
def load_budget
|
||||||
@budget = Budget.find_by_slug_or_id! params[:id]
|
@budget = Budget.find_by_slug_or_id! params[:id]
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_staff
|
|
||||||
@admins = Administrator.includes(:user)
|
|
||||||
@valuators = Valuator.includes(:user).order(description: :asc).order("users.email ASC")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
module BudgetsHelper
|
module BudgetsHelper
|
||||||
def budget_voting_styles_select_options
|
|
||||||
Budget::VOTING_STYLES.map do |style|
|
|
||||||
[Budget.human_attribute_name("voting_style_#{style}"), style]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def csv_params
|
def csv_params
|
||||||
csv_params = params.clone.merge(format: :csv)
|
csv_params = params.clone.merge(format: :csv)
|
||||||
csv_params = csv_params.to_unsafe_h.map { |k, v| [k.to_sym, v] }.to_h
|
csv_params = csv_params.to_unsafe_h.map { |k, v| [k.to_sym, v] }.to_h
|
||||||
@@ -12,14 +6,6 @@ module BudgetsHelper
|
|||||||
csv_params
|
csv_params
|
||||||
end
|
end
|
||||||
|
|
||||||
def budget_phases_select_options
|
|
||||||
Budget::Phase::PHASE_KINDS.map { |ph| [t("budgets.phase.#{ph}"), ph] }
|
|
||||||
end
|
|
||||||
|
|
||||||
def budget_currency_symbol_select_options
|
|
||||||
Budget::CURRENCY_SYMBOLS.map { |cs| [cs, cs] }
|
|
||||||
end
|
|
||||||
|
|
||||||
def namespaced_budget_investment_path(investment, options = {})
|
def namespaced_budget_investment_path(investment, options = {})
|
||||||
case namespace
|
case namespace
|
||||||
when "management"
|
when "management"
|
||||||
|
|||||||
@@ -5,4 +5,4 @@
|
|||||||
<%= render Admin::Budgets::DraftingComponent.new(@budget) %>
|
<%= render Admin::Budgets::DraftingComponent.new(@budget) %>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<%= render "/admin/budgets/form" %>
|
<%= render Admin::Budgets::FormComponent.new(@budget) %>
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
<h2><%= t("admin.budgets.new.title") %></h2>
|
<h2><%= t("admin.budgets.new.title") %></h2>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<%= render "/admin/budgets/form" %>
|
<%= render Admin::Budgets::FormComponent.new(@budget) %>
|
||||||
|
|||||||
16
spec/components/admin/budgets/form_component_spec.rb
Normal file
16
spec/components/admin/budgets/form_component_spec.rb
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
describe Admin::Budgets::FormComponent, type: :component do
|
||||||
|
describe "#voting_styles_select_options" do
|
||||||
|
it "provides vote kinds" do
|
||||||
|
types = [
|
||||||
|
["Knapsack", "knapsack"],
|
||||||
|
["Approval", "approval"]
|
||||||
|
]
|
||||||
|
|
||||||
|
component = Admin::Budgets::FormComponent.new(double)
|
||||||
|
|
||||||
|
expect(component.voting_styles_select_options).to eq(types)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
require "rails_helper"
|
|
||||||
|
|
||||||
describe BudgetsHelper do
|
|
||||||
describe "#budget_voting_styles_select_options" do
|
|
||||||
it "provides vote kinds" do
|
|
||||||
types = [
|
|
||||||
["Knapsack", "knapsack"],
|
|
||||||
["Approval", "approval"]
|
|
||||||
]
|
|
||||||
|
|
||||||
expect(budget_voting_styles_select_options).to eq(types)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Reference in New Issue
Block a user