Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2017
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.87 KB | None | 0 0
  1. // @flow
  2.  
  3. import React, { Component } from 'react'
  4. import Helmet from 'react-helmet'
  5. import Auth from 'components/Auth'
  6. import NoAccount from 'components/Auth/NoAccount'
  7. import Form, { Field } from 'react-formal'
  8. import Message from 'components/ValidationMessage'
  9. import yup from 'yup'
  10. import AuthButton from 'components/AuthButton'
  11. import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'
  12. import { Link } from 'react-router'
  13. import { connect } from 'react-redux'
  14. import { requestPasswordRequiredCheck, requestSignIn } from './sagas'
  15.  
  16. type Props = {
  17. intl: Object,
  18. router: Object,
  19. requestPasswordRequiredCheck: Function,
  20. requestSignIn: Function,
  21. passwordRequired: boolean,
  22. isLoading: boolean,
  23. errorText?: string
  24. }
  25.  
  26. class SignIn extends Component {
  27. props: Props
  28.  
  29. state = {
  30. model: {
  31. username: '',
  32. password: ''
  33. }
  34. }
  35.  
  36. handleChange = (model) => {
  37. const email = yup.string().email().required()
  38. if (model.username !== this.state.model.username) {
  39. email.isValid(model.username, (err, value) => {
  40. if (err) console.log(err.stack)
  41. if (value) {
  42. this.props.requestPasswordRequiredCheck(model.username)
  43. }
  44. })
  45. }
  46. this.setState({ model })
  47. }
  48.  
  49. render () {
  50. const { intl: { formatMessage }, passwordRequired, requestSignIn, router, isLoading, errorText } = this.props
  51. const { model } = this.state
  52. const { title } = defineMessages({
  53. title: {
  54. id: 'containers.SignIn.title',
  55. defaultMessage: 'Sign In'
  56. }
  57. })
  58. const schema = yup.object({
  59. username: yup.string().required(),
  60. password: yup.string()
  61. })
  62. return (
  63. <Auth
  64. footer={<NoAccount />}
  65. errorText={errorText}
  66. >
  67. <Helmet title={formatMessage(title)} />
  68. <h5>
  69. <FormattedMessage
  70. id='containers.SignIn.header'
  71. defaultMessage='Hello! Welcome back.'
  72. />
  73. </h5>
  74. <p>
  75. <FormattedMessage
  76. id='containers.SignIn.text'
  77. defaultMessage='Sign into your account:'
  78. />
  79. </p>
  80. <Form
  81. className='auth__form'
  82. schema={schema}
  83. value={model}
  84. onChange={model => this.handleChange(model)}
  85. onSubmit={() => requestSignIn(router.location.query, model)}
  86. >
  87. <div className='formGroup'>
  88. <label htmlFor='username'>
  89. <FormattedMessage
  90. id='containers.SignIn.usernameInputLabel'
  91. defaultMessage='email/username'
  92. />
  93. </label>
  94. <Field
  95. className='auth__iconInput auth__iconInput--user input large'
  96. id='username'
  97. name='username'
  98. placeholder={formatMessage({
  99. id: 'containers.SignIn.usernameInputPlaceholder',
  100. defaultMessage: 'Enter your email or username'
  101. })}
  102. />
  103. <Message for='username' />
  104. </div>
  105. {passwordRequired && <div className='formGroup'>
  106. <div className='row'>
  107. <div className='column'>
  108. <label htmlFor='password'>
  109. <FormattedMessage
  110. id='containers.SignIn.passwordInputLabel'
  111. defaultMessage='password'
  112. />
  113. </label>
  114. </div>
  115. <div className='shrink column'>
  116. <label className='last'><Link to='/forgot-password'><strong>
  117. <FormattedMessage
  118. id='containers.SignIn.forgotPassword'
  119. defaultMessage='Forgot password'
  120. />
  121. </strong></Link></label>
  122. </div>
  123. </div>
  124. <Field
  125. className='auth__iconInput auth__iconInput--password input large'
  126. type='password'
  127. id='password'
  128. name='password'
  129. placeholder={formatMessage({
  130. id: 'containers.SignIn.passwordInputPlaceholder',
  131. defaultMessage: 'Enter password'
  132. })}
  133. />
  134. <Message for='password' />
  135. </div>}
  136. <AuthButton
  137. text={formatMessage({
  138. id: 'containers.SignIn.buttonText',
  139. defaultMessage: 'Sign In'
  140. })}
  141. isLoading={isLoading}
  142. />
  143. </Form>
  144. </Auth>
  145. )
  146. }
  147. }
  148.  
  149. const mapStateToProps = (state) => ({
  150. passwordRequired: state.getIn(['signIn', 'passwordRequired']),
  151. isLoading: state.getIn(['signIn', 'isLoading']),
  152. errorText: state.getIn(['signIn', 'errorText'])
  153. })
  154. const mapDispatchToProps = (dispatch) => ({
  155. requestPasswordRequiredCheck: (email) => dispatch(requestPasswordRequiredCheck(email)),
  156. requestSignIn: (query, model) => dispatch(requestSignIn(query, model))
  157. })
  158.  
  159. export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(SignIn))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement