Move investments search form partial to a component
As a bonus, we now have a few less helper methods :).
This commit is contained in:
@@ -956,34 +956,6 @@ table {
|
|||||||
// 10. Budgets
|
// 10. Budgets
|
||||||
// -----------------
|
// -----------------
|
||||||
|
|
||||||
.advanced-filters {
|
|
||||||
margin: $line-height 0;
|
|
||||||
|
|
||||||
@include breakpoint(medium) {
|
|
||||||
margin: calc(#{$line-height} / 2) 0 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.advanced-filters-content {
|
|
||||||
background: $highlight;
|
|
||||||
clear: both;
|
|
||||||
margin: $line-height 0;
|
|
||||||
padding: calc(#{$line-height} / 2);
|
|
||||||
|
|
||||||
.filter {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0 calc(#{$line-height} / 2);
|
|
||||||
|
|
||||||
label {
|
|
||||||
font-weight: normal;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.button {
|
|
||||||
margin-top: calc(#{$line-height} / 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.columns-selector {
|
.columns-selector {
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
.admin-budget-investments-search-form {
|
||||||
|
.advanced-filters {
|
||||||
|
margin: $line-height 0;
|
||||||
|
|
||||||
|
@include breakpoint(medium) {
|
||||||
|
margin: calc(#{$line-height} / 2) 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.advanced-filters-content {
|
||||||
|
background: $highlight;
|
||||||
|
clear: both;
|
||||||
|
margin: $line-height 0;
|
||||||
|
padding: calc(#{$line-height} / 2);
|
||||||
|
|
||||||
|
.filter {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0 calc(#{$line-height} / 2);
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-weight: normal;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
margin-top: calc(#{$line-height} / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<% init_advanced_menu %>
|
<% init_advanced_menu %>
|
||||||
<%= form_tag(admin_budget_budget_investments_path(budget: @budget), method: :get, enforce_utf8: false) do %>
|
<%= form_tag(admin_budget_budget_investments_path(budget), method: :get, enforce_utf8: false, class: "admin-budget-investments-search-form") do %>
|
||||||
<div class="small-12 column">
|
<div class="small-12 column">
|
||||||
<%= link_to "#advanced_filters_content",
|
<%= link_to "#advanced_filters_content",
|
||||||
data: { toggle: "advanced_filters" },
|
data: { toggle: "advanced_filters" },
|
||||||
@@ -34,28 +34,28 @@
|
|||||||
|
|
||||||
<div class="small-12 medium-3 column">
|
<div class="small-12 medium-3 column">
|
||||||
<%= select_tag :administrator_id,
|
<%= select_tag :administrator_id,
|
||||||
options_for_select(admin_select_options(@budget), params[:administrator_id]),
|
options_for_select(admin_select_options, params[:administrator_id]),
|
||||||
{ prompt: t("admin.budget_investments.index.administrator_filter_all") } %>
|
{ prompt: t("admin.budget_investments.index.administrator_filter_all") } %>
|
||||||
</div>
|
</div>
|
||||||
<div class="small-12 medium-3 column">
|
<div class="small-12 medium-3 column">
|
||||||
<%= select_tag :valuator_or_group_id,
|
<%= select_tag :valuator_or_group_id,
|
||||||
options_for_select(valuator_or_group_select_options(@budget), params[:valuator_or_group_id]),
|
options_for_select(valuator_or_group_select_options, params[:valuator_or_group_id]),
|
||||||
{ prompt: t("admin.budget_investments.index.valuator_filter_all") } %>
|
{ prompt: t("admin.budget_investments.index.valuator_filter_all") } %>
|
||||||
</div>
|
</div>
|
||||||
<div class="small-12 medium-3 column">
|
<div class="small-12 medium-3 column">
|
||||||
<%= select_tag :heading_id,
|
<%= select_tag :heading_id,
|
||||||
options_for_select(budget_heading_select_options(@budget), params[:heading_id]),
|
options_for_select(budget_heading_select_options(budget), params[:heading_id]),
|
||||||
{ prompt: t("admin.budget_investments.index.heading_filter_all") } %>
|
{ prompt: t("admin.budget_investments.index.heading_filter_all") } %>
|
||||||
</div>
|
</div>
|
||||||
<div class="small-12 medium-3 column">
|
<div class="small-12 medium-3 column">
|
||||||
<%= select_tag :tag_name,
|
<%= select_tag :tag_name,
|
||||||
options_for_select(investment_tags_select_options(@budget, "valuation_tags"), params[:tag_name]),
|
options_for_select(investment_tags_select_options("valuation_tags"), params[:tag_name]),
|
||||||
{ prompt: t("admin.budget_investments.index.tags_filter_all") } %>
|
{ prompt: t("admin.budget_investments.index.tags_filter_all") } %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="small-12 medium-3 column">
|
<div class="small-12 medium-3 column">
|
||||||
<%= select_tag :milestone_tag_name,
|
<%= select_tag :milestone_tag_name,
|
||||||
options_for_select(investment_tags_select_options(@budget, "milestone_tags"), params[:milestone_tag_name]),
|
options_for_select(investment_tags_select_options("milestone_tags"), params[:milestone_tag_name]),
|
||||||
{ prompt: t("admin.budget_investments.index.milestone_tags_filter_all") } %>
|
{ prompt: t("admin.budget_investments.index.milestone_tags_filter_all") } %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
class Admin::BudgetInvestments::SearchFormComponent < ApplicationComponent
|
||||||
|
attr_reader :budget
|
||||||
|
use_helpers :budget_heading_select_options
|
||||||
|
|
||||||
|
def initialize(budget)
|
||||||
|
@budget = budget
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def init_advanced_menu
|
||||||
|
params[:advanced_filters] = [] unless params[:advanced_filters]
|
||||||
|
end
|
||||||
|
|
||||||
|
def advanced_menu_visibility
|
||||||
|
if params[:advanced_filters].empty? &&
|
||||||
|
params["min_total_supports"].blank? &&
|
||||||
|
params["max_total_supports"].blank?
|
||||||
|
"hide"
|
||||||
|
else
|
||||||
|
""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def admin_select_options
|
||||||
|
budget.administrators.with_user.map { |v| [v.description_or_name, v.id] }.sort_by { |a| a[0] }
|
||||||
|
end
|
||||||
|
|
||||||
|
def valuator_or_group_select_options
|
||||||
|
valuator_group_select_options + valuator_select_options
|
||||||
|
end
|
||||||
|
|
||||||
|
def valuator_group_select_options
|
||||||
|
ValuatorGroup.order("name ASC").map { |g| [g.name, "group_#{g.id}"] }
|
||||||
|
end
|
||||||
|
|
||||||
|
def valuator_select_options
|
||||||
|
budget.valuators.order("description ASC").order("users.email ASC").includes(:user)
|
||||||
|
.map { |v| [v.description_or_email, "valuator_#{v.id}"] }
|
||||||
|
end
|
||||||
|
|
||||||
|
def investment_tags_select_options(context)
|
||||||
|
budget.investments.tags_on(context).order(:name).pluck(:name)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
module AdminBudgetInvestmentsHelper
|
|
||||||
def advanced_menu_visibility
|
|
||||||
if params[:advanced_filters].empty? &&
|
|
||||||
params["min_total_supports"].blank? &&
|
|
||||||
params["max_total_supports"].blank?
|
|
||||||
"hide"
|
|
||||||
else
|
|
||||||
""
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def init_advanced_menu
|
|
||||||
params[:advanced_filters] = [] unless params[:advanced_filters]
|
|
||||||
end
|
|
||||||
|
|
||||||
def admin_select_options(budget)
|
|
||||||
budget.administrators.with_user.map { |v| [v.description_or_name, v.id] }.sort_by { |a| a[0] }
|
|
||||||
end
|
|
||||||
|
|
||||||
def valuator_or_group_select_options(budget)
|
|
||||||
valuator_group_select_options + valuator_select_options(budget)
|
|
||||||
end
|
|
||||||
|
|
||||||
def valuator_select_options(budget)
|
|
||||||
budget.valuators.order("description ASC").order("users.email ASC").includes(:user)
|
|
||||||
.map { |v| [v.description_or_email, "valuator_#{v.id}"] }
|
|
||||||
end
|
|
||||||
|
|
||||||
def valuator_group_select_options
|
|
||||||
ValuatorGroup.order("name ASC").map { |g| [g.name, "group_#{g.id}"] }
|
|
||||||
end
|
|
||||||
|
|
||||||
def investment_tags_select_options(budget, context)
|
|
||||||
budget.investments.tags_on(context).order(:name).pluck(:name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<h2 class="inline-block"><%= @budget.name %> - <%= t("admin.budget_investments.index.title") %></h2>
|
<h2 class="inline-block"><%= @budget.name %> - <%= t("admin.budget_investments.index.title") %></h2>
|
||||||
|
|
||||||
<%= render "search_form" %>
|
<%= render Admin::BudgetInvestments::SearchFormComponent.new(@budget) %>
|
||||||
|
|
||||||
<%= render "/shared/filter_subnav", i18n_namespace: "admin.budget_investments.index" %>
|
<%= render "/shared/filter_subnav", i18n_namespace: "admin.budget_investments.index" %>
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,23 @@
|
|||||||
require "rails_helper"
|
require "rails_helper"
|
||||||
|
|
||||||
describe AdminBudgetInvestmentsHelper do
|
describe Admin::BudgetInvestments::SearchFormComponent do
|
||||||
describe "#admin_select_options" do
|
describe "#admin_select_options" do
|
||||||
it "includes administrators assigned to the budget" do
|
it "includes administrators assigned to the budget" do
|
||||||
admin = create(:administrator, user: create(:user, username: "Winston"))
|
admin = create(:administrator, user: create(:user, username: "Winston"))
|
||||||
budget = create(:budget, administrators: [admin])
|
budget = create(:budget, administrators: [admin])
|
||||||
|
|
||||||
expect(admin_select_options(budget)).to eq([["Winston", admin.id]])
|
render_inline Admin::BudgetInvestments::SearchFormComponent.new(budget)
|
||||||
|
|
||||||
|
expect(page).to have_select options: ["All administrators", "Winston"]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not include other administrators" do
|
it "does not include other administrators" do
|
||||||
create(:administrator, user: create(:user, username: "Winston"))
|
create(:administrator, user: create(:user, username: "Winston"))
|
||||||
budget = create(:budget, administrators: [])
|
budget = create(:budget, administrators: [])
|
||||||
|
|
||||||
expect(admin_select_options(budget)).to be_empty
|
render_inline Admin::BudgetInvestments::SearchFormComponent.new(budget)
|
||||||
|
|
||||||
|
expect(page).to have_select options: ["All administrators"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -22,14 +26,18 @@ describe AdminBudgetInvestmentsHelper do
|
|||||||
valuator = create(:valuator, description: "Kodogo")
|
valuator = create(:valuator, description: "Kodogo")
|
||||||
budget = create(:budget, valuators: [valuator])
|
budget = create(:budget, valuators: [valuator])
|
||||||
|
|
||||||
expect(valuator_select_options(budget)).to eq([["Kodogo", "valuator_#{valuator.id}"]])
|
render_inline Admin::BudgetInvestments::SearchFormComponent.new(budget)
|
||||||
|
|
||||||
|
expect(page).to have_select options: ["All valuators", "Kodogo"]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not include other valuators" do
|
it "does not include other valuators" do
|
||||||
create(:valuator, description: "Kodogo")
|
create(:valuator, description: "Kodogo")
|
||||||
budget = create(:budget, valuators: [])
|
budget = create(:budget, valuators: [])
|
||||||
|
|
||||||
expect(valuator_select_options(budget)).to be_empty
|
render_inline Admin::BudgetInvestments::SearchFormComponent.new(budget)
|
||||||
|
|
||||||
|
expect(page).to have_select options: ["All valuators"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Reference in New Issue
Block a user