diff --git a/app/assets/stylesheets/sdg_management/menu.scss b/app/assets/stylesheets/sdg_management/menu.scss index 744234610..542ce4177 100644 --- a/app/assets/stylesheets/sdg_management/menu.scss +++ b/app/assets/stylesheets/sdg_management/menu.scss @@ -7,4 +7,12 @@ mask-image: image-url("sdg.svg"); } + + .homepage-link { + @include has-fa-icon(home, solid); + + &::before { + @extend %admin-menu-icon; + } + } } diff --git a/app/components/sdg_management/homepage/show_component.html.erb b/app/components/sdg_management/homepage/show_component.html.erb new file mode 100644 index 000000000..3a06ebee1 --- /dev/null +++ b/app/components/sdg_management/homepage/show_component.html.erb @@ -0,0 +1 @@ +<%= header %> diff --git a/app/components/sdg_management/homepage/show_component.rb b/app/components/sdg_management/homepage/show_component.rb new file mode 100644 index 000000000..dd2ee5b56 --- /dev/null +++ b/app/components/sdg_management/homepage/show_component.rb @@ -0,0 +1,15 @@ +class SDGManagement::Homepage::ShowComponent < ApplicationComponent + include Header + + attr_reader :phases + + def initialize(phases) + @phases = phases + end + + private + + def title + t("sdg_management.homepage.title") + end +end diff --git a/app/components/sdg_management/menu_component.rb b/app/components/sdg_management/menu_component.rb index a1e156a73..543bb3863 100644 --- a/app/components/sdg_management/menu_component.rb +++ b/app/components/sdg_management/menu_component.rb @@ -4,11 +4,15 @@ class SDGManagement::MenuComponent < ApplicationComponent private def links - [goals_link, *relatable_links] + [goals_link, homepage_link, *relatable_links] end def goals_link - [t("sdg_management.menu.sdg_content"), sdg_management_goals_path, sdg?, class: "goals-link"] + [item_text("sdg_content"), sdg_management_goals_path, sdg?, class: "goals-link"] + end + + def homepage_link + [item_text("sdg_homepage"), sdg_management_homepage_path, homepage?, class: "homepage-link"] end def relatable_links @@ -16,7 +20,7 @@ class SDGManagement::MenuComponent < ApplicationComponent next unless SDG::ProcessEnabled.new(type).enabled? [ - t("sdg_management.menu.#{table_name(type)}"), + item_text(table_name(type)), relatable_type_path(type), controller_name == "relations" && params[:relatable_type] == type.tableize, class: "#{table_name(type).tr("_", "-")}-link" @@ -28,6 +32,10 @@ class SDGManagement::MenuComponent < ApplicationComponent %w[goals targets local_targets].include?(controller_name) end + def homepage? + controller_name == "homepage" + end + def relatable_type_path(type) { controller: "sdg_management/relations", @@ -39,4 +47,8 @@ class SDGManagement::MenuComponent < ApplicationComponent def table_name(type) type.constantize.table_name end + + def item_text(item) + t("sdg_management.menu.#{item}") + end end diff --git a/app/controllers/sdg_management/homepage_controller.rb b/app/controllers/sdg_management/homepage_controller.rb new file mode 100644 index 000000000..4f9d67109 --- /dev/null +++ b/app/controllers/sdg_management/homepage_controller.rb @@ -0,0 +1,5 @@ +class SDGManagement::HomepageController < SDGManagement::BaseController + def show + @phases = SDG::Phase.accessible_by(current_ability).order(:kind) + end +end diff --git a/app/views/sdg_management/homepage/show.html.erb b/app/views/sdg_management/homepage/show.html.erb new file mode 100644 index 000000000..f76456364 --- /dev/null +++ b/app/views/sdg_management/homepage/show.html.erb @@ -0,0 +1 @@ +<%= render SDGManagement::Homepage::ShowComponent.new(@phases) %> diff --git a/config/locales/en/sdg_management.yml b/config/locales/en/sdg_management.yml index bacc84bbb..e084621e8 100644 --- a/config/locales/en/sdg_management.yml +++ b/config/locales/en/sdg_management.yml @@ -4,6 +4,8 @@ en: edit: "Manage goals and targets" header: title: "SDG content" + homepage: + title: "Homepage configuration" menu: budget_investments: "Participatory budgets" debates: "Debates" @@ -11,6 +13,7 @@ en: polls: "Polls" proposals: "Proposals" sdg_content: "Goals and Targets" + sdg_homepage: "SDG homepage" local_targets: create: notice: "Local target created successfully" diff --git a/config/locales/es/sdg_management.yml b/config/locales/es/sdg_management.yml index 23c10bd4a..a749df9ee 100644 --- a/config/locales/es/sdg_management.yml +++ b/config/locales/es/sdg_management.yml @@ -4,6 +4,8 @@ es: edit: "Asignar objetivos y metas" header: title: "Contenido ODS" + homepage: + title: "Configuración de la página de inicio" menu: budget_investments: "Presupuestos participativos" debates: "Debates" @@ -11,6 +13,7 @@ es: polls: "Votaciones" proposals: "Propuestas" sdg_content: "Objetivos y Metas" + sdg_homepage: "Página de inicio ODS" local_targets: create: notice: "Meta localizada creada correctamente" diff --git a/config/routes/sdg_management.rb b/config/routes/sdg_management.rb index 6f303b45c..3e5d58bb7 100644 --- a/config/routes/sdg_management.rb +++ b/config/routes/sdg_management.rb @@ -4,6 +4,7 @@ namespace :sdg_management do resources :goals, only: [:index] resources :targets, only: [:index] resources :local_targets, except: [:show] + resource :homepage, controller: :homepage, only: [:show] types = SDG::Related::RELATABLE_TYPES.map(&:tableize) types_constraint = /#{types.join("|")}/ diff --git a/spec/components/sdg_management/menu_component_spec.rb b/spec/components/sdg_management/menu_component_spec.rb index 707f892ab..4d29fe677 100644 --- a/spec/components/sdg_management/menu_component_spec.rb +++ b/spec/components/sdg_management/menu_component_spec.rb @@ -17,6 +17,7 @@ describe SDGManagement::MenuComponent, type: :component do render_inline component expect(page).to have_link "Goals and Targets" + expect(page).to have_link "SDG homepage" expect(page).to have_link "Participatory budgets" expect(page).to have_link "Debates" expect(page).to have_link "Collaborative legislation" @@ -37,8 +38,9 @@ describe SDGManagement::MenuComponent, type: :component do it "does not generate links to any processes" do render_inline component - expect(page).to have_css "a", count: 1 + expect(page).to have_css "a", count: 2 expect(page).to have_link "Goals and Targets" + expect(page).to have_link "SDG homepage" end end @@ -54,8 +56,9 @@ describe SDGManagement::MenuComponent, type: :component do it "does not generate links to any processes" do render_inline component - expect(page).to have_css "a", count: 1 + expect(page).to have_css "a", count: 2 expect(page).to have_link "Goals and Targets" + expect(page).to have_link "SDG homepage" end end @@ -66,6 +69,7 @@ describe SDGManagement::MenuComponent, type: :component do render_inline component expect(page).to have_link "Goals and Targets" + expect(page).to have_link "SDG homepage" expect(page).to have_link "Participatory budgets" expect(page).to have_link "Collaborative legislation" expect(page).to have_link "Polls" @@ -82,6 +86,7 @@ describe SDGManagement::MenuComponent, type: :component do render_inline component expect(page).to have_link "Goals and Targets" + expect(page).to have_link "SDG homepage" expect(page).to have_link "Debates" expect(page).to have_link "Participatory budgets" expect(page).to have_link "Polls" diff --git a/spec/system/sdg_management/homepage_spec.rb b/spec/system/sdg_management/homepage_spec.rb new file mode 100644 index 000000000..5abb9caed --- /dev/null +++ b/spec/system/sdg_management/homepage_spec.rb @@ -0,0 +1,20 @@ +require "rails_helper" + +describe "SDG homepage configuration", :js do + before do + Setting["feature.sdg"] = true + login_as(create(:sdg_manager).user) + end + + describe "Show" do + scenario "Visit the index" do + visit sdg_management_root_path + + within("#side_menu") do + click_link "SDG homepage" + end + + expect(page).to have_title "SDG content - Homepage configuration" + end + end +end