Files
front-AT/app/Components/auth/Login/Login.tsx
T

107 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-09-12 20:40:17 -06:00
"use client";
2025-09-10 16:39:01 -04:00
import { useState } from "react";
2025-09-10 21:00:00 -04:00
import { loginUser } from "@/app/lib/login";
2025-09-12 20:40:17 -06:00
import { useRouter } from "next/navigation";
2025-09-02 19:50:17 -04:00
2025-10-01 15:29:23 -06:00
import toast from "react-hot-toast";
2025-09-24 15:49:59 -06:00
import "./Login.css";
2026-02-20 14:33:08 -05:00
import Swal from "sweetalert2";
2025-09-12 18:12:38 -06:00
2025-09-02 19:50:17 -04:00
function Login() {
2025-09-12 20:40:17 -06:00
const [user, setUser] = useState("");
const [password, setPassword] = useState("");
2025-09-10 16:39:01 -04:00
2025-09-12 20:40:17 -06:00
const router = useRouter();
2025-09-10 16:39:01 -04:00
2025-09-12 20:40:17 -06:00
const handleLogin = async (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
2025-09-10 16:39:01 -04:00
2025-10-01 15:29:23 -06:00
if (!user) {
2026-02-20 14:33:08 -05:00
Swal.fire({
title: "Coloca un usuario!",
icon: "error",
draggable: true,
});
2025-10-01 15:29:23 -06:00
return;
}
if (!password) {
2026-02-20 14:33:08 -05:00
Swal.fire({
title: "Coloca una contraseña!",
icon: "error",
draggable: true,
});
2025-10-01 15:29:23 -06:00
return;
}
2025-09-12 20:40:17 -06:00
const data = await loginUser(user, password);
2025-09-10 16:39:01 -04:00
2025-09-12 20:40:17 -06:00
if ("error" in data) {
2025-10-01 15:29:23 -06:00
toast.error(data.error);
2025-09-12 20:40:17 -06:00
} else {
2025-09-19 17:20:05 -06:00
const token = data.access_token;
const payload = JSON.parse(atob(token.split(".")[1]));
2025-09-24 17:51:54 -06:00
const usuario = payload.usuario;
2025-12-08 18:02:33 -06:00
const role = payload.role;
2025-09-19 17:20:05 -06:00
document.cookie = `token=${token}; path=/; SameSite=Strict`;
2025-10-01 15:57:38 -06:00
document.cookie = `user=${usuario}; path=/; SameSite=Strict`;
2025-12-08 18:02:33 -06:00
document.cookie = `role=${role}; path=/; SameSite=Strict`;
2025-09-19 17:20:05 -06:00
2026-02-20 14:33:08 -05:00
Swal.fire({
title: "Inicio de sesión exitoso!",
icon: "success",
draggable: true,
});
2025-09-12 20:40:17 -06:00
router.push("/Impresiones");
router.refresh();
2025-09-12 20:40:17 -06:00
}
};
2025-09-02 19:50:17 -04:00
2025-09-12 20:40:17 -06:00
return (
<section className="centerGrid containerSection">
<form className="login" onSubmit={handleLogin}>
<h2 className="title">Bienvenido a AT</h2>
2025-09-02 19:50:17 -04:00
2025-09-12 20:40:17 -06:00
<div className="containerInput">
<label className="label">Usuario</label>
<input
type="text"
value={user}
onChange={(e) => setUser(e.target.value)}
placeholder="Coloca tu usuario..."
/>
</div>
2025-09-02 19:50:17 -04:00
2025-09-12 20:40:17 -06:00
<div className="containerInput relative">
<label className="label">Contraseña</label>
<input
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
placeholder="Coloca tu contraseña..."
/>
<span
//onClick={() => setShowPassword(!showPassword)}
//className={showPassword ? 'eyeOpen' : 'eyeClose'}
/>
</div>
2025-09-02 19:50:17 -04:00
2025-09-12 20:40:17 -06:00
<button
className="button buttonSearch"
style={{ maxWidth: "100%", width: "100%" }}
type="submit"
>
Iniciar sesión
</button>
</form>
</section>
);
2025-09-02 19:50:17 -04:00
}
2025-09-10 16:39:01 -04:00
export default Login;
2025-09-12 20:40:17 -06:00
//IO