2

I'm trying to write a mutation query and it works perfectly with graphql

mutation($project: ProjectsInput) {
  NewProject(project: $project) {
    name,
    namespace,
    environments{
      env,      
    }}}

these are the query variables

{"project": {
   "name": "Pr1",
  "namespace": "Pr2",
  "environments": 

  [{"env": "rec"},{"env": "dev"}]


}}

and this is how it looks graphql mutation now I am trying to use Apollo Client in angular to build this mutation like so


    createProject() {
    this.apollo.mutate({
      mutation: gql`
      mutation($project: ProjectsInput) {
        NewProject(project: $project) {
          name,
          namespace,
          environments{
            env,      
          }
    `,
      variables: { 
        project: {
          name: "sth",
          namespace: "sth2",
          env: [
            {env:"env1"},
            {env:"env2"}
          ]
        } 
      }
    }).subscribe(data => {
      console.log('New project created!', data);

    });  }

But i'm getting Http failure response because of the variable $env of type Array.i want to pass an array as a variable for the query in apollo client.I don't have problems with variables of type string but the array objects causes this error.

2
  • use graphiql docs to check mutation signature - probably ONE input variable - pass all data as one input object (matching one input variable), try with graphiql using query variables (below query) ... then use code (apollo-client) Commented Jun 3, 2020 at 20:12
  • thank you for your reply, actually i tried with TWO input variables and it worked fine. The problem is that i'm stack with the array list type. i want to dynamically persist that array of objects. regards Commented Jun 4, 2020 at 8:57

1 Answer 1

2

NewProject(project: shows that your NewProject mutation needs one project parameter

change query to

mutation($project: ProjectsInput) {
  NewProject(project: $project) {
    name,
    namespace,
    environments{
      env,      
    }

and pass one, entire object to variable project

use query variables in graphiql to define test variables:

{ 
  project: {
    name: "sth",
    namespace: "sth2",
    environments: [
      {env:"env1"},
      {env:"env2"}
    ]
  } 
}

then in client prepare the same kind of object for project variable (with structure matching your mutation input type, of course).

Sign up to request clarification or add additional context in comments.

9 Comments

Thank you sir but that's not the problem.The query works fine. The problem is that the size of the array 'env' is not static (a project has many environments fixed by the admin) . string variables does not cause a problem. in this case when i remove $env variable from apollo request it works fine but when i add the array i get an error.
show your mutation signature - from graphiql ... and input types definitions used in this mutation
i have edited the post. what i want to do is to add an array of objects to the apollo client request.regards
nothing changed .... only we know input type name ;) ProjectsInput, still prepare ONE object, try first in graphiql (using query variables!! not hardcoding structures and passing subproperties ), then recreate in code
i did what you have told me and i edited once again the post. i'm using query variables now like in the picture(edited in the post). the problem is actually not in the backend Api but in the apollo client request. i hope i'm understanding what you are trying to tell me. thanks
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.