Apollo клиентский запрос на повторную проверку после мутации - PullRequest
0 голосов
/ 28 декабря 2018

У меня возникают проблемы при повторном рендеринге компонента после завершения mutation.Я ожидаю, что после завершения mutation запускается триггер refetchQueries, который обновляет реквизит и запускает перенаправление.Есть ли способ для повторного получения на том же компоненте.Вот мой код:

import React, { Component, Fragment } from 'react';
import { Redirect, withRouter } from 'react-router';
import { IS_LOGGED_IN, SIGN_IN, DEFAULT_STATE } from '../../utils/Constants/GraphQL/UserQueries';
import { client } from '../../utils/ApolloClient';
import LoginForm from '../../components/screens/login/loginForm';
import { graphql } from 'react-apollo';

export class Login extends Component {    
  handleSubmit = (event) => {
    event.preventDefault();
    client.mutate({
      refetchQueries: () => [{ query: IS_LOGGED_IN }],
      update: (proxy, { data }) => {
        const previousState = proxy.readQuery({ query: DEFAULT_STATE })

        const { email, authenticationToken } = data.signInAdmin.admin;
        const isLoggedIn = data.signInAdmin.error === '';
        const updatedData = {
          ...previousState,
          admin: {
            ...previousState.admin,
            isLoggedIn,
            error: data.signInAdmin.error,
          },
        };
        localStorage.setItem('email', email);
        localStorage.setItem('token', authenticationToken);

        proxy.writeData({ query: DEFAULT_STATE, data: updatedData });
      },
      variables: {
        email: event.target.email.value,
        password: event.target.password.value,
      },
      mutation: SIGN_IN,
    });
  }

  render() {
    const { isLoggedIn } = this.props.data.admin

    if (isLoggedIn) {
      return (<Redirect to="/admin" />);
    }

    const buttonProps = {
      type: 'submit',
      label: 'Submit',
    };

    return (
      <Fragment>
        <LoginForm
          buttonProps={buttonProps}
          submitHandler={this.handleSubmit}
        />
      </Fragment>
    );
  }
}

export default graphql(IS_LOGGED_IN, {
  options: {
    fetchPolicy: 'cache-and-network',
  }
})(withRouter(Login));
...