Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. const AuthForm = ({ buttonText, formType, onAuth, history, ...props }) => {
  2.  
  3. const submitData = () => {
  4. onAuth(formType, values, history);
  5. }
  6.  
  7. const {
  8. values,
  9. errors,
  10. handleChange,
  11. handleSubmit,
  12. } = useForm(submitData, validate);
  13.  
  14. return (
  15. <Form onSubmit={handleSubmit}>
  16. <FlexContainer flexDirection="column" justify="space-between" >
  17. <FlexContainer flexDirection="column" >
  18. <TextInput
  19. id="email"
  20. name="email"
  21. onChange={handleChange}
  22. value={values.email || ''}
  23. placeholder="Email"
  24. onFocus={(e) => e.target.placeholder = ""}
  25. onBlur={(e) => e.target.placeholder = "Email"}
  26. />
  27. {errors.email && <ErrorMessage>{errors.email}</ErrorMessage>}
  28. <TextInput
  29. id="password"
  30. name="password"
  31. onChange={handleChange}
  32. type="password"
  33. value={values.password || ''}
  34. placeholder="Password"
  35. onFocus={(e) => e.target.placeholder = ""}
  36. onBlur={(e) => e.target.placeholder = "Password"}
  37. />
  38. {errors.password && <ErrorMessage>{errors.password}</ErrorMessage>}
  39. </FlexContainer>
  40. <FlexContainer flexDirection='column' >
  41. <Button type="submit" buttonText={buttonText} buttonSize="large"/>
  42. </FlexContainer>
  43. </FlexContainer>
  44. </Form>
  45. )
  46. };
  47. ...
  48. function validate(values) {
  49. let errors = {};
  50. if (!values.email) {
  51. errors.email = 'Email address is required';
  52. } else if (!/^([a-zA-Z0-9_-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([a-zA-Z0-9-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$/.test(values.email)) {
  53. errors.email = 'Email address is invalid';
  54. }
  55. if (!values.password) {
  56. errors.password = 'Password is required';
  57. } else if (values.password.length < 8) {
  58. errors.password = 'Password must be 8 or more characters';
  59. }
  60. return errors;
  61. };
  62.  
  63. export default AuthForm;
  64.  
  65. const useForm = (callback, validate) => {
  66.  
  67. const [values, setValues] = useState({});
  68. const [errors, setErrors] = useState({});
  69. const [isSubmitting, setIsSubmitting] = useState(false);
  70.  
  71. useEffect(() => {
  72. if (Object.keys(errors).length === 0 && isSubmitting) {
  73. callback();
  74. }
  75. else if (isSubmitting) {
  76. setValues({});
  77. }
  78. }, [errors]);
  79.  
  80. const handleSubmit = (e) => {
  81. e.preventDefault();
  82. setErrors(validate(values));
  83. setIsSubmitting(true);
  84. };
  85.  
  86. const handleChange = (event) => {
  87. event.persist();
  88. setValues(values => ({ ...values, [event.target.name]: event.target.value }));
  89. };
  90.  
  91. return {
  92. handleChange,
  93. handleSubmit,
  94. values,
  95. errors,
  96. }
  97. };
  98.  
  99. export default useForm;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement