Advertisement
Guest User

Untitled

a guest
Mar 10th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.72 KB | None | 0 0
  1. import React, { Component, PropTypes } from 'react';
  2. import { browserHistory } from 'react-router';
  3. import bcrypt from 'bcryptjs';
  4. import { connect } from 'react-redux';
  5.  
  6. import { signin, signup, signinWithGoogle, signWithFB } from '../../actions/login';
  7. import ErrorHandler from '../../hoc/ErrorHandler';
  8. import validator from '../../lib/validation/Validator';
  9. import { Signin } from './Signin';
  10. import { Signup } from './Signup';
  11. import { SignupSuccess } from './SignupSuccess';
  12. import { Logout } from './Logout';
  13.  
  14. import './styles.scss';
  15.  
  16. @ErrorHandler
  17. class Login extends Component {
  18.  
  19. constructor(props) {
  20. super(props);
  21. this.state = {
  22. isSignin: false,
  23. isSignup: false,
  24. isSigninShown: true,
  25. isSignupShown: false,
  26. isSuccessShown: false,
  27. signinEmail: '',
  28. signinPassword: '',
  29. signupEmail: '',
  30. signupUsername: '',
  31. signupPassword: '',
  32. signupPasswordConfirm: '',
  33. };
  34. this.initMethods();
  35. }
  36.  
  37. initMethods() {
  38. this.switchToSignup = this.switchToSignup.bind(this);
  39. this.signin = this.signin.bind(this);
  40. this.signup = this.signup.bind(this);
  41. this.logout = this.logout.bind(this);
  42. this.onLoginFieldChange = this.onLoginFieldChange.bind(this);
  43. this.onGoogleSignin = this.onGoogleSignin.bind(this);
  44. this.signInCallback = this.signInCallback.bind(this);
  45. this.onFBSignin = this.onFBSignin.bind(this);
  46. }
  47.  
  48. switchToSignup(e) {
  49. e.preventDefault();
  50. this.setState({ isSigninShown: false, isSignupShown: true });
  51. }
  52.  
  53. onLoginFieldChange(e) {
  54. this.setState({ [e.target.name]: e.target.value });
  55. }
  56.  
  57. hashPassword(value) {
  58. return bcrypt.hashSync(value, 7);
  59. }
  60.  
  61. getToken() {
  62. return localStorage.getItem('token');
  63. }
  64.  
  65. logout() {
  66.  
  67. }
  68.  
  69. signin() {
  70. const { signinEmail: email, signinPassword: pass } = this.state;
  71. const errors = validator.isSigninFormValid(email, pass, 6);
  72. if (!errors.length) {
  73. this.props.signin({ email, password: this.hashPassword(pass) });
  74. this.setState({ isSignin: true });
  75. }
  76. }
  77.  
  78. signup() {
  79. const {
  80. signupEmail: email,
  81. signupUsername: username,
  82. signupPassword: pass,
  83. signupPasswordConfirm: passConfirm,
  84. } = this.state;
  85. const errors = validator.isSignupFormValid(email, username, pass, passConfirm, 6);
  86. if (!errors.length) {
  87. this.props.signup({ email, username, password: this.hashPassword(pass) });
  88. this.setState({ isSignup: true });
  89. }
  90. }
  91.  
  92. onGoogleSignin() {
  93. window.auth2.grantOfflineAccess({ redirect_uri: 'postmessage' }).then(this.signInCallback);
  94. }
  95.  
  96. signInCallback(authResult) {
  97. if (authResult.code) {
  98. this.props.signinWithGoogle(authResult);
  99. } else {
  100. console.log('error');
  101. }
  102. }
  103.  
  104. onFBSignin() {
  105. let authData;
  106. window.FB.getLoginStatus((response) => {
  107. console.log('result 1', response);
  108. authData = response;
  109. if (response.status === 'connected') {
  110. this.props.signWithFB(authData.authResponse);
  111. }
  112. if (response.status !== 'connected') {
  113. window.FB.login((res) => {
  114. console.log('result 2', res);
  115. authData = res;
  116. this.props.signWithFB(authData.authResponse);
  117. });
  118. }
  119. });
  120. }
  121.  
  122. componentWillReceiveProps(nextProps) {
  123. const { error } = nextProps.login;
  124. error && this.processError(error);
  125. if (!!this.getToken() && this.state.isSignin) {
  126. this.props.switchLogin();
  127. browserHistory.push('/lists');
  128. }
  129. if (!!this.getToken() && this.state.isSignup) {
  130. this.setState({ isSignup: false, isSignupShown: false, isSuccessShown: true });
  131. browserHistory.push('/lists');
  132. }
  133. }
  134.  
  135. render() {
  136. return (
  137. <div className="login">
  138. { !this.getToken() && this.state.isSigninShown &&
  139. <Signin
  140. onSigninFieldChange={ this.onLoginFieldChange }
  141. onSignin={ this.signin }
  142. onSwitchToSignup={ this.switchToSignup }
  143. onGoogleSignin={ this.onGoogleSignin }
  144. onFBSignin={ this.onFBSignin }
  145. /> }
  146. { !this.getToken() && this.state.isSignupShown &&
  147. <Signup
  148. onSignupFieldChange={ this.onLoginFieldChange }
  149. onSignup={ this.signup }
  150. /> }
  151. { this.state.isSuccessShown && <SignupSuccess onSuccessClick={ this.props.switchLogin } /> }
  152. { this.getToken() && !this.state.isSuccessShown && <Logout onLogoutClick={ this.logout } /> }
  153. </div>
  154. );
  155. }
  156. }
  157.  
  158. Login.propTypes = {
  159. signin: PropTypes.func.isRequired,
  160. signup: PropTypes.func.isRequired,
  161. switchLogin: PropTypes.func.isRequired,
  162. signinWithGoogle: PropTypes.func.isRequired,
  163. signWithFB: PropTypes.func.isRequired,
  164. };
  165.  
  166. export default connect(
  167. state => ({ login: state.login }),
  168. { signin, signup, signinWithGoogle, signWithFB },
  169. )(Login);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement