Guest User

Untitled

a guest
May 24th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.56 KB | None | 0 0
  1. import React from 'react';
  2. import Dropdown from 'react-dropdown'
  3. import FormInput from '../FormInput/FormInput';
  4. import FormCheckbox from '../FormCheckbox/FormCheckbox';
  5. import './RegistrationForm.css'
  6. import 'react-dropdown/style.css'
  7.  
  8. export default class RegistrationForm extends React.Component {
  9. constructor(props) {
  10. super(props);
  11. this.state={
  12. // handles errors
  13. error_business_name: false,
  14. error_business_email: false,
  15. error_username: false,
  16. error_password: false,
  17. error_type: false,
  18. error_terms: false,
  19. error_policy: false,
  20. // stores form values
  21. email: null,
  22. business_name: null,
  23. username: null,
  24. password: null,
  25. website: null,
  26. terms: false,
  27. policy: false
  28. }
  29. }
  30.  
  31. handleSubmit(e) {
  32. e.preventDefault();
  33. // validation - promise needed to ensure errors are set before they are checked
  34. const validate = new Promise((resolve, reject) => {
  35. this.state.email ? this.setState({ error_business_email: false }) : this.setState({ error_business_email: true });
  36. this.state.business_name ? this.setState({ error_business_name: false }) : this.setState({ error_business_name: true });
  37. this.state.username ? this.setState({ error_username: false }) : this.setState({ error_username: true });
  38. this.state.password ? this.setState({ error_password: false }) : this.setState({ error_password: true });
  39. this.state.type ? this.setState({ error_type: false }) : this.setState({ error_type: true });
  40. this.state.terms ? this.setState({ error_terms: false }) : this.setState({ error_terms: true });
  41. this.state.policy ? this.setState({ error_policy: false }) : this.setState({ error_policy: true });
  42. resolve();
  43. })
  44. validate
  45. .then(() => {
  46. if(this.state.error_business_email || this.state.error_business_name || this.state.error_username || this.state.error_password || this.state.error_type || this.state.error_terms || this.state.error_policy ) {
  47. return;
  48. } else {
  49. // stand-in for validated submission
  50. console.log({
  51. email: this.state.email,
  52. business_name: this.state.business_name,
  53. username: this.state.username,
  54. password: this.state.password,
  55. type: this.state.type,
  56. website: this.state.website
  57. })
  58. // stand-in purposes only
  59. alert("Your form was submitted");
  60. }
  61. })
  62. }
  63.  
  64. render() {
  65. return (
  66. <main role="main" className="RegistrationForm">
  67. <img alt="Logo" src={require("../../images/logo.png")} />
  68. <form onSubmit={e => this.handleSubmit(e)}>
  69. <h1>LET'S GET STARTED</h1>
  70. <FormInput
  71. value="business_name"
  72. label="Business Name"
  73. onChange={event => this.setState({ business_name: event.target.value })}
  74. error={this.state.error_business_name}
  75. errorMessage="Please enter a valid business address"
  76. />
  77. <FormInput
  78. value="business_email"
  79. label="Business Email"
  80. onChange={event => this.setState({ email: event.target.value })}
  81. error={this.state.error_business_email}
  82. errorMessage="Please enter a valid business name"
  83. />
  84. <FormInput
  85. value="username"
  86. label="Create a Username"
  87. onChange={event => this.setState({ username: event.target.value })}
  88. error={this.state.error_username}
  89. errorMessage="Please enter a valid username"
  90. />
  91. <FormInput
  92. value="password"
  93. label="Password"
  94. onChange={event => this.setState({ password: event.target.value })}
  95. error={this.state.error_password}
  96. errorMessage="Please enter a valid password"
  97. subLabel="6 characters | 1 uppercase | 1 lowercase | 1 digit"
  98. type="password"
  99. />
  100. <FormInput
  101. value="website"
  102. label="Website"
  103. onChange={event => this.setState({ website: event.target.value })}
  104. subLabel="(Optional)"
  105. />
  106. <section className={this.state.error_type ? "error" : ""}>
  107. <label htmlFor="type">Type of Business</label>
  108. <Dropdown
  109. className={this.state.error_type ? "dropdown error-dropdown" : "dropdown"}
  110. options={["Accounting Firm", "Law Office", "Marketing Agency", "Other"]}
  111. onChange={e => this.setState({ type: e.value })}
  112. value={this.state.type}
  113. placeholder="Select your Business" id="type"
  114. />
  115. <p className="error-message">Please select a valid business type</p>
  116. </section>
  117. <FormCheckbox
  118. title="Terms of Service"
  119. topic="terms of service"
  120. onChange={event => this.setState({ terms: event.target.checked })}
  121. error={this.state.error_terms}
  122. errorMessage="Please agree to the terms of service"
  123. />
  124. <FormCheckbox
  125. title="Privacy Policy"
  126. topic="privacy policy"
  127. onChange={event => this.setState({ policy: event.target.checked })}
  128. error={this.state.error_policy}
  129. errorMessage="Please agree to our privacy policy"
  130. />
  131. <button>REGISTER</button>
  132. </form>
  133. </main>
  134. )
  135. }
  136. }
  137.  
  138. import React from 'react';
  139. import './FormInput.css';
  140.  
  141. const FormInput = props => {
  142. return (
  143. <section className={props.error ? "error" : ""}>
  144. <label htmlFor={props.value}>{props.label}<span className="sub-label">{props.subLabel}</span></label>
  145. <input
  146. className="text-input"
  147. id={props.value}
  148. onChange={event => props.onChange(event)}
  149. type={props.type}
  150. />
  151. <p className="error-message">{props.errorMessage}</p>
  152. </section>
  153. )
  154. }
  155.  
  156. export default FormInput;
Add Comment
Please, Sign In to add comment