Advertisement
Guest User

Untitled

a guest
Oct 11th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. import css from './login.css';
  2.  
  3. import logo from './images/logo.png';
  4. import bgImage from './images/old.map.jpg';
  5.  
  6. import React, {Component, PropTypes} from 'react';
  7.  
  8. export default class Login extends Component {
  9.  
  10. handleLoginClick(e) {
  11. e.preventDefault();
  12.  
  13. const email = this.email.value.trim();
  14. const password = this.password.value.trim();
  15.  
  16. this.props.loginActions.loginUser(email, password);
  17. }
  18.  
  19. render() {
  20.  
  21. const inputs = [
  22. {
  23. name: 'email',
  24. inputType: 'email',
  25. validationState: 'isEmailValid',
  26. iconClass: 'fa fa-envelope-o'
  27. },
  28. {
  29. name: 'password',
  30. inputType: 'password',
  31. validationState: 'isPasswordValid',
  32. iconClass: 'fa fa-key'
  33. }
  34. ];
  35.  
  36. const renderedInputs = inputs.map((input) => {
  37.  
  38. const isValidationRun = this.props.validation.isValidationStarted;
  39. const isFieldValid = this.props.validation[input.validationState];
  40.  
  41. const ref = (ref) => this[input.name] = ref;
  42.  
  43. let groupClassName = 'input-group row ';
  44. let inputClassName = 'form-control ';
  45. let iconBlockClass = 'input-group-addon ';
  46. if (isValidationRun) {
  47. groupClassName += isFieldValid ? 'has-success' : 'has-danger';
  48. inputClassName += isFieldValid ? 'form-control-success' : 'form-control-danger';
  49. }
  50.  
  51. return (
  52. <div className={groupClassName}>
  53. <div className={iconBlockClass}><i className={input.iconClass}></i></div>
  54. <input className={inputClassName} type={input.inputType} ref={ref} placeholder={input.name}/>
  55. </div>
  56. )
  57. }
  58. );
  59.  
  60. let errorTemplate = '';
  61. if (this.props.errorMessage) {
  62. errorTemplate = (
  63. <div className="alert alert-danger" role="alert">
  64. { this.props.errorMessage }
  65. </div>
  66. )
  67. }
  68.  
  69. let loader = '';
  70. if (this.props.isSendingRequest) {
  71. loader = (
  72. <img src="/loader.gif"/>
  73. );
  74. }
  75.  
  76. return (
  77.  
  78. <div className="container theme-login main">
  79. <div id="bg">
  80. <img src={bgImage} alt="background image"/>
  81. </div>
  82.  
  83. <div className="row">
  84. <div className="col-xs"></div>
  85. <div className="col-xs-10 col-sm-8 col-md-6 col-lg-5 login-form card card-block">
  86. <div className="row">
  87. <div className="col-sm-12 pull-xs-center">
  88. <h3 className="card-title text-xs-center"><img src={logo} alt="Family Tree Maker"/></h3>
  89. </div>
  90.  
  91. <div className="col-sm-12 col-xs-12">
  92. <form>
  93. { renderedInputs }
  94. <div className="input-group row">
  95. { errorTemplate }
  96. </div>
  97.  
  98. <div className="input-group row flex-items-xs-middle">
  99. <div className="form-check">
  100. <label className="form-check-label pull-xs-left">
  101. <input className="form-check-input" type="checkbox"/> Keep me logged in
  102. </label>
  103. </div>
  104. <div className="loader-button-block pull-right">
  105. { loader }
  106. <button className='btn btn-success pull-xs-right' type='button'
  107. onClick={this.handleLoginClick.bind(this)}>Login
  108. </button>
  109. </div>
  110. </div>
  111.  
  112. </form>
  113. </div>
  114. </div>
  115. </div>
  116. <div className="col-xs"></div>
  117. </div>
  118.  
  119. </div>
  120. )
  121. }
  122. }
  123.  
  124. Login.propTypes = {
  125. loginActions: PropTypes.shape({
  126. loginUser: PropTypes.func.isRequired,
  127. logoutUser: PropTypes.func.isRequired
  128. }).isRequired,
  129.  
  130. isSendingRequest: PropTypes.bool.isRequired,
  131. errorMessage: PropTypes.string.isRequired,
  132.  
  133. formData: PropTypes.shape({
  134. email: PropTypes.string.isRequired,
  135. password: PropTypes.string.isRequired
  136. }).isRequired,
  137. validation: PropTypes.shape({
  138. isValidationStarted: PropTypes.bool.isRequired,
  139. isEmailValid: PropTypes.bool.isRequired,
  140. isPasswordValid: PropTypes.bool.isRequired
  141. }).isRequired
  142. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement