1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
# frozen_string_literal: true
module Sidebars
module Projects
module Menus
class IssuesMenu < ::Sidebars::Menu
include Gitlab::Utils::StrongMemoize
override :configure_menu_items
def configure_menu_items
return false unless show_issues_menu_items?
add_item(list_menu_item)
add_item(boards_menu_item)
add_item(service_desk_menu_item)
add_item(milestones_menu_item)
true
end
override :extra_container_html_options
def extra_container_html_options
{
class: 'shortcuts-issues'
}
end
override :title
def title
_('Issues')
end
override :sprite_icon
def sprite_icon
'issues'
end
override :active_routes
def active_routes
{ path: %w[projects/issues#index projects/issues#show projects/issues#new] }
end
override :has_pill?
def has_pill?
strong_memoize(:has_pill) do
context.project.issues_enabled?
end
end
override :pill_count
def pill_count
return if Feature.enabled?(:async_sidebar_counts, context.project.root_ancestor)
strong_memoize(:pill_count) do
count = context.project.open_issues_count(context.current_user)
format_cached_count(1000, count)
end
end
override :pill_count_field
def pill_count_field
'openIssuesCount' if Feature.enabled?(:async_sidebar_counts, context.project.root_ancestor)
end
override :pill_html_options
def pill_html_options
{
class: 'issue_counter'
}
end
override :serialize_as_menu_item_args
def serialize_as_menu_item_args
super.merge({
pill_count: pill_count,
pill_count_field: pill_count_field,
has_pill: has_pill?,
super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
item_id: :project_issue_list
})
end
private
def show_issues_menu_items?
can?(context.current_user, :read_issue, context.project)
end
def multi_issue_boards?
context.project.multiple_issue_boards_available?
end
def list_menu_item
::Sidebars::MenuItem.new(
title: _('List'),
link: project_issues_path(context.project),
super_sidebar_parent: ::Sidebars::NilMenuItem,
active_routes: { path: 'projects/issues#index' },
container_html_options: { aria: { label: _('Issues') } },
item_id: :issue_list
)
end
def boards_menu_item
title = if context.is_super_sidebar
multi_issue_boards? ? s_('Issue boards') : s_('Issue board')
else
multi_issue_boards? ? s_('Boards|Boards') : s_('Boards|Board')
end
::Sidebars::MenuItem.new(
title: title,
link: project_boards_path(context.project),
super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
active_routes: { controller: :boards },
container_html_options: { class: 'shortcuts-issue-boards' },
item_id: :boards
)
end
def service_desk_menu_item
return ::Sidebars::NilMenuItem.new(item_id: :service_desk) unless context.project.service_desk_enabled?
::Sidebars::MenuItem.new(
title: _('Service Desk'),
link: service_desk_project_issues_path(context.project),
super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::MonitorMenu,
active_routes: { path: 'issues#service_desk' },
item_id: :service_desk
)
end
def milestones_menu_item
::Sidebars::MenuItem.new(
title: _('Milestones'),
link: project_milestones_path(context.project),
super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::PlanMenu,
active_routes: { controller: :milestones },
item_id: :milestones
)
end
end
end
end
end
Sidebars::Projects::Menus::IssuesMenu.prepend_mod_with('Sidebars::Projects::Menus::IssuesMenu')
|