Advertisement
Guest User

Untitled

a guest
Nov 12th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. import React from 'react';
  2. import timezones from '../../data/timezones';
  3. import map from 'lodash/map';
  4. import axios from 'axios';
  5. import classnames from 'classnames';
  6. import validateInput from '../../../server/shared/validations/signup';
  7. import TextFieldGroup from '../common/TextFieldGroup';
  8. //import {browserHistory} from 'react-router';
  9.  
  10. class SignupForm extends React.Component{
  11. constructor(props){
  12. super(props);
  13. this.state = {
  14. username: '',
  15. email: '',
  16. password: '',
  17. passwordConfirmation: '',
  18. timezone: '',
  19. errors: {},
  20. isLoading: false
  21.  
  22. }
  23.  
  24. this.onChange = this.onChange.bind(this);
  25. this.onSubmit = this.onSubmit.bind(this);
  26. }
  27.  
  28. onChange(e){
  29.  
  30. this.setState({
  31. [e.target.name]: e.target.value
  32. })
  33. }
  34.  
  35. isValid(){
  36. const { errors, isValid } = validateInput(this.state);
  37.  
  38. if(!isValid){
  39. this.setState({ errors });
  40. }
  41.  
  42. return isValid;
  43. }
  44.  
  45. onSubmit(e){
  46.  
  47. e.preventDefault();
  48.  
  49. if(this.isValid()){
  50. this.setState({ errors: {}, isLoading: true });
  51. this.props.userSignupRequest(this.state).then(
  52. () => {
  53. this.props.addFlashMessage({
  54. type: 'success',
  55. text: 'You signed up successfully, Welcome!'
  56. });
  57. //browserHistory.push('/');
  58. this.context.router.push('/');
  59. },
  60. ({ data }) => this.setState({ errors: data, isLoading: false })
  61. );
  62. }
  63.  
  64. //axios.post('/api/users', {user: this.state});
  65. }
  66. render(){
  67. const {errors} = this.state;
  68. const options = map(timezones, (val, key) =>
  69. <option key={val} value={val}>{key}</option>)
  70. return(
  71. <form onSubmit={this.onSubmit}>
  72. <h1>Join our community!</h1>
  73.  
  74. <TextFieldGroup
  75. error={errors.username}
  76. label="Username"
  77. onChange={this.onChange}
  78. value={this.state.username}
  79. field="username"
  80. />
  81.  
  82. <TextFieldGroup
  83. error={errors.email}
  84. label="Emal"
  85. onChange={this.onChange}
  86. value={this.state.email}
  87. field="email"
  88. />
  89.  
  90. <TextFieldGroup
  91. error={errors.password}
  92. label="Password"
  93. onChange={this.onChange}
  94. value={this.state.password}
  95. field="password"
  96. type="password"
  97. />
  98.  
  99. <TextFieldGroup
  100. error={errors.passwordConfirmation}
  101. label="Password Confirmation"
  102. onChange={this.onChange}
  103. value={this.state.passwordConfirmation}
  104. field="passwordConfirmation"
  105. type="password"
  106. />
  107.  
  108. <div className={classnames("form-group", {'has-error': errors.timezone })}>
  109. <label className="control-label">Timezone</label>
  110. <select
  111. className="form-control"
  112. name="timezone"
  113. onChange={this.onChange}
  114. value={this.state.timezone}
  115. >
  116. <option value="" disabled>Choose Your Timezone</option>
  117. {options}
  118. </select>
  119. </div>
  120. {errors.timezone && <span className="help-block">{errors.timezone}</span>}
  121.  
  122. <div className="form-group">
  123. <button disabled={this.state.isLoading} className="btn btn-primary btn-lg">
  124. Signup
  125. </button>
  126. </div>
  127. </form>
  128. )
  129. }
  130. }
  131.  
  132. SignupForm.propTypes = {
  133. userSignupRequest: React.PropTypes.func.isRequired,
  134. addFlashMessage: React.PropTypes.func.isRequired
  135. }
  136.  
  137. SignupForm.contextTypes = {
  138. router: React.PropTypes.object.isRequired
  139. }
  140.  
  141. export default SignupForm;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement