Use simpler way to add todo to list

This commit is contained in:
Eloy Durán 2021-10-02 23:46:48 +02:00
Родитель c194d2fad1
Коммит 93d2a7f421
1 изменённых файлов: 11 добавлений и 14 удалений

Просмотреть файл

@ -5,6 +5,7 @@ import { graphql } from "@graphitation/graphql-js-tag";
import { AppQuery } from "./App";
import { useAddTodoMutationResponse } from "./__generated__/useAddTodoMutation.graphql";
import invariant from "invariant";
const mutation = graphql`
mutation useAddTodoMutation($input: AddTodoInput!) {
@ -50,21 +51,17 @@ const mutation = graphql`
export function useAddTodoMutation() {
const [commit] = useMutation<useAddTodoMutationResponse>(mutation, {
update(cache, { data }) {
const newTodoEdge = data?.addTodo?.todoEdge;
const existingTodoEdges = cache.readQuery({
query: AppQuery,
}) as any;
if (existingTodoEdges && newTodoEdge) {
cache.writeQuery({
query: AppQuery,
data: {
todos: {
edges: [...existingTodoEdges.todos.edges, newTodoEdge],
},
invariant(data?.addTodo, "Expected success result");
const connectionId = data.addTodo.todos.id;
const newTodoEdge = data.addTodo.todoEdge;
cache.modify({
id: `TodosConnection:${connectionId}`,
fields: {
edges(current) {
return [...current, newTodoEdge];
},
});
}
},
});
},
});
return useCallback(