Код: Выделить всё
const signUpSchema = z.object({
firstName: z
.string({ message: 'First name is required' })
.min(2, { message: 'First name must be longer than 2 characters' }),
lastName: z
.string({ message: 'Last name is required' })
.min(2, { message: 'Last name must be longer than 2 characters' }),
mobileNom: z.string({ message: 'Mobile number is required' }),
email: z.string({ message: 'Email is required' }),
password: z
.string({ message: 'Password is required' })
.min(8, { message: 'Password must be longer than 8 characters' }),
});
const AuthForm = ({
headerText,
navLinkText,
submitBtnText,
onSubmit,
routeName,
error,
}) => {
const [permissionResponse, requestPermission] = MediaLibrary.usePermissions();
const [image, setImage] = useState();
// START
const form = useForm({
resolver: zodResolver(signUpSchema),
defaultValues: {
firstName: '',
lastName: '',
mobileNom: '',
email: '',
password: '',
},
});
// END
async function handleUpload() {
if (permissionResponse.status !== 'granted') {
await requestPermission();
}
let result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ['images', 'videos'],
allowsEditing: true,
aspect: [4, 3],
quality: 1,
});
if (!result.canceled) {
setImage(result.assets[0].uri);
}
}
return (
{headerText}
* Please note that every field must be filled.
{routeName == 'login' && (
)}
{routeName === 'login' && (
)}
{routeName == 'login' && (
Upload your syndicate id
)}
{routeName == 'signup' && (
{}}>
Forgot your password?
)}
{submitBtnText}
{navLinkText}
< /code>
И это код для каждого поля ввода < /p>
const CustomTextInput = ({ containerStyle, name, ...textInputProps }) => {
const {
field: { value, onChange, onBlur },
fieldState: { error },
} = useController({ name });
return (
{error?.message}
);
};
Подробнее здесь: https://stackoverflow.com/questions/796 ... y-together