Advertisement
Guest User

formik form

a guest
Jul 19th, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React from "react";
  2.  
  3. import { withFormik } from "formik";
  4. import * as yup from "yup";
  5. import axios from "axios";
  6.  
  7. const RegForm = ({
  8.   values,
  9.   errors,
  10.   touched,
  11.   handleChange,
  12.   handleBlur,
  13.   handleSubmit,
  14.   isSubmiting,
  15. }) => {
  16.   return (
  17.     <div className="signup">
  18.       <form onSubmit={handleSubmit}>
  19.         <div className="form-group">  
  20.           <label>
  21.             Ник*:
  22.             <input
  23.               type="text"
  24.               name="username"
  25.               onChange={handleChange}
  26.               onBlur={handleBlur}
  27.               value={values.username}
  28.               placeholder="Username"
  29.             />
  30.           </label>
  31.           {touched.username &&
  32.             errors.username && <p className="error">{errors.username}</p>}
  33.         </div>
  34.  
  35.         <div className="form-group">
  36.           <label>
  37.             Имя*:
  38.             <input
  39.               type="text"
  40.               name="screenname"
  41.               onChange={handleChange}
  42.               onBlur={handleBlur}
  43.               value={values.screenname}
  44.               placeholder="screenname"
  45.             />
  46.           </label>
  47.           {touched.screenname &&
  48.             errors.screenname && <p className="error">{errors.screenname}</p>}
  49.         </div>
  50.  
  51.         <div className="form-group">
  52.           <label>
  53.             Email*:
  54.             <input
  55.               type="text"
  56.               name="email"
  57.               onChange={handleChange}
  58.               onBlur={handleBlur}
  59.               value={values.email}
  60.               placeholder="Email"
  61.             />
  62.           </label>
  63.           {touched.email &&
  64.             errors.email && <p className="error">{errors.email}</p>}
  65.         </div>
  66.  
  67.         <div className="form-group">
  68.           <label>
  69.             Пароль*:
  70.             <input
  71.               type="password"
  72.               name="password"
  73.               onChange={handleChange}
  74.               onBlur={handleBlur}
  75.               value={values.password}
  76.               placeholder="Пароль"
  77.             />
  78.           </label>
  79.           {touched.password &&
  80.             errors.password && <p className="error">{errors.password}</p>}
  81.         </div>
  82.         <div className="form-group">
  83.           <label>
  84.             Подтверждение пароля*:
  85.             <input
  86.               type="password"
  87.               name="passwordConfirm"
  88.               onChange={handleChange}
  89.               onBlur={handleBlur}
  90.               value={values.passwordConfirm}
  91.               placeholder="Подтвердите Пароль"
  92.             />
  93.           </label>
  94.           {touched.passwordConfirm &&
  95.             errors.passwordConfirm && (
  96.               <p className="error">{errors.passwordConfirm}</p>
  97.             )}
  98.         </div>
  99.         <button type="submit" disabled={isSubmiting}>
  100.           Отправить
  101.         </button>
  102.       </form>
  103.     </div>
  104.   );
  105. };
  106.  
  107. export default withFormik({
  108.   mapPropsToValues: ({ values }) => ({
  109.     username: "",
  110.     screenname: "",
  111.     email: "",
  112.     password: "",
  113.     passwordConfirm: "",
  114.   }),
  115.   validationSchema: yup.object().shape({
  116.     username: yup.string().required("Поле не заполнено"),
  117.     screenname: yup.string().required("Поле не заполнено"),
  118.     email: yup
  119.       .string()
  120.       .email("Неверный формат")
  121.       .required("Поле не заполнено"),
  122.     password: yup
  123.       .string()
  124.       .min(5, "Пароль короткий")
  125.       .required("Поле не заполнено"),
  126.     passwordConfirm: yup
  127.       .string()
  128.       .oneOf([yup.ref("password")], "Пароли не совпадает")
  129.       .required("Поле не заполнено"),
  130.   }),
  131.   handleSubmit: (values, { props, setErrors }) => {
  132.     axios
  133.       .post("/api/v1/signup", values)
  134.       .then(res => {
  135.          // redirect if success
  136.          props.onSubmit()
  137.        })
  138.       .catch(({ response }) => {
  139.         const { errors } = response.data;
  140.         setErrors(errors);
  141.       });
  142.   },
  143. })(RegForm);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement