todo/data/schema/mutations/RenameTodoMutation.js (36 lines of code) (raw):

// @flow /* graphql-relay doesn't export types, and isn't in flow-typed. This gets too messy */ /* eslint flowtype/require-return-type: 'off' */ import {mutationWithClientMutationId, fromGlobalId} from 'graphql-relay'; import { GraphQLID, GraphQLNonNull, GraphQLString, type GraphQLFieldConfig, } from 'graphql'; import {GraphQLTodo} from '../nodes'; import {getTodoOrThrow, renameTodo, Todo} from '../../database'; type Input = {| +id: string, +text: string, |}; type Payload = {| +localTodoId: string, |}; const RenameTodoMutation: GraphQLFieldConfig<$FlowFixMe, $FlowFixMe> = mutationWithClientMutationId({ name: 'RenameTodo', inputFields: { id: {type: new GraphQLNonNull(GraphQLID)}, text: {type: new GraphQLNonNull(GraphQLString)}, }, outputFields: { todo: { type: new GraphQLNonNull(GraphQLTodo), resolve: ({localTodoId}: Payload): Todo => getTodoOrThrow(localTodoId), }, }, mutateAndGetPayload: ({id, text}: Input): Payload => { const localTodoId = fromGlobalId(id).id; renameTodo(localTodoId, text); return {localTodoId}; }, }); export {RenameTodoMutation};