login.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { Mutation } from 'react-apollo'
  2. import { adopt } from 'react-adopt'
  3. import { Formik, Form } from 'formik'
  4. import { USER_LOGIN, CURRENT_USER } from '../../lib/graphql'
  5. import { TextInput } from '../../lib/forms'
  6. const LoginAdoption = adopt({
  7. login: ({ render }) => (
  8. <Mutation
  9. mutation={USER_LOGIN}
  10. refetchQueries={[{ query: CURRENT_USER }]}
  11. >
  12. {(login, { data, error, loading }) => render({ login, data, error, loading })}
  13. </Mutation>
  14. ),
  15. form: ({ login: { login }, render }) => (
  16. <Formik
  17. initialValues={{
  18. email: '',
  19. password: ''
  20. }}
  21. onSubmit={async values => {
  22. try {
  23. const user = await login({ variables: values })
  24. console.log(user)
  25. } catch (error) {
  26. console.log(error)
  27. }
  28. }}
  29. >
  30. {render}
  31. </Formik>
  32. )
  33. })
  34. const LoginForm = props => (
  35. <LoginAdoption>
  36. {({ form, mutation }) => (
  37. <Form>
  38. <TextInput
  39. label='Email'
  40. name='email'
  41. type='email'
  42. placeholder='email'
  43. />
  44. <TextInput
  45. label='Password'
  46. name='password'
  47. type='password'
  48. placeholder='password'
  49. />
  50. <button type='submit'>Login!</button>
  51. </Form>
  52. )}
  53. </LoginAdoption>
  54. )
  55. export default LoginForm