diff options
Diffstat (limited to 'app/graphql/resolvers/crm')
-rw-r--r-- | app/graphql/resolvers/crm/contact_state_counts_resolver.rb | 25 | ||||
-rw-r--r-- | app/graphql/resolvers/crm/contacts_resolver.rb | 21 |
2 files changed, 44 insertions, 2 deletions
diff --git a/app/graphql/resolvers/crm/contact_state_counts_resolver.rb b/app/graphql/resolvers/crm/contact_state_counts_resolver.rb new file mode 100644 index 00000000000..f696400d44e --- /dev/null +++ b/app/graphql/resolvers/crm/contact_state_counts_resolver.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Resolvers + module Crm + class ContactStateCountsResolver < BaseResolver + include Gitlab::Graphql::Authorize::AuthorizeResource + + authorize :read_crm_contact + + type Types::CustomerRelations::ContactStateCountsType, null: true + + argument :search, GraphQL::Types::String, + required: false, + description: 'Search term to find contacts with.' + + argument :state, Types::CustomerRelations::ContactStateEnum, + required: false, + description: 'State of the contacts to search for.' + + def resolve(**args) + CustomerRelations::ContactStateCounts.new(context[:current_user], object, args) + end + end + end +end diff --git a/app/graphql/resolvers/crm/contacts_resolver.rb b/app/graphql/resolvers/crm/contacts_resolver.rb index 58d0e2ce13d..a93942cf93b 100644 --- a/app/graphql/resolvers/crm/contacts_resolver.rb +++ b/app/graphql/resolvers/crm/contacts_resolver.rb @@ -10,6 +10,11 @@ module Resolvers type Types::CustomerRelations::ContactType, null: true + argument :sort, Types::CustomerRelations::ContactSortEnum, + description: 'Criteria to sort contacts by.', + required: false, + default_value: { field: 'last_name', direction: :asc } + argument :search, GraphQL::Types::String, required: false, description: 'Search term to find contacts with.' @@ -24,13 +29,25 @@ module Resolvers def resolve(**args) args[:ids] = resolve_ids(args.delete(:ids)) - - ::Crm::ContactsFinder.new(current_user, { group: group }.merge(args)).execute + args.delete(:state) if args[:state] == :all + + contacts = ::Crm::ContactsFinder.new(current_user, { group: group }.merge(args)).execute + if needs_offset?(args) + offset_pagination(contacts) + else + contacts + end end def group object.respond_to?(:sync) ? object.sync : object end + + private + + def needs_offset?(args) + args.key?(:sort) && args[:sort][:field] == 'organization' + end end end end |