Advertisement
Guest User

Untitled

a guest
Mar 14th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.09 KB | None | 0 0
  1. import React, { PropTypes } from 'react';
  2. import { reduxForm } from 'redux-form';
  3.  
  4. // Fields
  5. const fields = ['username', 'email', 'emailAgain', 'password', 'passwordAgain'];
  6.  
  7. // Validation Function
  8. const validate = values => {
  9.  
  10. // Errors object is empty at first.
  11. const errors = {};
  12.  
  13. // Username
  14. if (!values.username) {
  15. errors.username = "Required";
  16. } else if (values.username.length < 3 || values.username.length > 15) {
  17. errors.username = "Must be between 3 and 15 characters in length"
  18. }
  19.  
  20. // E-mail (and Again)
  21. if (!values.email) {
  22. errors.email = "Required";
  23. } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)) {
  24. errors.email = "Invalid email address"
  25. }
  26.  
  27. if (!values.emailAgain) {
  28. errors.emailAgain = "Required";
  29. } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.emailAgain)) {
  30. errors.emailAgain = "Invalid email address"
  31. }
  32.  
  33. if (!(values.email == values.emailAgain)) {
  34. errors.email = "Email fields must match"
  35. }
  36.  
  37. // Password
  38. if (!values.password) {
  39. errors.password = "Required";
  40. } else if (values.password.length < 8) {
  41. errors.password = "Must be at least 8 characters in length"
  42. } else if (!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/.test(values.password)) {
  43. errors.password = "Must contain one uppercase letter, one lowercase letter, and one number."
  44. }
  45.  
  46. if (!values.passwordAgain) {
  47. errors.passwordAgain = "Required";
  48. } else if (values.passwordAgain.length < 8) {
  49. errors.passwordAgain = "Must be at least 8 characters in length"
  50. } else if (!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/.test(values.passwordAgain)) {
  51. errors.passwordAgain = "Must contain one uppercase letter, one lowercase letter, and one number."
  52. }
  53.  
  54. if (values.password != values.passwordAgain) {
  55. errors.password = "Password fields must match"
  56. }
  57.  
  58. console.log(errors);
  59. return errors;
  60.  
  61. }
  62.  
  63. let fieldStyle = field => {
  64. if (field.touched && field.error) {
  65. return "field error"
  66. } else {
  67. return "field"
  68. }
  69. }
  70.  
  71. let dispErrors = field => {
  72. if (field.touched && field.error) {
  73. return (<div className="ui basic red pointing prompt label transition visible">{field.error}</div>)
  74. }
  75. }
  76.  
  77. let RegisterForm = React.createClass({
  78.  
  79. propTypes: {
  80. handleSubmit: PropTypes.func.isRequired
  81. },
  82.  
  83. render() {
  84.  
  85. const { fields: { username, email, emailAgain, password, passwordAgain }, handleSubmit } = this.props;
  86.  
  87. return (
  88. <div className="row">
  89. <div className="col-sm-6 col-sm-offset-3">
  90. <div className="auth-box">
  91. <div className="ui raised segment">
  92. <form className="ui form">
  93. <div className={fieldStyle(username)}>
  94. <label>Username</label>
  95. <input type="text" {...username} />
  96. {dispErrors(username)}
  97. </div>
  98. <div className={fieldStyle(email)}>
  99. <label>E-mail</label>
  100. <input type="text" {...email} />
  101. {dispErrors(email)}
  102. </div>
  103. <div className={fieldStyle(emailAgain)}>
  104. <label>E-mail (Again)</label>
  105. <input type="text" {...emailAgain} />
  106. {dispErrors(emailAgain)}
  107. </div>
  108. <div className={fieldStyle(password)}>
  109. <label>Password</label>
  110. <input type="password" {...password} />
  111. {dispErrors(password)}
  112. </div>
  113. <div className={fieldStyle(passwordAgain)}>
  114. <label>Password (Again)</label>
  115. <input type="password" {...passwordAgain} />
  116. {dispErrors(passwordAgain)}
  117. </div>
  118. <button className="ui button" type="submit" onClick={handleSubmit}>
  119. Register Account
  120. </button>
  121. </form>
  122. </div>
  123. </div>
  124. </div>
  125. </div>
  126. );
  127.  
  128. }
  129.  
  130. });
  131.  
  132. RegisterForm = reduxForm({
  133. form: 'register',
  134. fields: fields,
  135. validate,
  136. onSubmit: (values) => {
  137. console.log(values);
  138. }
  139. })(RegisterForm);
  140.  
  141. export default RegisterForm;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement