user.rb 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. module Gql::Queries
  3. class AutocompleteSearch::User < BaseQuery
  4. description 'Search for users'
  5. argument :input, Gql::Types::Input::AutocompleteSearch::InputType, required: true, description: 'The input object for the autocomplete search'
  6. type [Gql::Types::AutocompleteSearch::UserEntryType], null: false
  7. def resolve(input:)
  8. input = input.to_h
  9. query = input[:query]
  10. limit = input[:limit] || 50
  11. return [] if query.strip.empty?
  12. results = Service::Search.new(current_user: context.current_user).execute(
  13. term: query,
  14. objects: [::User],
  15. options: { limit: limit },
  16. )
  17. post_process(results, input: input)
  18. end
  19. def post_process(results, input:)
  20. results.map { |user| coerce_to_result(user) }
  21. end
  22. def coerce_to_result(user)
  23. {
  24. value: user.id,
  25. label: label(user),
  26. heading: user.organization&.name,
  27. user: user,
  28. }
  29. end
  30. private
  31. def label(user)
  32. return user.fullname if user.fullname.present?
  33. return user.phone if user.phone.present?
  34. user.login
  35. end
  36. end
  37. end