You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Mobile/components/form/SigninForm.tsx

83 lines
2.4 KiB

import { View, ViewProps } from "react-native";
import TextInput from "./FormInput";
import Button from "../ui/Button";
import React from "react";
import PasswordTextInput from "./SecretTextInput";
import { isEmail } from "validator";
import { EMPTY_FIELD, INVALID_EMAIL, NOT_MATCHING_PASSWORD } from "../Errors";
import FormError from "./FormError";
export default React.forwardRef<any, ViewProps>(
(props, ref): React.ReactElement => {
const { ...rest } = props;
const [email, setEmail] = React.useState("");
const [password, setPassword] = React.useState("");
const [confirmPassword, setConfirmPassword] = React.useState("");
const [error, setError] = React.useState("");
const [isFormValid, setIsFormValid] = React.useState(true);
const validateForm = () => {
setError("");
setIsFormValid(true);
};
const invalidateForm = (error: string) => {
setError(error);
setIsFormValid(false);
};
const onSubmit = () => {
if (email != "") {
if (isEmail(email)) {
if (password != "") {
if (confirmPassword != "") {
if (confirmPassword == password) {
validateForm();
console.log("tmp");
} else {
invalidateForm(NOT_MATCHING_PASSWORD);
}
} else {
invalidateForm(EMPTY_FIELD);
}
} else {
invalidateForm(EMPTY_FIELD);
}
} else {
invalidateForm(INVALID_EMAIL);
}
} else {
invalidateForm(EMPTY_FIELD);
}
};
return (
<View className="gap-4" {...ref} {...rest}>
<View className="gap-4">
<TextInput
beforeIcon="mail"
placeholder="Test@Optifit.com"
onChangeText={setEmail}
value={email}
label={"Adresse mail"}
/>
<PasswordTextInput
onChangeText={setPassword}
value={password}
label={"Mot de passe"}
/>
<PasswordTextInput
onChangeText={setConfirmPassword}
value={confirmPassword}
label={"Confirmation du mot de passe"}
/>
</View>
<FormError isVisible={!isFormValid}>{error}</FormError>
<Button onPress={onSubmit} afterIcon="arrowright">
S'inscrire
</Button>
</View>
);
}
);