55 lines
1.4 KiB
Ruby
55 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Integrations
|
|
module SlackOptions
|
|
class UserSearchHandler # rubocop:disable Search/NamespacedClass
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
def initialize(current_user, search_value, view_id)
|
|
@current_user = current_user.user
|
|
@search_value = search_value
|
|
@view_id = view_id
|
|
end
|
|
|
|
def execute
|
|
return ServiceResponse.success(payload: []) unless current_user.can?(:read_project_member, project)
|
|
|
|
members = MembersFinder.new(project, current_user, params: { search: search_value }).execute
|
|
|
|
ServiceResponse.success(payload: build_user_list(members))
|
|
end
|
|
|
|
private
|
|
|
|
def project
|
|
project_id = SlackInteractions::IncidentManagement::IncidentModalOpenedService
|
|
.cache_read(view_id)
|
|
|
|
return unless project_id
|
|
|
|
Project.find(project_id)
|
|
end
|
|
strong_memoize_attr :project
|
|
|
|
def build_user_list(members)
|
|
return [] unless members
|
|
|
|
user_list = members.map do |member|
|
|
{
|
|
text: {
|
|
type: "plain_text",
|
|
text: "#{member.user.name} - #{member.user.username}"
|
|
},
|
|
value: member.user.id.to_s
|
|
}
|
|
end
|
|
|
|
{
|
|
options: user_list
|
|
}
|
|
end
|
|
|
|
attr_reader :current_user, :search_value, :view_id
|
|
end
|
|
end
|
|
end
|