Ошибка GraphQL: значение по умолчанию для $completeAt не соответствует типу DateTime в React Apollo?

У меня такая мутация -

import gql from "graphql-tag";

const completedAt = new Date().toISOString();

export const CREATE_TODO = gql`
  mutation($body: String!, $completedAt: DateTime = completedAt) {
    createTodo(input: { body: $body, completed_at: $completedAt }) {
      id
      body
    }
  }
`;

Когда я вызываю эту мутацию, я получаю ошибку

Ошибка GraphQL: значение по умолчанию для $completeAt не соответствует типу DateTime в React Apollo

Как мне это решить? я пытался JSON.stringify(new Date().toISOString()) тоже не повезло:(

Также обратите внимание, что это работает -

import gql from "graphql-tag";

const completedAt = JSON.stringify(new Date().toISOString());

export const CREATE_TODO = gql`
  mutation($body: String!) {
    createTodo(input: { body: $body, completed_at: ${completedAt} }) {
      id
      body
    }
  }
`;

1 ответ

Решение

Я изменил свое решение. Прямо сейчас я не использую завершение. Вот так. Я принимаю это как входные данные для переменной GraphQL, как:

import gql from "graphql-tag";

export const CREATE_TODO = gql`
  mutation createTodo($body: String!, $completedAt: DateTime) {
    createTodo(input: { body: $body, completed_at: $completedAt }) {
      id
      body
      completed_at
    }
  }
`;

И затем, поскольку $completeAt не является обязательным полем, я отправляю null, если я не хочу никакого значения, или отправляю новое Date(). ToISOString(), если я хочу, чтобы оно имело текущее время.

Например:

Неполное Todo, т. Е. Нулевое значение для DateTime

mutate({
    query: CREATE_TODO,
    variables: { body: "Incomplete todo", completedAt: null }
});

Завершите Todo, т.е. Текущее время для DateTime

mutate({
    query: CREATE_TODO,
    variables: { body: "Complete todo", completedAt: new Date().toISOString() }
});
Другие вопросы по тегам