"use client"; import { RouterAdminDashboard } from "@/lib/router_hipmi/router_admin"; import { AccentColor, MainColor, } from "@/app_modules/_global/color/color_pallet"; import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; import { UIGlobal_LayoutDefault } from "@/app_modules/_global/ui"; import { ActionIcon, Box, Button, Center, Group, Loader, PinInput, Stack, Text, Title, } from "@mantine/core"; import { useFocusTrap, useShallowEffect } from "@mantine/hooks"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global"; import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; import { clientLogger } from "@/util/clientLogger"; import { IconChevronLeft } from "@tabler/icons-react"; import { apiDeleteAktivasiKodeOtpByNomor, apiGetCheckCodeOtp, apiPostVerifikasiCodeOtp, } from "../_lib/api_fetch_auth"; export default function Validasi() { const router = useRouter(); const [inputCode, setInputOtp] = useState(""); const focusTrapRef = useFocusTrap(); const [loading, setLoading] = useState(false); const [counter, setCounter] = useState(60); const [loadingResend, setLoadingResend] = useState(false); const [triggerOtp, setTriggerOtp] = useState(false); const [idCode, setIdCode] = useState(""); const [data, setData] = useState({ nomor: "", code: "", }); useShallowEffect(() => { const kodeId = localStorage.getItem("hipmi_auth_code_id"); if (kodeId != null) { onCheckAuthCode({ kodeId: kodeId as string }); } else { console.log("code id not found"); } if (triggerOtp) { const kodeId = localStorage.getItem("hipmi_auth_code_id"); if (kodeId != null) { onCheckAuthCode({ kodeId: kodeId as string }); } else { console.log("code id not found"); } setTriggerOtp(false); } }, [triggerOtp]); async function onCheckAuthCode({ kodeId }: { kodeId: string }) { try { const respone = await apiGetCheckCodeOtp({ id: kodeId }); if (respone) { setIdCode(kodeId); setData({ nomor: respone.nomor, code: respone.otp, }); } } catch (error) { clientLogger.error("Error onCheckAuthCode:", error); } } useEffect(() => { counter > 0 && setTimeout(() => setCounter(counter - 1), 1000); }, [counter]); async function onSubmitVerifikasi() { if (!inputCode) return ComponentGlobal_NotifikasiPeringatan("Lengkapi Kode"); if (data.code != inputCode) return ComponentGlobal_NotifikasiPeringatan("Kode Salah"); try { setLoading(true); const respone = await apiPostVerifikasiCodeOtp({ nomor: data.nomor }); if (respone && respone.success == true) { if (respone.roleId == "1") { router.push("/login", { scroll: false }); ComponentGlobal_NotifikasiBerhasil(respone.message); } else if (respone.roleId != "1") { router.push(RouterAdminDashboard.splash_admin, { scroll: false }); ComponentGlobal_NotifikasiBerhasil("Admin berhasil login"); } try { const responeDelete = await apiDeleteAktivasiKodeOtpByNomor({ id: idCode, }); if (responeDelete) { localStorage.removeItem("hipmi_auth_code_id"); } } catch (error) { clientLogger.error("Error apiDeleteAktivasiKodeOtpByNomor:", error); } } else if (respone && respone.success == false) { router.push("/register", { scroll: false }); ComponentGlobal_NotifikasiBerhasil(respone.message); } } catch (error) { setLoading(false); clientLogger.error("Error validasi:", error); } } async function onBack() { try { router.back(); const responeDelete = await apiDeleteAktivasiKodeOtpByNomor({ id: idCode, }); if (responeDelete) { localStorage.removeItem("hipmi_auth_code_id"); } } catch (error) { clientLogger.error("Error apiDeleteAktivasiKodeOtpByNomor:", error); } } async function onResendCode() { setLoadingResend(true); localStorage.removeItem("hipmi_auth_code_id"); try { const res = await fetch("/api/auth/resend", { method: "POST", body: JSON.stringify({ nomor: data.nomor }), headers: { "Content-Type": "application/json", }, }); const result = await res.json(); if (res.status === 200) { localStorage.setItem("hipmi_auth_code_id", result.kodeId); ComponentGlobal_NotifikasiBerhasil("Kode Berhasil Dikirim", 2000); setTriggerOtp(true); setCounter(60); setLoadingResend(false); } else { setLoadingResend(false); ComponentGlobal_NotifikasiPeringatan(result.message); } } catch (error) { clientLogger.error(" Error onResend", error); setLoadingResend(false); ComponentGlobal_NotifikasiGagal("Terjadi Kesalahan"); } } return ( <> onBack()}> {data && data.nomor !== "" ? ( ) : ( "" )} Verifikasi Kode OTP Masukan 4 digit kode otp Yang dikirim ke {data && data.nomor !== "" ? ( +{data.nomor} ) : ( )}
{ setInputOtp(val); }} />
Tidak menerima kode ?{" "} {data && data.nomor !== "" ? ( counter > 0 ? ( {counter + "s"} ) : loadingResend ? ( ) : ( { onResendCode(); }} fw={"bold"} > Kirim ulang ) ) : ( )}
); }