Method: GraphQL::Schema::Field::ConnectionExtension#after_resolve

Defined in:
lib/graphql/schema/field/connection_extension.rb

#after_resolve(value:, object:, arguments:, context:, memo:) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/graphql/schema/field/connection_extension.rb', line 24

def after_resolve(value:, object:, arguments:, context:, memo:)
  original_arguments = memo
  # rename some inputs to avoid conflicts inside the block
  maybe_lazy = value
  value = nil
  context.query.after_lazy(maybe_lazy) do |resolved_value|
    value = resolved_value
    if value.is_a? GraphQL::ExecutionError
      # This isn't even going to work because context doesn't have ast_node anymore
      context.add_error(value)
      nil
    elsif value.nil?
      nil
    elsif value.is_a?(GraphQL::Pagination::Connection)
      # update the connection with some things that may not have been provided
      value.context ||= context
      value.parent ||= object.object
      value.first_value ||= original_arguments[:first]
      value.after_value ||= original_arguments[:after]
      value.last_value ||= original_arguments[:last]
      value.before_value ||= original_arguments[:before]
      value.arguments ||= original_arguments # rubocop:disable Development/ContextIsPassedCop -- unrelated .arguments method
      value.field ||= field
      if field.has_max_page_size? && !value.has_max_page_size_override?
        value.max_page_size = field.max_page_size
      end
      if field.has_default_page_size? && !value.has_default_page_size_override?
        value.default_page_size = field.default_page_size
      end
      if (custom_t = context.schema.connections.edge_class_for_field(@field))
        value.edge_class = custom_t
      end
      value
    else
      context.namespace(:connections)[:all_wrappers] ||= context.schema.connections.all_wrappers
      context.schema.connections.wrap(field, object.object, value, original_arguments, context)
    end
  end
end