Аполлон: множественные мутации - PullRequest
0 голосов
/ 29 октября 2018

Я не могу найти правильный ответ. Так что я надеюсь, что кто-нибудь поможет мне. Я хочу иметь две мутации в моем экспорте по умолчанию. Но я не знаю правильный способ подойти к этому.

Текущий код:

import React from 'react';
import gql from 'graphql-tag';
import {graphql,compose} from 'react-apollo';
import AanvraagFromulier from './AanvraagFormulier';

export class Aanvraag extends React.Component{
    onSubmit = (aanvraag) => {
        console.log(aanvraag);
        this.props.mutate({
            variables: {
                id: aanvraag.id,
                naam: aanvraag.naam,
                email: aanvraag.email,
                afdeling: aanvraag.afdeling,
                divisie: aanvraag.divisie,
                team: aanvraag.team,
                status: 'open',
                //project vars
                projectid: aanvraag.projectid,
                projectnaam: aanvraag.projectnaam,
                projecttype: aanvraag.ptype,
                projectlead_naam: aanvraag.pjnaam,
                projectlead_email:aanvraag.pjemail,
                aanvraag_id:aanvraag.id
            },
        });
    }

    render(){
        console.log(this.props);
        return(
            <div>
                <AanvraagFromulier 
                  onSubmit={this.onSubmit}
                />
            </div>
        );
    }
}

const aanvraagmutation = gql`
    mutation addAanvraag($id:ID, $naam:String,$email:String,$divisie:String,$afdeling:String,$team:String,$status:String){
    addAanvraag(id:$id, naam:$naam,email:$email,divisie:$divisie,afdeling:$afdeling,team:$team,status:$status){
      id
     }
    }
`;

const projectmutation = gql`
mutation addProject($projectid:ID,$projectnaam:String,$projecttype:String,$projectlead_naam:String,$projectlead_email:String,$aanvraag_id:ID){
    addProject(id:$projectid, naam:$projectnaam,type:$projecttype,lead_naam:$projectlead_naam,lead_email:$projectlead_email,aanvraag_id:$aanvraag_id){
      id
    }
  }  
`;

export default graphql(aanvraagmutation)(graphql(projectmutation)(Aanvraag))

Проблема в том, что при выполнении этого файла отключается только проектная мутация, а avvraagmutation ничего не делает. Как я могу сделать так, чтобы они оба были казнены?

1 Ответ

0 голосов
/ 29 октября 2018

Функция graphql создает компонент более высокого порядка, который по умолчанию вводит реквизит с именем mutate, который выполняет ваш запрос.

В вашем коде компонент высшего порядка, созданный graphql(projectmutation), перезаписывает реквизит mutate, который вводится HOC, созданным graphql(aanvraagmutation).

Чтобы избежать этого, вам нужно попросить graphql сгенерировать реквизит с другим именем вместо этого, используя опцию config.name, чтобы изменить имя mutate по умолчанию на другое, так что они не конфликтуют. Например:

export default compose(
   graphql(aanvraagmutation, { name: 'aanvraagmutate' }),
   graphql(projectmutation, { name: 'projectmutate' }),
)(Aanvraag);

(я также использовал compose, чтобы навести порядок).

Затем вы вызываете каждую мутацию отдельно в своем обработчике. HOCS не объединяются для создания одного запроса на изменение.

...