Merge branch '36958-enable-ordering-projects-subgroups-by-name' into 'master'
Enables ordering groups and their children by name in the web interface Closes #24962 et #36958 See merge request gitlab-org/gitlab-ce!16045
This commit is contained in:
commit
0a8fa500f0
5 changed files with 52 additions and 21 deletions
|
@ -43,14 +43,20 @@ module SortingHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def groups_sort_options_hash
|
def groups_sort_options_hash
|
||||||
options = {
|
{
|
||||||
|
sort_value_name => sort_title_name,
|
||||||
|
sort_value_name_desc => sort_title_name_desc,
|
||||||
sort_value_recently_created => sort_title_recently_created,
|
sort_value_recently_created => sort_title_recently_created,
|
||||||
sort_value_oldest_created => sort_title_oldest_created,
|
sort_value_oldest_created => sort_title_oldest_created,
|
||||||
sort_value_recently_updated => sort_title_recently_updated,
|
sort_value_recently_updated => sort_title_recently_updated,
|
||||||
sort_value_oldest_updated => sort_title_oldest_updated
|
sort_value_oldest_updated => sort_title_oldest_updated
|
||||||
}
|
}
|
||||||
|
end
|
||||||
|
|
||||||
options
|
def admin_groups_sort_options_hash
|
||||||
|
groups_sort_options_hash.merge(
|
||||||
|
sort_value_largest_group => sort_title_largest_group
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def member_sort_options_hash
|
def member_sort_options_hash
|
||||||
|
|
|
@ -11,23 +11,7 @@
|
||||||
.search-field-holder
|
.search-field-holder
|
||||||
= search_field_tag :name, project_name, class: "form-control search-text-input js-search-input", autofocus: true, spellcheck: false, placeholder: 'Search by name'
|
= search_field_tag :name, project_name, class: "form-control search-text-input js-search-input", autofocus: true, spellcheck: false, placeholder: 'Search by name'
|
||||||
= icon("search", class: "search-icon")
|
= icon("search", class: "search-icon")
|
||||||
.dropdown
|
= render "shared/groups/dropdown", options_hash: admin_groups_sort_options_hash
|
||||||
- toggle_text = @sort.present? ? sort_options_hash[@sort] : sort_title_recently_created
|
|
||||||
= dropdown_toggle(toggle_text, { toggle: 'dropdown' })
|
|
||||||
%ul.dropdown-menu.dropdown-menu-align-right
|
|
||||||
%li.dropdown-header
|
|
||||||
Sort by
|
|
||||||
%li
|
|
||||||
= link_to admin_groups_path(sort: sort_value_recently_created, name: project_name) do
|
|
||||||
= sort_title_recently_created
|
|
||||||
= link_to admin_groups_path(sort: sort_value_oldest_created, name: project_name) do
|
|
||||||
= sort_title_oldest_created
|
|
||||||
= link_to admin_groups_path(sort: sort_value_recently_updated, name: project_name) do
|
|
||||||
= sort_title_recently_updated
|
|
||||||
= link_to admin_groups_path(sort: sort_value_oldest_updated, name: project_name) do
|
|
||||||
= sort_title_oldest_updated
|
|
||||||
= link_to admin_groups_path(sort: sort_value_largest_group, name: project_name) do
|
|
||||||
= sort_title_largest_group
|
|
||||||
= link_to new_admin_group_path, class: "btn btn-new" do
|
= link_to new_admin_group_path, class: "btn btn-new" do
|
||||||
New group
|
New group
|
||||||
%ul.content-list
|
%ul.content-list
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
- options_hash = local_assigns.fetch(:options_hash, groups_sort_options_hash)
|
||||||
- show_archive_options = local_assigns.fetch(:show_archive_options, false)
|
- show_archive_options = local_assigns.fetch(:show_archive_options, false)
|
||||||
- if @sort.present?
|
- if @sort.present?
|
||||||
- default_sort_by = @sort
|
- default_sort_by = @sort
|
||||||
|
@ -10,12 +11,12 @@
|
||||||
.dropdown.inline.js-group-filter-dropdown-wrap.append-right-10
|
.dropdown.inline.js-group-filter-dropdown-wrap.append-right-10
|
||||||
%button.dropdown-toggle{ type: 'button', 'data-toggle' => 'dropdown' }
|
%button.dropdown-toggle{ type: 'button', 'data-toggle' => 'dropdown' }
|
||||||
%span.dropdown-label
|
%span.dropdown-label
|
||||||
= sort_options_hash[default_sort_by]
|
= options_hash[default_sort_by]
|
||||||
= icon('chevron-down')
|
= icon('chevron-down')
|
||||||
%ul.dropdown-menu.dropdown-menu-align-right.dropdown-menu-selectable
|
%ul.dropdown-menu.dropdown-menu-align-right.dropdown-menu-selectable
|
||||||
%li.dropdown-header
|
%li.dropdown-header
|
||||||
= _("Sort by")
|
= _("Sort by")
|
||||||
- groups_sort_options_hash.each do |value, title|
|
- options_hash.each do |value, title|
|
||||||
%li.js-filter-sort-order
|
%li.js-filter-sort-order
|
||||||
= link_to filter_groups_path(sort: value), class: ("is-active" if default_sort_by == value) do
|
= link_to filter_groups_path(sort: value), class: ("is-active" if default_sort_by == value) do
|
||||||
= title
|
= title
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Enable ordering of groups and their children by name
|
||||||
|
merge_request:
|
||||||
|
author:
|
||||||
|
type: added
|
|
@ -73,6 +73,41 @@ describe GroupDescendantsFinder do
|
||||||
expect(finder.execute).to contain_exactly(matching_project)
|
expect(finder.execute).to contain_exactly(matching_project)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'sorting by name' do
|
||||||
|
let!(:project1) { create(:project, namespace: group, name: 'a', path: 'project-a') }
|
||||||
|
let!(:project2) { create(:project, namespace: group, name: 'z', path: 'project-z') }
|
||||||
|
let(:params) do
|
||||||
|
{
|
||||||
|
sort: 'name_asc'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sorts elements by name' do
|
||||||
|
expect(subject.execute).to eq(
|
||||||
|
[
|
||||||
|
project1,
|
||||||
|
project2
|
||||||
|
]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with nested groups', :nested_groups do
|
||||||
|
let!(:subgroup1) { create(:group, parent: group, name: 'a', path: 'sub-a') }
|
||||||
|
let!(:subgroup2) { create(:group, parent: group, name: 'z', path: 'sub-z') }
|
||||||
|
|
||||||
|
it 'sorts elements by name' do
|
||||||
|
expect(subject.execute).to eq(
|
||||||
|
[
|
||||||
|
subgroup1,
|
||||||
|
subgroup2,
|
||||||
|
project1,
|
||||||
|
project2
|
||||||
|
]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with nested groups', :nested_groups do
|
context 'with nested groups', :nested_groups do
|
||||||
|
|
Loading…
Reference in a new issue