From fe70f2f1c13a1f6bfc4a0d5a50d439da3675d719 Mon Sep 17 00:00:00 2001 From: Vinicius Souza Date: Mon, 28 Oct 2024 15:05:11 -0300 Subject: [PATCH] feat: implement sign up form validation with yup --- src/screens/SignUp.tsx | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/screens/SignUp.tsx b/src/screens/SignUp.tsx index 3cd4556..ebfa986 100644 --- a/src/screens/SignUp.tsx +++ b/src/screens/SignUp.tsx @@ -1,6 +1,8 @@ import { Center, Heading, Image, ScrollView, Text, VStack } from '@gluestack-ui/themed'; import { useNavigation } from '@react-navigation/native'; import { Controller, useForm } from 'react-hook-form'; +import * as yup from 'yup'; +import { yupResolver } from '@hookform/resolvers/yup'; import BackgroundImg from '@assets/background.png'; import Logo from '@assets/logo.svg'; @@ -10,13 +12,23 @@ import { AuthNavigatorRoutesProps } from '@routes/auth.routes'; import { Input } from '@components/Input'; import { Button } from '@components/Button'; -type FormDataProps = { +type FormData = { name: string; email: string; password: string; confirmPassword: string; }; +const signUpSchema = yup.object({ + name: yup.string().required('Informe o nome.'), + email: yup.string().required('Informe o e-mail.').email('E-mail inválido.'), + password: yup.string().required('Informe a senha.').min(8, 'Mínimo de 8 caracteres.'), + confirmPassword: yup + .string() + .required('Confirme a senha.') + .oneOf([yup.ref('password'), null], 'Senhas não coincidem.'), +}); + export function SignUp() { const navigation = useNavigation(); @@ -24,9 +36,11 @@ export function SignUp() { control, handleSubmit, formState: { errors }, - } = useForm(); + } = useForm({ + resolver: yupResolver(signUpSchema), + }); - function handleSignUp({ name, email, password, confirmPassword }: FormDataProps) { + function handleSignUp({ name, email, password, confirmPassword }: FormData) { console.debug({ name, email, @@ -65,7 +79,6 @@ export function SignUp() { ( ( ( + render={({ field: { onBlur, onChange, value } }) => ( )} /> @@ -119,13 +127,15 @@ export function SignUp() { ( + render={({ field: { onBlur, onChange, value } }) => (