Refactor sidebar menus link method

Most of the sidebar menus default to the first menu item link as the
main menu link.

Instead of writing it in every menu, we can just move it to the
base menu class and let the other menus inherit it. We'd just
need to override those with a different behavior.
parent 31462b14
...@@ -17,11 +17,6 @@ module Sidebars ...@@ -17,11 +17,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :title override :title
def title def title
_('Administration') _('Administration')
......
...@@ -25,7 +25,7 @@ module Sidebars ...@@ -25,7 +25,7 @@ module Sidebars
def link def link
return cycle_analytics_menu_item.link if cycle_analytics_menu_item.render? return cycle_analytics_menu_item.link if cycle_analytics_menu_item.render?
renderable_items.first.link super
end end
override :extra_container_html_options override :extra_container_html_options
......
...@@ -17,11 +17,6 @@ module Sidebars ...@@ -17,11 +17,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :title override :title
def title def title
_('Epics') _('Epics')
......
...@@ -17,9 +17,9 @@ module Sidebars ...@@ -17,9 +17,9 @@ module Sidebars
override :link override :link
def link def link
return renderable_items.first.link if renderable_items.any? return group_security_discover_path(context.group) if renderable_items.empty?
group_security_discover_path(context.group) super
end end
override :title override :title
......
...@@ -11,11 +11,6 @@ module Sidebars ...@@ -11,11 +11,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :title override :title
def title def title
_('CI/CD') _('CI/CD')
......
...@@ -13,11 +13,6 @@ module Sidebars ...@@ -13,11 +13,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :title override :title
def title def title
context.group.subgroup? ? _('Subgroup information') : _('Group information') context.group.subgroup? ? _('Subgroup information') : _('Group information')
......
...@@ -17,11 +17,6 @@ module Sidebars ...@@ -17,11 +17,6 @@ module Sidebars
true true
end end
override :link
def link
issues_group_path(context.group)
end
override :title override :title
def title def title
_('Issues') _('Issues')
......
...@@ -13,11 +13,6 @@ module Sidebars ...@@ -13,11 +13,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :title override :title
def title def title
_('Packages & Registries') _('Packages & Registries')
......
...@@ -19,11 +19,6 @@ module Sidebars ...@@ -19,11 +19,6 @@ module Sidebars
true true
end end
override :link
def link
edit_group_path(context.group)
end
override :title override :title
def title def title
_('Settings') _('Settings')
......
...@@ -33,10 +33,9 @@ module Sidebars ...@@ -33,10 +33,9 @@ module Sidebars
has_renderable_items? || menu_with_partial? has_renderable_items? || menu_with_partial?
end end
# Menus might have or not a link
override :link override :link
def link def link
nil renderable_items.first&.link
end end
# This method normalizes the information retrieved from the submenus and this menu # This method normalizes the information retrieved from the submenus and this menu
......
...@@ -21,7 +21,7 @@ module Sidebars ...@@ -21,7 +21,7 @@ module Sidebars
def link def link
return cycle_analytics_menu_item.link if cycle_analytics_menu_item.render? return cycle_analytics_menu_item.link if cycle_analytics_menu_item.render?
renderable_items.first.link super
end end
override :extra_container_html_options override :extra_container_html_options
......
...@@ -15,11 +15,6 @@ module Sidebars ...@@ -15,11 +15,6 @@ module Sidebars
add_item(pipeline_schedules_menu_item) add_item(pipeline_schedules_menu_item)
end end
override :link
def link
project_pipelines_path(context.project)
end
override :extra_container_html_options override :extra_container_html_options
def extra_container_html_options def extra_container_html_options
{ {
......
...@@ -13,11 +13,6 @@ module Sidebars ...@@ -13,11 +13,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :extra_container_html_options override :extra_container_html_options
def extra_container_html_options def extra_container_html_options
{ {
......
...@@ -15,11 +15,6 @@ module Sidebars ...@@ -15,11 +15,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :extra_container_html_options override :extra_container_html_options
def extra_container_html_options def extra_container_html_options
{ {
......
...@@ -18,11 +18,6 @@ module Sidebars ...@@ -18,11 +18,6 @@ module Sidebars
true true
end end
override :link
def link
project_issues_path(context.project)
end
override :extra_container_html_options override :extra_container_html_options
def extra_container_html_options def extra_container_html_options
{ {
......
...@@ -19,11 +19,6 @@ module Sidebars ...@@ -19,11 +19,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first&.link
end
override :extra_container_html_options override :extra_container_html_options
def extra_container_html_options def extra_container_html_options
{ {
......
...@@ -13,11 +13,6 @@ module Sidebars ...@@ -13,11 +13,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :title override :title
def title def title
_('Packages & Registries') _('Packages & Registries')
......
...@@ -13,11 +13,6 @@ module Sidebars ...@@ -13,11 +13,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first.link
end
override :extra_container_html_options override :extra_container_html_options
def extra_container_html_options def extra_container_html_options
{ class: 'shortcuts-project-information' } { class: 'shortcuts-project-information' }
......
...@@ -20,11 +20,6 @@ module Sidebars ...@@ -20,11 +20,6 @@ module Sidebars
true true
end end
override :link
def link
project_tree_path(context.project)
end
override :extra_container_html_options override :extra_container_html_options
def extra_container_html_options def extra_container_html_options
{ {
......
...@@ -15,11 +15,6 @@ module Sidebars ...@@ -15,11 +15,6 @@ module Sidebars
true true
end end
override :link
def link
renderable_items.first&.link
end
override :title override :title
def title def title
_('Security & Compliance') _('Security & Compliance')
......
...@@ -21,11 +21,6 @@ module Sidebars ...@@ -21,11 +21,6 @@ module Sidebars
true true
end end
override :link
def link
edit_project_path(context.project)
end
override :title override :title
def title def title
_('Settings') _('Settings')
......
...@@ -198,4 +198,27 @@ RSpec.describe Sidebars::Menu do ...@@ -198,4 +198,27 @@ RSpec.describe Sidebars::Menu do
end end
end end
end end
describe '#link' do
let(:foo_path) { '/foo_path'}
let(:foo_menu) do
::Sidebars::MenuItem.new(
title: 'foo',
link: foo_path,
active_routes: {},
item_id: :foo
)
end
it 'returns first visible menu item link' do
menu.add_item(foo_menu)
expect(menu.link).to eq foo_path
end
it 'returns nil if there are no visible menu items' do
expect(menu.link).to be_nil
end
end
end end
...@@ -49,25 +49,6 @@ RSpec.describe Sidebars::Projects::Menus::MonitorMenu do ...@@ -49,25 +49,6 @@ RSpec.describe Sidebars::Projects::Menus::MonitorMenu do
end end
end end
describe '#link' do
let(:foo_path) { '/foo_path'}
let(:foo_menu) do
::Sidebars::MenuItem.new(
title: 'foo',
link: foo_path,
active_routes: {},
item_id: :foo
)
end
it 'returns first visible item link' do
subject.insert_element_before(subject.renderable_items, subject.renderable_items.first.item_id, foo_menu)
expect(subject.link).to eq foo_path
end
end
context 'Menu items' do context 'Menu items' do
subject { described_class.new(context).renderable_items.index { |e| e.item_id == item_id } } subject { described_class.new(context).renderable_items.index { |e| e.item_id == item_id } }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment