diff --git a/app/assets/stylesheets/advanced_search.scss b/app/assets/stylesheets/advanced_search.scss
index 4ea3a5fd1..9191bb83c 100644
--- a/app/assets/stylesheets/advanced_search.scss
+++ b/app/assets/stylesheets/advanced_search.scss
@@ -22,10 +22,10 @@
.date-filters {
float: left;
- width: 50%;
+ width: 25%;
.filter {
- width: 50%;
+ width: 100%;
}
.custom-date-filters {
diff --git a/app/components/concerns/sdg/goals/options_for_select.rb b/app/components/concerns/sdg/goals/options_for_select.rb
deleted file mode 100644
index 559168a3a..000000000
--- a/app/components/concerns/sdg/goals/options_for_select.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-module SDG::Goals::OptionsForSelect
- extend ActiveSupport::Concern
-
- def goal_options(selected_code = nil)
- options_from_collection_for_select(SDG::Goal.order(:code), :code, :code_and_title, selected_code)
- end
-end
diff --git a/app/components/concerns/sdg/options_for_select.rb b/app/components/concerns/sdg/options_for_select.rb
new file mode 100644
index 000000000..a077a5993
--- /dev/null
+++ b/app/components/concerns/sdg/options_for_select.rb
@@ -0,0 +1,13 @@
+module SDG::OptionsForSelect
+ extend ActiveSupport::Concern
+
+ def goal_options(selected_code = nil)
+ options_from_collection_for_select(SDG::Goal.order(:code), :code, :code_and_title, selected_code)
+ end
+
+ def target_options(selected_code = nil)
+ targets = SDG::Target.all + SDG::LocalTarget.all
+
+ options_from_collection_for_select(targets.sort, :code, :code, selected_code)
+ end
+end
diff --git a/app/components/sdg_management/relations/index_component.rb b/app/components/sdg_management/relations/index_component.rb
index 41eb4a26f..ee55fd7a7 100644
--- a/app/components/sdg_management/relations/index_component.rb
+++ b/app/components/sdg_management/relations/index_component.rb
@@ -1,6 +1,6 @@
class SDGManagement::Relations::IndexComponent < ApplicationComponent
include Header
- include SDG::Goals::OptionsForSelect
+ include SDG::OptionsForSelect
delegate :valid_filters, :current_filter, to: :helpers
attr_reader :records
@@ -53,8 +53,6 @@ class SDGManagement::Relations::IndexComponent < ApplicationComponent
end
def target_options
- targets = SDG::Target.all + SDG::LocalTarget.all
-
- options_from_collection_for_select(targets.sort, :code, :code, params[:target_code])
+ super(params[:target_code])
end
end
diff --git a/app/components/shared/advanced_search_component.html.erb b/app/components/shared/advanced_search_component.html.erb
index b03a371fc..55d57129c 100644
--- a/app/components/shared/advanced_search_component.html.erb
+++ b/app/components/shared/advanced_search_component.html.erb
@@ -26,6 +26,11 @@
<%= select_tag("advanced_search[goal]", goal_options,
include_blank: t("shared.advanced_search.goal_blank")) %>
+
+
+ <%= select_tag("advanced_search[target]", target_options,
+ include_blank: t("shared.advanced_search.target_blank")) %>
+
<% end %>
diff --git a/app/components/shared/advanced_search_component.rb b/app/components/shared/advanced_search_component.rb
index a03425305..636fbdfc2 100644
--- a/app/components/shared/advanced_search_component.rb
+++ b/app/components/shared/advanced_search_component.rb
@@ -1,5 +1,5 @@
class Shared::AdvancedSearchComponent < ApplicationComponent
- include SDG::Goals::OptionsForSelect
+ include SDG::OptionsForSelect
private
@@ -34,6 +34,10 @@ class Shared::AdvancedSearchComponent < ApplicationComponent
super(advanced_search[:goal])
end
+ def target_options
+ super(advanced_search[:target])
+ end
+
def sdg?
SDG::ProcessEnabled.new(controller_path).enabled?
end
diff --git a/app/models/concerns/filterable.rb b/app/models/concerns/filterable.rb
index 0c7520580..9f86e6a9a 100644
--- a/app/models/concerns/filterable.rb
+++ b/app/models/concerns/filterable.rb
@@ -20,7 +20,7 @@ module Filterable
def allowed_filter?(filter, value)
return if value.blank?
- ["official_level", "date_range", "goal"].include?(filter)
+ ["official_level", "date_range", "goal", "target"].include?(filter)
end
end
end
diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml
index 60b145e49..a150efd5a 100644
--- a/config/locales/en/general.yml
+++ b/config/locales/en/general.yml
@@ -697,6 +697,8 @@ en:
goal: "By SDG"
goal_blank: "Select a goal"
search: "Filter"
+ target: "By target"
+ target_blank: "Select a target"
title: "Advanced search"
to: "To"
author_info:
diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml
index a01da18f4..c9e011657 100644
--- a/config/locales/es/general.yml
+++ b/config/locales/es/general.yml
@@ -697,6 +697,8 @@ es:
goal: "Por ODS"
goal_blank: "Elige un objetivo"
search: "Filtrar"
+ target: "Por meta"
+ target_blank: "Elige una meta"
title: "Búsqueda avanzada"
to: "Hasta"
author_info:
diff --git a/spec/components/shared/advanced_search_component_spec.rb b/spec/components/shared/advanced_search_component_spec.rb
index 1f4966d17..84f072b8f 100644
--- a/spec/components/shared/advanced_search_component_spec.rb
+++ b/spec/components/shared/advanced_search_component_spec.rb
@@ -17,6 +17,7 @@ describe Shared::AdvancedSearchComponent, type: :component do
render_inline component
expect(page).not_to have_selector "#advanced_search_goal", visible: :all
+ expect(page).not_to have_selector "#advanced_search_target", visible: :all
end
it "does not render when the SDG process feature is disabled" do
@@ -25,12 +26,14 @@ describe Shared::AdvancedSearchComponent, type: :component do
render_inline component
expect(page).not_to have_selector "#advanced_search_goal", visible: :all
+ expect(page).not_to have_selector "#advanced_search_target", visible: :all
end
it "renders when both features are enabled" do
render_inline component
expect(page).to have_selector "#advanced_search_goal", visible: :all
+ expect(page).to have_selector "#advanced_search_target", visible: :all
end
end
end
diff --git a/spec/system/budgets/investments_spec.rb b/spec/system/budgets/investments_spec.rb
index 10a6f7a4b..be79d04c0 100644
--- a/spec/system/budgets/investments_spec.rb
+++ b/spec/system/budgets/investments_spec.rb
@@ -500,6 +500,27 @@ describe "Budget Investments" do
end
end
end
+
+ scenario "Search by SDG target", :js do
+ Setting["feature.sdg"] = true
+ Setting["sdg.process.budgets"] = true
+ create(:budget_investment, heading: heading, title: "Unrelated")
+ create(:budget_investment, heading: heading, title: "High school", sdg_targets: [SDG::Target["4.1"]])
+ create(:budget_investment, heading: heading, title: "Preschool", sdg_targets: [SDG::Target["4.2"]])
+
+ visit budget_investments_path(budget)
+ click_link "Advanced search"
+ select "4.2", from: "By target"
+ click_button "Filter"
+
+ expect(page).to have_content("There is 1 investment")
+
+ within("#budget-investments") do
+ expect(page).to have_content("Preschool")
+ expect(page).not_to have_content("High school")
+ expect(page).not_to have_content("Unrelated")
+ end
+ end
end
context("Filters") do
diff --git a/spec/system/debates_spec.rb b/spec/system/debates_spec.rb
index 9844c926e..d2b656139 100644
--- a/spec/system/debates_spec.rb
+++ b/spec/system/debates_spec.rb
@@ -866,6 +866,27 @@ describe "Debates" do
end
end
end
+
+ scenario "Search by SDG target", :js do
+ Setting["feature.sdg"] = true
+ Setting["sdg.process.debates"] = true
+ create(:debate, title: "Unrelated")
+ create(:debate, title: "High school", sdg_targets: [SDG::Target["4.1"]])
+ create(:debate, title: "Preschool", sdg_targets: [SDG::Target["4.2"]])
+
+ visit debates_path
+ click_link "Advanced search"
+ select "4.2", from: "By target"
+ click_button "Filter"
+
+ expect(page).to have_content("There is 1 debate")
+
+ within("#debates") do
+ expect(page).to have_content("Preschool")
+ expect(page).not_to have_content("High school")
+ expect(page).not_to have_content("Unrelated")
+ end
+ end
end
scenario "Order by relevance by default", :js do
diff --git a/spec/system/proposals_spec.rb b/spec/system/proposals_spec.rb
index 4376b6d92..3cae87a62 100644
--- a/spec/system/proposals_spec.rb
+++ b/spec/system/proposals_spec.rb
@@ -1482,6 +1482,27 @@ describe "Proposals" do
end
end
end
+
+ scenario "Search by SDG target", :js do
+ Setting["feature.sdg"] = true
+ Setting["sdg.process.proposals"] = true
+ create(:proposal, title: "Unrelated")
+ create(:proposal, title: "High school", sdg_targets: [SDG::Target["4.1"]])
+ create(:proposal, title: "Preschool", sdg_targets: [SDG::Target["4.2"]])
+
+ visit proposals_path
+ click_link "Advanced search"
+ select "4.2", from: "By target"
+ click_button "Filter"
+
+ expect(page).to have_content("There is 1 citizen proposal")
+
+ within("#proposals") do
+ expect(page).to have_content("Preschool")
+ expect(page).not_to have_content("High school")
+ expect(page).not_to have_content("Unrelated")
+ end
+ end
end
scenario "Order by relevance by default", :js do