Commit af0b8e05 authored by Bob Van Landuyt's avatar Bob Van Landuyt
Browse files

Only preload ancestors for search results in the specified parent

When filtering we want all to preload all the ancestors upto the specified
parent group.

- root
  - subgroup
    - nested-group
      - project

So when searching 'project', on the 'subgroup' page we want to preload
'nested-group' but not 'subgroup' or 'root'
parent 708f3b6c1997
......@@ -96,9 +96,21 @@ def subgroups_matching_filter
.search(params[:filter])
end
# When filtering we want all to preload all the ancestors upto the specified
# parent group.
#
# - root
# - subgroup
# - nested-group
# - project
#
# So when searching 'project', on the 'subgroup' page we want to preload
# 'nested-group' but not 'subgroup' or 'root'
def ancestors_for_groups(base_for_ancestors)
ancestors_for_parent = Gitlab::GroupHierarchy.new(Group.where(id: parent_group))
.base_and_ancestors
Gitlab::GroupHierarchy.new(base_for_ancestors)
.base_and_ancestors.where.not(id: parent_group)
.base_and_ancestors.where.not(id: ancestors_for_parent)
end
def subgroups
......
......@@ -14,7 +14,8 @@ def expand_hierarchy_for_child(child, hierarchy, hierarchy_top, preloaded = [])
if parent && parent != hierarchy_top
expand_hierarchy_for_child(parent,
{ parent => hierarchy },
hierarchy_top)
hierarchy_top,
preloaded)
else
hierarchy
end
......
......@@ -319,6 +319,16 @@
expect(matched_project_2_json['id']).to eq(matched_project_2.id)
end
it 'expands the tree upto a specified parent' do
subgroup = create(:group, :public, parent: group)
l2_subgroup = create(:group, :public, parent: subgroup)
create(:project, :public, namespace: l2_subgroup, name: 'test')
get :children, id: subgroup.to_param, filter: 'test', format: :json
expect(response).to have_http_status(200)
end
it 'includes pagination headers' do
2.times { |i| create(:group, :public, parent: public_subgroup, name: "filterme#{i}") }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment