Advertisement
Guest User

Untitled

a guest
Mar 19th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. import React, { Component } from 'react'
  2. import './style.scss'
  3.  
  4. export default class Form extends Component {
  5. constructor() {
  6. super()
  7. this.state = {
  8. sentData: false
  9. }
  10. this.validateFields = this.validateFields.bind(this)
  11. }
  12.  
  13. validateEmail(email) {
  14. var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  15. return re.test(email);
  16. }
  17.  
  18. validateFields(username, email, password, confirmationPassword) {
  19.  
  20. if (!(username && email && password && confirmationPassword)) {
  21. this.setState({ error: 'one or more fields are empty' })
  22. return false;
  23. } else if (!this.validateEmail(email)) {
  24. this.setState({ error: 'email format is not correct' })
  25. return false;
  26. } else if (password !== confirmationPassword) {
  27. this.setState({ error: 'passwords don\'t match' })
  28. return false;
  29. }
  30.  
  31. return true;
  32. }
  33.  
  34. fetchData() {
  35. var data = []
  36.  
  37. var elements = this.form.querySelectorAll('input:not(*[type="submit"])')
  38.  
  39. elements.forEach(({ name, value, type, checked }) => {
  40. data[name] = value
  41. })
  42.  
  43. return data
  44. }
  45.  
  46. send(data){
  47. //send data algorithm
  48. this.setState({sentData: true})
  49. }
  50.  
  51. onSubmit(e) {
  52. e.preventDefault()
  53.  
  54. var data = this.fetchData()
  55. var email = data.email
  56. var password = data.password
  57. var confirmationPassword = data['password-confirmation']
  58. var username = data.username
  59.  
  60.  
  61. if (this.validateFields(username, email, password, confirmationPassword)) {
  62. this.send(data)
  63. }
  64. }
  65.  
  66. render() {
  67. return (
  68. this.state.sentData ?
  69. <h1 className="sent">Sent</h1>
  70. :
  71. <div className="form-wrapper">
  72. <h1>A beautiful form</h1>
  73. <form onSubmit={this.onSubmit.bind(this)} ref={e => this.form = e}>
  74. <div className="content">
  75. <h4 className="error">{this.state.error}</h4>
  76. <input type="text" name="username" placeholder="username" />
  77. <input type="text" name="email" placeholder="email"/>
  78. <input type="password" name="password" placeholder="password" />
  79. <input type="password" name="password-confirmation" placeholder="password confirmation" />
  80. <input type="submit" />
  81. </div>
  82. </form>
  83. </div>
  84. )
  85. }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement