"use client"; import React from "react"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import Cookies from "js-cookie"; import { Icon } from "@/components/ui/icon"; import { useForm, SubmitHandler } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { cn, setCookiesEncrypt } from "@/lib/utils"; import { Loader2 } from "lucide-react"; import { getProfile, setLogin } from "@/service/auth"; import { toast } from "sonner"; import { Link, useRouter } from "@/components/navigation"; import { warning } from "@/lib/swal"; // Schema validasi menggunakan zod const schema = z.object({ username: z.string().min(1, { message: "Judul diperlukan" }), password: z .string() .min(4, { message: "Password must be at least 4 characters." }), }); // Tipe untuk form values type LoginFormValues = { username: string; password: string; }; const LoginForm = () => { const [isPending, startTransition] = React.useTransition(); const router = useRouter(); const [passwordType, setPasswordType] = React.useState("password"); const togglePasswordType = () => { setPasswordType((prevType) => prevType === "password" ? "text" : "password" ); }; const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(schema), mode: "all", }); // Fungsi submit form const onSubmit: SubmitHandler = async (data) => { startTransition(async () => { try { const response = await setLogin({ ...data, grant_type: "password", client_id: "mediahub-app", }); if (response.error) { toast.error("Username / Password Tidak Sesuai"); } else { const { access_token } = response.data; const { refresh_token } = response.data; const dateTime = new Date(); const newTime = dateTime.getTime() + 10 * 60 * 1000; Cookies.set("access_token", access_token, { expires: 1, }); Cookies.set("refresh_token", refresh_token, { expires: 1, }); Cookies.set("time_refresh", new Date(newTime).toISOString(), { expires: 1, }); Cookies.set("is_first_login", String(true), { secure: true, sameSite: "strict", }); const profile = await getProfile(access_token); console.log("PROFILE : ", profile?.data?.data); if ( profile?.data?.data?.isInternational == true || profile?.data?.data?.isActive == false || profile?.data?.data?.isDelete == true ) { Object.keys(Cookies.get()).forEach((cookieName) => { Cookies.remove(cookieName); }); warning( "Akun Anda tidak dapat digunakan untuk masuk ke MediaHub Polri", "/auth/login" ); } else { Cookies.set("home_path", profile.data?.data?.homePath, { expires: 1, }); Cookies.set( "profile_picture", profile.data?.data?.profilePictureUrl, { expires: 1, } ); Cookies.set("state", profile.data?.data?.userLevel?.name, { expires: 1, }); setCookiesEncrypt("uie", profile.data.data?.id, { expires: 1, }); setCookiesEncrypt("urie", profile.data.data?.roleId, { expires: 1, }); setCookiesEncrypt("urne", profile.data.data?.role?.name, { expires: 1, }); setCookiesEncrypt("ulie", profile.data.data?.userLevel?.id, { expires: 1, }); setCookiesEncrypt( "ulplie", profile.data.data?.userLevel?.parentLevelId, { expires: 1, } ); setCookiesEncrypt( "ulne", profile.data.data?.userLevel?.levelNumber, { expires: 1, } ); setCookiesEncrypt("ufne", profile.data.data?.fullname, { expires: 1, }); setCookiesEncrypt("ulnae", profile.data.data?.userLevel?.name, { expires: 1, }); setCookiesEncrypt("uinse", profile.data.data?.instituteId, { expires: 1, }); if ( Number(profile.data.data?.roleId) == 2 || Number(profile.data.data?.roleId) == 3 || Number(profile.data.data?.roleId) == 4 || Number(profile.data.data?.roleId) == 9 || Number(profile.data.data?.roleId) == 10 || Number(profile.data.data?.roleId) == 11 || Number(profile.data.data?.roleId) == 12 ) { if ( profile.data.data?.userLevel?.id == 761 || profile.data.data?.userLevel?.parentLevelId == 761 ) { window.location.href = "/admin/welcome"; // router.push('/admin/dashboard'); Cookies.set("status", "login", { expires: 1, }); } else { window.location.href = "/en/dashboard"; // router.push('/admin/dashboard'); Cookies.set("status", "login", { expires: 1, }); } } else { window.location.href = "/"; Cookies.set("status", "login", { expires: 1, }); } } } } catch (err: any) { toast.error(err.message || "An unexpected error occurred."); } }); }; return (
{errors.username?.message && (
{errors.username.message}
)}
{passwordType === "password" ? ( ) : ( )}
{errors.password?.message && (
{errors.password.message}
)}
Forgot Password?
); }; export default LoginForm;