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.
80 lines
2.3 KiB
80 lines
2.3 KiB
import { useSession } from "@/ctx";
|
|
import { UserServiceStub } from "@/service/user/user.service.stub";
|
|
import { router } from "expo-router";
|
|
import React from "react";
|
|
import { View, ViewProps } from "react-native";
|
|
import { isEmail } from "validator";
|
|
import { EMPTY_FIELD, INVALID_EMAIL } from "../Errors";
|
|
import Button from "../ui/Button";
|
|
import FormError from "./FormError";
|
|
import TextInput from "./FormInput";
|
|
import PasswordTextInput from "./SecretTextInput";
|
|
|
|
const userService = new UserServiceStub();
|
|
|
|
export default React.forwardRef<any, ViewProps>(
|
|
({ ...props }, ref): React.ReactElement => {
|
|
const [email, setEmail] = React.useState("");
|
|
const [password, setPassword] = React.useState("");
|
|
const [error, setError] = React.useState("");
|
|
const [isFormValid, setIsFormValid] = React.useState(true);
|
|
const { signIn } = useSession();
|
|
|
|
const validateForm = () => {
|
|
setError("");
|
|
setIsFormValid(true);
|
|
};
|
|
|
|
const invalidateForm = (error: string) => {
|
|
setError(error);
|
|
setIsFormValid(false);
|
|
};
|
|
|
|
const onSubmit = () => {
|
|
if (email != "") {
|
|
if (isEmail(email)) {
|
|
if (password != "") {
|
|
validateForm();
|
|
const user = userService.login(email, password);
|
|
if (user) {
|
|
signIn(user);
|
|
router.replace("/HomeScreen");
|
|
} else {
|
|
invalidateForm("Email ou mot de passe incorrect");
|
|
}
|
|
} else {
|
|
invalidateForm(EMPTY_FIELD);
|
|
}
|
|
} else {
|
|
invalidateForm(INVALID_EMAIL);
|
|
}
|
|
} else {
|
|
invalidateForm(EMPTY_FIELD);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<View className="gap-4" {...ref} {...props}>
|
|
<View className="gap-4">
|
|
<TextInput
|
|
beforeIcon="mail"
|
|
placeholder="Test@Optifit.com"
|
|
onChangeText={setEmail}
|
|
value={email}
|
|
label={"Adresse mail"}
|
|
/>
|
|
<PasswordTextInput
|
|
label="Mot de passe"
|
|
onChangeText={setPassword}
|
|
value={password}
|
|
/>
|
|
</View>
|
|
<FormError isVisible={!isFormValid}>{error}</FormError>
|
|
<Button onPress={onSubmit} afterIcon="arrowright">
|
|
Se connecter
|
|
</Button>
|
|
</View>
|
|
);
|
|
}
|
|
);
|