0

I've got this query im trying to test with with the reason graphql_ppx library. code gist

This is a screenshot of the editor type annotations: enter image description here

Using the @mhallin/graphql_ppx library, i've got the following query set up:

    module FilmQuery = [%graphql
  {|
    {
      allFilms {
        films {
          id
          title
          releaseDate
        }
      }
    }
|}
];

exception Graphql_error(string);

/* Construct a "packaged" query; FilmQuery takes no arguments: */
let filmQuery = FilmQuery.make();

/* Send this query string to the server */
let query = filmQuery##query // type string

I get an the following error when i send the query to the server it returns the following error.

{ errors: [ { message: 'Must provide query string.' } ] }

But if you Js.log(query) you see its being constructed which works on https://swapi.apis.guru

query films($first: Int)  {
  allFilms(first: $first)  {
   films  {
     id  
     title  
     releaseDate  
   }
  }
}

If you Js.log(filmQuery) you get:

{ query: 'query   {\nallFilms  {\nfilms  {\nid  \ntitle  \nreleaseDate  \n}\n}\n}',

variables: null, parse: [Function: parse] }

If your run the same query in Altair and you check the query that was sent in the devtools network tab you see:

{"query":"    query films($first: Int) {\n      allFilms(first: $first) {\n        films {\n          id\n          title\n          releaseDate\n        }\n      }\n    }\n","variables":{}}

The editor is provided this type error: "- error [bucklescript] This has type: string But somewhere wanted: Js.t({.. query : string, variables : Js.Json.t }) string"

How do I get this promise/unit type resolved? Thank you.

So the new question is: Why isn't the sendQuery() function recognizing the filmQuery##parse key?

armand
  • 693
  • 9
  • 29

1 Answers1

0

Your sendQuery method is expecting a type in the shape of what is returned from FilmQuery.make(), but you are passing it just the query property, which is a string.

You can fix this by passing filmQuery as into sendQuery instead of just the query property from filmQuery that is referenced by the query variable.

Neil Kistner
  • 11,623
  • 2
  • 18
  • 17