Advertisement
Guest User

Untitled

a guest
Feb 12th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { Link, Redirect } from 'react-router-dom';
  4. import { Helmet } from 'react-helmet';
  5. import { FormattedMessage } from 'react-intl';
  6. import { connect } from 'react-redux';
  7. import { compose } from 'redux';
  8. import { createStructuredSelector } from 'reselect';
  9.  
  10. import { storeToken } from '../User/lib';
  11.  
  12. import injectReducer from 'utils/injectReducer';
  13. import injectSaga from 'utils/injectSaga';
  14.  
  15. import Container from './Container';
  16. import H2 from 'components/H2';
  17. import Section from './Section';
  18. import messages from './messages';
  19. import reducer from './reducer';
  20. import saga from './saga';
  21. import LoginWrapper from './LoginWrapper';
  22. import FacebookDiv from './FacebookDiv';
  23. import GoogleDiv from './GoogleDiv';
  24. import FontAwesome from 'react-fontawesome';
  25.  
  26. import FacebookLoginButton from 'react-social-login-buttons/lib/buttons/FacebookLoginButton';
  27. import GoogleLoginButton from 'react-social-login-buttons/lib/buttons/GoogleLoginButton';
  28.  
  29. import {
  30.   FormGroup,
  31.   FormControl,
  32.   ControlLabel,
  33.   HelpBlock,
  34. } from 'react-bootstrap';
  35.  
  36. import LoginDiv from './LoginDiv';
  37. import LoadingButton from 'components/LoadingButton';
  38.  
  39. import {
  40.   getToken,
  41.   changeUsername,
  42.   changePassword,
  43.   changeIsLoading,
  44.   changeError,
  45.   changeLoginType,
  46. } from './actions';
  47.  
  48. import {
  49.   makeSelectUsername,
  50.   makeSelectPassword,
  51.   makeSelectIsLoading,
  52.   makeSelectLoginType,
  53. } from './selectors';
  54.  
  55. export class LoginPage extends React.PureComponent { // eslint-disable-line react/prefer-stateless-function
  56.   validateForm() {
  57.     return this.props.login_username.length > 0
  58.       && this.props.login_password.length > 0;
  59.   }
  60.  
  61.   render() {
  62.     return (
  63.       <LoginWrapper>
  64.         <Helmet
  65.           title="Login"
  66.           meta={[
  67.             { name: 'description', content: 'Koala Call | Login' },
  68.           ]}
  69.         />
  70.         <LoginDiv onSubmit={this.props.onChangeLoginType, this.props.onSubmitLogin}>
  71.           <Section>
  72.             <H2>
  73.               <FormattedMessage {...messages.loginpage} />
  74.             </H2>
  75.           </Section>        
  76.           <FormGroup controlId="username" bsSize="large">
  77.             <ControlLabel>Email</ControlLabel>
  78.             <FormControl
  79.               autoFocus
  80.               type="username"
  81.               autoComplete="username"
  82.               placeholder="your sign in email"
  83.               value={this.props.login_username}
  84.               onChange={this.props.onChangeUsername} />
  85.           </FormGroup>
  86.           <FormGroup controlId="password" bsSize="large">
  87.             <ControlLabel>Password</ControlLabel>
  88.             <FormControl
  89.               autoComplete="current-password"
  90.               value={this.props.login_password}
  91.               placeholder="*************************"
  92.               onChange={this.props.onChangePassword}
  93.               type="password" />
  94.               <HelpBlock>Make sure you don't have CAPSLOCK on.</HelpBlock>
  95.          </FormGroup>
  96.          <LoadingButton
  97.            block
  98.            bsSize="large"
  99.            disabled={!this.validateForm()}
  100.            type="submit"
  101.            isLoading={this.props.login_isLoading}
  102.            text="LOGIN"
  103.            loadingText="Logging in…" />
  104.          <div style={{padding: '8px'}}>Not a user? <Link to="/signup">Signup</Link></div>
  105.        </LoginDiv>
  106.        <FacebookDiv>
  107.          <FacebookLoginButton text="LOGIN WITH FACEBOOK" onClick={() => this.props.onChangeLoginType('Facebook'), this.props.onSubmitLogin} />
  108.        </FacebookDiv>
  109.        <GoogleDiv>
  110.          <GoogleLoginButton text="LOGIN WITH GOOGLE" onClick={() => this.props.onChangeLoginType('Google'), this.props.onSubmitLogin} />
  111.        </GoogleDiv>
  112.      </LoginWrapper>
  113.    );
  114.  }
  115. }
  116.  
  117. LoginPage.propTypes = {
  118.  login_error: React.PropTypes.oneOfType([
  119.    React.PropTypes.object,
  120.    React.PropTypes.bool,
  121.  ]),
  122.  login_username: React.PropTypes.string,
  123.  login_password: React.PropTypes.string,
  124.  login_isLoading: React.PropTypes.bool,
  125.  login_type: React.PropTypes.string,
  126.  onChangeUsername: React.PropTypes.func,
  127.  onChangePassword: React.PropTypes.func,
  128.  onChangeIsLoading: React.PropTypes.func,
  129.  onChangeLoginType: React.PropTypes.func,
  130.  onChangeError: React.PropTypes.func,
  131. };
  132.  
  133. export function mapDispatchToProps(dispatch) {
  134.  return {
  135.    onChangeUsername: (evt) => dispatch(changeUsername(evt.target.value)),
  136.    onChangePassword: (evt) => dispatch(changePassword(evt.target.value)),    
  137.    onChangeIsLoading: (evt) => dispatch(changeIsLoading(evt.target.value)),
  138.    onChangeError: (evt) => dispatch(changeError(evt.target.value)),
  139.    onChangeLoginType: (evt) => dispatch(changeLoginType(evt)),
  140.    onSubmitLogin: (evt) => {
  141.      if (evt !== undefined && evt.preventDefault) evt.preventDefault();
  142.      dispatch(getToken());
  143.    },
  144.  };
  145. }
  146.  
  147. const mapStateToProps = createStructuredSelector({
  148.  login_username: makeSelectUsername(),
  149.  login_password: makeSelectPassword(),
  150.  login_isLoading: makeSelectIsLoading(),
  151.  login_type: makeSelectLoginType()
  152. });
  153.  
  154. const withConnect = connect(mapStateToProps, mapDispatchToProps);
  155. const withReducer = injectReducer({ key: 'login', reducer });
  156. const withSaga = injectSaga({ key: 'login', saga });
  157.  
  158. // Wrap the component to inject dispatch and state into it
  159. export default compose(
  160.  withReducer,
  161.  withSaga,
  162.  withConnect,
  163. )(LoginPage);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement