Código:
import React, { useRef, useState } from "react";
import Swal from "sweetalert2";
import { useForm } from "../../hooks/useForm";
import ReCAPTCHA from "react-google-recaptcha";
import { useDispatch, useSelector } from "react-redux";
import { startLoginEmailPassword } from "../../redux/actions/auth";
export const FormLogin = () => {
const dispatch = useDispatch();
const { loading } = useSelector((state) => state.ui);
const [formValues, handleInputChange] = useForm({
email: "",
password: "",
options:""
});
const { email, password, options } = formValues;
let users = [
{ value: "1", label: "Usuario 1" },
{ value: "2", label: "Usuario 2" },
];
users.unshift({
value: "",
label: "[ Seleccione una opicón ]",
});
const [captchaValido, cambiarCaptchaValido] = useState(null);
//const [usuarioValido, cambiarUsuarioValido] = useState(false);
const [errorUsuario, setErrorUsuario] = useState(null);
const [errorPassword, setErrorPasword] = useState(null);
const [errorSelect, seterrorSelect] = useState("");
/* const handleSelectChange = () => (e) => {
let val = e.target.value;
localStorage.setItem("item_id", `${val}`);
if (!val) console.log("No ha seleccionado ninguna opción");
else console.log(`El valor seleccionado es ${val}`);
}; */
const captcha = useRef(null);
const onCaptcha = () => {
if (captcha.current.getValue()) {
cambiarCaptchaValido(true);
}
};
const handleSubmit = (e) => {
e.preventDefault();
let optForm = document.forms["form"]["options"].selectedIndex;
if( optForm === null || optForm === 0 ) {
seterrorSelect("Debe seleccionar una opción en el campo");
return false;
} else {
let val = e.target.value;
localStorage.setItem("item_id", JSON.stringify(val));
}
if (captcha.current.getValue()) {
//cambiarUsuarioValido(true);
cambiarCaptchaValido(true);
} else {
//cambiarUsuarioValido(false);
cambiarCaptchaValido(false);
}
if (!email.trim()) {
setErrorUsuario("El campo usuario (email) es requerido");
return;
} else if (!/\S+@\S+\.\S+/.test(email)) {
setErrorUsuario("Ingrese un email valido.");
return;
}
if (!password.trim()) {
setErrorPasword("El campo password es requerido");
return;
} else if (
!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])([A-Za-z\d$@$!%*?&]|[^ ]){8,15}$/.test(
password
)
) {
setErrorPasword("Ingrese un formato Valido");
return;
}
setErrorUsuario(null);
setErrorPasword(null);
seterrorSelect(null);
dispatch(startLoginEmailPassword(email, password));
};
return (
<>
<div>
<form name="form" onSubmit={handleSubmit}>
<div className="form-group mb-2">
<input
className="form-control"
type="text"
name="email"
placeholder="Email"
autoComplete="off"
value={email}
onChange={handleInputChange}
onBlur={() => setErrorUsuario(null)}
/>
{errorUsuario ? (
<span className="text-danger">{errorUsuario}</span>
) : null}
</div>
<div className="form-group mb-2">
<input
type="password"
name="password"
autoComplete="off"
className="form-control"
placeholder="Password"
value={password}
onChange={handleInputChange}
onBlur={() => setErrorPasword(null)}
/>
{errorPassword ? (
<span className="text-danger">{errorPassword}</span>
) : null}
</div>
<div className="form-group mb-2">
<select
className="form-select"
name="options"
value={options}
onChange={handleInputChange}
onBlur={() => seterrorSelect("")}
>
{users.map((item) => {
return (
<option key={item.value} value={item.value}>
{item.label}
</option>
);
})}
</select>
{errorSelect ? (
<span className="text-danger">{errorSelect}</span>
) : null}
</div>
<div className="text-center mb-2">
<a href="/#" className="text-decoration-none text-secondary forgot">
Olvidé mi contraseña
</a>
</div>
<div className="recaptcha">
<ReCAPTCHA
ref={captcha}
sitekey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
onChange={onCaptcha}
/>
</div>
{captchaValido === false && (
<div className="text-danger">Por favor acepta el captcha</div>
)}
<div className="d-grid gap-2">
<button
type="submit"
className="btn bg-button block subtitle"
disabled={loading}
>
INGRESAR
</button>
</div>
</form>
<div className="text-center mt-2">
<a href="/#" className="text-decoration questions">
PREGUNTAS FRECUENTES
</a>
</div>
</div>
</>
);
};


