todo/js/mutations/RenameTodoMutation.js (43 lines of code) (raw):
// @flow
import type {RenameTodoMutation_todo$key} from 'relay/RenameTodoMutation_todo.graphql';
import {useCallback} from 'react';
import {graphql, useFragment, useMutation} from 'react-relay';
const mutation = graphql`
mutation RenameTodoMutation($input: RenameTodoInput!) {
renameTodo(input: $input) {
todo {
id
text
}
}
}
`;
export function useRenameTodoMutation(
todoRef: RenameTodoMutation_todo$key,
): (string) => void {
const todo = useFragment(
graphql`
fragment RenameTodoMutation_todo on Todo {
id
text
}
`,
todoRef,
);
const [commit] = useMutation(mutation);
return useCallback((text: string) => {
const payload = {
id: todo.id,
text,
};
commit({
variables: {
input: payload,
},
optimisticResponse: {
renameTodo: {
todo: payload,
},
},
});
});
}