Untitled

 avatar
unknown
jsx
a year ago
2.7 kB
2
Indexable
const [disabledSubmitBtn, setDisabledSubmitBtn] = useState(false);
const formik = useFormik({
    initialValues: {
      fullName: '',
      email: '',
      detail: '',
    },
    validationSchema: Yup.object().shape({
      fullName: Yup.string()
        .matches(
          /^[\u0600-\u06FF\s]+$/,
          'لطفا نام و خانوادگی خود را به فارسی بنویسید!',
        )
        .min(4, 'نام و نام خانوادگی باید حداقل 4 کاراکتر باشد!')
        .max(30, 'نام و نام خانوادگی میتواند حداکثر 30 کاراکتر باشد!')
        .required('این فیلد اجباری است!'),
      email: Yup.string()
        .email('لطفا یک ایمیل معتبر وارد کنید!')
        .required('این فیلد اجباری است!'),,
    }),
    onSubmit: async (values) => {
      setDisabledSubmitBtn(true);
      // fetch api ...
    },
});

return (
    <form
        onSubmit={formik.handleSubmit}
    >
        <div>
            <label>نام و نام خانوادگی *</label>
            <input
              spellCheck={false}
              disabled={disabledSubmitBtn}
              type={'text'}
              {...formik.getFieldProps('fullName')}
              className={{
                formik.errors.fullName && formik.touched.fullName
                  ? '!border-red-400'
                  : 'focus-within:border-[#adadad]'
              }
            />
            {formik.errors.fullName && formik.touched.fullName ? (
              <p>
                {formik.errors.fullName}
              </p>
            ) : null}
        </div>
        <div>
            <div>
              <label className="pr-2">ایمیل *</label>
              <input
                type={'text'}
                spellCheck={false}
                {...formik.getFieldProps('email')}
                className={{
                  formik.errors.email && formik.touched.email
                    ? '!border-red-400'
                    : 'focus-within:border-[#adadad]'
                }
              />
              {formik.errors.email && formik.touched.email ? (
                <p>
                  {formik.errors.email}
                </p>
              ) : null}
            </div>
        </div>
        <button
            type="submit"
            disabled={disabledSubmitBtn}
            className={{
              disabledSubmitBtn ? 'opacity-90' : 'opacity-100'
            }
          >
            {disabledSubmitBtn ? (
              <ThreeDots width="40" radius="9" color="#fff" />
            ) : (
              'ثبت و ارسال'
            )}
        </button>
    </form>    
)