Валидация формы изменения данных с помощью yup

У меня есть личная страница пользователя в которой можно изменять данные например имя или дату рождения. Мне нужно свалидировать два инпута, пароль и повторите пароль, если оба инпута пусты то он должен сабмитеться если в каком-то из них есть какой-то символ то должна срабатывать валидация

const ProfileUser = ({ userData }: IProfileUser) => {
    const {
        register,
        handleSubmit,
        formState: { errors },
    } = useForm<Inputs>({
        defaultValues: {
            fullName: userData.name,
            email: userData.email,
            phone: userData.phone,
            date: userData.date,
        },
        resolver: yupResolver(changeDataUserSchema),
    });

    const onSubmit: SubmitHandler<Inputs> = data => {
        console.log(data);
    };

    return (
        <form onSubmit={handleSubmit(onSubmit)}>
            <p className="text-[14px]">Ваш профиль</p>
            <Title className="text-[32px] font-extrabold mb-3">Базовые настройки</Title>

            <div className="mb-10">
                <p className="text-[13px] mb-4 font-bold">изменение пароля</p>
                <Input
                    {...register('password')}
                    className="transition rounded py-6 px-5 mb-2"
                    placeholder="Новый пароль"
                    type="password"
                />
                <Input
                    {...register('repeatPassword')}
                    className="transition rounded py-6 px-5 mb-2"
                    placeholder="Повторите новый пароль"
                    type="password"
                />
            </div>

            <Button type="submit" variant="blue">
                Редактировать
            </Button>
        </form>
    );
};

код Yup

export const changeDataUserSchema = yup.object().shape({
    fullName: yup.string().min(4, AppErrors.minLengthName),
    date: yup.string(),
    phone: yup.string().min(8, AppErrors.minLengthName),
    email: yup.string().email(AppErrors.InvalidEmail),
    password: yup
        .string()
        .min(8, AppErrors.minLength)
        .matches(
            /^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[a-zA-Z!#$%&? "])[a-zA-Z0-9!@#$%&?]{6,20}$/,
            AppErrors.InvalidPassword
        ),
    repeatPassword: yup.string().oneOf([yup.ref('password')], 'Пароли не совпадают'), // Сравнение с полем password
});


Ответы (0 шт):