summaryrefslogtreecommitdiff
path: root/app/views/layouts/header/_new_dropdown.html.haml
diff options
context:
space:
mode:
Diffstat (limited to 'app/views/layouts/header/_new_dropdown.html.haml')
-rw-r--r--app/views/layouts/header/_new_dropdown.html.haml62
1 files changed, 21 insertions, 41 deletions
diff --git a/app/views/layouts/header/_new_dropdown.html.haml b/app/views/layouts/header/_new_dropdown.html.haml
index ca90d2e02fa..c5f43fb2c16 100644
--- a/app/views/layouts/header/_new_dropdown.html.haml
+++ b/app/views/layouts/header/_new_dropdown.html.haml
@@ -1,47 +1,27 @@
-- new_repo_experiment_text = content_for(:new_repo_experiment)
-%li.header-new.dropdown{ data: { track_label: "new_dropdown", track_event: "click_dropdown", track_experiment: "new_repo" } }
- = link_to new_project_path, class: "header-new-dropdown-toggle has-tooltip qa-new-menu-toggle", id: "js-onboarding-new-project-link", title: _("New..."), ref: 'tooltip', aria: { label: _("New...") }, data: { toggle: 'dropdown', placement: 'bottom', container: 'body', display: 'static' } do
+- view_model = new_dropdown_view_model(project: @project, group: @group)
+- menu_sections = view_model.fetch(:menu_sections)
+- title = view_model.fetch(:title)
+- show_headers = menu_sections.length > 1
+- top_class = local_assigns.fetch(:class, nil)
+
+- return if menu_sections.empty?
+
+%li.header-new.dropdown{ class: top_class, data: { track_label: "new_dropdown", track_event: "click_dropdown", track_experiment: "new_repo" } }
+ = link_to new_project_path, class: "header-new-dropdown-toggle has-tooltip", id: "js-onboarding-new-project-link", title: title, ref: 'tooltip', aria: { label: title }, data: { toggle: 'dropdown', placement: 'bottom', container: 'body', display: 'static', qa_selector: 'new_menu_toggle' } do
= sprite_icon('plus-square')
= sprite_icon('chevron-down', css_class: 'caret-down')
.dropdown-menu.dropdown-menu-right.dropdown-extended-height
%ul
- - if @group&.persisted?
- - create_group_project = can?(current_user, :create_projects, @group)
- - create_group_subgroup = can?(current_user, :create_subgroup, @group)
-
- - if create_group_project || create_group_subgroup
- %li.dropdown-bold-header
- = _('This group')
- - if create_group_project
- %li= link_to new_repo_experiment_text, new_project_path(namespace_id: @group.id), data: { track_experiment: 'new_repo', track_event: 'click_link_new_project_group', track_label: 'plus_menu_dropdown' }
- - if create_group_subgroup
- %li= link_to _('New subgroup'), new_group_path(parent_id: @group.id), data: { track_event: 'click_link_new_subgroup', track_label: 'plus_menu_dropdown' }
- = render_if_exists 'layouts/header/create_epic_new_dropdown_item'
- = render 'layouts/header/group_invite_members_new_dropdown_item'
+ - menu_sections.each_with_index do |section, index|
+ - if index > 0
%li.divider
- %li.dropdown-bold-header GitLab
-
- - if @project&.persisted?
- - create_project_issue = show_new_issue_link?(@project)
- - merge_project = merge_request_source_project_for_project(@project)
- - create_project_snippet = can?(current_user, :create_snippet, @project)
-
- - if create_project_issue || merge_project || create_project_snippet
+ - if show_headers
%li.dropdown-bold-header
- = _('This project')
- - if create_project_issue
- %li= link_to _('New issue'), new_project_issue_path(@project), data: { track_event: 'click_link_new_issue', track_label: 'plus_menu_dropdown' }
- - if merge_project
- %li= link_to _('New merge request'), project_new_merge_request_path(merge_project), data: { track_event: 'click_link_new_mr', track_label: 'plus_menu_dropdown' }
-
- - if create_project_snippet
- %li= link_to _('New snippet'), new_project_snippet_path(@project), data: { track_event: 'click_link_new_snippet_project', track_label: 'plus_menu_dropdown' }
- = render 'layouts/header/project_invite_members_new_dropdown_item'
- %li.divider
- %li.dropdown-bold-header GitLab
- - if current_user.can_create_project?
- %li= link_to new_repo_experiment_text, new_project_path, class: 'qa-global-new-project-link', data: { track_experiment: 'new_repo', track_event: 'click_link_new_project', track_label: 'plus_menu_dropdown' }
- - if current_user.can_create_group?
- %li= link_to _('New group'), new_group_path, data: { track_event: 'click_link_new_group', track_label: 'plus_menu_dropdown' }
- - if current_user.can?(:create_snippet)
- %li= link_to _('New snippet'), new_snippet_path, data: { track_event: 'click_link_new_snippet_parent', track_label: 'plus_menu_dropdown' }, class: 'qa-global-new-snippet-link'
+ = section.fetch(:title)
+ - section.fetch(:menu_items).each do |menu_item|
+ %li<
+ = link_to menu_item.fetch(:href), class: menu_item.fetch(:css_class), data: menu_item.fetch(:data) do
+ = menu_item.fetch(:title)
+ - if menu_item.fetch(:emoji)
+ -# We need to insert a space between the title and emoji
+ = " #{emoji_icon(menu_item.fetch(:emoji), 'aria-hidden': true, class: "gl-font-base gl-vertical-align-baseline")}".html_safe