diff --git a/app/components/sdg_management/local_targets/index_component.html.erb b/app/components/sdg_management/local_targets/index_component.html.erb new file mode 100644 index 000000000..c8b14d546 --- /dev/null +++ b/app/components/sdg_management/local_targets/index_component.html.erb @@ -0,0 +1,33 @@ +<%= header %> + +<%= render SDGManagement::SubnavigationComponent.new(current: :local_targets) do %> + + + + + + + + + + <% local_targets.group_by(&:target).map do |target, local_targets| %> + + + + + <% local_targets.each do |local_target| %> + + + + + <% end %> + <% end %> + +
<%= attribute_name(:title) %>
+ <%= target.code %> <%= target.title %> +
+ <%= local_target.code %> + + <%= local_target.title %> +
+<% end %> diff --git a/app/components/sdg_management/local_targets/index_component.rb b/app/components/sdg_management/local_targets/index_component.rb new file mode 100644 index 000000000..38d767b8d --- /dev/null +++ b/app/components/sdg_management/local_targets/index_component.rb @@ -0,0 +1,23 @@ +class SDGManagement::LocalTargets::IndexComponent < ApplicationComponent + include SDGManagement::Header + + attr_reader :local_targets + + def initialize(local_targets) + @local_targets = local_targets + end + + private + + def title + SDG::LocalTarget.model_name.human(count: 2).titleize + end + + def attribute_name(attribute) + SDG::LocalTarget.human_attribute_name(attribute) + end + + def header_id(object) + "#{dom_id(object)}_header" + end +end diff --git a/app/components/sdg_management/subnavigation_component.rb b/app/components/sdg_management/subnavigation_component.rb index 35d1a0fda..41096a618 100644 --- a/app/components/sdg_management/subnavigation_component.rb +++ b/app/components/sdg_management/subnavigation_component.rb @@ -8,7 +8,7 @@ class SDGManagement::SubnavigationComponent < ApplicationComponent private def sections - %i[goals targets] + %i[goals targets local_targets] end def link_to_section(section) diff --git a/app/controllers/sdg_management/local_targets_controller.rb b/app/controllers/sdg_management/local_targets_controller.rb new file mode 100644 index 000000000..2db2b5d68 --- /dev/null +++ b/app/controllers/sdg_management/local_targets_controller.rb @@ -0,0 +1,7 @@ +class SDGManagement::LocalTargetsController < SDGManagement::BaseController + LocalTarget = ::SDG::LocalTarget + + def index + @local_targets = LocalTarget.all.sort + end +end diff --git a/app/views/sdg_management/local_targets/index.html.erb b/app/views/sdg_management/local_targets/index.html.erb new file mode 100644 index 000000000..de6e04103 --- /dev/null +++ b/app/views/sdg_management/local_targets/index.html.erb @@ -0,0 +1 @@ +<%= render SDGManagement::LocalTargets::IndexComponent.new(@local_targets) %> diff --git a/config/locales/en/activerecord.yml b/config/locales/en/activerecord.yml index ca6200560..0ec2fc59f 100644 --- a/config/locales/en/activerecord.yml +++ b/config/locales/en/activerecord.yml @@ -75,6 +75,9 @@ en: sdg/goal: one: "goal" other: "goals" + sdg/local_target: + one: "local target" + other: "local targets" sdg/target: one: "target" other: "targets" @@ -318,6 +321,10 @@ en: code: "Code" title: "Title" description: "Description" + sdg/local_target: + title: "Title" + sdg/local_target/translation: + title: "Title" sdg/target: code: "Code" title: "Title" diff --git a/config/locales/es/activerecord.yml b/config/locales/es/activerecord.yml index 0b82e9120..32319ae1f 100644 --- a/config/locales/es/activerecord.yml +++ b/config/locales/es/activerecord.yml @@ -75,6 +75,9 @@ es: sdg/goal: one: "objetivo" other: "objetivos" + sdg/local_target: + one: "meta localizada" + other: "metas localizadas" sdg/target: one: "meta" other: "metas" @@ -315,6 +318,10 @@ es: code: "Código" title: "Título" description: "Descripción" + sdg/local_target: + title: "Título" + sdg/local_target/translation: + title: "Título" sdg/target: code: "Código" title: "Título" diff --git a/config/routes/sdg_management.rb b/config/routes/sdg_management.rb index 50b0f45d5..ae1a232e4 100644 --- a/config/routes/sdg_management.rb +++ b/config/routes/sdg_management.rb @@ -3,4 +3,5 @@ namespace :sdg_management do resources :goals, only: [:index] resources :targets, only: [:index] + resources :local_targets, only: [:index] end diff --git a/spec/system/sdg_management/local_targets_spec.rb b/spec/system/sdg_management/local_targets_spec.rb new file mode 100644 index 000000000..89f550b0e --- /dev/null +++ b/spec/system/sdg_management/local_targets_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +describe "Local Targets", :js do + before do + login_as(create(:administrator).user) + Setting["feature.sdg"] = true + end + + describe "Index" do + scenario "Visit the index" do + create(:sdg_local_target, code: "1.1.1", title: "Affordable food") + + visit sdg_management_goals_path + click_link "Local Targets" + + expect(page).to have_title "SDG content - Local Targets" + within("table") { expect(page).to have_content "Affordable food for everyone" } + end + + scenario "Show local targets grouped by target" do + target_1 = SDG::Target["1.1"] + target_1_local_target = create(:sdg_local_target, code: "1.1.1", target: target_1) + target_2 = SDG::Target["2.1"] + target_2_local_target = create(:sdg_local_target, code: "2.1.1", target: target_2) + + visit sdg_management_local_targets_path + + expect(target_1.title).to appear_before(target_1_local_target.title) + expect(target_1_local_target.title).to appear_before(target_2.title) + expect(target_2.title).to appear_before(target_2_local_target.title) + end + end +end