DataScope26/WEB
0
1import { useState } from "react";2import { useNavigate, useSearchParams } from "react-router-dom";3import { employeeRegister } from "../services/apiAuth.js";4import { useAuth } from "../context/AuthContext.jsx";5import InvalidInvite from "../components/InvalidInvite.jsx";6import AcceptInviteForm from "../components/AcceptInviteForm.jsx";7import "./AcceptInvite.css";8 9export default function AcceptInvite() {10 const [searchParams] = useSearchParams();11 const inviteToken = searchParams.get("token");12 13 const navigate = useNavigate();14 const { refreshAuth } = useAuth();15 16 const [isLoading, setIsLoading] = useState(false);17 const [error, setError] = useState("");18 const [isInvalid, setIsInvalid] = useState(!inviteToken);19 20 const validatePasswordRules = (password) => {21 if (password.length < 8) return false;22 if (!/[$&+,:;=?@#|'<>.-^*()%!]/.test(password)) return false;23 if (password === password.toUpperCase() || password === password.toLowerCase()) return false;24 return true;25 };26 27 const handleRegister = async (name, password) => {28 if (name.length < 3) {29 setError("El nombre debe tener al menos 3 caracteres.");30 return;31 }32 if (!validatePasswordRules(password)) {33 setError("La contraseña no cumple con los requisitos mínimos.");34 return;35 }36 37 setIsLoading(true);38 setError("");39 40 try {41 const response = await employeeRegister(name, password, inviteToken);42 const { token: jwtToken } = response.data;43 44 sessionStorage.setItem("token", jwtToken);45 localStorage.setItem("token", jwtToken);46 47 if (refreshAuth) await refreshAuth(jwtToken);48 49 navigate("/"); 50 } catch (err) {51 console.error("Error al registrar empleado:", err);52 const backendError = err.response?.data?.error || "";53 54 if (backendError.includes("expired") || backendError.includes("used") || backendError.includes("Invalid token")) {55 setIsInvalid(true);56 } else {57 setError(backendError || "Ocurrió un error al crear tu cuenta. Intenta de nuevo.");58 }59 } finally {60 setIsLoading(false);61 }62 };63 64 if (isInvalid) {65 return <InvalidInvite />;66 }67 68 return (69 <div className="invite-page-layout">70 <div className="invite-modal-override">71 <h1>UNIRTE AL EQUIPO</h1>72 <p className="invite-subtitle">73 Completa tus datos para activar tu cuenta corporativa.74 </p>75 76 <AcceptInviteForm 77 onSubmit={handleRegister} 78 isLoading={isLoading} 79 error={error} 80 />81 </div>82 </div>83 );84}