View Source Absinthe.Relay.Mutation.Notation.Classic (absinthe_relay v1.5.2)

Support for Relay Classic mutations with single inputs and client mutation IDs.

The payload macro can be used by schema designers to support mutation fields that receive a single input object argument with a client mutation ID and return that ID as part of the response payload.

More information can be found at https://facebook.github.io/relay/docs/guides-mutations.html

example

Example

In this example we add a mutation field :simple_mutation that accepts an input argument (which is defined for us automatically) which contains an :input_data field.

We also declare the output will contain a field, :result.

Notice the resolve function doesn't need to know anything about the wrapping input argument -- it only concerns itself with the contents -- and the client mutation ID doesn't need to be dealt with, either. It will be returned as part of the response payload automatically.

mutation do
  payload field :simple_mutation do
    input do
      field :input_data, non_null(:integer)
    end
    output do
      field :result, :integer
    end
    resolve fn
      %{input_data: input_data}, _ ->
        # Some mutation side-effect here
        {:ok, %{result: input_data * 2}}
    end
  end
end

Here's a query document that would hit this field:

mutation DoSomethingSimple {
  simpleMutation(input: {inputData: 2, clientMutationId: "abc"}) {
    result
    clientMutationId
  }
}

And here's the response:

{
  "data": {
    "simpleMutation": {
      "result": 4,
      "clientMutationId": "abc"
    }
  }
}

Note the above code would create the following types in our schema, ad hoc:

  • SimpleMutationInput
  • SimpleMutationPayload

For this reason, the identifier passed to payload field must be unique across your schema.

the-escape-hatch

The Escape Hatch

The mutation macros defined here are just for convenience; if you want something that goes against these restrictions, don't worry! You can always just define your types and fields using normal (field, arg, input_object, etc) schema notation macros as usual.

Link to this section Summary

Functions

Defines the input type for your payload field. See the module documentation for an example.

Defines the output (payload) type for your payload field. See the module documentation for an example.

Define a mutation with a single input and a client mutation ID. See the module documentation for more information.

Link to this section Functions

Link to this function

additional_types(arg1, arg2)

View Source
Link to this macro

input(identifier, list)

View Source (macro)

Defines the input type for your payload field. See the module documentation for an example.

Link to this macro

output(identifier, list)

View Source (macro)

Defines the output (payload) type for your payload field. See the module documentation for an example.

Link to this macro

payload(arg, list)

View Source (macro)

Define a mutation with a single input and a client mutation ID. See the module documentation for more information.