diff options
Diffstat (limited to 'app/login/page.tsx')
| -rw-r--r-- | app/login/page.tsx | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/app/login/page.tsx b/app/login/page.tsx index c0d7ab8..b4b0ed0 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -16,7 +16,7 @@ import { getAuth, setAuth } from "../lib/api/auth"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { setCookie } from "cookies-next"; - +import { clearOdooSession } from "../lib/api/clearOdooSession"; // Ambil tipe parameter untuk setAuth agar sesuai tepat dengan definisinya type AuthProps = Parameters<typeof setAuth>[0]; @@ -49,10 +49,16 @@ const Login = () => { const [loading, setLoading] = useState(false); useEffect(() => { + void clearOdooSession(process.env.NEXT_PUBLIC_ODOO_API_HOST ?? ""); const token = getAuth(); - if (token) router.push("/"); + if (token) router.replace("/"); }, [router]); + // useEffect(() => { + // const token = getAuth(); + // if (token) router.push("/"); + // }, [router]); + const validateInputs = (e: string, p: string, r: "" | Role) => { let ok = true; @@ -105,7 +111,8 @@ const Login = () => { const rawRole = fd.get("role"); const emailStr = typeof rawEmail === "string" ? rawEmail.trim() : ""; const passwordStr = typeof rawPassword === "string" ? rawPassword : ""; - const roleStr: "" | Role = rawRole === "driver" || rawRole === "dispatch" ? rawRole : ""; + const roleStr: "" | Role = + rawRole === "driver" || rawRole === "dispatch" ? rawRole : ""; if (!validateInputs(emailStr, passwordStr, roleStr)) return; @@ -125,9 +132,8 @@ const Login = () => { if (auth.user && typeof auth.user === "object") { setAuth(auth.user as AuthProps); } - // Simpan pilihan role agar bisa dipakai di halaman lain - setCookie("web_role", roleStr, { path: "/" }); - router.push("/"); + setCookie("web_role", roleStr, { path: "/", sameSite: "lax" }); + router.replace("/"); return; } @@ -140,7 +146,9 @@ const Login = () => { alert("Akun anda belum aktif"); break; default: - alert(res?.status?.description || "Login gagal. Periksa email/password."); + alert( + res?.status?.description || "Login gagal. Periksa email/password." + ); } } catch (error) { console.error(error); @@ -158,7 +166,11 @@ const Login = () => { <Typography component="h1" variant="h4" - sx={{ width: "100%", fontSize: "clamp(2rem, 10vw, 2.15rem)", mb: 4 }} + sx={{ + width: "100%", + fontSize: "clamp(2rem, 10vw, 2.15rem)", + mb: 4, + }} > Sign in </Typography> @@ -167,13 +179,19 @@ const Login = () => { component="form" onSubmit={handleSubmit} noValidate - sx={{ display: "flex", flexDirection: "column", width: "100%", gap: 2 }} + sx={{ + display: "flex", + flexDirection: "column", + width: "100%", + gap: 2, + }} > <FormControl> <FormLabel htmlFor="email">Email</FormLabel> <TextField error={emailError} helperText={emailErrorMessage} + disabled={loading} id="email" type="email" name="email" @@ -198,6 +216,7 @@ const Login = () => { <TextField error={passwordError} helperText={passwordErrorMessage} + disabled={loading} name="password" placeholder="••••••" type="password" @@ -220,6 +239,7 @@ const Login = () => { id="role" name="role" value={role} + disabled={loading} onChange={handleRoleChange} displayEmpty size="small" @@ -237,7 +257,12 @@ const Login = () => { )} </FormControl> - <Button type="submit" fullWidth variant="contained" disabled={loading}> + <Button + type="submit" + fullWidth + variant="contained" + disabled={loading} + > {loading ? "Loading..." : "Sign in"} </Button> </Box> |
