diff options
Diffstat (limited to 'app/helpers/nav/top_nav_helper.rb')
-rw-r--r-- | app/helpers/nav/top_nav_helper.rb | 148 |
1 files changed, 97 insertions, 51 deletions
diff --git a/app/helpers/nav/top_nav_helper.rb b/app/helpers/nav/top_nav_helper.rb index 159b7ca87f9..b8ddb932b73 100644 --- a/app/helpers/nav/top_nav_helper.rb +++ b/app/helpers/nav/top_nav_helper.rb @@ -4,52 +4,90 @@ module Nav module TopNavHelper PROJECTS_VIEW = :projects GROUPS_VIEW = :groups + NEW_VIEW = :new + SEARCH_VIEW = :search def top_nav_view_model(project:, group:) builder = ::Gitlab::Nav::TopNavViewModelBuilder.new - if current_user - build_view_model(builder: builder, project: project, group: group) - else - build_anonymous_view_model(builder: builder) + build_base_view_model(builder: builder, project: project, group: group) + + builder.build + end + + def top_nav_responsive_view_model(project:, group:) + builder = ::Gitlab::Nav::TopNavViewModelBuilder.new + + build_base_view_model(builder: builder, project: project, group: group) + + new_view_model = new_dropdown_view_model(project: project, group: group) + + if new_view_model + builder.add_view(NEW_VIEW, new_view_model) + end + + if top_nav_show_search + builder.add_view(SEARCH_VIEW, ::Gitlab::Nav::TopNavMenuItem.build(**top_nav_search_menu_item_attrs)) end builder.build end + def top_nav_show_search + header_link?(:search) + end + + def top_nav_search_menu_item_attrs + { + id: 'search', + title: _('Search'), + icon: 'search', + href: search_context.search_url + } + end + private + def build_base_view_model(builder:, project:, group:) + if current_user + build_view_model(builder: builder, project: project, group: group) + else + build_anonymous_view_model(builder: builder) + end + end + def build_anonymous_view_model(builder:) # These come from `app/views/layouts/nav/_explore.html.ham` if explore_nav_link?(:projects) - builder.add_primary_menu_item( - **projects_menu_item_attrs.merge( - { - active: active_nav_link?(path: %w[dashboard#show root#show projects#trending projects#starred projects#index]), - href: explore_root_path - }) + builder.add_primary_menu_item_with_shortcut( + href: explore_root_path, + active: nav == 'project' || active_nav_link?(path: %w[dashboard#show root#show projects#trending projects#starred projects#index]), + **projects_menu_item_attrs ) end if explore_nav_link?(:groups) - builder.add_primary_menu_item( - **groups_menu_item_attrs.merge( - { - active: active_nav_link?(controller: [:groups, 'groups/milestones', 'groups/group_members']), - href: explore_groups_path - }) + builder.add_primary_menu_item_with_shortcut( + href: explore_groups_path, + active: nav == 'group' || active_nav_link?(controller: [:groups, 'groups/milestones', 'groups/group_members']), + **groups_menu_item_attrs ) end if explore_nav_link?(:snippets) - builder.add_primary_menu_item( - **snippets_menu_item_attrs.merge( - { - active: active_nav_link?(controller: :snippets), - href: explore_snippets_path - }) + builder.add_primary_menu_item_with_shortcut( + active: active_nav_link?(controller: :snippets), + href: explore_snippets_path, + **snippets_menu_item_attrs ) end + + builder.add_secondary_menu_item( + id: 'help', + title: _('Help'), + icon: 'question-o', + href: help_path + ) end def build_view_model(builder:, project:, group:) @@ -57,13 +95,13 @@ module Nav if dashboard_nav_link?(:projects) current_item = project ? current_project(project: project) : {} - builder.add_primary_menu_item( - **projects_menu_item_attrs.merge({ - active: active_nav_link?(path: %w[root#index projects#trending projects#starred dashboard/projects#index]), - css_class: 'qa-projects-dropdown', - data: { track_label: "projects_dropdown", track_event: "click_dropdown", track_experiment: "new_repo" }, - view: PROJECTS_VIEW - }) + builder.add_primary_menu_item_with_shortcut( + active: nav == 'project' || active_nav_link?(path: %w[root#index projects#trending projects#starred dashboard/projects#index]), + css_class: 'qa-projects-dropdown', + data: { track_label: "projects_dropdown", track_event: "click_dropdown", track_experiment: "new_repo" }, + view: PROJECTS_VIEW, + shortcut_href: dashboard_projects_path, + **projects_menu_item_attrs ) builder.add_view(PROJECTS_VIEW, container_view_props(namespace: 'projects', current_item: current_item, submenu: projects_submenu)) end @@ -71,46 +109,47 @@ module Nav if dashboard_nav_link?(:groups) current_item = group ? current_group(group: group) : {} - builder.add_primary_menu_item( - **groups_menu_item_attrs.merge({ - active: active_nav_link?(path: %w[dashboard/groups explore/groups]), - css_class: 'qa-groups-dropdown', - data: { track_label: "groups_dropdown", track_event: "click_dropdown" }, - view: GROUPS_VIEW - }) + builder.add_primary_menu_item_with_shortcut( + active: nav == 'group' || active_nav_link?(path: %w[dashboard/groups explore/groups]), + css_class: 'qa-groups-dropdown', + data: { track_label: "groups_dropdown", track_event: "click_dropdown" }, + view: GROUPS_VIEW, + shortcut_href: dashboard_groups_path, + **groups_menu_item_attrs ) builder.add_view(GROUPS_VIEW, container_view_props(namespace: 'groups', current_item: current_item, submenu: groups_submenu)) end if dashboard_nav_link?(:milestones) - builder.add_primary_menu_item( + builder.add_primary_menu_item_with_shortcut( id: 'milestones', title: 'Milestones', + href: dashboard_milestones_path, active: active_nav_link?(controller: 'dashboard/milestones'), icon: 'clock', data: { qa_selector: 'milestones_link' }, - href: dashboard_milestones_path + shortcut_class: 'dashboard-shortcuts-milestones' ) end if dashboard_nav_link?(:snippets) - builder.add_primary_menu_item( - **snippets_menu_item_attrs.merge({ - active: active_nav_link?(controller: 'dashboard/snippets'), - data: { qa_selector: 'snippets_link' }, - href: dashboard_snippets_path - }) + builder.add_primary_menu_item_with_shortcut( + active: active_nav_link?(controller: 'dashboard/snippets'), + data: { qa_selector: 'snippets_link' }, + href: dashboard_snippets_path, + **snippets_menu_item_attrs ) end if dashboard_nav_link?(:activity) - builder.add_primary_menu_item( + builder.add_primary_menu_item_with_shortcut( id: 'activity', title: 'Activity', + href: activity_dashboard_path, active: active_nav_link?(path: 'dashboard#activity'), icon: 'history', data: { qa_selector: 'activity_link' }, - href: activity_dashboard_path + shortcut_class: 'dashboard-shortcuts-activity' ) end @@ -137,7 +176,7 @@ module Nav active: active_nav_link?(controller: 'admin/sessions'), icon: 'lock-open', href: destroy_admin_session_path, - method: :post + data: { method: 'post' } ) elsif current_user.admin? builder.add_secondary_menu_item( @@ -165,7 +204,8 @@ module Nav { id: 'project', title: _('Projects'), - icon: 'project' + icon: 'project', + shortcut_class: 'dashboard-shortcuts-projects' } end @@ -173,7 +213,8 @@ module Nav { id: 'groups', title: 'Groups', - icon: 'group' + icon: 'group', + shortcut_class: 'dashboard-shortcuts-groups' } end @@ -181,7 +222,8 @@ module Nav { id: 'snippets', title: _('Snippets'), - icon: 'snippet' + icon: 'snippet', + shortcut_class: 'dashboard-shortcuts-snippets' } end @@ -234,7 +276,11 @@ module Nav builder = ::Gitlab::Nav::TopNavMenuBuilder.new builder.add_primary_menu_item(id: 'your', title: _('Your groups'), href: dashboard_groups_path) builder.add_primary_menu_item(id: 'explore', title: _('Explore groups'), href: explore_groups_path) - builder.add_secondary_menu_item(id: 'create', title: _('Create group'), href: new_group_path(anchor: 'create-group-pane')) + + if current_user.can_create_group? + builder.add_secondary_menu_item(id: 'create', title: _('Create group'), href: new_group_path) + end + builder.build end end |