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 %>
+
+
+
+ |
+ <%= attribute_name(:title) %> |
+
+
+
+
+ <% local_targets.group_by(&:target).map do |target, local_targets| %>
+
+
+ <% local_targets.each do |local_target| %>
+
+
+ |
+ <%= local_target.title %>
+ |
+
+ <% end %>
+ <% end %>
+
+
+<% 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