diff options
Diffstat (limited to 'lib/gitlab/nav/top_nav_view_model_builder.rb')
-rw-r--r-- | lib/gitlab/nav/top_nav_view_model_builder.rb | 28 |
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 |