Невозможно выполнить обновление мутации - PullRequest
0 голосов
/ 03 июня 2019

Когда я обновляю сообщение, я не могу присвоить значения переменным, которые будут отправлены на сервер. Когда я console.log(args.data) в резольвере, я получаю [Object: null prototype] {}. Я не получаю ошибок, за исключением того, что переменная объект является нулевым.

Ниже приведена форма редактирования внешнего интерфейса. Значения по умолчанию data.post взяты из запроса с соответствующим идентификатором записи, который я отредактировал для простоты. variables console.log показывает, что все правильно назначается вплоть до отправки на сервер.

    const [title, setTitle] = useState('')
    const formSubmit = useMutation(UPDATE_POST_MUTATION)
    const variables = { title }
    const onSubmitHandler = e => {
        e.preventDefault()
        try {
            formSubmit({
                variables: {
                    id: props.match.params.id,
                    data: { ...variables } // this shows all the appropriate input from the form
                }
            })
        } catch(error) {
            throw new Error(error)
        }
        props.history.push('/')
    }

            <form className='form' onSubmit={onSubmitHandler}>
                <fieldset>
                    <div className="form-group">
                        <label htmlFor="title">Title</label>
                        <input
                            type="text"
                            className="form-control"
                            id="title"
                            placeholder="Enter title"
                            defaultValue={data.post.title}
                            onChange={e => setTitle(e.target.value)}
                        />
                    </div>
                    <button type="submit" className="">
                        Save Changes
                    </button>
                </fieldset>
            </form>    

Ниже приведено обновление мутации GraphQL от внешнего интерфейса:

export const UPDATE_POST_MUTATION = gql`
  mutation UpdatePost($id: ID!, $title: string) {
    updatePost(
        id: $id,
        data: {
            title: $title
        }
    ){
      id
    }
  }
`

Ниже приведен мой schema.graphql:

type Mutation {
    updatePost(id: ID!, data: UpdatePostInput!): Post!
}

И, наконец, вот мой решатель. console.log в следующем коде показывает ноль:

async updatePost(parent, args, { prisma, request }, info){
        console.log("args.data", args.data) // this shows [Object: null prototype] {}

        const userId = getUserId(request)
        const postExists = await prisma.exists.Post({
            id: args.id,
            author: {
                id: userId
            }
        })

        if (!postExists) {
            throw new Error("Unable to update post")
        }

        const isPublished = await prisma.exists.Post({
            id: args.id,
            published: true
        })

        if(isPublished && args.data.published === false) {
            await prisma.mutation.deleteManyReviews({
                where: {
                    post: {
                        id: args.id
                    }
                }
            })
        }
        return prisma.mutation.updatePost({
            where: {
                id: args.id
            },
            data: args.data
        })
    },
...