dillonkearns/elm-graphql/1.0.0

NOTE: the latest version is 5.0.12

Graphql.SelectionSet

The auto-generated code from the @dillonkearns/elm-graphql CLI will provide selection functions for Objects, Interfaces, and Unions in your GraphQL schema. These functions build up a Graphql.SelectionSet which describes a set of fields to retrieve. The SelectionSet is built up in a pipeline similar to how Json.Decode.Pipeline builds up decoders.

For example, if you had a top-level query human(id: ID!) which returns an object of type Human, you could build the following GraphQL query document:

query {
  human(id: 1001) {
    name
    id
  }
}

In this example, the SelectionSet on human is:

{
  name
  id
}

You could build up the above SelectionSet with the following dillonkearns/elm-graphql code:

import Api.Object
import Api.Object.Human as Human
import Graphql.SelectionSet exposing (SelectionSet, with)


type alias Human =
    { name : String
    , id : String
    }


hero : SelectionSet Hero Api.Interface.Human
hero =
    Human.selection Human
        |> with Human.name
        |> with Human.id

Note that all of the modules under Api. in this case are generated by running the @dillonkearns/elm-graphql command line tool.

The query itself is also a SelectionSet so it is built up similarly. See this live code demo for an example.

Field a typeLock
-> SelectionSet (a -> b) typeLock
-> SelectionSet b typeLock

Used to pick out fields on an object.

import Api.Enum.Episode as Episode exposing (Episode)
import Api.Object
import Api.Scalar
import Graphql.SelectionSet exposing (SelectionSet, with)


type alias Hero =
    { name : String
    , id : Api.Scalar.Id
    , appearsIn : List Episode
    }


hero : SelectionSet Hero Api.Interface.Character
hero =
    Character.commonSelection Hero
        |> with Character.name
        |> with Character.id
        |> with Character.appearsIn
hardcoded : a -> SelectionSet (a -> b) typeLock -> SelectionSet b typeLock

Include a hardcoded value.

    import Api.Enum.Episode as Episode exposing (Episode)
    import Api.Object
    import Graphql.SelectionSet exposing (SelectionSet, with, hardcoded)


    type alias Hero =
        { name : String
        , movie : String
        }


    hero : SelectionSet Hero Api.Interface.Character
    hero =
        Character.commonSelection Hero
            |> with Character.name
            |> hardcoded "Star Wars"
empty : SelectionSet () typeLock

Useful for Mutations when you don't want any data back.

import Api.Mutation as Mutation
import Graphql.Operation exposing (RootMutation)
import Graphql.SelectionSet as SelectionSet exposing (SelectionSet, with)


sendChatMessage : String -> SelectionSet () RootMutation
sendChatMessage message =
    Mutation.selection identity
        |> with (Mutation.sendMessage { message = message } SelectionSet.empty)
map : (a -> b) -> SelectionSet a typeLock -> SelectionSet b typeLock

Apply a function to change the result of decoding the SelectionSet.

succeed : a -> SelectionSet a typeLock

Instead of hardcoding a field like hardcoded, SelectionSet.succeed hardcodes an entire SelectionSet. This can be useful if you want hardcoded data based on only the type when using a polymorphic type (Interface or Union).

type alias Character =
    { details : Maybe HumanOrDroid
    , name : String
    }


type HumanOrDroid
    = Human
    | Droid


hero : SelectionSet Character Swapi.Interface.Character
hero =
    Character.selection Character
        [ Character.onDroid (SelectionSet.succeed Droid)
        , Character.onHuman (SelectionSet.succeed Human)
        ]
        |> with Character.name
fieldSelection : Field response typeLock -> SelectionSet response typeLock

Create a SelectionSet from a single Field.

import Api.Object
import Api.Object.Human as Human
import Graphql.SelectionSet exposing (SelectionSet)


humanSelection : SelectionSet String Api.Object.Human
humanSelection =
    SelectionSet.fieldSelection Human.name

Types

These types are built for you by the code generated by the @dillonkearns/elm-graphql command line tool.

type SelectionSet decodesTo typeLock
= SelectionSet (List RawField) (Decoder decodesTo)

SelectionSet type

type FragmentSelectionSet decodesTo typeLock
= FragmentSelectionSet String (List RawField) (Decoder decodesTo)

FragmentSelectionSet type