diff --git a/app/views/admin/budgets/_form.html.erb b/app/components/admin/budgets/form_component.html.erb similarity index 65% rename from app/views/admin/budgets/_form.html.erb rename to app/components/admin/budgets/form_component.html.erb index 295f1234a..3391bc6f7 100644 --- a/app/views/admin/budgets/_form.html.erb +++ b/app/components/admin/budgets/form_component.html.erb @@ -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| %>
<%= t("admin.budgets.edit.info.budget_settings") %> - <%= render "shared/globalize_locales", resource: @budget %> - <%= render "shared/errors", resource: @budget %> + <%= render "shared/globalize_locales", resource: budget %> + <%= render "shared/errors", resource: budget %> <%= f.translatable_fields do |translations_form| %>
@@ -13,11 +13,11 @@ <% end %>
- <%= f.select :voting_style, budget_voting_styles_select_options %> + <%= f.select :voting_style, voting_styles_select_options %>
- <%= f.select :currency_symbol, budget_currency_symbol_select_options %> + <%= f.select :currency_symbol, currency_symbol_select_options %>
@@ -26,28 +26,28 @@ <% %w[administrators valuators].each do |staff| %>
- <%= 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", data: { toggle: "#{staff}_list", texts: t("admin.budgets.edit.#{staff}") } %>
<% end %> - <%= 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: "administrators", assignables: admins, form: f %> + <%= render "/admin/budgets/association", assignable_type: "valuators", assignables: valuators, form: f %>
<%= t("admin.budgets.edit.info.phases_settings") %>
- <%= f.select :phase, budget_phases_select_options %> + <%= f.select :phase, phases_select_options %>
<%= render Admin::Budgets::HelpComponent.new("budget_phases") %> - <%= render Admin::BudgetPhases::PhasesComponent.new(@budget) %> + <%= render Admin::BudgetPhases::PhasesComponent.new(budget) %>
- <% if @budget.persisted? %> + <% if budget.persisted? %> <%= render "admin/shared/show_results_fields", form: f %> <% end %> @@ -57,21 +57,21 @@
- <% if display_calculate_winners_button?(@budget) %> - <%= link_to calculate_winner_button_text(@budget), - calculate_winners_admin_budget_path(@budget), + <% 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? %> + <% if budget.has_winning_investments? %> <%= link_to t("budgets.show.see_results"), - budget_results_path(@budget), + budget_results_path(budget), class: "button hollow margin-left" %> <% end %> - <% if @budget.persisted? %> + <% if budget.persisted? %> <%= link_to t("admin.budgets.edit.delete"), - admin_budget_path(@budget), + admin_budget_path(budget), method: :delete, class: "delete float-right margin-left" %> <% end %> diff --git a/app/components/admin/budgets/form_component.rb b/app/components/admin/budgets/form_component.rb new file mode 100644 index 000000000..93752cefc --- /dev/null +++ b/app/components/admin/budgets/form_component.rb @@ -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 diff --git a/app/controllers/admin/budgets_controller.rb b/app/controllers/admin/budgets_controller.rb index b6adc0a0a..a35396342 100644 --- a/app/controllers/admin/budgets_controller.rb +++ b/app/controllers/admin/budgets_controller.rb @@ -7,7 +7,6 @@ class Admin::BudgetsController < Admin::BaseController has_filters %w[all open finished], only: :index before_action :load_budget, except: [:index, :new, :create] - before_action :load_staff, only: [:new, :create, :edit, :update, :show] load_and_authorize_resource def index @@ -83,9 +82,4 @@ class Admin::BudgetsController < Admin::BaseController def load_budget @budget = Budget.find_by_slug_or_id! params[:id] end - - def load_staff - @admins = Administrator.includes(:user) - @valuators = Valuator.includes(:user).order(description: :asc).order("users.email ASC") - end end diff --git a/app/helpers/budgets_helper.rb b/app/helpers/budgets_helper.rb index 6d5751302..e07b73192 100644 --- a/app/helpers/budgets_helper.rb +++ b/app/helpers/budgets_helper.rb @@ -1,10 +1,4 @@ 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 csv_params = params.clone.merge(format: :csv) csv_params = csv_params.to_unsafe_h.map { |k, v| [k.to_sym, v] }.to_h @@ -12,14 +6,6 @@ module BudgetsHelper csv_params 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 = {}) case namespace when "management" diff --git a/app/views/admin/budgets/edit.html.erb b/app/views/admin/budgets/edit.html.erb index 70cdcfd69..ad5d44f76 100644 --- a/app/views/admin/budgets/edit.html.erb +++ b/app/views/admin/budgets/edit.html.erb @@ -5,4 +5,4 @@ <%= render Admin::Budgets::DraftingComponent.new(@budget) %> -<%= render "/admin/budgets/form" %> +<%= render Admin::Budgets::FormComponent.new(@budget) %> diff --git a/app/views/admin/budgets/new.html.erb b/app/views/admin/budgets/new.html.erb index 12bdf42f8..90d802424 100644 --- a/app/views/admin/budgets/new.html.erb +++ b/app/views/admin/budgets/new.html.erb @@ -4,4 +4,4 @@

<%= t("admin.budgets.new.title") %>

-<%= render "/admin/budgets/form" %> +<%= render Admin::Budgets::FormComponent.new(@budget) %> diff --git a/spec/components/admin/budgets/form_component_spec.rb b/spec/components/admin/budgets/form_component_spec.rb new file mode 100644 index 000000000..1abacdeee --- /dev/null +++ b/spec/components/admin/budgets/form_component_spec.rb @@ -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 diff --git a/spec/helpers/budgets_helper_spec.rb b/spec/helpers/budgets_helper_spec.rb deleted file mode 100644 index 832f510d8..000000000 --- a/spec/helpers/budgets_helper_spec.rb +++ /dev/null @@ -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