vuex-orm / plugin-graphql

Vuex ORM persistence plugin to sync the store against a GraphQL API.
https://vuex-orm.github.io/plugin-graphql/
MIT License
227 stars 52 forks source link

BUG: .$push does not add variables to variable definitions on mutation #175

Open kempsteven opened 3 years ago

kempsteven commented 3 years ago

image

As you can see in the image above: The variable is_create_update_xero is not in the variable definitions of updateUser.

Here is the code that I use:

async updateUser () {
      await User.fetch({ id: this.authUser.id })

      await User.insertOrUpdate({
        where: this.authUser.id,
        data: {
          ...this.authUser,
          is_email_verified: true
        }
      })

      const user = User
        .query()
        .where('id', this.authUser.id)
        .first()

      await user.$push({ is_create_update_xero: false })
 }

Mutation Type Def

updateUser(
      id: ID!,
      user: UserInput,
      is_create_update_xero: Boolean
  ): User

aaaaaaaand another weird thing about it is when i do this in another place on the app(authenticated page), it adds the variable definition for is_create_update_xero. not sure if having an authenticated page changes anything. Please help :(

kempsteven commented 3 years ago

UPDATE:

There is a bug where if you passed a false/falsy variable on a mutation it will not register the variable definition :coffin_dance: Example:

user.$push({ is_create_update_xero: false }) or user.$push({ is_create_update_xero: 0 })

that will create a query of

query: "mutation UpdateUser($id: ID!, $user: UserInput!)..."
variables: { is_create_update_xero: false, id: '...', user: {...} }

as you can see the $is_create_update_xero: Boolean! is missing in the variable definition in the query. Without the variable definition, the back end won't be able to receive the is_create_update_xero

Work around: I just passed a "false" string: user.$push({ is_create_update_xero: 'false' }) , it looks reallyyy bad but that's the only workaround I could think of