Ошибка 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() }
});