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
|
||||
|
||||
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_oldest_created => sort_title_oldest_created,
|
||||
sort_value_recently_updated => sort_title_recently_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
|
||||
|
||||
def member_sort_options_hash
|
||||
|
|
|
@ -11,23 +11,7 @@
|
|||
.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'
|
||||
= icon("search", class: "search-icon")
|
||||
.dropdown
|
||||
- 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
|
||||
= render "shared/groups/dropdown", options_hash: admin_groups_sort_options_hash
|
||||
= link_to new_admin_group_path, class: "btn btn-new" do
|
||||
New group
|
||||
%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)
|
||||
- if @sort.present?
|
||||
- default_sort_by = @sort
|
||||
|
@ -10,12 +11,12 @@
|
|||
.dropdown.inline.js-group-filter-dropdown-wrap.append-right-10
|
||||
%button.dropdown-toggle{ type: 'button', 'data-toggle' => 'dropdown' }
|
||||
%span.dropdown-label
|
||||
= sort_options_hash[default_sort_by]
|
||||
= options_hash[default_sort_by]
|
||||
= icon('chevron-down')
|
||||
%ul.dropdown-menu.dropdown-menu-align-right.dropdown-menu-selectable
|
||||
%li.dropdown-header
|
||||
= _("Sort by")
|
||||
- groups_sort_options_hash.each do |value, title|
|
||||
- options_hash.each do |value, title|
|
||||
%li.js-filter-sort-order
|
||||
= link_to filter_groups_path(sort: value), class: ("is-active" if default_sort_by == value) do
|
||||
= 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)
|
||||
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
|
||||
|
||||
context 'with nested groups', :nested_groups do
|
||||
|
|
Loading…
Reference in a new issue