Form.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import React, { Component } from "react";
  2. import "./Form.css";
  3. import { api } from "./api";
  4. class Form extends Component {
  5. state = {
  6. name: "",
  7. email: "",
  8. number: "",
  9. optIn: true,
  10. };
  11. handleChange = (str) => {
  12. return e =>
  13. this.setState({ [str]: e.currentTarget.value });
  14. };
  15. handleSubmit = (e) => {
  16. e.preventDefault();
  17. api.addUser(this.state.name, this.state.email, this.state.number);
  18. };
  19. handlePromotionClick = () => {
  20. this.setState({ optIn: !this.state.optIn });
  21. };
  22. render() {
  23. return (
  24. // The data-testid attributes give us more security for tests, than those use for styling.
  25. <form data-testid="addUserForm" onSubmit={this.handleSubmit}>
  26. <h2>Request information</h2>
  27. <input type="text" name="name" data-testid="name"
  28. onChange={this.handleChange("name")}
  29. placeholder="Name"
  30. value={this.state.name} />
  31. <input type="text" name="email" data-testid="email"
  32. onChange={this.handleChange("email")}
  33. placeholder="Email"
  34. value={this.state.email} />
  35. <input type="text" name="number" data-testid="number"
  36. onChange={this.handleChange("number")}
  37. placeholder="Number"
  38. value={this.state.number} />
  39. <div className="form-item">
  40. <input type="checkbox" name="promo" id="promo" data-testid="checked"
  41. checked={this.state.optIn}
  42. onClick={this.handlePromotionClick}/>
  43. <label data-testid="promotionsP" className="promotions" htmlFor="promo">Receive promotions</label>
  44. </div>
  45. <button type="submit" data-testid="submitButton">Submit</button>
  46. </form>
  47. );
  48. }
  49. }
  50. export {
  51. Form
  52. };