Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/helpers/projects/project_members_helper.rb')
-rw-r--r--app/helpers/projects/project_members_helper.rb29
1 files changed, 24 insertions, 5 deletions
diff --git a/app/helpers/projects/project_members_helper.rb b/app/helpers/projects/project_members_helper.rb
index d5cc2b72ae9..51a7d3e35d0 100644
--- a/app/helpers/projects/project_members_helper.rb
+++ b/app/helpers/projects/project_members_helper.rb
@@ -1,10 +1,10 @@
# frozen_string_literal: true
module Projects::ProjectMembersHelper
- def project_members_app_data_json(project, members:, group_links:, invited:, access_requests:)
+ def project_members_app_data_json(project, members:, invited:, access_requests:, include_relations:, search:)
{
user: project_members_list_data(project, members, { param_name: :page, params: { search_groups: nil } }),
- group: project_group_links_list_data(project, group_links),
+ group: project_group_links_list_data(project, include_relations, search),
invite: project_members_list_data(project, invited.nil? ? [] : invited),
access_request: project_members_list_data(project, access_requests.nil? ? [] : access_requests),
source_id: project.id,
@@ -57,10 +57,29 @@ module Projects::ProjectMembersHelper
}
end
- def project_group_links_list_data(project, group_links)
+ def project_group_links_list_data(project, include_relations, search)
+ members = []
+
+ if include_relations.include?(:direct)
+ project_group_links = project.project_group_links
+ project_group_links = project_group_links.search(search) if search
+ members += project_group_links_serialized(project, project_group_links)
+ end
+
+ if include_relations.include?(:inherited)
+ group_group_links = project.group_group_links.distinct_on_shared_with_group_id_with_group_access
+ group_group_links = group_group_links.search(search) if search
+ members += group_group_links_serialized(project, group_group_links)
+ end
+
+ if project_group_links.present? && group_group_links.present?
+ members = members.sort_by { |m| -m.dig(:access_level, :integer_value).to_i }
+ .uniq { |m| m.dig(:shared_with_group, :id) }
+ end
+
{
- members: project_group_links_serialized(project, group_links),
- pagination: members_pagination_data(group_links),
+ members: members,
+ pagination: members_pagination_data(members),
member_path: project_group_link_path(project, ':id')
}
end