import React, { useState, useEffect } from "react"; import { getParameterByName, param } from "@common-utils/Utils"; import DataService from "@common-services/DataService"; function otpFieldInit() { const inputs = document.querySelectorAll("#otp > *[id]"); for (let i = 0; i < inputs.length; i++) { inputs[i].addEventListener("keyup", function (event) { if (event.key === "Backspace") { inputs[i].value = ""; if (i !== 0) inputs[i - 1].focus(); } else { if ((event.keyCode > 47 && event.keyCode < 58) || (event.keyCode > 95 && event.keyCode < 106)) { inputs[i].value = event.key; if (i !== inputs.length - 1) inputs[i + 1].focus(); event.preventDefault(); } else if ( event.keyCode > 64 && event.keyCode < 91 && !((event.ctrlKey || event.metaKey) && event.keyCode === 86) //restricting the "V" key update when Ctrl + V / Cmd + V combination is pressed ) { inputs[i].value = String.fromCharCode(event.keyCode); if (i !== inputs.length - 1) inputs[i + 1].focus(); event.preventDefault(); } } }); // Capture paste event to handle pasting specifically inputs[i].addEventListener("paste", function (event) { event.preventDefault(); const paste = (event.clipboardData || window.clipboardData).getData("text"); paste?.split("").forEach((char, index) => { if (inputs[index]) { inputs[index].value = char; } }); }); } } export default function Login() { const [msg, setMsg] = useState(""); const [meta, setMeta] = useState({}); const [civilId, setCivilId] = useState(""); const [ecNo, setEcNo] = useState(""); const [otpPrefix, setOtpPrefix] = useState(""); useEffect(() => { saveClientVisit(); const renderMsg = window.CONST.MESSAGES; if (renderMsg) { setMsg(renderMsg); } const renderData = JSON.parse(window.CONST.DATA); if (renderData) { setMeta(renderData); } console.log(renderData); }, []); useEffect(() => { if (meta.mode?.mode.includes("SLA")) { otpFieldInit(); if (meta.modeData?.otpPrefix) { setCivilId(meta.modeData.civilId); setEcNo(meta.modeData.employeeNumber); setOtpPrefix(meta.modeData.otpPrefix); document.getElementById("civilId").disabled = true; document.getElementById("ecNo").disabled = true; document.getElementById("sendOtp").disabled = true; } } }, [meta]); const saveClientVisit = () => { const clientId = getParameterByName("clientId") || meta.clientId; let existing = JSON.parse(window.localStorage.getItem("clients")); existing = existing || {}; existing[clientId] = { stamp: Date.now() }; window.localStorage.setItem("clients", JSON.stringify(existing)); }; const onClickSendOtp = async () => { try { if (!civilId || !ecNo) return alert("Please enter valid Civil ID and EC Number"); const res = await DataService.post("/api/v1/auth/send-otp", { civilId, employeeNumber: ecNo }); if (res.statusKey === "SUCCESS") { if (res.results[0].mOtpPrefix) setOtpPrefix(res.results[0].mOtpPrefix); } else { setOtpPrefix(""); return alert(res.message); } } catch (error) { console.error(error); } }; const onClickLogin = async (e, mode) => { e.preventDefault(); const clientId = getParameterByName("clientId") || meta.clientId; const ticketId = getParameterByName("ticketId") || meta.ticketId; const modeId = getParameterByName("modeId") || meta.mode._id; let formData = { clientId, ticketId, modeId }; let isFormValid = true; if (e.target.elements) { Array.from(e.target.elements).forEach(input => { switch (input.type) { case "text": case "password": if (input.name) formData[input.name] = input.value; break; default: break; } if (input.name === "otp") { const otpInputs = document.querySelectorAll("#otp > *[id]"); let otpStr = ""; for (let i = 0; i < otpInputs.length; i++) { otpStr += otpInputs[i].value; } if (otpStr.length !== 6) { isFormValid = false; } formData[input.name] = otpStr; } }); } const formDataStr = param(formData); if (isFormValid) { window.location.href = `/sso/auth/${mode}/login${formDataStr ? "?" + formDataStr : ""}`; } else { alert("Please enter valid OTP"); } }; return ( <> {msg && (
{msg}
)}
Sample image
{/* MICROSOFT */} {meta.mode?.mode.includes("MICROSOFT") && (
onClickLogin(e, "microsoft")}> sign in with microsoft
)} {/* PASSWORD */} {meta.mode?.mode.includes("PASSWORD") && ( <> {meta.mode?.mode.includes("_OR_") && (

Or

)}
onClickLogin(e, "password")}>
{/*
Forgot password?
*/}
{/*

Don't have an account?{" "} Register

*/}
)} {/* SLA */} {meta.mode?.mode.includes("SLA") && ( <> {meta.mode?.mode.includes("_OR_") && (

Or

)}
onClickLogin(e, "sla")}>
setCivilId(e.target.value)} />
setEcNo(e.target.value)} />
Please enter the one time password
to verify your account
{/*
A code has been sent to *******9897
*/}
{otpPrefix}-
{/*
Didn't get the code  Resend(1/3)
*/}
)}
); }