summaryrefslogtreecommitdiff
path: root/lib/gitlab/nav/top_nav_view_model_builder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/nav/top_nav_view_model_builder.rb')
-rw-r--r--lib/gitlab/nav/top_nav_view_model_builder.rb28
1 files changed, 27 insertions, 1 deletions
diff --git a/lib/gitlab/nav/top_nav_view_model_builder.rb b/lib/gitlab/nav/top_nav_view_model_builder.rb
index 60f5b267071..11ca6a3a3ba 100644
--- a/lib/gitlab/nav/top_nav_view_model_builder.rb
+++ b/lib/gitlab/nav/top_nav_view_model_builder.rb
@@ -6,9 +6,34 @@ module Gitlab
def initialize
@menu_builder = ::Gitlab::Nav::TopNavMenuBuilder.new
@views = {}
+ @shortcuts = []
end
- delegate :add_primary_menu_item, :add_secondary_menu_item, to: :@menu_builder
+ # Using delegate hides the stacktrace for some errors, so we choose to be explicit.
+ # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62047#note_579031091
+ def add_primary_menu_item(**args)
+ @menu_builder.add_primary_menu_item(**args)
+ end
+
+ def add_secondary_menu_item(**args)
+ @menu_builder.add_secondary_menu_item(**args)
+ end
+
+ def add_shortcut(**args)
+ item = ::Gitlab::Nav::TopNavMenuItem.build(**args)
+
+ @shortcuts.push(item)
+ end
+
+ def add_primary_menu_item_with_shortcut(shortcut_class:, shortcut_href: nil, **args)
+ add_primary_menu_item(**args)
+ add_shortcut(
+ id: "#{args.fetch(:id)}-shortcut",
+ title: args.fetch(:title),
+ href: shortcut_href || args.fetch(:href),
+ css_class: shortcut_class
+ )
+ end
def add_view(name, props)
@views[name] = props
@@ -19,6 +44,7 @@ module Gitlab
menu.merge({
views: @views,
+ shortcuts: @shortcuts,
activeTitle: _('Menu')
})
end