@acuteinfo/common-screens 1.0.112 → 1.0.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/customHooks/index.d.ts +1 -0
- package/dist/customHooks/usePreventClipboard.d.ts +25 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pages/sidebar/navigation/style.d.ts +1 -1
- package/dist/pages/sidebar/style.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/pages/auth/style.ts","../src/pages/auth/usernamePassword.tsx","../src/pages/auth/otpPopup.tsx","../src/pages/auth/verifyFinger.tsx","../src/pages/auth/biometric.ts","../src/pages/auth/utils.ts","../src/pages/auth/bankDetails.tsx","../src/pages/auth/passwordRotation.tsx","../src/pages/auth/authController.tsx","../src/pages/auth/api.ts","../src/pages/auth/forgotPasswordField.tsx","../src/pages/auth/forgotPassword.tsx","../src/pages/branchSelection/style.ts","../src/pages/branchSelection/gridMetadata.ts","../src/pages/branchSelection/branchSelectionGrid.tsx","../src/pages/appbar/style.ts","../src/pages/appbar/appBar.tsx","../src/pages/sidebar/style.ts","../src/pages/sidebar/reportMetaData.ts","../src/pages/sidebar/navigation/style.ts","../src/pages/sidebar/navigation/sideBarNavigation.tsx","../src/pages/sidebar/navigation/filterMetaData.ts","../src/pages/sidebar/navigation/searchViewNavigation.tsx","../src/pages/sidebar/icons.ts","../src/pages/sidebar/transformer.ts","../src/pages/sidebar/sideBar.tsx","../src/pages/sidebar/drawer.tsx"],"sourcesContent":["import { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: any) => ({\r\n wrapper: {\r\n minHeight: \"100vh\",\r\n boxShadow: \"0 3px 6px rgba(0,0,0,0.03)\",\r\n // background: \"#fff\",\r\n background: \"var(--white)\",\r\n },\r\n loginEmp: {\r\n background: \"#fff\",\r\n padding: theme.spacing(2, 4),\r\n display: \"flex\",\r\n maxWidth: \"400px\",\r\n margin: \"auto\",\r\n boxShadow: \"0 0 20px rgba(0,0,0,0.06)\",\r\n borderRadius: \"8px\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n width: \"100%\",\r\n },\r\n },\r\n formWrap: {\r\n marginTop: theme.spacing(2),\r\n },\r\n loginBtn: {\r\n minWidth: \"100% !important\",\r\n margin: theme.spacing(2, 0),\r\n fontSize: \"1rem\",\r\n padding: \"10px .75rem\",\r\n background: \"rgb(128,0,0)\",\r\n border: 0,\r\n color: \"#fff !important\",\r\n fontWeight: 600,\r\n letterSpacing: \"0.02857em\",\r\n boxShadow: \"none\",\r\n textTransform: \"capitalize\",\r\n alignSelf: \"flex-end\",\r\n \"&:hover\": {\r\n background: \"#fedad8\",\r\n boxShadow: \"none\",\r\n },\r\n },\r\n OTPTimer: {\r\n marginTop: \"10px\",\r\n color: theme.palette.primary.main,\r\n fontWeight: 600,\r\n },\r\n resendLink: {\r\n marginTop: \"10px\",\r\n cursor: \"pointer\",\r\n color: theme.palette.secondary.main,\r\n fontWeight: 600,\r\n fontSize: \"0.875 rem\",\r\n },\r\n logo: {\r\n marginBottom: theme.spacing(1),\r\n },\r\n\r\n loginLeft: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n loginRight: {\r\n background: \"#fff\",\r\n padding: theme.spacing(2, 4),\r\n display: \"flex\",\r\n maxWidth: \"400px\",\r\n margin: \"auto\",\r\n boxShadow: \"0 0 20px rgba(0,0,0,0.06)\",\r\n borderRadius: \"8px\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n width: \"100%\",\r\n },\r\n \"& img\": {\r\n alignSelf: \"center\",\r\n },\r\n },\r\n\r\n loginImg: {},\r\n\r\n verifybutton: {\r\n alignSelf: \"center\",\r\n // marginBottom: \"10px\",\r\n // marginTop: \"10px\",\r\n padding: \"5px\",\r\n },\r\n otpButtons: {\r\n // padding: \"10px\",\r\n },\r\n\r\n divflex: {\r\n display: \"flex\",\r\n },\r\n otpinputpadding: {\r\n \"& input\": {\r\n marginRight: \"25px !important\",\r\n border: \"1.42444px solid var(--theme-color3)\",\r\n borderRadius: \"10px\",\r\n width: \"45px !important\",\r\n height: \"45px !important\",\r\n marginBottom: \"15px\",\r\n boxShadow: \"0px 5.69775px 11.3955px rgba(66, 99, 199, 0.16)\",\r\n },\r\n },\r\n ibtnvisible: {\r\n // padding: \"7px !important\",\r\n // alignItems: \"baseline\",\r\n marginBottom: \"15px\",\r\n },\r\n btnvisibleoff: {\r\n display: \"none\",\r\n },\r\n OTPalignName: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n marginBottom: \"12px\",\r\n color: \"#1C1C1C\",\r\n fonWeight: \"400\",\r\n fontSize: \"17px\",\r\n lineHeight: \"33px\",\r\n },\r\n resendOTPalign: {\r\n color: \"var(--theme-color3)\",\r\n fonWeight: \"400\",\r\n fontSize: \"17px\",\r\n lineHeight: \"33px\",\r\n // margin: \"0 auto\",\r\n // marginTop: \"15px\",\r\n // display: \"block !important\",\r\n },\r\n resendbtnLink: {\r\n textDecoration: \"underline\",\r\n color: \"var(--theme-color3)\",\r\n cursor: \"pointer\",\r\n \"&:hover\": {\r\n textDecoration: \"underline\",\r\n color: \"var(--theme-color3)\",\r\n },\r\n },\r\n dialogTitleClass: {\r\n background: \"var(--primary-bg)\",\r\n padding: \"6px 15px !important\",\r\n margin: \"10px\",\r\n color: \"var(--white)\",\r\n borderRadius: \"4px\",\r\n \"& h2\": {\r\n fontWeight: \"500 !important\",\r\n },\r\n },\r\n lang_svg: {\r\n marginRight: \"10px\",\r\n width: \"22px\",\r\n height: \"22px\",\r\n },\r\n dialogContent: {\r\n padding: \"0px 15px\",\r\n \"& p\": {\r\n whiteSpace: \"pre-wrap\",\r\n color: \"black\",\r\n marginTop: \"8px\",\r\n marginBottom: \"6px\",\r\n },\r\n },\r\n button: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexDirection: \"column\",\r\n margin: \"6px\",\r\n background: \"var(--theme-color1)\",\r\n \"&:hover\": {\r\n background: \"var(--theme-color1) !important\",\r\n },\r\n },\r\n}));\r\n","import { GradientButton, TextField } from \"@acuteinfo/common-base\";\r\nimport { Fragment, useState, useEffect, useRef } from \"react\";\r\nimport Visibility from \"@mui/icons-material/Visibility\";\r\nimport VisibilityOff from \"@mui/icons-material/VisibilityOff\";\r\nimport { CircularProgress, IconButton, InputAdornment } from \"@mui/material\";\r\nimport { Container } from \"@mui/material\";\r\nimport { Grid } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const UsernamePasswordField = ({\r\n classes,\r\n loginState,\r\n verifyUsernamePassword,\r\n forgotPasswordEndpoint,\r\n preventSpecialChars,\r\n}) => {\r\n const [input, setInput] = useState({ userName: \"\", password: \"\" });\r\n const [showPasswordTime, setShowPasswordTime] = useState(0);\r\n const [blurred, setBlurred] = useState(false);\r\n const showPassword = Date.now() < showPasswordTime;\r\n const [, forceUpdate] = useState<any | null>();\r\n const timerRef = useRef<any>(null);\r\n const { t } = useTranslation();\r\n useEffect(() => {\r\n return () => clearTimeout(timerRef.current);\r\n }, []);\r\n const handleChange = (event) => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n if (\r\n name === \"userName\" &&\r\n preventSpecialChars &&\r\n value &&\r\n preventSpecialChars.split(\"\").some((char) => value.includes(char))\r\n ) {\r\n return;\r\n }\r\n if (name === \"userName\" && value) {\r\n loginState.isUsernameError = false;\r\n }\r\n if (name === \"password\" && value) {\r\n loginState.isPasswordError = false;\r\n }\r\n\r\n setInput((values) => ({ ...values, [name]: value }));\r\n };\r\n const inputRef = useRef<any>(null);\r\n const inputPassRef = useRef<any>(null);\r\n const inputButtonRef = useRef<any>(null);\r\n\r\n useEffect(() => {\r\n let timeoutCd;\r\n if (loginState.isUsernameError) {\r\n timeoutCd = setTimeout(() => {\r\n inputRef?.current?.focus?.();\r\n }, 100);\r\n } else if (loginState.isPasswordError) {\r\n setInput((old) => ({ ...old, password: \"\" }));\r\n timeoutCd = setTimeout(() => {\r\n inputPassRef?.current?.focus?.();\r\n }, 100);\r\n }\r\n return () => {\r\n if (timeoutCd) {\r\n clearTimeout(timeoutCd);\r\n }\r\n };\r\n }, [loginState.isUsernameError, loginState.isPasswordError]);\r\n useEffect(() => {\r\n let timeoutCd;\r\n if (loginState?.otpmodelClose ?? false) {\r\n setInput((values) => ({ ...values, password: \"\" }));\r\n timeoutCd = setTimeout(() => {\r\n inputPassRef?.current?.focus?.();\r\n }, 1500);\r\n }\r\n return () => {\r\n if (timeoutCd) {\r\n clearTimeout(timeoutCd);\r\n }\r\n };\r\n }, [loginState.otpmodelClose]);\r\n\r\n return (\r\n <Fragment>\r\n <Container maxWidth=\"xs\">\r\n <Grid alignItems=\"center\" style={{ paddingTop: \"20px\" }}>\r\n <div\r\n style={{\r\n color: \"#000000 !important\",\r\n fontSize: \"30px\",\r\n fontWeight: \"600\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"150%\",\r\n }}\r\n >\r\n <h3>{t(\"SignIn\")}</h3>\r\n </div>\r\n <div\r\n className=\"\"\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n\r\n width: \"360px\",\r\n }}\r\n >\r\n {t(\"SignInWithUserIDandPassword\")}\r\n </div>\r\n <div className={classes.formWrap}>\r\n <TextField\r\n // variant=\"filled\"\r\n // color=\"secondary\"\r\n autoFocus={true}\r\n label={t(\"UserID\")}\r\n // placeholder=\"User ID\"\r\n placeholder={String(t(\"UserID\"))}\r\n style={{\r\n marginTop: \"10px\",\r\n marginBottom: \"17px\",\r\n }}\r\n fullWidth\r\n type={\"text\"}\r\n name=\"userName\"\r\n value={input.userName.trimStart() || \"\"}\r\n onChange={handleChange}\r\n error={loginState.isUsernameError}\r\n helperText={\r\n loginState.isUsernameError\r\n ? t(loginState.userMessageforusername)\r\n : \"\"\r\n }\r\n InputLabelProps={{ shrink: true }}\r\n disabled={loginState.loading}\r\n autoComplete=\"off\"\r\n inputRef={inputRef}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n inputProps={{\r\n maxLength: \"16\",\r\n }}\r\n />\r\n\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"row-reverse\",\r\n marginTop: \"8px\",\r\n }}\r\n >\r\n <TextField\r\n key=\"employee\"\r\n label={t(\"Password\")}\r\n // variant=\"filled\"\r\n // color=\"secondary\"\r\n\r\n placeholder={String(t(\"EnterPassword\"))}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n fullWidth\r\n type={showPassword ? \"text\" : \"password\"}\r\n name=\"password\"\r\n value={\r\n blurred && !showPassword\r\n ? \"•\".repeat(16)\r\n : input.password.trimStart() || \"\"\r\n }\r\n onChange={(e) => {\r\n setBlurred(false); // reset blur effect on change\r\n handleChange(e);\r\n }}\r\n onBlur={() => {\r\n if (!showPassword && input.password.trimStart())\r\n setBlurred(true);\r\n }}\r\n onFocus={() => setBlurred(false)}\r\n error={loginState.isPasswordError}\r\n helperText={\r\n loginState.isPasswordError\r\n ? t(loginState.userMessageforpassword)\r\n : \"\"\r\n }\r\n disabled={loginState.loading}\r\n inputRef={inputPassRef}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n if (!showPassword && input.password.trimStart())\r\n setBlurred(true);\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n InputProps={{\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n onClick={() => {\r\n if (!showPassword) {\r\n setShowPasswordTime(Date.now() + 5000);\r\n timerRef.current = setTimeout(\r\n () => forceUpdate(Date.now()),\r\n 5000,\r\n );\r\n } else if (showPassword) setShowPasswordTime(0);\r\n }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.loading}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n }}\r\n inputProps={{ maxLength: \"16\" }}\r\n />\r\n </div>\r\n <div style={{ marginTop: \"20px\", display: \"flex\" }}>\r\n <div style={{ flex: \"auto\", textAlign: \"end\" }}>\r\n <a\r\n href={forgotPasswordEndpoint ?? \"\"}\r\n style={{ color: \"var(--theme-color3)\" }}\r\n >\r\n {t(\"ForgotPassword\")}\r\n </a>\r\n </div>\r\n </div>\r\n <div style={{ marginTop: \"20px\", display: \"flex\" }}>\r\n <div\r\n style={{\r\n flex: \"auto\",\r\n textAlign: \"center\",\r\n marginTop: \"5px\",\r\n marginBottom: \"17px\",\r\n }}\r\n >\r\n <GradientButton\r\n style={{\r\n borderRadius: loginState.loading ? \"50%\" : \"10px\",\r\n height: loginState.loading ? \"40px\" : \"100%\",\r\n width: loginState.loading ? \"0px\" : \"100%\",\r\n minWidth: loginState.loading ? \"40px\" : \"80px\",\r\n }}\r\n fullWidth\r\n disabled={loginState.loading}\r\n onClick={() =>\r\n verifyUsernamePassword(\r\n (input.userName || \"\").toLowerCase(),\r\n input.password,\r\n )\r\n }\r\n ref={inputButtonRef}\r\n endicon={loginState.loading ? undefined : \"East\"}\r\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\r\n >\r\n {loginState.loading ? (\r\n <CircularProgress size={25} thickness={4.6} />\r\n ) : (\r\n t(\"Next\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Container>\r\n </Fragment>\r\n );\r\n};\r\n","import { FormHelperText } from \"@mui/material\";\r\nimport { GradientButton } from \"@acuteinfo/common-base\";\r\nimport { Fragment, useState, useRef, useEffect } from \"react\";\r\nimport OTPInput, { ResendOTP } from \"otp-input-react\";\r\nimport Visibility from \"@mui/icons-material/Visibility\";\r\nimport VisibilityOff from \"@mui/icons-material/VisibilityOff\";\r\nimport { CircularProgress } from \"@mui/material\";\r\nimport { Container } from \"@mui/material\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport { Grid } from \"@mui/material\";\r\nimport clsx from \"clsx\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const OTPModel = ({\r\n classes,\r\n OTPResendRequest,\r\n open,\r\n handleClose,\r\n loginState,\r\n VerifyOTP,\r\n OTPError,\r\n setOTPError,\r\n previousStep,\r\n setNewRequestID = (id) => {},\r\n otpresendCount = 0,\r\n resendFlag,\r\n}) => {\r\n const [OTP, setOTP] = useState(\"\");\r\n const [showPasswordTime, setShowPasswordTime] = useState(0);\r\n const showPassword = Date.now() < showPasswordTime;\r\n const [, forceUpdate] = useState<any | null>();\r\n const timerRef = useRef<any>(null);\r\n const otpContainerRef = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n return () => clearTimeout(timerRef.current);\r\n }, []);\r\n const [btnshow, setbtnshow] = useState(false);\r\n const inputButtonRef = useRef<any>(null);\r\n const [resendotpLoading, setResendotpLoading] = useState(false);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { t } = useTranslation();\r\n // const renderButton = (buttonProps) => {\r\n // let { remainingTime, ...other } = buttonProps;\r\n // return resendotpLoading ? (\r\n // <a\r\n // remainingtime={remainingTime}\r\n // {...other}\r\n // className={clsx(\r\n // classes.resendbtnLink,\r\n // !btnshow && classes.btnvisibleoff\r\n // )}\r\n // >\r\n // {t(\"ResendOTP\")}\r\n // </a>\r\n // ) : null;\r\n // };\r\n const renderButton = (buttonProps) => {\r\n let { remainingTime, ...other } = buttonProps;\r\n return resendotpLoading ? (\r\n <a\r\n className={clsx(\r\n classes.resendbtnLink,\r\n !btnshow && classes.btnvisibleoff,\r\n )}\r\n style={{ cursor: \"wait\" }}\r\n >\r\n {/* {t(\"ResendOTP\")} {<CircularProgress size={20} color=\"secondary\" />} */}\r\n {t(\"GetNewOTP\")} {<CircularProgress size={20} color=\"secondary\" />}\r\n </a>\r\n ) : (\r\n <a\r\n remainingtime={remainingTime}\r\n {...other}\r\n className={clsx(\r\n classes.resendbtnLink,\r\n !btnshow && classes.btnvisibleoff,\r\n )}\r\n >\r\n {/* {t(\"ResendOTP\")} */}\r\n {t(\"GetNewOTP\")}\r\n </a>\r\n );\r\n };\r\n\r\n const ClickEventHandler = () => {\r\n if (!Boolean(OTP) || OTP.length < 6) {\r\n setOTPError(\"EnterOTPDigit\");\r\n } else {\r\n setOTPError(\"\");\r\n VerifyOTP(OTP);\r\n }\r\n };\r\n const handleResendClick = async () => {\r\n setResendotpLoading(true);\r\n setOTPError(\"\");\r\n const { status, data, message } = await OTPResendRequest(\r\n // resendFlag === \"FORGET_PW\" || resendFlag === \"FORGT_TOTP\"\r\n // ? loginState?.requestCd\r\n // : loginState?.transactionID,\r\n loginState?.comapanyCD,\r\n loginState?.branchCD,\r\n loginState?.contactUser,\r\n resendFlag,\r\n loginState?.otpValidFor,\r\n loginState?.username,\r\n // resendFlag,\r\n // loginState.auth_data?.[0]?.company_ID,\r\n // loginState.auth_data?.[0]?.branch_cd,\r\n );\r\n setResendotpLoading(false);\r\n if (status === \"0\") {\r\n setNewRequestID(data?.TRAN_CD);\r\n setbtnshow(false);\r\n enqueueSnackbar(message, { variant: \"success\" });\r\n setTimeout(() => {\r\n if (otpContainerRef.current) {\r\n const firstInput = otpContainerRef.current.querySelector(\"input\");\r\n if (firstInput) {\r\n firstInput.focus();\r\n }\r\n }\r\n }, 100);\r\n } else {\r\n enqueueSnackbar(message, { variant: \"error\" });\r\n }\r\n };\r\n const handleCloseEvent = () => {\r\n setOTPError(\"\");\r\n setOTP(\"\");\r\n handleClose(\"\");\r\n };\r\n const renderTime = (remainingtime) => {\r\n if (parseInt(remainingtime) === 0) {\r\n setTimeout(() => {\r\n setbtnshow(true);\r\n }, 700);\r\n }\r\n return (\r\n <span className={clsx(btnshow && classes.btnvisibleoff)}>\r\n {t(\"OtpExpired\")} {remainingtime} {t(\"second\")}\r\n {/* {t(\"ValidFor\")} {remainingtime} */}\r\n </span>\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n if (loginState?.otpmodelClose ?? false) {\r\n handleCloseEvent();\r\n } else if (Boolean(OTPError)) {\r\n setOTP(\"\");\r\n setTimeout(() => {\r\n if (otpContainerRef.current) {\r\n const firstInput = otpContainerRef.current.querySelector(\"input\");\r\n if (firstInput) {\r\n firstInput.focus();\r\n }\r\n }\r\n }, 100);\r\n }\r\n }, [loginState.otpmodelClose, OTPError]);\r\n return (\r\n <Fragment>\r\n <Container maxWidth=\"sm\">\r\n <Grid alignItems=\"center\" marginTop={\"4em\"}>\r\n <div\r\n // className={classes.formWrap}\r\n style={\r\n {\r\n // marginRight: \"25px\",\r\n // width: \"100%\",\r\n // position: \"relative\",\r\n // right: \"42px\",\r\n // bottom: \"13px\",\r\n }\r\n }\r\n >\r\n <div\r\n style={{\r\n color: \"#000000\",\r\n fontSize: \"30px\",\r\n fontWeight: \"600\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"150%\",\r\n marginBottom: \"10px\",\r\n }}\r\n >\r\n {loginState?.authType === \"OTP\"\r\n ? t(\"OTPAuthentication\")\r\n : loginState?.authType === \"TOTP\"\r\n ? t(\"TOTPAuthentication\")\r\n : null}\r\n </div>\r\n <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"33px\",\r\n }}\r\n >\r\n {loginState?.authType === \"OTP\" || loginState?.authType === \"TOTP\"\r\n ? t(\"OTPSentMobileNo\", {\r\n defaultValue: loginState?.otpSentText ?? \"\",\r\n })\r\n : null}\r\n </div>\r\n {/* <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"33px\",\r\n }}\r\n >\r\n {t(\"GenerateNewOTP\")}\r\n </div> */}\r\n\r\n <div className={classes.OTPalignName}>\r\n {t(\"Hello\")}{\" \"}\r\n {loginState?.username\r\n ? loginState.username.charAt(0).toUpperCase() +\r\n loginState.username.slice(1)\r\n : null}\r\n {loginState?.description ? `(${loginState.description})` : null}\r\n {loginState?.authType === \"OTP\" && (\r\n <ResendOTP\r\n // onResendClick={() => setbtnshow(false)}\r\n onResendClick={handleResendClick}\r\n // onTimerComplete={() => setbtnshow(true)}\r\n renderButton={renderButton}\r\n renderTime={renderTime}\r\n maxTime={loginState?.otpValidFor ?? 60}\r\n className={classes.resendOTPalign}\r\n />\r\n )}\r\n </div>\r\n <div\r\n className={classes.divflex}\r\n ref={otpContainerRef}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n >\r\n <OTPInput\r\n value={OTP}\r\n onChange={setOTP}\r\n autoFocus\r\n OTPLength={6}\r\n otpType=\"number\"\r\n disabled={loginState.otploading || loginState.loading}\r\n secure={!showPassword}\r\n className={classes.otpinputpadding}\r\n />\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n onClick={() => {\r\n if (!showPassword) {\r\n setShowPasswordTime(Date.now() + 5000);\r\n timerRef.current = setTimeout(\r\n () => forceUpdate(Date.now()),\r\n 5000,\r\n );\r\n } else if (showPassword) setShowPasswordTime(0);\r\n }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.otploading}\r\n className={classes.ibtnvisible}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </div>\r\n {Boolean(OTPError) ? (\r\n <FormHelperText style={{ color: \"red\" }}>\r\n {OTPError}\r\n </FormHelperText>\r\n ) : null}\r\n {loginState?.authType === \"TOTP\" ? (\r\n <div>\r\n <a href=\"forgot-totp\" style={{ color: \"var(--theme-color3)\" }}>\r\n {t(\"ResetTOTP\")}\r\n </a>\r\n </div>\r\n ) : (\r\n <></>\r\n )}\r\n <div\r\n style={{\r\n display: \"flex\",\r\n gap: \"10px\",\r\n margin: \"42px 0 0 42px\",\r\n width: \"60%\",\r\n }}\r\n >\r\n <GradientButton\r\n // fullWidth\r\n disabled={loginState.otploading || loginState.loading}\r\n onClick={() => {\r\n previousStep(false, \"\");\r\n }}\r\n className={classes.otpButtons}\r\n textColor={\"var(--theme-color3)\"}\r\n sx={{\r\n border: \"var(--theme-color3) 1px solid\",\r\n minWidth: \"50%\",\r\n background: \"var(--white)\",\r\n borderRadius: \"10px\",\r\n \"&:disabled\": {\r\n color: \"var(--theme-color3) !important\",\r\n opacity: 0.7,\r\n },\r\n \"&:hover\": {\r\n background: \"var(--white) !important\",\r\n \"& .MuiSvgIcon-root\": {\r\n transform: \"scale(1.4) rotateX(360deg)\",\r\n transition: \"transform 2s ease-in-out\",\r\n },\r\n },\r\n }}\r\n // customstyle = {{color : \"var(--theme-color3) !important\"}}\r\n starticon={\"West\"}\r\n >\r\n {t(\"Back\")}\r\n </GradientButton>\r\n <GradientButton\r\n style={{\r\n borderRadius: loginState.loading ? \"50%\" : \"10px\",\r\n height: loginState.loading ? \"40px\" : \"100%\",\r\n width: loginState.loading ? \"0px\" : \"100%\",\r\n minWidth: loginState.loading ? \"40px\" : \"80px\",\r\n }}\r\n fullWidth\r\n disabled={loginState.loading}\r\n onClick={ClickEventHandler}\r\n ref={inputButtonRef}\r\n className={classes.otpButtons}\r\n endicon={loginState.loading ? undefined : \"TaskAlt\"}\r\n rotateIcon=\"scale(1.4)\"\r\n >\r\n {loginState.loading ? (\r\n <CircularProgress size={25} thickness={4.6} />\r\n ) : (\r\n t(\"VerifyOTP\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Container>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport const OTPModelForm = ({\r\n classes,\r\n OTPResendRequest,\r\n handleClose,\r\n loginState,\r\n VerifyOTP,\r\n OTPError,\r\n setOTPError,\r\n resendFlag,\r\n setNewRequestID = (id) => {},\r\n otpresendCount = 0,\r\n}) => {\r\n const [OTP, setOTP] = useState(\"\");\r\n const [showPasswordTime, setShowPasswordTime] = useState(0);\r\n const showPassword = Date.now() < showPasswordTime;\r\n const [, forceUpdate] = useState<any | null>();\r\n const timerRef = useRef<any>(null);\r\n const otpContainerRef = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n return () => clearTimeout(timerRef.current);\r\n }, []);\r\n const [btnshow, setbtnshow] = useState(false);\r\n const [resendotpLoading, setResendotpLoading] = useState(false);\r\n const inputButtonRef = useRef<any>(null);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { t } = useTranslation();\r\n const renderButton = (buttonProps) => {\r\n let { remainingTime, ...other } = buttonProps;\r\n return resendotpLoading ? (\r\n <a\r\n className={clsx(\r\n classes.resendbtnLink,\r\n !btnshow && classes.btnvisibleoff,\r\n )}\r\n style={{ cursor: \"wait\" }}\r\n >\r\n {/* {t(\"ResendOTP\")} {<CircularProgress size={20} color=\"secondary\" />} */}\r\n {t(\"GetNewOTP\")} {<CircularProgress size={20} color=\"secondary\" />}\r\n </a>\r\n ) : (\r\n <a\r\n remainingtime={remainingTime}\r\n {...other}\r\n className={clsx(\r\n classes.resendbtnLink,\r\n !btnshow && classes.btnvisibleoff,\r\n )}\r\n >\r\n {/* {t(\"ResendOTP\")} */}\r\n {t(\"GetNewOTP\")}\r\n </a>\r\n );\r\n };\r\n const ClickEventHandler = () => {\r\n if (!Boolean(OTP) || OTP.length < 6) {\r\n setOTPError(\"EnterOTPDigit\");\r\n } else {\r\n setOTPError(\"\");\r\n VerifyOTP(OTP);\r\n }\r\n };\r\n const handleResendClick = async () => {\r\n setResendotpLoading(true);\r\n setOTPError(\"\");\r\n const { status, data, message } = await OTPResendRequest(\r\n // resendFlag === \"FORGET_PW\"\r\n // ? loginState?.requestCd\r\n // : loginState?.transactionID,\r\n // resendFlag,\r\n loginState?.company_ID,\r\n loginState?.branch_cd,\r\n loginState?.contactUser,\r\n resendFlag,\r\n loginState?.otpValidFor,\r\n loginState?.username,\r\n );\r\n setResendotpLoading(false);\r\n if (status === \"0\") {\r\n setNewRequestID(data?.TRAN_CD);\r\n setbtnshow(false);\r\n enqueueSnackbar(message, { variant: \"success\" });\r\n setTimeout(() => {\r\n if (otpContainerRef.current) {\r\n const firstInput = otpContainerRef.current.querySelector(\"input\");\r\n if (firstInput) {\r\n firstInput.focus();\r\n }\r\n }\r\n }, 100);\r\n } else {\r\n enqueueSnackbar(message, { variant: \"error\" });\r\n }\r\n };\r\n const handleCloseEvent = () => {\r\n setOTPError(\"\");\r\n setOTP(\"\");\r\n handleClose();\r\n };\r\n const renderTime = (remainingtime) => {\r\n if (parseInt(remainingtime) === 0) {\r\n setTimeout(() => {\r\n setbtnshow(true);\r\n }, 700);\r\n }\r\n return (\r\n <span className={clsx(btnshow && classes.btnvisibleoff)}>\r\n {t(\"OtpExpired\")} {remainingtime}\r\n </span>\r\n );\r\n };\r\n useEffect(() => {\r\n if (loginState?.otpmodelClose ?? false) {\r\n handleCloseEvent();\r\n } else if (Boolean(OTPError)) {\r\n setOTP(\"\");\r\n setTimeout(() => {\r\n if (otpContainerRef.current) {\r\n const firstInput = otpContainerRef.current.querySelector(\"input\");\r\n if (firstInput) {\r\n firstInput.focus();\r\n }\r\n }\r\n }, 100);\r\n }\r\n }, [loginState.otpmodelClose, OTPError]);\r\n\r\n return (\r\n <Fragment>\r\n <Grid alignItems=\"center\">\r\n <div>\r\n <div\r\n style={{\r\n color: \"#000000\",\r\n fontSize: \"30px\",\r\n fontWeight: \"600\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"150%\",\r\n marginBottom: \"10px\",\r\n }}\r\n >\r\n {t(\"OTPAuthentication\")}\r\n </div>\r\n {/* <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n lineHeight: \"33px\",\r\n }}\r\n >\r\n {t(\"GenerateNewOTP\")}\r\n </div> */}\r\n <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"33px\",\r\n }}\r\n >\r\n {t(\"OTPSentMobileNo\", {\r\n defaultValue: loginState?.forgotOtpSentText ?? \"\",\r\n })}\r\n </div>\r\n <div className={classes.OTPalignName}>\r\n {t(\"Hello\")}{\" \"}\r\n {loginState?.username\r\n ? loginState.username.charAt(0).toUpperCase() +\r\n loginState.username.slice(1)\r\n : null}\r\n {loginState?.description ? `(${loginState.description})` : null}\r\n {loginState.otploading ||\r\n otpresendCount >= 3 ||\r\n loginState?.auth_type === \"TOTP\" ? null : (\r\n <ResendOTP\r\n onResendClick={handleResendClick}\r\n // onTimerComplete={() => setbtnshow(true)}\r\n renderButton={renderButton}\r\n renderTime={renderTime}\r\n maxTime={loginState?.otpValidFor ?? 60}\r\n className={classes.resendOTPalign}\r\n />\r\n )}\r\n </div>\r\n <div\r\n className={classes.divflex}\r\n ref={otpContainerRef}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n >\r\n <OTPInput\r\n value={OTP}\r\n onChange={setOTP}\r\n autoFocus\r\n OTPLength={6}\r\n otpType=\"number\"\r\n disabled={loginState.otploading || loginState.loading}\r\n secure={!showPassword}\r\n className={classes.otpinputpadding}\r\n />\r\n\r\n {/* <IconButton\r\n aria-label=\"toggle password visibility\"\r\n // onClick={() => {\r\n // if (!showPassword) {\r\n // setShowPasswordTime(Date.now() + 5000);\r\n // timerRef.current = setTimeout(\r\n // () => forceUpdate(Date.now()),\r\n // 5000\r\n // );\r\n // } else if (showPassword) setShowPasswordTime(0);\r\n // }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.otploading}\r\n className={classes.ibtnvisible}\r\n >\r\n {showPassword ? <VisibilityOffIcon /> : <VisibilityIcon />}\r\n </IconButton> */}\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n onClick={() => {\r\n if (!showPassword) {\r\n setShowPasswordTime(Date.now() + 5000);\r\n timerRef.current = setTimeout(\r\n () => forceUpdate(Date.now()),\r\n 5000,\r\n );\r\n } else if (showPassword) setShowPasswordTime(0);\r\n }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.otploading}\r\n className={classes.ibtnvisible}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </div>\r\n {Boolean(OTPError) ? (\r\n <FormHelperText style={{ color: \"red\" }}>{OTPError}</FormHelperText>\r\n ) : null}\r\n\r\n <div\r\n style={{\r\n display: \"flex\",\r\n gap: \"10px\",\r\n margin: \"42px 0 0 42px\",\r\n width: \"60%\",\r\n }}\r\n >\r\n <GradientButton\r\n fullWidth\r\n disabled={loginState.otploading || loginState.loading}\r\n onClick={handleCloseEvent}\r\n className={classes.otpButtons}\r\n starticon={\"West\"}\r\n textColor={\"var(--white) !important\"}\r\n sx={{\r\n \"&:disabled\": {\r\n color: \"var(-theme-color3) !important\",\r\n },\r\n }}\r\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\r\n style={{\r\n // border: \"var(--theme-color3) 1px solid\",\r\n // color: \"var(--white)\",\r\n // background: \"var(--white)\",\r\n borderRadius: \"10px\",\r\n minWidth: \"48%\",\r\n }}\r\n >\r\n {t(\"Back\")}\r\n </GradientButton>\r\n <GradientButton\r\n style={{\r\n borderRadius: loginState.otploading ? \"50%\" : \"10px\",\r\n height: loginState.otploading ? \"40px\" : \"100%\",\r\n width: loginState.otploading ? \"0px\" : \"100%\",\r\n minWidth: loginState.otploading ? \"40px\" : \"80px\",\r\n }}\r\n // fullWidth\r\n disabled={loginState.loading}\r\n onClick={ClickEventHandler}\r\n ref={inputButtonRef}\r\n className={classes.otpButtons}\r\n >\r\n {loginState.otploading ? (\r\n <CircularProgress size={25} thickness={4.6} />\r\n ) : (\r\n t(\"VerifyOTP\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Fragment>\r\n );\r\n};\r\n","import { Fragment } from \"react\";\r\nimport { GradientButton } from \"@acuteinfo/common-base\";\r\nimport FingerprintSharpIcon from \"@mui/icons-material/FingerprintSharp\";\r\nimport { CircularProgress, Container, Typography } from \"@mui/material\";\r\nimport { Grid } from \"@mui/material\";\r\nimport \"./verify.css\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const VerifyFinger = ({\r\n classes,\r\n loginState,\r\n verifyFinger,\r\n previousStep,\r\n}) => {\r\n const { t } = useTranslation();\r\n return (\r\n <Fragment>\r\n <Container maxWidth=\"xs\">\r\n <Grid alignItems=\"center\">\r\n <div\r\n style={{\r\n marginRight: \"25px\",\r\n width: \"102%\",\r\n // marginBottom: \"55px\",\r\n }}\r\n >\r\n <br />\r\n <div\r\n style={{\r\n color: \"#000000\",\r\n fontSize: \"34px\",\r\n fontWeight: \"600\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"150%\",\r\n marginBottom: \"10px\",\r\n }}\r\n >\r\n {t(\"BiometrixAuthentication\")}\r\n </div>\r\n <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"18px\",\r\n fontWeight: \"400\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"33px\",\r\n // marginBottom: \"10px\",\r\n }}\r\n >\r\n {t(\"Kindlyplaceyoufinger\")}\r\n </div>\r\n <br />\r\n <Typography variant=\"h5\" style={{ color: \"#000000\" }}>\r\n {t(\"Hello\")} {\"\"}\r\n {` ${\r\n loginState?.username\r\n ? loginState.username.charAt(0).toUpperCase() +\r\n loginState.username.slice(1)\r\n : null\r\n }`}\r\n </Typography>\r\n <br />\r\n <div\r\n className={\r\n loginState?.isBiometricError\r\n ? classes.eFingerUi\r\n : classes.fingerUi\r\n }\r\n >\r\n <div className=\"spinner-wrap\">\r\n <FingerprintSharpIcon\r\n sx={{\r\n fontSize: \"80px\",\r\n opacity: \"0.4\",\r\n borderRadius: \"50%\",\r\n display: \"flex\",\r\n margin: \"0 auto\",\r\n \"&:after\": {\r\n borderBottom: \"2px solid #26A456\",\r\n },\r\n }}\r\n className={\r\n loginState?.isBiometricError ? classes.FingerIcon : null\r\n }\r\n color={loginState?.isBiometricError ? \"error\" : \"inherit\"}\r\n />\r\n {loginState?.isScanning ? (\r\n <>\r\n <div\r\n className=\"spinner-item\"\r\n style={{\r\n border: loginState?.isScanning\r\n ? \"1px solid #949597\"\r\n : \" 1px solid red\",\r\n }}\r\n ></div>\r\n <div\r\n className=\"spinner-item spinner-item--2\"\r\n style={{\r\n border: loginState?.isScanning\r\n ? \"1px solid #949597\"\r\n : \"1px solid red\",\r\n }}\r\n ></div>\r\n <div\r\n className=\"spinner-item spinner-item--3\"\r\n style={{\r\n border: loginState?.isScanning\r\n ? \"1px solid #949597\"\r\n : \"1px solid red\",\r\n }}\r\n ></div>\r\n </>\r\n ) : null}\r\n </div>\r\n </div>\r\n\r\n <div className={classes.biometric}>\r\n <div style={{ marginTop: \"50px\" }}>\r\n <div className={loginState.isScanning ? \"progress\" : \"hide\"}>\r\n <div\r\n className=\"bar\"\r\n style={{ width: loginState.isScanning ? \"30%\" : \"0%\" }}\r\n ></div>\r\n </div>\r\n <h3\r\n style={{\r\n display: \"flex\",\r\n marginTop: \"20px\",\r\n justifyContent: \"space-around\",\r\n color: loginState?.isBiometricError\r\n ? \"rgb(255 0 0 / 65%)\"\r\n : \"inherit\",\r\n }}\r\n >\r\n {loginState?.isBiometricError\r\n ? loginState?.userMessage\r\n : loginState?.loading\r\n ? t(\"Loading\")\r\n : loginState?.isScanning\r\n ? t(\"Scanning\")\r\n : null}\r\n </h3>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n margin: \"42px 0 0 42px\",\r\n // margin: \"38px 0 0 0\",\r\n gap: \"10px\",\r\n }}\r\n >\r\n <GradientButton\r\n fullWidth\r\n disabled={loginState.loading}\r\n onClick={() => {\r\n previousStep(false, \"\");\r\n }}\r\n className={classes.otpButtons}\r\n starticon={\"West\"}\r\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\r\n textColor={\"var(--theme-color3) !important\"}\r\n style={{\r\n border: \"var(--theme-color3)1px solid\",\r\n color: \"var(--theme-color3)\",\r\n background: \"var(--white)\",\r\n borderRadius: \"10px\",\r\n minWidth: \"48%\",\r\n }}\r\n >\r\n {t(\"Back\")}\r\n </GradientButton>\r\n <GradientButton\r\n style={{\r\n borderRadius: loginState.loading ? \"50%\" : \"10px\",\r\n height: loginState.loading ? \"40px\" : \"100%\",\r\n width: loginState.loading ? \"0px\" : \"100%\",\r\n minWidth: loginState.loading ? \"40px\" : \"80px\",\r\n // width: loginState.loading ? \"0px\" : \"90%\",\r\n // minWidth: loginState.loading ? \"40px\" : \"80px\",\r\n }}\r\n disabled={loginState.loading}\r\n onKeyDown={(e) => e.keyCode === 13 && verifyFinger}\r\n onClick={verifyFinger}\r\n className={classes.otpButtons}\r\n >\r\n {loginState.loading ? (\r\n <CircularProgress\r\n size={25}\r\n thickness={4.6}\r\n style={{ color: \"#fff\" }}\r\n />\r\n ) : (\r\n t(\"Verify\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </Grid>\r\n </Container>\r\n </Fragment>\r\n );\r\n};\r\n","import CryptoJS from \"crypto-js\";\n\nconst PASSWORD = \"SUPERACUTE@MKS\";\nconst SALT = \"Ivan Medvedev\";\n\nconst getKeyAndIv = () => {\n const keyIv = CryptoJS.PBKDF2(PASSWORD, CryptoJS.enc.Utf8.parse(SALT), {\n keySize: 48 / 4,\n iterations: 1000,\n hasher: CryptoJS.algo.SHA1,\n });\n\n const key = CryptoJS.lib.WordArray.create(keyIv.words.slice(0, 8), 32);\n const iv = CryptoJS.lib.WordArray.create(keyIv.words.slice(8, 12), 16);\n\n return { key, iv };\n};\n\nfunction wordArrayToUint8Array(wordArray: CryptoJS.lib.WordArray) {\n const { words, sigBytes } = wordArray;\n const u8 = new Uint8Array(sigBytes);\n\n for (let i = 0; i < sigBytes; i++) {\n u8[i] = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n }\n\n return u8;\n}\n\nconst decryptString = (encryptedText: string): string => {\n const { key, iv } = getKeyAndIv();\n\n // Decode outer Base64\n const outerDecoded = CryptoJS.enc.Latin1.stringify(\n CryptoJS.enc.Base64.parse(encryptedText),\n );\n\n // Parse inner Base64\n const cipherParams = CryptoJS.lib.CipherParams.create({\n ciphertext: CryptoJS.enc.Base64.parse(outerDecoded),\n });\n\n const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {\n iv,\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n });\n\n const bytes = wordArrayToUint8Array(decrypted);\n const result = new TextDecoder(\"utf-16le\").decode(bytes);\n\n if (!result) {\n throw new Error(\"Decryption failed\");\n }\n\n return result;\n};\n\nexport default decryptString;\n\nexport const matchFinger = async (rows: any, captureFinger: string) => {\n try {\n if (typeof rows === \"string\") {\n rows = JSON.parse(rows);\n }\n\n for (const element of rows) {\n const galleryTemplate = decryptString(element.IMG_DATA);\n const MFS100Request = {\n GalleryTemplate: galleryTemplate,\n ProbTemplate: captureFinger,\n BioType: \"Iso\",\n };\n const response = await fetch(\"http://localhost:8004/mfs100/verify\", {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(MFS100Request),\n });\n const data = await response.json();\n\n if (data?.ErrorCode === \"0\" && data?.Status) {\n return {\n status: true,\n errorCode: \"0\",\n errorMessage: \"\",\n isError: false,\n sr_cd: element.SR_CD,\n };\n }\n }\n\n return {\n status: false,\n errorCode: \"999\",\n errorMessage: \"Finger not matched\",\n isError: false,\n };\n } catch (err: any) {\n console.error(err);\n return {\n status: false,\n errorCode: \"999\",\n errorMessage: err?.message || \"Something went wrong!\",\n isError: true,\n };\n }\n};\n","export const isBase64 = (str = \"\"): boolean => {\r\n if (typeof str !== \"string\") {\r\n return false;\r\n }\r\n const base64Regex =\r\n /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\r\n\r\n return base64Regex.test(str);\r\n};\r\n","import { useEffect, useState, useRef, useMemo } from \"react\";\r\nimport { useStyles } from \"./style\";\r\nimport { Grid } from \"@mui/material\";\r\nimport { Container } from \"@mui/material\";\r\nimport { utilFunction } from \"@acuteinfo/common-base\";\r\nimport { isBase64 } from \"./utils\";\r\nimport { t } from \"i18next\";\r\n\r\nexport const BankDetails = ({ bannerDetails }: any) => {\r\n const [loginImageURL, setLoginImageURL] = useState<any | null>(null);\r\n const urlObj = useRef<any>(null);\r\n const classes = useStyles();\r\n\r\n const banner = useMemo(() => bannerDetails, []);\r\n\r\n useEffect(() => {\r\n if (Boolean(banner?.bannerImg)) {\r\n if (isBase64(banner?.bannerImg)) {\r\n let blob = utilFunction.base64toBlob(banner?.bannerImg);\r\n urlObj.current =\r\n typeof blob === \"object\" && Boolean(blob)\r\n ? URL.createObjectURL(blob)\r\n : \"\";\r\n setLoginImageURL(urlObj.current);\r\n } else {\r\n setLoginImageURL(banner?.bannerImg);\r\n }\r\n }\r\n }, [banner]);\r\n return (\r\n <>\r\n {/* <Grid container style={{ height: \"100vh\", overflow: \"hidden\" }}> */}\r\n <Grid item xs={6} md={6} lg={6} className={classes.loginLeft}>\r\n <Grid item xs={12} md={12} lg={12} style={{ height: \"70vh\" }}>\r\n <img\r\n alt=\"\"\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"fill\",\r\n objectPosition: \"center\",\r\n }}\r\n src={Boolean(loginImageURL) ? loginImageURL : \"\"}\r\n />\r\n </Grid>\r\n <Grid\r\n item\r\n xs={12}\r\n md={12}\r\n lg={12}\r\n style={{\r\n height: \"30vh\",\r\n background: \"var(--primary-bg)\",\r\n }}\r\n >\r\n <Container maxWidth=\"sm\">\r\n <div\r\n className=\"text\"\r\n style={{\r\n color: \"white\",\r\n fontStyle: \"normal\",\r\n fontSize: \"31px\",\r\n paddingTop: \"30px\",\r\n }}\r\n >\r\n {t(\"WelcometoEnfinityCore\", {\r\n defaultValue: banner?.bannerTitle ?? \"\",\r\n })}\r\n <span style={{ marginLeft: \"8px\", fontWeight: \"900\" }}>\r\n {/* EasyBank */}\r\n </span>\r\n </div>\r\n <div\r\n style={{\r\n lineHeight: \"27px\",\r\n fontSize: \"15px\",\r\n fontWeight: \"500px\",\r\n letterSpacing: \"0.02em\",\r\n color: \"#ebedee\",\r\n maxWidth: \"464px\",\r\n }}\r\n >\r\n {t(\"WelcomeNote\", { defaultValue: banner?.bannerNote ?? \"\" })}\r\n </div>\r\n </Container>\r\n </Grid>\r\n </Grid>\r\n {/* </Grid> */}\r\n </>\r\n );\r\n};\r\n","import {\r\n TextField,\r\n GradientButton,\r\n usePopupContext,\r\n} from \"@acuteinfo/common-base\";\r\n\r\nimport {\r\n CircularProgress,\r\n Container,\r\n FormHelperText,\r\n Grid,\r\n InputAdornment,\r\n} from \"@mui/material\";\r\nimport { Fragment, useRef, useState } from \"react\";\r\n// import { ResetPassword } from \"./api\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport const PasswordRotation = ({\r\n classes,\r\n ResetPassword,\r\n open,\r\n username,\r\n accessToken,\r\n tokenType,\r\n handleClose,\r\n validatePasswordFn,\r\n}) => {\r\n const inputButtonRef = useRef<any>(null);\r\n const { MessageBox } = usePopupContext();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { t } = useTranslation();\r\n const [input, setInput] = useState({\r\n userName: username,\r\n oldpassword: \"\",\r\n password: \"\",\r\n confirmpassword: \"\",\r\n });\r\n const [pwdReset, setPasswordReset] = useState({\r\n isLoading: false,\r\n isNewpwdLoading: false,\r\n isoldPwdError: false,\r\n oldpassworderror: \"\",\r\n isnewpwdError: false,\r\n newpassworderror: \"\",\r\n isconfirmnewpwdError: false,\r\n confirmnewpassworderror: \"\",\r\n });\r\n\r\n const handleCloseEvent = () => {\r\n handleClose(\"\");\r\n };\r\n const ClickEventHandler = async () => {\r\n if (!Boolean(input.oldpassword)) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isoldPwdError: true,\r\n oldpassworderror: \"CurrentPasswordisrequired\",\r\n }));\r\n } else if (!Boolean(input.confirmpassword)) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isconfirmnewpwdError: true,\r\n confirmnewpassworderror: \"Confirmnewpasswordisrequired\",\r\n }));\r\n } else if (input.password !== input.confirmpassword) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isconfirmnewpwdError: true,\r\n confirmnewpassworderror: \"NewPasswordandConfirmPassworddidnotmatched\",\r\n }));\r\n } else if (\r\n !pwdReset?.isoldPwdError &&\r\n !pwdReset?.isnewpwdError &&\r\n !pwdReset?.isconfirmnewpwdError &&\r\n input.oldpassword &&\r\n input.password &&\r\n input?.confirmpassword\r\n ) {\r\n setPasswordReset((values) => ({ ...values, isLoading: true }));\r\n let response = await ResetPassword(\r\n input.userName,\r\n input.oldpassword,\r\n input.password,\r\n accessToken,\r\n tokenType,\r\n );\r\n\r\n if (response.status === \"0\") {\r\n setPasswordReset((values) => ({ ...values, isLoading: false }));\r\n enqueueSnackbar(t(\"Passwordsuccessfullychanged\"), {\r\n variant: \"success\",\r\n });\r\n handleClose(\"0\");\r\n } else {\r\n setPasswordReset((values) => ({ ...values, isLoading: false }));\r\n MessageBox({\r\n messageTitle: \"ValidationFailed\",\r\n message: response.message ?? \"ValidationFailed\",\r\n icon: \"ERROR\",\r\n });\r\n }\r\n }\r\n };\r\n\r\n const handleChange = (event) => {\r\n const name = event.target.name;\r\n let value = event.target.value;\r\n if (name === \"oldpassword\" && Boolean(value)) {\r\n setPasswordReset((values) => ({ ...values, isoldPwdError: false }));\r\n } else if (name === \"password\" && Boolean(value)) {\r\n setPasswordReset((values) => ({ ...values, isnewpwdError: false }));\r\n } else if (name === \"confirmpassword\" && Boolean(value)) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isconfirmnewpwdError: false,\r\n }));\r\n }\r\n setInput((values) => ({ ...values, [name]: value }));\r\n };\r\n\r\n const handleBlur = async (event) => {\r\n const name = event.target.name;\r\n\r\n if (name === \"oldpassword\") {\r\n if (!Boolean(input.oldpassword)) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isoldPwdError: true,\r\n oldpassworderror: \"CurrentPasswordisrequired\",\r\n }));\r\n } else if (\r\n Boolean(input.oldpassword) &&\r\n Boolean(input.password) &&\r\n input.oldpassword === input.password\r\n ) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isnewpwdError: true,\r\n newpassworderror: \"newPasswordCantbeSameasOldPassword\",\r\n }));\r\n }\r\n } else if (name === \"password\") {\r\n if (!Boolean(input.password)) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isnewpwdError: true,\r\n newpassworderror: \"Newpasswordisrequired\",\r\n }));\r\n } else if (\r\n Boolean(input.oldpassword) &&\r\n Boolean(input.password) &&\r\n input.oldpassword === input.password\r\n ) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isnewpwdError: true,\r\n newpassworderror: \"newPasswordCantbeSameasOldPassword\",\r\n }));\r\n } else if (Boolean(input.password)) {\r\n setPasswordReset((values) => ({ ...values, isNewpwdLoading: true }));\r\n const { validateStatus, validateData } = await validatePasswordFn({\r\n USER_ID: input.userName,\r\n PASSWORD: input.password,\r\n SCREEN_REF: \"LOGIN\",\r\n });\r\n\r\n if (validateData?.O_STATUS !== \"0\") {\r\n setPasswordReset((values) => ({ ...values, isNewpwdLoading: false }));\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isnewpwdError: true,\r\n newpassworderror: validateData?.O_MESSAGE,\r\n }));\r\n } else {\r\n setPasswordReset((values) => ({ ...values, isNewpwdLoading: false }));\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isnewpwdError: false,\r\n newpassworderror: \"\",\r\n }));\r\n }\r\n }\r\n } else if (name === \"confirmpassword\") {\r\n if (!Boolean(input.confirmpassword)) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isconfirmnewpwdError: true,\r\n confirmnewpassworderror: \"Confirmnewpasswordisrequired\",\r\n }));\r\n } else if (\r\n Boolean(input.password) &&\r\n input.password !== input.confirmpassword\r\n ) {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isconfirmnewpwdError: true,\r\n confirmnewpassworderror: \"NewPasswordandConfirmPassworddidnotmatched\",\r\n }));\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Container maxWidth=\"xs\">\r\n <Grid alignItems=\"center\">\r\n <div\r\n style={{\r\n color: \"#000000 !important\",\r\n fontSize: \"30px\",\r\n fontWeight: \"600\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n }}\r\n >\r\n <h3>{t(\"PasswordRotation\")}</h3>\r\n </div>\r\n <div className={classes.formWrap}>\r\n <TextField\r\n label={t(\"UserId\")}\r\n placeholder={t(\"EnterUserId\")}\r\n fullWidth\r\n type={\"text\"}\r\n name=\"userName\"\r\n value={input.userName || \"\"}\r\n onChange={handleChange}\r\n InputLabelProps={{ shrink: true }}\r\n disabled={true}\r\n autoComplete=\"off\"\r\n inputProps={{ maxLength: 16 }}\r\n style={{ paddingBottom: \"8px\" }}\r\n />\r\n <TextField\r\n autoFocus={true}\r\n label={t(\"CurrentPassword\")}\r\n placeholder={t(\"EnterCurrentPassword\")}\r\n fullWidth\r\n type={\"password\"}\r\n name=\"oldpassword\"\r\n value={input.oldpassword || \"\"}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n error={pwdReset.isoldPwdError}\r\n helperText={\r\n pwdReset.isoldPwdError ? t(pwdReset.oldpassworderror) : \"\"\r\n }\r\n InputLabelProps={{ shrink: true }}\r\n disabled={pwdReset.isLoading}\r\n autoComplete=\"off\"\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n inputProps={{ maxLength: 16 }}\r\n style={{ paddingBottom: \"8px\" }}\r\n />\r\n <TextField\r\n label={t(\"NewPassword\")}\r\n placeholder={t(\"EnterNewPassword\")}\r\n fullWidth\r\n type={\"password\"}\r\n name=\"password\"\r\n value={input.password || \"\"}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n error={pwdReset.isnewpwdError}\r\n helperText={\r\n pwdReset.isnewpwdError ? t(pwdReset.newpassworderror) : \"\"\r\n }\r\n InputLabelProps={{ shrink: true }}\r\n disabled={pwdReset.isLoading || pwdReset.isNewpwdLoading}\r\n autoComplete=\"off\"\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n inputProps={{ maxLength: 16 }}\r\n InputProps={{\r\n endAdornment: pwdReset.isNewpwdLoading ? (\r\n <InputAdornment position=\"end\">\r\n <CircularProgress\r\n sx={{ color: \"var(--theme-color3)\" }}\r\n size={25}\r\n thickness={4.6}\r\n />\r\n </InputAdornment>\r\n ) : null,\r\n }}\r\n style={{ paddingBottom: \"8px\" }}\r\n />\r\n <TextField\r\n label={t(\"ConfirmNewPassword\")}\r\n placeholder={t(\"Enterconfirmnewpassword\")}\r\n fullWidth\r\n type={\"password\"}\r\n name=\"confirmpassword\"\r\n value={input.confirmpassword || \"\"}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n error={pwdReset.isconfirmnewpwdError}\r\n helperText={\r\n pwdReset.isconfirmnewpwdError\r\n ? t(pwdReset.confirmnewpassworderror)\r\n : \"\"\r\n }\r\n InputLabelProps={{ shrink: true }}\r\n disabled={pwdReset.isLoading}\r\n autoComplete=\"off\"\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n inputProps={{ maxLength: 16 }}\r\n style={{ paddingBottom: \"8px\" }}\r\n />\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n gap: \"10px\",\r\n margin: \"20px 0 0 10px\",\r\n width: \"94%\",\r\n }}\r\n >\r\n <GradientButton\r\n fullWidth\r\n disabled={pwdReset.isLoading}\r\n onClick={handleCloseEvent}\r\n className={classes.otpButtons}\r\n style={{\r\n border: \"var(--theme-color3)1px solid\",\r\n color: \"var(--theme-color3)\",\r\n // pebbackground: \"var(--white)\",\r\n borderRadius: \"10px\",\r\n }}\r\n >\r\n {t(\"Back\")}\r\n </GradientButton>\r\n <GradientButton\r\n style={{\r\n borderRadius: pwdReset.isLoading ? \"50%\" : \"10px\",\r\n height: pwdReset.isLoading ? \"40px\" : \"100%\",\r\n width: pwdReset.isLoading ? \"0px\" : \"100%\",\r\n minWidth: pwdReset.isLoading ? \"40px\" : \"80px\",\r\n }}\r\n fullWidth\r\n disabled={pwdReset.isLoading}\r\n onClick={ClickEventHandler}\r\n ref={inputButtonRef}\r\n className={classes.otpButtons}\r\n >\r\n {pwdReset.isLoading ? (\r\n <CircularProgress size={25} thickness={4.6} />\r\n ) : (\r\n t(\"Update\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </Grid>\r\n </Container>\r\n </Fragment>\r\n );\r\n};\r\n","import { usePopupContext, utilFunction } from \"@acuteinfo/common-base\";\r\n\r\nimport { useReducer, useEffect, useState, useRef } from \"react\";\r\nimport { useStyles } from \"./style\";\r\nimport { UsernamePasswordField } from \"./usernamePassword\";\r\nimport { OTPModel, OTPModelForm } from \"./otpPopup\";\r\nimport { VerifyFinger } from \"./verifyFinger\";\r\nimport * as API from \"./api\";\r\nimport { matchFinger } from \"./biometric\";\r\nimport { Grid, Tooltip } from \"@mui/material\";\r\nimport { BankDetails } from \"./bankDetails\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { PasswordRotation } from \"./passwordRotation\";\r\nimport { isBase64 } from \"./utils\";\r\nimport {\r\n OTPResendRequestFnType,\r\n ResetPasswordFnType,\r\n ValidatePasswordFnType,\r\n VerifyOtpFnType,\r\n VerifyUsernamePassFnType,\r\n} from \"pages/types\";\r\n\r\nconst inititalState = {\r\n username: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n loading: false,\r\n otploading: false,\r\n isError: false,\r\n isUsernameError: false,\r\n isPasswordError: false,\r\n userMessage: \"\",\r\n OtpuserMessage: \"\",\r\n userMessageforpassword: \"\",\r\n userMessageforusername: \"\",\r\n currentFlow: \"username\",\r\n transactionID: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n contactUser: \"\",\r\n access_token: \"\",\r\n token_type: \"\",\r\n otpmodelClose: false,\r\n authType: \"\",\r\n isScanning: false,\r\n auth_type: \"O\",\r\n otpValidFor: 60,\r\n otpSentText: \"\",\r\n description: \"\",\r\n};\r\n\r\nconst reducer = (state, action) => {\r\n switch (action.type) {\r\n case \"inititateUserFingerVerification\":\r\n case \"inititateOTPVerification\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n isError: false,\r\n isUsernameError: false,\r\n isPasswordError: false,\r\n isOTPError: false,\r\n isBiometricError: false,\r\n userMessage: \"\",\r\n };\r\n }\r\n case \"inititateUserFingerScanner\": {\r\n return { ...state, isScanning: true, isBiometricError: false };\r\n }\r\n case \"usernameandpasswordrequired\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: true,\r\n isUsernameError: true,\r\n isPasswordError: true,\r\n otploading: false,\r\n userMessage: action?.payload?.error,\r\n userMessageforpassword: action?.payload?.errorPassword,\r\n userMessageforusername: action?.payload?.errorUsername,\r\n username: \"\",\r\n description: \"\",\r\n transactionID: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n contactUser: \"\",\r\n };\r\n }\r\n case \"passwordVerificationFailure\":\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: true,\r\n isUsernameError: false,\r\n isPasswordError: true,\r\n otploading: false,\r\n userMessage: action?.payload?.error,\r\n userMessageforpassword: action?.payload?.errorPassword,\r\n username: \"\",\r\n description: \"\",\r\n transactionID: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n };\r\n case \"usernameVerificationFailure\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: true,\r\n isUsernameError: true,\r\n isPasswordError: false,\r\n otploading: false,\r\n userMessage: action?.payload?.error,\r\n userMessageforusername: action?.payload?.errorUsername,\r\n username: \"\",\r\n description: \"\",\r\n transactionID: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n contactUser: \"\",\r\n };\r\n }\r\n case \"inititatePasswordVerification\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n isError: false,\r\n isUsernameError: false,\r\n isPasswordError: false,\r\n otploading: false,\r\n userMessage: \"\",\r\n userMessageforusername: \"\",\r\n userMessageforpassword: \"\",\r\n username: \"\",\r\n description: \"\",\r\n transactionID: \"\",\r\n access_token: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n contactUser: \"\",\r\n };\r\n }\r\n case \"passwordRotation\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n username: action?.payload?.username,\r\n description: action?.payload?.description ?? \"\",\r\n access_token: action?.payload?.access_token,\r\n token_type: action?.payload?.token_type,\r\n };\r\n }\r\n case \"passwordRotationsuccess\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otpmodelClose: Boolean(action?.payload?.otpmodelclose),\r\n };\r\n }\r\n case \"passwordVerificationSuccessful\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: false,\r\n transactionID: action?.payload?.transactionID,\r\n comapanyCD: action?.payload?.comapanyCD,\r\n branchCD: action?.payload?.branchCD,\r\n contactUser: action?.payload?.contactUser,\r\n username: action?.payload?.username,\r\n description: action?.payload?.description,\r\n auth_type: action?.payload?.auth_type,\r\n OtpuserMessage: \"\",\r\n access_token: action?.payload?.access_token,\r\n token_type: action?.payload?.token_type,\r\n otpmodelClose: false,\r\n currentFlow: \"OTP\",\r\n authType: action?.payload?.authType,\r\n auth_data: action?.payload?.auth_data,\r\n otpValidFor: action?.payload?.otpValidFor,\r\n otpSentText: action?.payload?.otpSentText,\r\n totpReg: action?.payload?.totpReg,\r\n secretTocken: action?.payload?.secretTocken,\r\n secretTockenQR: action?.payload?.secretTockenQR,\r\n };\r\n }\r\n case \"inititatebiometricVerification\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n otploading: true,\r\n OtpuserMessage: \"\",\r\n otpmodelClose: false,\r\n };\r\n }\r\n case \"biometricVerificationFailure\":\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: true,\r\n isBiometricError: true,\r\n userMessage: action?.payload?.error,\r\n isScanning: false,\r\n };\r\n case \"biometricVerificationSuccessful\":\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: false,\r\n isBiometricError: false,\r\n state: action.payload,\r\n isScanning: false,\r\n };\r\n case \"OTPVerificationComplate\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: false,\r\n OtpuserMessage: \"\",\r\n };\r\n }\r\n case \"OTPVerificationFailed\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: false,\r\n OtpuserMessage: action?.payload?.error,\r\n otpmodelClose: Boolean(action?.payload?.otpmodelclose),\r\n };\r\n }\r\n case \"OTPResendSuccess\": {\r\n return {\r\n ...state,\r\n transactionID: action?.payload?.transactionID,\r\n };\r\n }\r\n case \"backToUsernameVerification\": {\r\n return {\r\n ...inititalState,\r\n isPasswordError: action?.payload?.isError,\r\n userMessageforpassword: action?.payload?.errorMessage,\r\n };\r\n }\r\n\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\ninterface AuthControllerProps {\r\n bannerDetails: {\r\n bannerImg: string;\r\n bannerTitle: string;\r\n bannerNote: string;\r\n };\r\n logoUrl?: string;\r\n logoTitle?: string;\r\n loginFn: Function;\r\n veirfyUsernameandPassword: VerifyUsernamePassFnType;\r\n validatePasswordFn: ValidatePasswordFnType;\r\n verifyOTP: VerifyOtpFnType;\r\n OTPResendRequest: OTPResendRequestFnType;\r\n ResetPassword: ResetPasswordFnType;\r\n LanguageComponent?: React.ComponentType<any>;\r\n forgotPasswordEndpoint: string;\r\n /**\r\n * Prevents characters input from specified string in username field\r\n *\r\n * e.g. \"!@#\". Characters `!`, `@`, `#` will be prevented in username field\r\n */\r\n preventSpecialChars?: string | null;\r\n /**\r\n * Callback to run on otp verify fail\r\n * @param e Error Object\r\n * @returns void\r\n */\r\n onOtpVerifyFailFn?: (e: any) => void;\r\n}\r\n\r\nexport const AuthControllerWrapper: React.FC<AuthControllerProps> = ({\r\n bannerDetails,\r\n logoUrl,\r\n logoTitle,\r\n loginFn,\r\n veirfyUsernameandPassword,\r\n validatePasswordFn,\r\n verifyOTP,\r\n OTPResendRequest,\r\n ResetPassword,\r\n LanguageComponent,\r\n forgotPasswordEndpoint,\r\n preventSpecialChars,\r\n onOtpVerifyFailFn,\r\n}) => {\r\n const classes = useStyles();\r\n const [loginState, dispath] = useReducer(reducer, inititalState);\r\n const [openpwdreset, setOpenPwdReset] = useState(false);\r\n const failureCount = useRef(0);\r\n const [dashboardLogoURL, setDashboardLogoURL] = useState<any | null>(null);\r\n const urlObj = useRef<any>(null);\r\n const { t } = useTranslation();\r\n const otpResendRef = useRef(1);\r\n const { MessageBox } = usePopupContext();\r\n\r\n useEffect(() => {\r\n if (Boolean(logoUrl)) {\r\n if (isBase64(logoUrl)) {\r\n let blob = utilFunction.base64toBlob(logoUrl);\r\n urlObj.current =\r\n typeof blob === \"object\" && Boolean(blob)\r\n ? URL.createObjectURL(blob)\r\n : \"\";\r\n setDashboardLogoURL(urlObj.current);\r\n } else {\r\n setDashboardLogoURL(logoUrl);\r\n }\r\n }\r\n }, [logoUrl]);\r\n\r\n const verifyUsernamePassword = async (username, password) => {\r\n if (Boolean(username) && Boolean(password)) {\r\n dispath({ type: \"inititatePasswordVerification\" });\r\n try {\r\n const {\r\n status = \"\",\r\n data = null,\r\n message = \"\",\r\n responseType = \"\",\r\n access_token = null,\r\n } = await veirfyUsernameandPassword(username, password);\r\n\r\n if (status === \"0\" && responseType === \"S\") {\r\n dispath({\r\n type: \"passwordRotation\",\r\n payload: {\r\n username: username,\r\n access_token: access_token?.access_token || \"\",\r\n token_type: access_token?.token_type || \"\",\r\n },\r\n });\r\n setOpenPwdReset(true);\r\n } else if (status === \"0\") {\r\n dispath({\r\n type: \"passwordVerificationSuccessful\",\r\n payload: {\r\n comapanyCD: data?.BASE_COMP_CD,\r\n branchCD: data?.BASE_BRANCH_CD,\r\n contactUser: data?.CONTACT2,\r\n transactionID: data?.REQUEST_CD,\r\n username: username,\r\n description: data?.DESCRIPTION,\r\n access_token: access_token?.access_token,\r\n token_type: access_token?.token_type,\r\n authType: data?.AUTH_TYPE,\r\n auth_data: data?.AUTH_DATA,\r\n otpValidFor: data?.OTP_VALID,\r\n otpSentText: data?.OTP_SENT_TEXT,\r\n totpReg: data?.TOTP_REG,\r\n secretTocken: data?.SECRET_TOCKEN,\r\n secretTockenQR: data?.SECRET_TOCKEN_QR,\r\n },\r\n });\r\n if (data?.STATUS === \"0\") {\r\n for (let i = 0; i < data?.ALERT_MSG_LIST.length; i++) {\r\n await MessageBox({\r\n messageTitle: \"Password Alert\",\r\n message: data?.ALERT_MSG_LIST[i],\r\n });\r\n }\r\n }\r\n } else {\r\n dispath({\r\n type: \"passwordVerificationFailure\",\r\n payload: {\r\n error: message,\r\n errorPassword: t(\"UserIDPasswordisincorrect\", {\r\n defaultValue: message,\r\n }),\r\n },\r\n });\r\n }\r\n } catch (err) {\r\n throw new Error(\r\n \"Error occurred while verifying username and password: \" + err,\r\n );\r\n }\r\n } else if (!Boolean(username) && !Boolean(password)) {\r\n dispath({\r\n type: \"usernameandpasswordrequired\",\r\n payload: {\r\n error: \"UsernamenandPasswordisRequired\",\r\n errorUsername: \"UsernameisRequired\",\r\n errorPassword: \"PasswordisRequired\",\r\n },\r\n });\r\n } else if (!Boolean(username)) {\r\n dispath({\r\n type: \"usernameVerificationFailure\",\r\n payload: {\r\n error: \"UsernameisRequired\",\r\n errorUsername: \"UsernameisRequired\",\r\n },\r\n });\r\n } else {\r\n dispath({\r\n type: \"passwordVerificationFailure\",\r\n payload: {\r\n error: \"PasswordisRequired\",\r\n errorPassword: \"PasswordisRequired\",\r\n },\r\n });\r\n }\r\n };\r\n\r\n const VerifyOTP = async (OTPNumber) => {\r\n try {\r\n if (Boolean(OTPNumber) && OTPNumber.toString().length === 6) {\r\n dispath({ type: \"inititateOTPVerification\" });\r\n const { status, data, message } = await verifyOTP(\r\n loginState.transactionID,\r\n // loginState.app_transactionId,\r\n loginState.username,\r\n OTPNumber,\r\n loginState.access_token,\r\n loginState.token_type,\r\n loginState.authType,\r\n );\r\n if (status === \"0\") {\r\n // try {\r\n // audio.play();\r\n // } catch (error) {\r\n // console.log(error);\r\n // }\r\n dispath({ type: \"OTPVerificationComplate\" });\r\n loginFn({\r\n ...data,\r\n totpReg: loginState?.totpReg,\r\n secretTocken: loginState?.secretTocken,\r\n secretTockenQR: loginState?.secretTockenQR,\r\n });\r\n } else if (status === \"999\") {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: message, otpmodelclose: true },\r\n });\r\n // enqueueSnackbar(message, { variant: \"error\" });\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: message, otpmodelclose: false },\r\n });\r\n }\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: \"Please enter a 6 digit OTP number\" },\r\n });\r\n }\r\n } catch (e: any) {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: e?.message ?? \"Otp verification Failed!\" },\r\n });\r\n if (typeof onOtpVerifyFailFn === \"function\") {\r\n onOtpVerifyFailFn(e);\r\n }\r\n }\r\n };\r\n\r\n const handlePasswordRotationClose = (flag) => {\r\n if (flag === \"0\") {\r\n dispath({\r\n type: \"passwordRotationsuccess\",\r\n payload: { otpmodelclose: true },\r\n });\r\n }\r\n setOpenPwdReset(false);\r\n };\r\n const changeUserName = (isError = false, errorMessage = \"\") => {\r\n dispath({\r\n type: \"backToUsernameVerification\",\r\n payload: {\r\n isError: isError,\r\n errorMessage: errorMessage,\r\n },\r\n });\r\n };\r\n const verifyFinger = async () => {\r\n try {\r\n dispath({ type: \"inititateUserFingerScanner\" });\r\n const fingerResponse = await API.capture();\r\n if (fingerResponse?.ErrorCode === \"0\") {\r\n dispath({ type: \"inititateUserFingerVerification\" });\r\n const promise: any = await matchFinger(\r\n loginState.auth_data,\r\n fingerResponse.IsoTemplate,\r\n );\r\n if (promise.isError) {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: promise?.errorMessage ?? \"Something went wrong.\",\r\n },\r\n });\r\n } else {\r\n const { status, data, message } = await verifyOTP(\r\n loginState.transactionID,\r\n loginState.username,\r\n String(promise?.sr_cd ?? \"0\"),\r\n loginState.access_token,\r\n loginState.token_type,\r\n loginState.authType,\r\n promise.status ? \"Y\" : \"N\",\r\n );\r\n if (status === \"0\" && promise.status) {\r\n dispath({ type: \"biometricVerificationSuccessful\" });\r\n loginFn(data);\r\n } else if (status === \"0\" && !promise.status) {\r\n failureCount.current = failureCount.current + 1;\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: \"Finger Not Match.Please Try Again\",\r\n },\r\n });\r\n if (failureCount.current >= 3)\r\n changeUserName(true, \"Finger Not Match.Please Try Again\");\r\n } else if (status === \"99\") {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: message ?? \"Finger Not Match.Please Try Again\",\r\n },\r\n });\r\n } else if (status === \"999\") {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: message ?? \"Finger Not Match.Please Try Again\",\r\n },\r\n });\r\n changeUserName(\r\n true,\r\n message ?? \"Finger Not Match.Please Try Again\",\r\n );\r\n } else {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: message ?? \"Finger Not Match.Please Try Again\",\r\n },\r\n });\r\n }\r\n }\r\n } else {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: fingerResponse?.ErrorMessage ?? t(\"MFS100NotFound\"),\r\n },\r\n });\r\n }\r\n } catch (e: any) {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: e?.message ?? t(\"Unknownerroroccured\"),\r\n },\r\n });\r\n }\r\n };\r\n return (\r\n <>\r\n <Grid container style={{ height: \"100vh\", overflow: \"hidden\" }}>\r\n <BankDetails bannerDetails={bannerDetails} />\r\n <Grid item xs={11} md={6} lg={6} sm={6}>\r\n {logoUrl ? (\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-end\"\r\n alignItems=\"center\"\r\n padding={\"25px\"}\r\n maxWidth={\"210px\"}\r\n ml={\"auto\"}\r\n >\r\n <Tooltip describeChild title={logoTitle ?? \"\"}>\r\n <img\r\n src={Boolean(dashboardLogoURL) ? dashboardLogoURL : \"\"}\r\n alt=\"Logo\"\r\n width={\"100%\"}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n ) : null}\r\n\r\n {LanguageComponent ? (\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-end\"\r\n alignItems=\"center\"\r\n padding={\"0 35px 0 0\"}\r\n maxWidth={\"180px\"}\r\n ml={\"auto\"}\r\n >\r\n <LanguageComponent />\r\n </Grid>\r\n ) : null}\r\n\r\n {openpwdreset ? (\r\n <PasswordRotation\r\n classes={classes}\r\n ResetPassword={ResetPassword}\r\n open={openpwdreset}\r\n username={loginState.username}\r\n accessToken={loginState.access_token}\r\n tokenType={loginState.token_type}\r\n handleClose={handlePasswordRotationClose}\r\n validatePasswordFn={validatePasswordFn}\r\n />\r\n ) : (\r\n <>\r\n {loginState.currentFlow === \"username\" ? (\r\n <UsernamePasswordField\r\n key=\"username\"\r\n classes={classes}\r\n loginState={loginState}\r\n verifyUsernamePassword={verifyUsernamePassword}\r\n forgotPasswordEndpoint={forgotPasswordEndpoint}\r\n preventSpecialChars={preventSpecialChars}\r\n />\r\n ) : (\r\n <>\r\n {loginState.authType === \"OTP\" ||\r\n loginState.authType === \"TOTP\" ? (\r\n <OTPModel\r\n key=\"otp\"\r\n OTPResendRequest={OTPResendRequest}\r\n classes={classes}\r\n loginState={loginState}\r\n VerifyOTP={VerifyOTP}\r\n previousStep={changeUserName}\r\n OTPError={t(loginState?.OtpuserMessage ?? \"\")}\r\n setOTPError={(error) => {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: error },\r\n });\r\n }}\r\n open={true}\r\n handleClose={changeUserName}\r\n resendFlag={\"LOGIN\"}\r\n setNewRequestID={(newRequestID) => {\r\n dispath({\r\n type: \"OTPResendSuccess\",\r\n payload: { transactionID: newRequestID },\r\n });\r\n otpResendRef.current = otpResendRef.current + 1;\r\n }}\r\n otpresendCount={otpResendRef.current}\r\n />\r\n ) : (\r\n <VerifyFinger\r\n key=\"biometric\"\r\n classes={classes}\r\n loginState={loginState}\r\n verifyFinger={verifyFinger}\r\n previousStep={changeUserName}\r\n />\r\n )}\r\n </>\r\n )}\r\n </>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n};\r\n","export const capture = async () => {\r\n var MFS100Request = {\r\n Quality: 60,\r\n TimeOut: 10,\r\n };\r\n var jsondata = JSON.stringify(MFS100Request);\r\n const rawResponse = await fetch(\"http://localhost:8004/mfs100/capture\", {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: jsondata,\r\n });\r\n const content = await rawResponse.json();\r\n return content;\r\n};\r\n","import { TextField, GradientButton } from \"@acuteinfo/common-base\";\r\n\r\nimport { Fragment, useState, useEffect, useRef } from \"react\";\r\nimport {\r\n CircularProgress,\r\n FormHelperText,\r\n IconButton,\r\n InputAdornment,\r\n} from \"@mui/material\";\r\nimport Visibility from \"@mui/icons-material/Visibility\";\r\nimport VisibilityOff from \"@mui/icons-material/VisibilityOff\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport const ForgotPasswordFields = ({\r\n classes,\r\n loginState,\r\n onSubmit,\r\n navigate,\r\n loginPageEndpoint,\r\n preventSpecialChars,\r\n validatePassword,\r\n}) => {\r\n const [input, setInput] = useState({\r\n userName: loginState.workingState === 1 ? loginState?.username : \"\",\r\n mobileno: \"\",\r\n password: \"\",\r\n confirmpassword: \"\",\r\n });\r\n const inputRef = useRef<any>(null);\r\n const inputPassRef = useRef<any>(null);\r\n const inputButtonRef = useRef<any>(null);\r\n const [showPasswordTime, setShowPasswordTime] = useState(0);\r\n const [showConfirmPasswordTime, setShowConfirmPasswordTime] = useState(0);\r\n const showPassword = Date.now() < showPasswordTime;\r\n const showConfirmPassword = Date.now() < showConfirmPasswordTime;\r\n const [, forceUpdate] = useState<any | null>();\r\n const timerRef = useRef<any>(null);\r\n\r\n useEffect(() => {\r\n return () => clearTimeout(timerRef.current);\r\n }, []);\r\n // const navigate = useNavigate();\r\n const { t } = useTranslation();\r\n const handleChange = (event) => {\r\n const name = event.target.name;\r\n let value = event.target.value;\r\n if (\r\n name === \"userName\" &&\r\n preventSpecialChars &&\r\n value &&\r\n preventSpecialChars.split(\"\").some((char) => value.includes(char))\r\n ) {\r\n return;\r\n }\r\n if (name === \"userName\" && value) {\r\n loginState.isUsernameError = false;\r\n }\r\n if (name === \"mobileno\" && value) {\r\n value = value.replace(/\\D/g, \"\");\r\n if (Boolean(value)) {\r\n loginState.isMobileError = false;\r\n }\r\n }\r\n setInput((values) => ({ ...values, [name]: value }));\r\n };\r\n useEffect(() => {\r\n if (loginState.workingState === 1) {\r\n setTimeout(() => {\r\n inputPassRef?.current?.focus?.();\r\n }, 2000);\r\n }\r\n }, [loginState.workingState]);\r\n return (\r\n <Fragment>\r\n <div className={classes.formWrap}>\r\n <TextField\r\n autoFocus={true}\r\n label={t(\"UserID\")}\r\n placeholder={String(t(\"UserID\"))}\r\n fullWidth\r\n type={\"text\"}\r\n name=\"userName\"\r\n value={input.userName.trimStart() || \"\"}\r\n onChange={handleChange}\r\n error={loginState.isUsernameError}\r\n helperText={\r\n loginState.isUsernameError\r\n ? t(loginState.userMessageforusername)\r\n : \"\"\r\n }\r\n InputLabelProps={{ shrink: true }}\r\n disabled={\r\n loginState.loading\r\n ? true\r\n : loginState.workingState === 0\r\n ? false\r\n : true\r\n }\r\n autoComplete=\"off\"\r\n ref={inputRef}\r\n inputProps={{ maxLength: 16 }}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n style={{ paddingBottom: \"8px\" }}\r\n />\r\n {loginState.workingState === 0 ? (\r\n <TextField\r\n label={t(\"MobileNo\")}\r\n placeholder={t(\"EnterMobileNo\")}\r\n // placeholder={String(t(\"EnterMobileNo\"))}\r\n fullWidth\r\n type={\"text\"}\r\n name=\"mobileno\"\r\n value={input.mobileno.trimStart() || \"\"}\r\n onChange={handleChange}\r\n error={loginState.isMobileError}\r\n helperText={\r\n loginState.isMobileError\r\n ? t(loginState.userMessageforMobileno)\r\n : \"\"\r\n }\r\n InputLabelProps={{ shrink: true }}\r\n disabled={\r\n loginState.loading\r\n ? true\r\n : loginState.workingState === 0\r\n ? false\r\n : true\r\n }\r\n autoComplete=\"off\"\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n inputProps={{ maxLength: 13 }}\r\n style={{ paddingBottom: \"8px\" }}\r\n />\r\n ) : null}\r\n {loginState.workingState === 1 ? (\r\n <>\r\n <TextField\r\n autoFocus={true}\r\n label={t(\"Password\")}\r\n placeholder={t(\"EnterPassword\")}\r\n fullWidth\r\n type={showPassword ? \"text\" : \"password\"}\r\n name=\"password\"\r\n value={input.password.trimStart() || \"\"}\r\n onChange={handleChange}\r\n onBlur={async () => await validatePassword(input, \"P\")}\r\n error={loginState.isPasswordError}\r\n helperText={\r\n loginState.isPasswordError\r\n ? t(loginState.userMessageforPassword)\r\n : \"\"\r\n }\r\n InputLabelProps={{ shrink: true }}\r\n disabled={loginState.loading}\r\n autoComplete=\"off\"\r\n ref={inputPassRef}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n InputProps={{\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n {loginState.passwordValidateloading ? (\r\n <CircularProgress\r\n color=\"secondary\"\r\n variant=\"indeterminate\"\r\n size={24}\r\n thickness={4.6}\r\n />\r\n ) : null}\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n onClick={() => {\r\n if (!showPassword) {\r\n setShowPasswordTime(Date.now() + 5000);\r\n timerRef.current = setTimeout(\r\n () => forceUpdate(Date.now()),\r\n 5000,\r\n );\r\n } else if (showPassword) setShowPasswordTime(0);\r\n }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.loading}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n }}\r\n inputProps={{ maxLength: 16 }}\r\n style={{ paddingBottom: \"8px\" }}\r\n />\r\n <TextField\r\n label={t(\"ConfirmPassword\")}\r\n placeholder={String(t(\"EnterConfirmPassword\"))}\r\n fullWidth\r\n type={showConfirmPassword ? \"text\" : \"password\"}\r\n name=\"confirmpassword\"\r\n value={input.confirmpassword.trimStart() || \"\"}\r\n onChange={handleChange}\r\n onBlur={async () => await validatePassword(input, \"C\")}\r\n error={loginState.isConfirmPasswordError}\r\n helperText={\r\n loginState.isConfirmPasswordError\r\n ? t(loginState.userMessageforconfirmPassword)\r\n : \"\"\r\n }\r\n InputLabelProps={{ shrink: true }}\r\n disabled={loginState.loading}\r\n autoComplete=\"off\"\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n InputProps={{\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n onClick={() => {\r\n if (!showConfirmPassword) {\r\n setShowConfirmPasswordTime(Date.now() + 5000);\r\n timerRef.current = setTimeout(\r\n () => forceUpdate(Date.now()),\r\n 5000,\r\n );\r\n } else if (showConfirmPassword)\r\n setShowConfirmPasswordTime(0);\r\n }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.loading}\r\n >\r\n {showConfirmPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n }}\r\n inputProps={{ maxLength: 16 }}\r\n style={{ paddingBottom: \"8px\" }}\r\n />\r\n </>\r\n ) : null}\r\n {loginState.isApiError ? (\r\n <FormHelperText style={{ color: \"red\" }}>\r\n {loginState.apierrorMessage}\r\n </FormHelperText>\r\n ) : null}\r\n <div\r\n style={{\r\n marginTop: \"20px\",\r\n display: \"flex\",\r\n flexDirection: \"row-reverse\",\r\n }}\r\n >\r\n <div\r\n style={{\r\n flex: \"auto\",\r\n textAlign: \"center\",\r\n marginTop: \"5px\",\r\n marginBottom: \"17px\",\r\n }}\r\n >\r\n <div>\r\n <GradientButton\r\n style={{ borderRadius: \"10px\", marginRight: \"5px\" }}\r\n // fullWidth\r\n\r\n disabled={loginState.loading}\r\n onClick={() => {\r\n navigate(loginPageEndpoint);\r\n }}\r\n starticon={\"West\"}\r\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\r\n >\r\n {t(\"backtologin\")}\r\n </GradientButton>\r\n\r\n <GradientButton\r\n style={{ borderRadius: \"10px\" }}\r\n disabled={loginState.loading}\r\n onClick={() => {\r\n onSubmit(input, loginState.workingState);\r\n }}\r\n ref={inputButtonRef}\r\n endicon={loginState.loading ? undefined : \"East\"}\r\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\r\n >\r\n {loginState.loading ? (\r\n <CircularProgress size={25} thickness={4.6} />\r\n ) : (\r\n t(\"Next\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n","import { useReducer, useState, useRef, useEffect } from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useStyles } from \"./style\";\r\nimport { ForgotPasswordFields } from \"./forgotPasswordField\";\r\nimport { OTPModelForm } from \"./otpPopup\";\r\nimport { utilFunction } from \"@acuteinfo/common-base\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { Container, Grid, Tooltip } from \"@mui/material\";\r\nimport { BankDetails } from \"./bankDetails\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { isBase64 } from \"./utils\";\r\nimport {\r\n OTPResendRequestFnType,\r\n UpdateNewPasswordFnType,\r\n ValidatePasswordFnType,\r\n VerifyOtpForPWDResetFnType,\r\n VerifyUsernameMobileFnType,\r\n} from \"pages/types\";\r\n\r\nconst inititalState = {\r\n isUsernameError: false,\r\n userMessageforusername: \"\",\r\n loading: false,\r\n isMobileError: false,\r\n userMessageforMobileno: \"\",\r\n isPasswordError: false,\r\n userMessageforPassword: \"\",\r\n isConfirmPasswordError: false,\r\n userMessageforconfirmPassword: \"\",\r\n workingState: 0,\r\n isApiError: false,\r\n apierrorMessage: \"\",\r\n otploading: false,\r\n OtpuserMessage: \"\",\r\n otpmodelClose: false,\r\n requestCd: \"\",\r\n username: \"\",\r\n description: \"\",\r\n auth_type: \"O\",\r\n transactionID: \"\",\r\n contactUser: \"\",\r\n forgotOtpSentText: \"\",\r\n newPasswordMessage: \"\",\r\n passwordValidateloading: false,\r\n confirmPasswordValidateloading: false,\r\n};\r\nconst reducer = (state, action) => {\r\n switch (action.type) {\r\n case \"verifyUserNameandMobileNoFailed\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isUsernameError: action?.payload?.isUsernameError ?? false,\r\n isMobileError: action?.payload?.isMobileError ?? false,\r\n userMessageforusername: action?.payload?.userMessageforusername ?? \"\",\r\n userMessageforMobileno: action?.payload?.userMessageforMobileno ?? \"\",\r\n isApiError: action?.payload?.isApiError ?? false,\r\n apierrorMessage: action?.payload?.apierrorMessage ?? \"\",\r\n requestCd: \"\",\r\n username: \"\",\r\n description: \"\",\r\n contactUser: \"\",\r\n };\r\n }\r\n case \"initverifyUserNameandMobileNo\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n isUsernameError: false,\r\n isMobileError: false,\r\n requestCd: \"\",\r\n username: \"\",\r\n description: \"\",\r\n };\r\n }\r\n case \"verifyUserNameandMobileNoSuccess\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isUsernameError: false,\r\n isMobileError: false,\r\n workingState: 0,\r\n isApiError: false,\r\n apierrorMessage: \"\",\r\n requestCd: action?.payload?.requestCd ?? \"\",\r\n username: action?.payload?.username ?? \"\",\r\n description: action?.payload?.description ?? \"\",\r\n auth_type: action?.payload?.auth_type,\r\n company_ID: action?.payload?.company_ID,\r\n branch_cd: action?.payload?.branch_cd,\r\n otpValidFor: action?.payload?.otpValidFor,\r\n contactUser: action?.payload?.contactUser,\r\n forgotOtpSentText: action?.payload?.forgotOtpSentText,\r\n };\r\n }\r\n case \"inititateOTPVerification\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: true,\r\n OtpuserMessage: \"\",\r\n otpmodelClose: false,\r\n };\r\n }\r\n case \"OTPVerificationComplate\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: false,\r\n OtpuserMessage: \"\",\r\n workingState: 1,\r\n otpmodelClose: Boolean(action?.payload?.otpmodelclose),\r\n newPasswordMessage: action?.payload?.newPasswordMessage,\r\n };\r\n }\r\n case \"OTPVerificationFailed\": {\r\n return {\r\n ...state,\r\n otploading: false,\r\n OtpuserMessage: action?.payload?.error,\r\n otpmodelClose: Boolean(action?.payload?.otpmodelclose),\r\n };\r\n }\r\n case \"verifyPasswordFailed\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isPasswordError: action?.payload?.isPasswordError ?? false,\r\n isConfirmPasswordError:\r\n action?.payload?.isConfirmPasswordError ?? false,\r\n userMessageforPassword: action?.payload?.userMessageforPassword ?? \"\",\r\n userMessageforconfirmPassword:\r\n action?.payload?.userMessageforconfirmPassword ?? \"\",\r\n isApiError: false,\r\n apierrorMessage: \"\",\r\n passwordValidateloading: false,\r\n confirmPasswordValidateloading: false,\r\n };\r\n }\r\n case \"initverifyPasswordSetReq\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n isPasswordError: false,\r\n isConfirmPasswordError: false,\r\n };\r\n }\r\n case \"passwordRegistaredSuccess\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isPasswordError: false,\r\n isConfirmPasswordError: false,\r\n };\r\n }\r\n case \"OTPResendSuccess\": {\r\n return {\r\n ...state,\r\n requestCd: action?.payload?.requestCd,\r\n };\r\n }\r\n case \"initPasswordValidate\": {\r\n return {\r\n ...state,\r\n passwordValidateloading: action?.payload?.passwordValidateloading,\r\n confirmPasswordValidateloading:\r\n action?.payload?.confirmPasswordValidateloading,\r\n isPasswordError: false,\r\n isConfirmPasswordError: false,\r\n };\r\n }\r\n case \"passwordValidateSuccess\": {\r\n return {\r\n ...state,\r\n passwordValidateloading: false,\r\n confirmPasswordValidateloading: false,\r\n isPasswordError: false,\r\n isConfirmPasswordError: false,\r\n };\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\ninterface ForgotPasswordControllerProps {\r\n bannerDetails: {\r\n bannerImg: string;\r\n bannerTitle: string;\r\n bannerNote: string;\r\n };\r\n logoUrl?: string;\r\n logoTitle?: string;\r\n updatenewPassword: UpdateNewPasswordFnType;\r\n OTPResendRequest: OTPResendRequestFnType;\r\n veirfyUsernameandMobileNo: VerifyUsernameMobileFnType;\r\n validatePasswordFn: ValidatePasswordFnType;\r\n verifyOTPForPWDReset: VerifyOtpForPWDResetFnType;\r\n LanguageComponent?: React.ComponentType<any>;\r\n screenFlag: \"password\" | \"totp\";\r\n navigate: NavigateFunction;\r\n loginPageEndpoint: string;\r\n TotpEnbaledDisabled?: React.ComponentType<any>;\r\n /**\r\n * Prevents characters input from specified string in username field\r\n *\r\n * e.g. \"!@#\". Characters `!`, `@`, `#` will be prevented in username field\r\n */\r\n preventSpecialChars?: string | null;\r\n}\r\n\r\nexport const ForgotPasswordControllerWrapper: React.FC<\r\n ForgotPasswordControllerProps\r\n> = ({\r\n screenFlag,\r\n updatenewPassword,\r\n validatePasswordFn,\r\n veirfyUsernameandMobileNo,\r\n verifyOTPForPWDReset,\r\n OTPResendRequest,\r\n logoUrl,\r\n logoTitle,\r\n LanguageComponent,\r\n bannerDetails,\r\n navigate,\r\n loginPageEndpoint,\r\n preventSpecialChars,\r\n TotpEnbaledDisabled,\r\n}) => {\r\n const classes = useStyles();\r\n const [loginState, dispath] = useReducer(reducer, inititalState);\r\n const [open, setOpen] = useState(false);\r\n const [totp, setTotp] = useState<any>({\r\n Enable: false,\r\n totpdata: \"\",\r\n });\r\n const { enqueueSnackbar } = useSnackbar();\r\n const otpResendRef = useRef(1);\r\n const { t } = useTranslation();\r\n const [dashboardLogoURL, setDashboardLogoURL] = useState<any | null>(null);\r\n const urlObj = useRef<any>(null);\r\n useEffect(() => {\r\n if (Boolean(logoUrl)) {\r\n if (isBase64(logoUrl)) {\r\n let blob = utilFunction.base64toBlob(logoUrl);\r\n urlObj.current =\r\n typeof blob === \"object\" && Boolean(blob)\r\n ? URL.createObjectURL(blob)\r\n : \"\";\r\n setDashboardLogoURL(urlObj.current);\r\n } else {\r\n setDashboardLogoURL(logoUrl);\r\n }\r\n }\r\n }, [logoUrl]);\r\n\r\n const validatePassword = async (data, flag) => {\r\n if (flag === \"P\" && data?.password.trim()?.length > 0) {\r\n dispath({\r\n type: \"initPasswordValidate\",\r\n payload: {\r\n passwordValidateloading: flag === \"P\" ? true : false,\r\n },\r\n });\r\n const { validateStatus, validateData } = await validatePasswordFn({\r\n USER_ID: data.userName,\r\n PASSWORD: flag === \"P\" ? data?.password : data?.confirmpassword,\r\n SCREEN_REF: \"FORGET_PW\",\r\n });\r\n if (validateStatus === \"0\") {\r\n switch (validateData?.O_STATUS) {\r\n case \"999\":\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: {\r\n isPasswordError: flag === \"P\" ? true : false,\r\n isConfirmPasswordError: flag === \"P\" ? false : true,\r\n userMessageforPassword:\r\n flag === \"P\" ? validateData?.O_MESSAGE : \"\",\r\n userMessageforconfirmPassword:\r\n flag === \"P\" ? \"\" : (validateData?.O_MESSAGE ?? \"\"),\r\n apierrorMessage: validateData?.O_MESSAGE,\r\n },\r\n });\r\n break;\r\n case \"0\":\r\n dispath({ type: \"passwordValidateSuccess\" });\r\n break;\r\n }\r\n }\r\n } else if (flag === \"C\" && data?.confirmpassword.trim()?.length > 0) {\r\n let validationData = {\r\n isPasswordError: false,\r\n userMessageforPassword: \"\",\r\n isConfirmPasswordError: false,\r\n userMessageforconfirmPassword: \"\",\r\n };\r\n if (!Boolean(data.confirmpassword)) {\r\n validationData.isConfirmPasswordError = true;\r\n validationData.userMessageforconfirmPassword =\r\n \"Confirmpasswordisrequired\";\r\n } else if (\r\n Boolean(data.password) &&\r\n data.password !== data.confirmpassword\r\n ) {\r\n validationData.isConfirmPasswordError = true;\r\n validationData.userMessageforconfirmPassword =\r\n \"New Password and Confirm Password did not matched\";\r\n }\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: validationData,\r\n });\r\n }\r\n };\r\n\r\n const onSubmitHandel = async (data, flag) => {\r\n if (verifyRequestData(data, flag)) {\r\n if (flag === 0) {\r\n dispath({ type: \"initverifyUserNameandMobileNo\" });\r\n const {\r\n status,\r\n data: resdata,\r\n message,\r\n } = await veirfyUsernameandMobileNo(\r\n data?.userName.toLowerCase(),\r\n data?.mobileno,\r\n screenFlag,\r\n );\r\n\r\n if (status === \"0\") {\r\n dispath({\r\n type: \"verifyUserNameandMobileNoSuccess\",\r\n payload: {\r\n requestCd: String(resdata?.TRAN_CD ?? \"\"),\r\n username: data?.userName,\r\n description: resdata?.DESCRIPTION,\r\n auth_type: resdata?.AUTH_TYPE,\r\n company_ID: resdata?.COMP_CD,\r\n branch_cd: resdata?.BRANCH_CD,\r\n otpValidFor: resdata?.OTP_VALID,\r\n contactUser: resdata?.CONTACT2,\r\n forgotOtpSentText: resdata?.OTP_SENT_TEXT,\r\n },\r\n });\r\n setOpen(true);\r\n } else {\r\n dispath({\r\n type: \"verifyUserNameandMobileNoFailed\",\r\n payload: {\r\n isApiError: true,\r\n apierrorMessage: message,\r\n },\r\n });\r\n }\r\n } else if (flag === 1) {\r\n dispath({ type: \"initverifyPasswordSetReq\" });\r\n const { validateStatus, validateData } = await validatePasswordFn({\r\n USER_ID: data?.userName,\r\n PASSWORD: data?.password,\r\n SCREEN_REF: \"FORGET_PW\",\r\n });\r\n // console.log(\"validateData\", validateData?.O_MESSAGE, validateStatus)\r\n if (validateStatus === \"0\") {\r\n switch (validateData?.O_STATUS) {\r\n case \"999\":\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: {\r\n isPasswordError: true,\r\n userMessageforPassword: validateData?.O_MESSAGE,\r\n apierrorMessage: validateData?.O_MESSAGE,\r\n },\r\n });\r\n break;\r\n case \"0\":\r\n const {\r\n status,\r\n data: resdata,\r\n message,\r\n } = await updatenewPassword(\r\n loginState?.requestCd,\r\n loginState?.username,\r\n data?.password,\r\n );\r\n if (status === \"0\") {\r\n dispath({ type: \"passwordRegistaredSuccess\" });\r\n enqueueSnackbar(t(\"PasswordSuccessfullyReset\"), {\r\n variant: \"success\",\r\n });\r\n navigate(loginPageEndpoint);\r\n } else if (status === \"99\") {\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: {\r\n isApiError: true,\r\n apierrorMessage: message,\r\n },\r\n });\r\n } else {\r\n enqueueSnackbar(message, {\r\n variant: \"error\",\r\n });\r\n navigate(loginPageEndpoint);\r\n }\r\n }\r\n } else {\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: {\r\n isApiError: true,\r\n apierrorMessage: validateData?.O_MESSAGE,\r\n },\r\n });\r\n }\r\n }\r\n }\r\n };\r\n const verifyRequestData = (data, flag) => {\r\n if (flag === 0) {\r\n let validationData = {\r\n isUsernameError: false,\r\n isMobileError: false,\r\n userMessageforusername: \"\",\r\n userMessageforMobileno: \"\",\r\n };\r\n if (!Boolean(data.userName)) {\r\n validationData.isUsernameError = true;\r\n validationData.userMessageforusername = \"UsernameisRequired\";\r\n }\r\n if (!Boolean(data.mobileno)) {\r\n validationData.isMobileError = true;\r\n validationData.userMessageforMobileno = \"MobileNoisRequired\";\r\n } else if (\r\n isNaN(data.mobileno) ||\r\n (data.mobileno.length !== 10 && data.mobileno.length !== 13)\r\n ) {\r\n validationData.isMobileError = true;\r\n validationData.userMessageforMobileno = \"Please enter valid Mobile No.\";\r\n }\r\n dispath({\r\n type: \"verifyUserNameandMobileNoFailed\",\r\n payload: validationData,\r\n });\r\n return !(validationData.isMobileError || validationData.isUsernameError);\r\n } else if (flag === 1) {\r\n let validationData = {\r\n isPasswordError: false,\r\n userMessageforPassword: \"\",\r\n isConfirmPasswordError: false,\r\n userMessageforconfirmPassword: \"\",\r\n };\r\n let pwdverify = utilFunction.ValidatePassword(data.password);\r\n if (Boolean(pwdverify)) {\r\n validationData.isPasswordError = true;\r\n validationData.userMessageforPassword = pwdverify;\r\n }\r\n if (!Boolean(data.confirmpassword)) {\r\n validationData.isConfirmPasswordError = true;\r\n validationData.userMessageforconfirmPassword =\r\n \"Confirmpasswordisrequired\";\r\n } else if (\r\n Boolean(data.password) &&\r\n data.password !== data.confirmpassword\r\n ) {\r\n validationData.isConfirmPasswordError = true;\r\n validationData.userMessageforconfirmPassword =\r\n \"New Password and Confirm Password did not matched\";\r\n }\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: validationData,\r\n });\r\n return !(\r\n validationData.isConfirmPasswordError || validationData.isPasswordError\r\n );\r\n }\r\n return true;\r\n };\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n const changeUserName = () => {\r\n dispath({\r\n type: \"backToUsernameVerification\",\r\n });\r\n };\r\n\r\n const VerifyOTP = async (OTPNumber) => {\r\n if (Boolean(OTPNumber) && OTPNumber.toString().length === 6) {\r\n dispath({ type: \"inititateOTPVerification\" });\r\n const {\r\n status,\r\n data: resdata,\r\n message,\r\n } = await verifyOTPForPWDReset(\r\n loginState?.requestCd,\r\n loginState?.username,\r\n OTPNumber,\r\n loginState?.auth_type,\r\n screenFlag,\r\n );\r\n if (status === \"0\") {\r\n if (screenFlag === \"totp\") {\r\n setTotp({\r\n totpdata: {\r\n secretTockenQR: resdata?.SECRET_TOCKEN_QR,\r\n secretTocken: resdata?.SECRET_TOCKEN,\r\n userName: resdata?.USER_NAME,\r\n },\r\n Enable: true,\r\n });\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationComplate\",\r\n payload: {\r\n otpmodelclose: true,\r\n newPasswordMessage: resdata?.MESSAGE,\r\n },\r\n });\r\n }\r\n } else if (status === \"99\") {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: message },\r\n });\r\n } else {\r\n enqueueSnackbar(message, {\r\n variant: \"error\",\r\n });\r\n navigate(loginPageEndpoint);\r\n }\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: \"Please enter a 6 digit OTP number\" },\r\n });\r\n }\r\n };\r\n return (\r\n <>\r\n <Grid container style={{ height: \"100vh\", overflow: \"hidden\" }}>\r\n <BankDetails bannerDetails={bannerDetails} />\r\n <Grid item xs={6} md={6} lg={6} sm={6}>\r\n {logoUrl ? (\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-end\"\r\n alignItems=\"center\"\r\n padding={\"31px\"}\r\n maxWidth={\"210px\"}\r\n ml={\"auto\"}\r\n >\r\n <Tooltip describeChild title={logoTitle ?? \"\"}>\r\n <img\r\n src={Boolean(dashboardLogoURL) ? dashboardLogoURL : \"\"}\r\n alt=\"Logo\"\r\n width={\"100%\"}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n ) : null}\r\n {LanguageComponent ? (\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-end\"\r\n alignItems=\"center\"\r\n padding={\"0 35px 0 0\"}\r\n maxWidth={\"180px\"}\r\n ml={\"auto\"}\r\n >\r\n <LanguageComponent />\r\n </Grid>\r\n ) : null}\r\n <Container maxWidth=\"xs\">\r\n <Grid alignItems=\"center\" style={{ paddingTop: \"20px\" }}>\r\n <h2 style={{ margin: \"10px 0\" }}>\r\n {loginState.workingState === 1\r\n ? t(\"Setnewpassword\")\r\n : screenFlag === \"totp\"\r\n ? t(\"ResetTOTP\")\r\n : t(\"ForgotPassword\")}\r\n </h2>\r\n {loginState.workingState === 1 ? (\r\n <>\r\n <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"27px\",\r\n }}\r\n >\r\n <span\r\n style={{\r\n marginRight: \"12px\",\r\n color: \"#1C1C1C\",\r\n }}\r\n >\r\n {\" \"}\r\n {t(\"Hello\")}{\" \"}\r\n {loginState?.username\r\n ? loginState.username.charAt(0).toUpperCase() +\r\n loginState.username.slice(1)\r\n : null}\r\n </span>\r\n {t(\"OTSuccessfullynewpassword\", {\r\n defaultValue: loginState?.newPasswordMessage ?? \"\",\r\n })}\r\n </div>\r\n </>\r\n ) : null}\r\n {open ? (\r\n <OTPModelForm\r\n classes={classes}\r\n handleClose={handleClose}\r\n loginState={loginState}\r\n VerifyOTP={VerifyOTP}\r\n OTPError={t(loginState?.OtpuserMessage ?? \"\")}\r\n setOTPError={(error) => {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: error },\r\n });\r\n }}\r\n resendFlag={\"FORGET_PW\"}\r\n setNewRequestID={(newRequestID) => {\r\n dispath({\r\n type: \"OTPResendSuccess\",\r\n payload: { requestCd: newRequestID },\r\n });\r\n otpResendRef.current = otpResendRef.current + 1;\r\n }}\r\n otpresendCount={otpResendRef.current}\r\n OTPResendRequest={OTPResendRequest}\r\n />\r\n ) : (\r\n <ForgotPasswordFields\r\n classes={classes}\r\n loginState={loginState}\r\n onSubmit={onSubmitHandel}\r\n navigate={navigate}\r\n loginPageEndpoint={loginPageEndpoint}\r\n preventSpecialChars={preventSpecialChars}\r\n validatePassword={validatePassword}\r\n />\r\n )}\r\n </Grid>\r\n </Container>\r\n {totp?.Enable && TotpEnbaledDisabled ? (\r\n <TotpEnbaledDisabled totpdata={totp?.totpdata} flag=\"reset\" />\r\n ) : null}\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n};\r\n","import { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: any) => ({\r\n heading_user_img: {\r\n width: \"40px\",\r\n height: \"40px\",\r\n // cursor: \"pointer\",\r\n },\r\n heading_user_img_border: {\r\n border: \"2px dashed var(--theme-color3)\",\r\n borderRadius: \"50%\",\r\n padding: \"4px\",\r\n },\r\n logo: {\r\n height: \"38px\",\r\n },\r\n}));\r\n","import { GridMetaDataType } from \"@acuteinfo/common-base\";\r\nexport const BranchSelectionGridMetaData: GridMetaDataType = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"AccessBranchList\",\r\n rowIdColumn: \"BRANCH_CD\",\r\n // searchPlaceholder: \"Branches\",\r\n defaultColumnConfig: {\r\n width: 400,\r\n maxWidth: 450,\r\n minWidth: 300,\r\n },\r\n\r\n allowColumnReordering: false,\r\n disableSorting: false,\r\n hideHeader: false,\r\n disableGroupBy: true,\r\n enablePagination: false,\r\n containerHeight: {\r\n min: \"100vh\",\r\n max: \"100vh \",\r\n },\r\n occupiedHeight: {\r\n min: \"180px\",\r\n max: \"180px\",\r\n },\r\n allowFilter: false,\r\n allowColumnHiding: false,\r\n allowRowSelection: false,\r\n isCusrsorFocused: true,\r\n hideFooter: true,\r\n },\r\n columns: [\r\n {\r\n accessor: \"BRANCH_CD\",\r\n columnName: \"BranchCode\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 200,\r\n minWidth: 140,\r\n maxWidth: 220,\r\n },\r\n {\r\n accessor: \"BRANCH_NM\",\r\n columnName: \"BranchName\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 280,\r\n minWidth: 280,\r\n maxWidth: 420,\r\n },\r\n {\r\n accessor: \"DISP_STATUS\",\r\n columnName: \"Status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 200,\r\n minWidth: 140,\r\n maxWidth: 220,\r\n },\r\n {\r\n accessor: \"BEGIN_DATETIME\",\r\n columnName: \"BeginTime\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n componentType: \"date\",\r\n dateFormat: \"dd/MM/yyyy hh:mm a\",\r\n width: 222,\r\n minWidth: 140,\r\n maxWidth: 240,\r\n },\r\n {\r\n accessor: \"END_DATETIME\",\r\n columnName: \"EndTime\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n componentType: \"date\",\r\n dateFormat: \"dd/MM/yyyy hh:mm a\",\r\n width: 222,\r\n minWidth: 140,\r\n maxWidth: 240,\r\n },\r\n // {\r\n // accessor: \"DAYEND_STATUS\",\r\n // columnName: \"Dayend Status\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"EOD_RUNNING_STATUS\",\r\n // columnName: \"EOD Running Status\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"BASE_COMP_CD\",\r\n // columnName: \"Base Comp Cd\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"BASE_BRANCH_CD\",\r\n // columnName: \"Base Branch Cd\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"COMP_CD\",\r\n // columnName: \"Comp Cd\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"COMP_NM\",\r\n // columnName: \"Comp Name\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n ],\r\n};\r\n","import { useCallback, useEffect } from \"react\";\r\nimport {\r\n GridWrapper,\r\n ActionTypes,\r\n GridMetaDataType,\r\n ClearCacheProvider,\r\n Alert,\r\n queryClient,\r\n usePopupContext,\r\n} from \"@acuteinfo/common-base\";\r\nimport {\r\n Avatar,\r\n Box,\r\n Button,\r\n Grid,\r\n Stack,\r\n Tooltip,\r\n tooltipClasses,\r\n} from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { useQuery, useMutation } from \"react-query\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { t } from \"i18next\";\r\nimport { useStyles } from \"./style\";\r\nimport \"./styles.css\";\r\nimport { BranchSelectionGridMetaData } from \"./gridMetadata\";\r\nimport { BranchSelectionGridDataFnType, GetMenuDataFnType } from \"pages/types\";\r\n\r\nconst actions: ActionTypes[] = [\r\n {\r\n actionName: \"back\",\r\n actionLabel: \"Back\",\r\n multiple: false,\r\n rowDoubleClick: false,\r\n actionTextColor: \"var(--theme-color3)\",\r\n actionBackground: \"var(--white)\",\r\n startsIcon: \"West\",\r\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\r\n },\r\n {\r\n actionName: \"proceed\",\r\n actionLabel: \"Proceed\",\r\n multiple: false,\r\n rowDoubleClick: true,\r\n actionTextColor: \"var(--white)\",\r\n actionBackground: \"var(--theme-color3)\",\r\n onEnterSubmit: true,\r\n endsIcon: \"East\",\r\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\r\n },\r\n];\r\n\r\nconst LightTooltip = styled(({ className, ...props }: any) => (\r\n <Tooltip {...props} classes={{ popper: className }} />\r\n))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: theme.palette.common.white,\r\n color: \"rgba(0, 0, 0, 0.87)\",\r\n boxShadow: theme.shadows[1],\r\n fontSize: 13,\r\n },\r\n}));\r\n\r\nconst Greetings = (userId: string) => {\r\n const hours = new Date().getHours();\r\n const greet = hours < 12 ? \"morning\" : hours <= 16 ? \"afternoon\" : \"evening\";\r\n\r\n return (\r\n <span>\r\n Good {greet} {userId},\r\n </span>\r\n );\r\n};\r\n\r\ninterface BranchSelectionWrapperProps {\r\n selectionMode: \"S\" | \"C\";\r\n authState: any;\r\n isBranchSelectedFn: () => boolean;\r\n isLoggedInFn: () => boolean;\r\n logoutFn: () => void;\r\n branchSelectFn: Function;\r\n BranchSelectionGridDataApiFn: BranchSelectionGridDataFnType;\r\n GetMenuDataApiFn: GetMenuDataFnType;\r\n sideImage?: string;\r\n logos: any;\r\n logo?: string;\r\n navigate: NavigateFunction;\r\n dashboardUrl: string;\r\n loginUrl: string;\r\n appTranCd: string;\r\n enableEnterToFocus?: boolean;\r\n}\r\n\r\nconst BranchSelectionGrid: React.FC<BranchSelectionWrapperProps> = ({\r\n selectionMode,\r\n authState,\r\n isBranchSelectedFn,\r\n isLoggedInFn,\r\n logoutFn,\r\n logos,\r\n logo,\r\n navigate,\r\n BranchSelectionGridDataApiFn,\r\n GetMenuDataApiFn,\r\n sideImage,\r\n branchSelectFn,\r\n dashboardUrl,\r\n loginUrl,\r\n appTranCd,\r\n enableEnterToFocus,\r\n}) => {\r\n const classes = useStyles();\r\n const { MessageBox } = usePopupContext();\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { data, isLoading, isFetching, isError, error, refetch } = useQuery(\r\n [\"BranchSelectionGridData\"],\r\n () => BranchSelectionGridDataApiFn(),\r\n );\r\n\r\n useEffect(() => {\r\n refetch();\r\n return () => queryClient.removeQueries([\"BranchSelectionGridData\"]);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoggedInFn()) navigate(loginUrl);\r\n else if (isBranchSelectedFn() && selectionMode !== \"C\")\r\n navigate(dashboardUrl);\r\n }, [isLoggedInFn, isBranchSelectedFn]);\r\n const mutation: any = useMutation(GetMenuDataApiFn, {\r\n onSuccess: (data, extraData: any) => {\r\n branchSelectFn({\r\n menulistdata: data,\r\n branchCode: extraData?.BRANCH_CD,\r\n branch: extraData?.BRANCH_NM,\r\n baseBranchCode: extraData?.BASE_BRANCH_CD,\r\n });\r\n },\r\n });\r\n\r\n const mutationError = mutation.error as {\r\n severity: string;\r\n error_msg: string;\r\n error_detail: string;\r\n };\r\n\r\n const setCurrentAction = useCallback(\r\n async ({ name, rows }) => {\r\n if (name === \"proceed\") {\r\n if (!rows?.length) {\r\n enqueueSnackbar(t(\"PleaseSelectBranch\"), { variant: \"error\" });\r\n return;\r\n }\r\n\r\n const branch = rows[0]?.data;\r\n if (branch.STATUS === \"C\") {\r\n await MessageBox({\r\n message: \"BranchDayEndMessage\",\r\n messageTitle: \"BranchDayEndTitle\",\r\n icon: \"ERROR\",\r\n defFocusBtnName: \"Ok\",\r\n });\r\n return;\r\n }\r\n\r\n mutation.mutate({\r\n BASE_COMP_CD: branch.BASE_COMP_CD ?? \"\",\r\n BASE_BRANCH_CD: branch.BASE_BRANCH_CD ?? \"\",\r\n COMP_CD: branch.COMP_CD ?? \"\",\r\n BRANCH_CD: branch.BRANCH_CD ?? \"\",\r\n GROUP_NAME: authState?.groupName ?? \"\",\r\n APP_TRAN_CD: appTranCd,\r\n COMP_NM: branch.COMP_NM ?? \"\",\r\n BRANCH_NM: branch.BRANCH_NM ?? \"\",\r\n DAYEND_STATUS: branch.DAYEND_STATUS ?? \"\",\r\n EOD_RUNNING_STATUS: branch.EOD_RUNNING_STATUS ?? \"\",\r\n IS_UPD_DEF_BRANCH: authState?.user?.isUpdDefBranch ?? \"\",\r\n COMP_BASE_BRANCH_CD: branch.COMP_BASE_BRANCH_CD ?? \"\",\r\n selectionMode,\r\n authState,\r\n });\r\n }\r\n\r\n if (name === \"back\") {\r\n const res = await MessageBox({\r\n messageTitle: \"confirmation\",\r\n message: \"AreYouSureToExit\",\r\n icon: \"CONFIRM\",\r\n buttonNames: [\"Yes\", \"No\"],\r\n defFocusBtnName: \"Yes\",\r\n });\r\n\r\n if (res === \"Yes\") {\r\n if (selectionMode === \"C\") navigate(dashboardUrl, { replace: true });\r\n else logoutFn();\r\n }\r\n }\r\n },\r\n [mutation, authState],\r\n );\r\n\r\n useEffect(() => {\r\n const openBranchExists = data?.some((b) => b.STATUS === \"O\");\r\n if (openBranchExists === false) {\r\n enqueueSnackbar(\r\n \"Branch is in Day End Status.~rPlease contact system Vendor.\",\r\n {\r\n variant: \"error\",\r\n },\r\n );\r\n logoutFn();\r\n } else if (data?.length === 1 && data[0]?.STATUS === \"O\") {\r\n setCurrentAction({ name: \"proceed\", rows: [{ data: data[0] }] });\r\n }\r\n }, [JSON.stringify(data)]);\r\n\r\n const renderError = (err: any) => (\r\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\r\n <Alert\r\n severity={err?.severity ?? \"error\"}\r\n errorMsg={err?.error_msg ?? \"Error\"}\r\n errorDetail={err?.error_detail ?? \"\"}\r\n />\r\n </div>\r\n );\r\n\r\n const renderHeader = () => (\r\n <Grid container lg={12} md={12} xl={12} xs={12}>\r\n {/* Profile avatar */}\r\n <Grid\r\n xs={12}\r\n sm={1}\r\n md={1}\r\n lg={1}\r\n xl={1}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n visibility: logos?.profile ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n <Stack direction=\"row\" spacing={4} ml={1}>\r\n <Box\r\n className={classes.heading_user_img_border}\r\n sx={{ cursor: \"pointer\" }}\r\n >\r\n <LightTooltip\r\n title={\r\n <>\r\n <div>\r\n {t(\"UserID\")}: {authState?.user?.id ?? \"\"}\r\n </div>\r\n <div>\r\n {t(\"Role\")}: {authState?.roleName ?? \"\"}\r\n </div>\r\n <div>{t(\"LastUnsuccessfulLogin\")}: \"\"</div>\r\n </>\r\n }\r\n placement=\"bottom-start\"\r\n >\r\n <Avatar\r\n className={classes.heading_user_img}\r\n src={logos?.profile ?? \"\"}\r\n />\r\n </LightTooltip>\r\n </Box>\r\n </Stack>\r\n </Grid>\r\n\r\n {/* Greetings */}\r\n <Grid\r\n xs={12}\r\n sm={5}\r\n md={5}\r\n lg={5}\r\n xl={5}\r\n sx={{\r\n justifyContent: \"center\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }}\r\n >\r\n <h1\r\n className=\"name-heading\"\r\n style={{ fontSize: \"24px\", margin: \"4px 0px\" }}\r\n >\r\n {t(\"Welcome\")} <span>{`${authState?.user?.name ?? \"\"},`}</span>\r\n </h1>\r\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\r\n <h3 style={{ margin: \"4px 0px\" }}>\r\n {Greetings(authState?.user?.id ?? \"\")}\r\n </h3>\r\n 👋\r\n </div>\r\n </Grid>\r\n\r\n {/* Bank logo */}\r\n <Grid\r\n xs={12}\r\n sm={1}\r\n md={1}\r\n lg={1}\r\n xl={1}\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n visibility: logos?.bank ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n <Avatar className={classes.heading_user_img} src={logos?.bank ?? \"\"} />\r\n </Grid>\r\n {/* Bank info */}\r\n <Grid\r\n xs={12}\r\n sm={3}\r\n md={3}\r\n lg={3}\r\n xl={3}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <p className=\"bank-name\">{`${t(\"BankName\")}: ${authState?.companyName ?? \"\"}`}</p>\r\n <p className=\"emp-id\">{`${t(\"EmpId\")}: ${authState?.user?.employeeID ?? \"\"}`}</p>\r\n </Grid>\r\n {/* App logo */}\r\n <Grid\r\n xs={12}\r\n sm={3}\r\n md={3}\r\n lg={2}\r\n xl={2}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"right\",\r\n visibility: logo ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n <img src={logo ?? \"\"} alt=\"bank_logo\" className={classes.logo} />\r\n </Grid>\r\n </Grid>\r\n );\r\n\r\n return (\r\n <Grid container sx={{ margin: 0, padding: 0, height: \"100vh\" }}>\r\n {sideImage && (\r\n <Grid item lg={1} md={1} xl={1} xs={1}>\r\n <img className=\"sideImage\" src={sideImage} alt=\"side\" />\r\n </Grid>\r\n )}\r\n\r\n <Grid\r\n item\r\n lg={11}\r\n md={11}\r\n xl={11}\r\n xs={11}\r\n sx={{ display: \"flex\", justifyContent: \"center\" }}\r\n >\r\n <Grid\r\n container\r\n sx={{ minHeight: \"100vh\", padding: \"10px 0\" }}\r\n lg={11}\r\n md={11}\r\n xl={11}\r\n xs={11}\r\n >\r\n {renderHeader()}\r\n\r\n {(isError && renderError(error)) ||\r\n (mutation.isError && renderError(mutationError))}\r\n\r\n <GridWrapper\r\n key=\"branchSelection\"\r\n finalMetaData={BranchSelectionGridMetaData as GridMetaDataType}\r\n data={data ?? []}\r\n setData={() => null}\r\n actions={actions}\r\n setAction={setCurrentAction}\r\n controlsAtBottom\r\n actionContextAtBottom\r\n disableMultipleRowSelect\r\n variant=\"outlined\"\r\n loading={isLoading || isFetching || mutation.isLoading}\r\n defaultSelectedRowId={authState?.user?.defaultSelectBranch ?? null}\r\n headerToolbarStyle={{\r\n background: \"#fff !important\",\r\n padding: 0,\r\n \"& .MuiTypography-root\": { color: \"black\" },\r\n }}\r\n enableEnterToFocus={enableEnterToFocus}\r\n />\r\n {(isError || !data?.length) && (\r\n <Button\r\n sx={{\r\n backgroundColor: \"var(--theme-color3)\",\r\n position: \"absolute\",\r\n right: \"113px\",\r\n bottom: \"20px\",\r\n width: \"7rem\",\r\n \"&:hover\": { backgroundColor: \"var(--theme-color3)\" },\r\n }}\r\n onClick={async () => {\r\n const res = await MessageBox({\r\n messageTitle: \"confirmation\",\r\n message: \"AreYouSureToExit\",\r\n icon: \"CONFIRM\",\r\n buttonNames: [\"Yes\", \"No\"],\r\n defFocusBtnName: \"Yes\",\r\n });\r\n if (res === \"Yes\") {\r\n selectionMode === \"C\"\r\n ? navigate(dashboardUrl, { replace: true })\r\n : logoutFn();\r\n }\r\n }}\r\n >\r\n Back\r\n </Button>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n );\r\n};\r\n\r\nexport const BranchSelectionGridWrapper: React.FC<\r\n BranchSelectionWrapperProps\r\n> = (props) => (\r\n <ClearCacheProvider>\r\n <BranchSelectionGrid {...props} />\r\n </ClearCacheProvider>\r\n);\r\n","import { alpha } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: any) => ({\r\n appBar: {\r\n // zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n color: \"#0063A3\",\r\n height: \"unset\",\r\n background: \"var(--white)\",\r\n boxShadow: \"0px 1px 0px -0.5px #DEE0E2\",\r\n },\r\n searchBar: {\r\n width: 290,\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, 0.87) !important\",\r\n backgroundColor: \"rgb(235 237 238 / 26%)!important\",\r\n\r\n \"& input\": {\r\n width: \"100% !important\",\r\n },\r\n },\r\n searchList: {\r\n position: \"absolute\",\r\n background: \"#fff\",\r\n width: \"100%\",\r\n borderRadius: \"6px\",\r\n boxShadow: \"0 12px 25px rgba(0,0,0,.3)\",\r\n top: \"120%\",\r\n height: \"auto\",\r\n maxHeight: \"325px\",\r\n overflowY: \"auto\",\r\n\r\n \"& .list-links\": {\r\n background: \"none\",\r\n border: \"none\",\r\n outline: \"none\",\r\n cursor: \"pointer\",\r\n textDecoration: \"none\",\r\n padding: \"0.7rem 1rem\",\r\n fontSize: \"0.90rem\",\r\n textAlign: \"left\",\r\n borderBottom: \"1px solid #ddd\",\r\n color: \"#222 !important\",\r\n fontWeight: 500,\r\n \"&:hover, &.active\": {\r\n backgroundColor: \"#f4f4f4\",\r\n },\r\n },\r\n },\r\n appBarShift: {\r\n paddingLeft: \"0px\",\r\n // width: `calc(100% - ${drawerWidth}px)`,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n background: \"rgba(250, 251, 255, 0.9)\",\r\n }),\r\n },\r\n heading_user_dtl: {\r\n width: \"458px\",\r\n height: \"73px\",\r\n left: \"37px\",\r\n top: \"calc(50% - 73px/2)\",\r\n },\r\n heading_user_img: {\r\n width: \"40px\",\r\n height: \"40px\",\r\n // cursor: \"pointer\",\r\n },\r\n heading_user_img_border: {\r\n border: \"2px dashed var(--theme-color3)\",\r\n borderRadius: \"50%\",\r\n padding: \"4px\",\r\n },\r\n toolbar: {\r\n paddingLeft: \"0px\",\r\n },\r\n title: {\r\n flexGrow: 1,\r\n padding: theme.spacing(0.5, 0),\r\n color: \"var(--theme-color1)\",\r\n },\r\n searchRoot: {\r\n fontFamily: theme.typography.fontFamily,\r\n position: \"relative\",\r\n boxShadow:\r\n \"0px 2px 4px -1px rgba(0,0,0,0.2), 0px 4px 5px 0px rgba(0,0,0,0.14), 0px 1px 10px 0px rgba(0,0,0,0.12)\",\r\n marginRight: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginBottom: theme.spacing(0.25),\r\n marginTop: theme.spacing(0.25),\r\n borderRadius: 40,\r\n backgroundColor: alpha(theme.palette.common.white, 0.15),\r\n \"&:hover\": {\r\n backgroundColor: alpha(theme.palette.common.white, 0.25),\r\n },\r\n \"& $inputInput\": {\r\n transition: theme.transitions.create(\"width\"),\r\n width: 120,\r\n \"&:focus\": {\r\n width: 170,\r\n },\r\n },\r\n },\r\n search: {\r\n width: theme.spacing(6),\r\n height: \"100%\",\r\n position: \"absolute\",\r\n pointerEvents: \"none\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n inputRoot: {\r\n color: \"inherit\",\r\n marginTop: 0,\r\n borderRadius: \"40px\",\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 1, 1, 6),\r\n },\r\n\r\n loggedInUser: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n nameClass: {\r\n color: \"#0063A3\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n lineHeight: \"1.4\",\r\n textAlign: \"left\",\r\n },\r\n dropDown: {\r\n fontSize: \"2rem\",\r\n },\r\n vTop: {\r\n verticalAlign: \"top\",\r\n paddingLeft: \"4px\",\r\n color: \"var(--theme-color1)\",\r\n },\r\n userDesignation: {\r\n margin: \"0px\",\r\n fontWeight: 500,\r\n fontSize: \"0.875rem\",\r\n lineHeight: 1.57,\r\n color: \"var(--theme-color1)\",\r\n },\r\n userName: {\r\n margin: \"0px\",\r\n fontWeight: 500,\r\n fontSize: \"0.875rem\",\r\n lineHeight: 1.57,\r\n color: \"var(--theme-color3)\",\r\n },\r\n userprofilehover: {\r\n \"&:hover\": {\r\n backgroundColor: \"var(--white)\",\r\n },\r\n },\r\n lang_svg: {\r\n marginRight: \"10px\",\r\n width: \"22px\",\r\n height: \"22px\",\r\n },\r\n logo: {\r\n height: \"38px\",\r\n },\r\n version01: {\r\n margin: \"0\",\r\n textAlign: \"center\",\r\n color: \"var(--theme-color3)\",\r\n fontSize: \"9px\",\r\n },\r\n DrawerClose_icon: {\r\n color: \"var(--theme-color3)\",\r\n position: \"static\",\r\n background: \"transperant\",\r\n \"&:hover\": {\r\n background: \"var(--theme-color4)\",\r\n },\r\n width: \"46px\",\r\n height: \"46px\",\r\n },\r\n marquee: {\r\n animation: \"$marquee 10s linear infinite\",\r\n animationDelay: \"3s\",\r\n },\r\n \"@keyframes marquee\": {\r\n \"0%\": { transform: \"translateX(100%)\" },\r\n \"100%\": { transform: \"translateX(-100%)\" },\r\n },\r\n popover: {\r\n popover: {\r\n maxWidth: \"100%\",\r\n width: \"fit-content\",\r\n \"& .MuiPopover-paper\": {\r\n maxWidth: \"100%\",\r\n },\r\n },\r\n },\r\n blinkHard: {\r\n animation: \"$blinker 1s step-end infinite\",\r\n },\r\n \"@keyframes blinker\": {\r\n \"50%\": {\r\n opacity: 0,\r\n },\r\n },\r\n}));\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useStyles } from \"./style\";\r\nimport BecomePartnerImg from \"../../assets/images/BecomePartnerImg.svg\";\r\nimport LogoutIcon from \"@mui/icons-material/Logout\";\r\nimport MenuOutlinedIcon from \"@mui/icons-material/MenuOutlined\";\r\nimport { styled, alpha } from \"@mui/material/styles\";\r\nimport {\r\n AppBar,\r\n Avatar,\r\n Box,\r\n IconButton,\r\n Stack,\r\n Toolbar,\r\n Tooltip,\r\n Typography,\r\n tooltipClasses,\r\n useMediaQuery,\r\n} from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { format } from \"date-fns\";\r\n\r\ninterface AppbarWrapperProps {\r\n handleDrawerOpen: Function;\r\n handleDrawerClose: Function;\r\n open: boolean;\r\n authState: any;\r\n LanguageComponent?: React.ComponentType<any>;\r\n SearchComponent?: React.ComponentType<any>;\r\n dashboardUrl?: string;\r\n logos?: any;\r\n bankLogo?: any;\r\n profilePic?: string;\r\n handleLogout?: Function;\r\n handleProfile?: Function;\r\n navigate: NavigateFunction;\r\n hideGreetings?: boolean;\r\n menuIconConfig?: {\r\n menuIconPosition?: \"left\" | \"right\";\r\n OpenIconComponent?: React.ReactNode;\r\n CloseIconComponent?: React.ReactNode;\r\n };\r\n optionalComponents?: {\r\n Component: React.ComponentType<any>;\r\n props?: { [key: string]: any };\r\n }[];\r\n /**\r\n * Accepts useIdleTimer instance\r\n */\r\n idleTimer?: any;\r\n}\r\n\r\nconst StyledAppBar = styled(AppBar)(({ theme }) => ({\r\n boxShadow: \"0 2px 4px rgba(0,0,0,0.1)\",\r\n padding: \"0 0 2.5px 0\",\r\n}));\r\n\r\nconst LogoContainer = styled(Box)(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: theme.spacing(1),\r\n minWidth: \"fit-content\",\r\n}));\r\n\r\nconst CompanyLogo = styled(Avatar)(({ theme }) => ({\r\n backgroundColor: \"white\",\r\n width: 35,\r\n height: 35,\r\n}));\r\n\r\nconst BankInfoContainer = styled(Box)(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: theme.spacing(2),\r\n marginLeft: theme.spacing(3),\r\n [theme.breakpoints.down(\"md\")]: {\r\n marginLeft: theme.spacing(1),\r\n gap: theme.spacing(1),\r\n },\r\n}));\r\n\r\nconst BankInfoText = styled(Box)(({ theme }) => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n color: \"white\",\r\n}));\r\n\r\nconst Search = styled(\"div\")(({ theme }) => ({\r\n position: \"relative\",\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: alpha(theme.palette.common.white, 0.15),\r\n \"&:hover\": {\r\n backgroundColor: alpha(theme.palette.common.white, 0.25),\r\n },\r\n marginLeft: 0,\r\n width: \"100%\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: \"auto\",\r\n },\r\n}));\r\n\r\nconst RightSection = styled(Box)(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: theme.spacing(1),\r\n marginLeft: \"auto\",\r\n}));\r\n\r\nconst GreetingText = styled(Typography)(({ theme }) => ({\r\n color: \"var(--theme-color3)\",\r\n fontSize: \"14px\",\r\n marginRight: theme.spacing(1),\r\n [theme.breakpoints.down(\"md\")]: {\r\n display: \"none\",\r\n },\r\n}));\r\n\r\nexport const AppbarWrapper: React.FC<AppbarWrapperProps> = ({\r\n handleDrawerOpen,\r\n handleDrawerClose,\r\n open,\r\n authState,\r\n LanguageComponent,\r\n SearchComponent,\r\n dashboardUrl,\r\n logos,\r\n bankLogo,\r\n profilePic,\r\n handleLogout,\r\n handleProfile,\r\n navigate,\r\n hideGreetings,\r\n menuIconConfig = {},\r\n optionalComponents = [],\r\n idleTimer,\r\n // menuIconPosition = \"left\",\r\n}) => {\r\n const above1300 = useMediaQuery(\"(min-width:1300px)\");\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const [countdownMessage, setCountdownMessage] = useState(\"\");\r\n const [blinker, setBlinker] = useState(0);\r\n const {\r\n CloseIconComponent,\r\n OpenIconComponent,\r\n menuIconPosition = \"right\",\r\n } = menuIconConfig;\r\n\r\n const LightTooltip = styled(({ className, ...props }: any) => (\r\n <Tooltip {...props} classes={{ popper: className }} />\r\n ))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: theme.palette.common.white,\r\n color: \"rgba(0, 0, 0, 0.87)\",\r\n boxShadow: theme.shadows[1],\r\n fontSize: 13,\r\n },\r\n }));\r\n const Greetings = () => {\r\n let hours = new Date().getHours();\r\n let greet;\r\n\r\n if (hours < 12) greet = \"morning\";\r\n else if (hours >= 12 && hours <= 16) greet = \"afternoon\";\r\n else if (hours >= 16 && hours <= 24) greet = \"evening\";\r\n\r\n return <span>Good {greet},</span>;\r\n };\r\n\r\n useEffect(() => {\r\n if (!idleTimer) return;\r\n const updateCountdown = () => {\r\n const remainingTime = idleTimer.getRemainingTime();\r\n const remainingSeconds = Math.floor(remainingTime / 1000); // Convert to seconds\r\n if (remainingSeconds <= 30 && remainingSeconds > 0) {\r\n setCountdownMessage(\r\n t(\"sessionTimeoutInSec\", {\r\n remainingSeconds,\r\n }),\r\n );\r\n setBlinker((prev) => prev + 1);\r\n } else {\r\n setCountdownMessage(\"\"); // Clear the message if more than 30 seconds\r\n setBlinker(0);\r\n }\r\n };\r\n const interval = setInterval(updateCountdown, 1000);\r\n return () => clearInterval(interval);\r\n }, []);\r\n\r\n return (\r\n <>\r\n <StyledAppBar position=\"fixed\">\r\n <Toolbar\r\n sx={{\r\n minHeight: \"64px !important\",\r\n }}\r\n >\r\n {/* Left Section - Logo and Menu */}\r\n <LogoContainer\r\n sx={{\r\n flexDirection:\r\n menuIconPosition === \"left\" ? \"row\" : \"row-reverse\",\r\n }}\r\n >\r\n {open ? (\r\n <IconButton\r\n disableRipple\r\n onClick={() => handleDrawerClose()}\r\n className={classes.DrawerClose_icon}\r\n >\r\n {OpenIconComponent ? (\r\n OpenIconComponent\r\n ) : (\r\n <MenuOutlinedIcon fontSize=\"large\" />\r\n )}\r\n </IconButton>\r\n ) : (\r\n <IconButton\r\n disableRipple\r\n aria-label=\"open drawer\"\r\n onClick={() => handleDrawerOpen()}\r\n className={classes.DrawerClose_icon}\r\n >\r\n {CloseIconComponent ? (\r\n CloseIconComponent\r\n ) : (\r\n <MenuOutlinedIcon fontSize=\"large\" />\r\n )}\r\n </IconButton>\r\n )}\r\n <CompanyLogo>\r\n {Boolean(bankLogo) && (\r\n <div>\r\n <img\r\n src={bankLogo ?? \"\"}\r\n alt=\"bank_logo\"\r\n className={classes.logo}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n navigate(dashboardUrl ?? \"./dashboard\");\r\n }}\r\n />\r\n <p className={classes.version01}>{logos?.version}</p>\r\n </div>\r\n )}\r\n </CompanyLogo>\r\n </LogoContainer>\r\n\r\n {/* Bank Information - Hidden on mobile */}\r\n <BankInfoContainer>\r\n <Stack direction=\"row\" spacing={4}>\r\n <Box className={classes.heading_user_img_border}>\r\n <Avatar\r\n className={classes.heading_user_img}\r\n alt=\"Remy Sharp\"\r\n src={Boolean(logos?.bank) ? logos?.bank : BecomePartnerImg}\r\n />\r\n </Box>\r\n </Stack>\r\n <BankInfoText>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontWeight: \"bold\",\r\n fontSize: {\r\n xs: \"10px\",\r\n sm: \"11px\",\r\n md: \"12px\",\r\n lg: \"15px\",\r\n xl: \"15px\",\r\n },\r\n lineHeight: 1.2,\r\n overflow: \"hidden\",\r\n textOverflow: \"unset\",\r\n whiteSpace: \"unset\",\r\n color: \"var(--theme-color1)\",\r\n marginBottom: \"6px\",\r\n }}\r\n >\r\n {authState?.companyName || \"\"}\r\n </Typography>\r\n <Typography\r\n variant=\"caption\"\r\n sx={{\r\n fontSize: { xs: \"8px\", sm: \"9px\", md: \"10px\" },\r\n opacity: 0.9,\r\n color: \"var(--theme-color3)\",\r\n lineHeight: 1.2,\r\n }}\r\n >\r\n {t(\"Branch\")}:{authState?.user?.branchCode ?? \"001 \"}-\r\n {authState?.user?.branch ?? \"\"}\r\n </Typography>\r\n <Typography\r\n variant=\"caption\"\r\n sx={{\r\n fontSize: { xs: \"8px\", sm: \"9px\", md: \"10px\" },\r\n opacity: 0.9,\r\n color: \"var(--theme-color3)\",\r\n lineHeight: 1.2,\r\n }}\r\n >\r\n {t(\"WorkingDate\")}:{\" \"}\r\n {Boolean(authState?.workingDate)\r\n ? checkDateAndDisplay(\r\n format(new Date(authState?.workingDate), \"dd/MM/yyyy\"),\r\n // authState?.workingDate ?? \"\"\r\n )\r\n : \"not found\"}{\" \"}\r\n {t(\"LastLoginDate\")} :{\" \"}\r\n {checkDateAndDisplay(authState?.user?.lastLogin ?? \"\")}\r\n </Typography>\r\n </BankInfoText>\r\n </BankInfoContainer>\r\n\r\n {/* Right Section */}\r\n <RightSection>\r\n <Stack alignItems={\"flex-end\"}>\r\n <Stack direction={\"row\"} gap={\"1rem\"}>\r\n <Typography\r\n key={blinker}\r\n className={classes.blinkHard}\r\n fontSize={\"15px\"}\r\n color={\"#1C1C1C\"}\r\n >\r\n {countdownMessage}\r\n </Typography>\r\n {!hideGreetings ? (\r\n <GreetingText>\r\n {Greetings()} {authState?.user?.id ?? \"\"} 👋\r\n </GreetingText>\r\n ) : null}\r\n </Stack>\r\n <Stack direction=\"row\" alignItems={\"center\"}>\r\n {/* Search - Responsive */}\r\n {SearchComponent ? (\r\n <Search>\r\n <SearchComponent />\r\n </Search>\r\n ) : null}\r\n\r\n {/* Language Selector - Hidden on small screens */}\r\n {LanguageComponent ? <LanguageComponent /> : null}\r\n\r\n {/* User Actions */}\r\n <Box\r\n display={\"flex\"}\r\n justifyContent={\"space-between\"}\r\n gap={\"0.8rem\"}\r\n padding={\"0 0.5rem\"}\r\n alignItems={\"center\"}\r\n >\r\n {optionalComponents.map((component) => {\r\n let componentProps = { ...component.props };\r\n if (Array.isArray(componentProps)) componentProps = {};\r\n return <component.Component {...component.props} />;\r\n })}\r\n\r\n {above1300 && (\r\n <Tooltip title=\"Logout\" placement=\"bottom\" arrow>\r\n <IconButton\r\n onClick={() =>\r\n typeof handleLogout === \"function\"\r\n ? handleLogout()\r\n : null\r\n }\r\n color=\"error\"\r\n sx={{\r\n backgroundColor: \"rgba(235, 237, 238, 0.45)\",\r\n borderRadius: \"10px\",\r\n height: \"36px\",\r\n width: !above1300 ? \"100%\" : \"auto\",\r\n padding: \"0 8px\",\r\n \"&:hover\": {\r\n background: \"var(--theme-color2)\",\r\n boxShadow:\r\n \"rgba(0, 0, 0, 0.16) 0px 3px 6px, rgba(0, 0, 0, 0.23) 0px 3px 6px\",\r\n transition: \"all 0.2s ease\",\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n }}\r\n aria-label=\"logout\"\r\n >\r\n <LogoutIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n </Box>\r\n </Stack>\r\n </Stack>\r\n\r\n {/* User Avatar */}\r\n <Stack direction=\"row\" spacing={4}>\r\n <Box\r\n className={classes.heading_user_img_border}\r\n sx={{ cursor: \"pointer\" }}\r\n >\r\n <LightTooltip\r\n title={\r\n <>\r\n <div>\r\n {\" \"}\r\n {t(\"UserID\")}: {authState?.user?.id}\r\n </div>\r\n <div>\r\n {t(\"Role\")} : {authState?.roleName}\r\n </div>\r\n <div>{t(\"LastUnsuccessfulLogin\")} : \"\"</div>\r\n </>\r\n }\r\n placement=\"bottom-start\"\r\n >\r\n <Avatar\r\n className={classes.heading_user_img}\r\n onClick={() =>\r\n typeof handleProfile === \"function\"\r\n ? handleProfile()\r\n : null\r\n }\r\n alt=\"Remy Sharp\"\r\n src={profilePic ?? \"\"}\r\n />\r\n </LightTooltip>\r\n </Box>\r\n </Stack>\r\n </RightSection>\r\n </Toolbar>\r\n </StyledAppBar>\r\n </>\r\n );\r\n};\r\n\r\nexport const checkDateAndDisplay = (dateStr: string) => {\r\n // const dt = new Date(dateStr);\r\n // //@ts-ignore\r\n // if (dt instanceof Date && !isNaN(dt)) {\r\n // return dt.toDateString();\r\n // }\r\n if (Boolean(dateStr)) {\r\n return dateStr;\r\n }\r\n return \"N/A\";\r\n};\r\n","import { Theme } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nconst drawerWidth = 227;\r\n\r\nexport const useStyles = makeStyles((theme: Theme) => {\r\n return {\r\n drawerPaper: {\r\n boxShadow: \"0 0 10px rgba(0, 0, 0, 0.1)\",\r\n position: \"relative\",\r\n whiteSpace: \"nowrap\",\r\n width: drawerWidth,\r\n transition: theme.transitions.create(\"width\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n border: \"none\",\r\n overflow: \"hidden\",\r\n zIndex: 120,\r\n },\r\n drawerPaperClose: {\r\n overflowX: \"hidden\",\r\n transition: theme.transitions.create(\"width\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n width: theme.spacing(8),\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: theme.spacing(8),\r\n },\r\n },\r\n toolbarIcon: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n zIndex: 9999,\r\n ...theme.mixins.toolbar,\r\n background: \"var(--white)\",\r\n justifyContent: \"center\",\r\n height: \"67px\",\r\n // borderBottom: \"1px dashed #949597\",\r\n },\r\n hrCSS: {\r\n zIndex: 9999,\r\n },\r\n buttonLink: {\r\n backgroundColor: \"transparent\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n textDecoration: \"underline\",\r\n display: \"inline\",\r\n margin: 0,\r\n padding: 0,\r\n \"&:focus\": {\r\n textDecoration: \"none\",\r\n },\r\n \"$:hover\": {\r\n textDecoration: \"none\",\r\n },\r\n },\r\n };\r\n});\r\n\r\n/*\r\n \r\n*/\r\n","import { NavItemType } from \"./navigation\";\r\n\r\nexport const reportMetaData: NavItemType[] = [];\r\n","// import { createTheme } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n// const theme = createTheme();\r\n\r\nexport const useStylesBootstrapNav = makeStyles((theme: any) => ({\r\n navBarCSS: {\r\n padding: \"4px 1rem \",\r\n backgroundColor: \"#fff !important\",\r\n minHeight: \"64px\",\r\n boxShadow: \"0 3px 6px rgba(0,0,0,0.03)\",\r\n margin: \"10px\",\r\n },\r\n headerDropdown: {\r\n backgroundColor: \"#fff\",\r\n minWidth: \"205px\",\r\n boxShadow: \"0 3px 6px rgba(0,0,0,0.16)\",\r\n textDecoration: \"none\",\r\n borderBottom: \"3px solid #26A456\",\r\n },\r\n navLinkHeader: {\r\n color: \"#555\",\r\n fontSize: \"14px\",\r\n lineHeight: \"1.2\",\r\n paddingTop: \"4px\",\r\n paddingBottom: \"4px\",\r\n paddingRight: \".5rem\",\r\n paddingLeft: \".5rem\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n\r\n \"& hover\": {\r\n color: \"#0b6fb8\",\r\n },\r\n },\r\n productLink: {\r\n color: \"#555\",\r\n padding: \"0 1rem 8px 1rem\",\r\n display: \"inline-block\",\r\n verticalAlign: \"middle\",\r\n cursor: \"pointer\",\r\n textTransform: \"capitalize\",\r\n },\r\n font13: {\r\n fontSize: \"13px\",\r\n },\r\n loginDropdown: {\r\n width: \"160px\",\r\n },\r\n}));\r\n\r\nexport const useStylesSideBar = makeStyles((theme: any) => ({\r\n root: {\r\n justifyContent: \"center\",\r\n },\r\n drawer: {\r\n margin: \"5px\",\r\n },\r\n item: {\r\n display: \"flex\",\r\n //borderBottom: \"2px solid #93242433\",\r\n borderRadius: \"8px\",\r\n marginLeft: \"7px\",\r\n marginTop: \"6.5px\",\r\n width: \"93%\",\r\n height: \"50px\",\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(2),\r\n background: \"var(--white)\",\r\n boxShadow: \"3px 6px 6px rgba(93, 95, 121, 0.2)\",\r\n \"& svg\": {\r\n // color: theme.palette.primary.main,\r\n color: \"var(--theme-color1)\",\r\n },\r\n \"&:hover\": {\r\n boxShadow:\r\n \"6px 6px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 0px 0px rgba(0,0,5,0.12)\",\r\n background: \"var(--theme-color4)\",\r\n transition: \"0.3s ease\",\r\n \"& .__more-btn__\": {\r\n opacity: 1,\r\n pointerEvents: \"auto\",\r\n background: \"#ddd\",\r\n \"& svg\": {\r\n fill: \"var(--theme-color1) !important\",\r\n },\r\n },\r\n },\r\n },\r\n drawerIconSize: {\r\n width: \"50px\",\r\n height: \"50px\",\r\n padding: \"18px\",\r\n justifyItems: \"cenetr\",\r\n },\r\n button: {\r\n color: \"#0063A3\",\r\n padding: \"10px 8px\",\r\n //justifyContent: \"flex-start\",\r\n textTransform: \"none\",\r\n letterSpacing: 0,\r\n width: \"100%\",\r\n textAlign: \"left\",\r\n \"&:hover\": {\r\n backgroundColor: \"var(--theme-color1)\",\r\n // boxShadow: \"0px 15px 20px rgb(221 176 176 / 37%)\",\r\n },\r\n },\r\n btnRoot: {\r\n paddingLeft: \"24px\",\r\n justifyContent: \"left \",\r\n },\r\n navLinks: {\r\n // height: \"calc(100vh - 78px)\",\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n // height:\"100px\",\r\n // backgroundColor: \"rgba(250, 251, 255, 0.9);\",\r\n // height: \"calc(100vh - 230px)\",\r\n //background: \"var(--theme-color1)\",\r\n // marginTop: \"25px\",\r\n // boxShadow: \"0 3px 6px rgba(255, 99, 71, 0.3)\",\r\n borderRadius: \"10px\",\r\n paddingTop: \"5px\",\r\n \"&>.scrollbar-container\": {\r\n paddingBottom: \"10px\",\r\n },\r\n //margin: \"5px\",\r\n },\r\n navLinksforseparateView: {\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n height: \"calc(100vh - 180px)\",\r\n // height:\"auto\",\r\n paddingTop: \"10px\",\r\n },\r\n nestedMenuLevel1: {\r\n paddingLeft: \"20px\",\r\n marginTop: \"11px\",\r\n paddingRight: theme.spacing(3),\r\n height: \"auto\",\r\n fontSize: \"13px\",\r\n \"& div > svg\": {\r\n fontSize: \"14px\",\r\n },\r\n },\r\n nestedMenuLevel2: {\r\n paddingLeft: \"20px\",\r\n marginTop: \"11px\",\r\n fontSize: \"12px\",\r\n \"& div > svg\": {\r\n fontSize: \"9px\",\r\n },\r\n },\r\n listIcon: {\r\n minWidth: \"30px !important\",\r\n justifyItems: \"center\",\r\n color: \"var(--theme-color6)\",\r\n fontWeight: 700,\r\n fontSize: \"18px\",\r\n },\r\n link: {\r\n fontSize: \"1rem \",\r\n marginTop: \"2px\",\r\n marginBottom: \"2px\",\r\n textOverflow: \"ellipsis\",\r\n color: \"var(--theme-color1)\",\r\n marginLeft: \"15px\",\r\n whiteSpace: \"break-spaces\",\r\n \"& span\": {\r\n fontWeight: 400,\r\n whiteSpace: \"break-spaces\",\r\n },\r\n \"& p\": {\r\n color: \"var(--theme-color3)\",\r\n fontweight: 400,\r\n },\r\n },\r\n linktext: {\r\n backgroundColor: \"var(--white)\",\r\n \"&:hover\": {\r\n background: \"var(--theme-color1)\",\r\n \"& div\": {\r\n color: \"var(--white) !important\",\r\n },\r\n \"& div > svg\": {\r\n color: \"var(--white) !important\",\r\n },\r\n },\r\n },\r\n faSmall: {\r\n fontSize: \"13px \",\r\n },\r\n openList: {\r\n \":not(activeMenuItem)\": {\r\n \"& > div\": {\r\n backgroundColor: \"rgba(0, 0, 0, 0.04)\",\r\n },\r\n \"& *\": {\r\n color: \"var(--white)\",\r\n },\r\n },\r\n },\r\n openCurrent: {\r\n backgroundColor: \"var(--theme-color1)\",\r\n \"& *\": {\r\n color: \"var(--white)\",\r\n },\r\n \"&:hover\": {\r\n backgroundColor: \"var(--theme-color1)\",\r\n },\r\n },\r\n slimList: {\r\n paddingTop: \"15px\",\r\n paddingBottom: \"13px\",\r\n height: \"auto\",\r\n paddingLeft: \"15px\",\r\n justifyItems: \"center\",\r\n },\r\n activeMenuItem: {\r\n backgroundColor: \"var(--theme-color1)!important \", //\"var(--white)!important\",\r\n\r\n \"& > div\": {\r\n color: \"var(--white)!important\",\r\n },\r\n \"& svg\": {\r\n color: \"var(--theme-color4)\",\r\n },\r\n \"& hover\": {\r\n \"& > div\": {\r\n color: \"var(--theme-color3)\",\r\n },\r\n },\r\n \"& p\": {\r\n color: \"var(--theme-color4)\",\r\n },\r\n },\r\n}));\r\n","import { FC, useEffect } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { NavItemType, SideBarRendererType } from \"./types\";\r\nimport { useStylesSideBar } from \"./style\";\r\nimport ScrollBar from \"react-perfect-scrollbar\";\r\nimport {\r\n Button,\r\n Collapse,\r\n List,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n Tooltip,\r\n} from \"@mui/material\";\r\nimport { ExpandLess, ExpandMore } from \"@mui/icons-material\";\r\nimport { usePopupContext } from \"@acuteinfo/common-base\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport MoreHorizIcon from \"@mui/icons-material/MoreHoriz\";\r\nlet localdrawerOpen = true;\r\n\r\ninterface SideBarNavProps extends SideBarRendererType {\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n authState?: any;\r\n handleListItemClick?: (flag: string) => void;\r\n handleClickAction?: Function;\r\n}\r\n\r\nexport const SideBarNav: FC<SideBarNavProps> = ({\r\n metaData,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n setView,\r\n slimSize,\r\n setNewFilterData,\r\n setNewFilterView,\r\n isFromSeparetView = false,\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n handleListItemClick,\r\n authState,\r\n handleClickAction,\r\n}) => {\r\n const classes = useStylesSideBar();\r\n let result: JSX.Element[] | null = null;\r\n localdrawerOpen = drawerOpen;\r\n if (Array.isArray(metaData.navItems)) {\r\n result = metaData.navItems.map((one) => {\r\n if (one?.seperateView === true) {\r\n return (\r\n <SeperateListView\r\n key={one.label}\r\n item={one}\r\n setView={setView}\r\n classes={classes}\r\n level={0}\r\n slimSize={slimSize}\r\n setNewFilterData={setNewFilterData}\r\n setNewFilterView={setNewFilterView}\r\n handleListItemClick={handleListItemClick}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n } else if (Array.isArray(one.children)) {\r\n return (\r\n <NestedListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={0}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n handleListItemClick={handleListItemClick}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n } else {\r\n return (\r\n <SingleListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={0}\r\n slimSize={slimSize}\r\n drawerOpen={drawerOpen}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n }\r\n });\r\n }\r\n return (\r\n <List\r\n component=\"nav\"\r\n disablePadding\r\n className={\r\n isFromSeparetView ? classes.navLinksforseparateView : classes.navLinks\r\n }\r\n >\r\n <ScrollBar>{result}</ScrollBar>\r\n </List>\r\n );\r\n};\r\n\r\nconst SeperateListView: FC<{\r\n item: NavItemType;\r\n setView: any;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n slimSize?: boolean;\r\n setNewFilterData?: any;\r\n setNewFilterView?: any;\r\n handleListItemClick?: (flag: string) => void;\r\n handleClickAction?: Function;\r\n}> = ({\r\n item,\r\n setView,\r\n level,\r\n classes,\r\n slimSize,\r\n setNewFilterData,\r\n setNewFilterView,\r\n handleListItemClick,\r\n}) => {\r\n const [code, setCode] = useState(\"\");\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setCode(i18n.language);\r\n }, [t]);\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n // const icon = item.icon ? (\r\n // <ListItemIcon className={classes.listIcon}>\r\n // <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n // </ListItemIcon>\r\n // ) : null;\r\n\r\n const icon =\r\n item.icon?.toLowerCase() !== \"process.gif\" && item.icon ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n );\r\n\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n\r\n return (\r\n <ListItem\r\n button\r\n disableGutters\r\n sx={{ position: \"relative\", overflow: \"hidden\" }}\r\n className={clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })}\r\n onClick={() => {\r\n if (item.viewName === \"newfilterview\" && Array.isArray(item.children)) {\r\n setNewFilterView({\r\n label: item.label,\r\n placeholder: \"Search \" + item.label + \" Screen...\",\r\n });\r\n let newChield = item.children.map((item1) => {\r\n return { ...item1, secondaryLabel: item1.user_code };\r\n });\r\n setNewFilterData(newChield);\r\n }\r\n setView(item.viewName);\r\n }}\r\n >\r\n {typeof handleListItemClick === \"function\" ? (\r\n <Button\r\n className=\"__more-btn__\"\r\n title={t(\"OpenScreensList\")}\r\n sx={{\r\n background: \"#ddd\",\r\n outline: \"none\",\r\n border: \"none\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 0,\r\n right: 0,\r\n minWidth: \"38px\",\r\n height: \"20px\",\r\n lineHeight: \"10px\",\r\n cursor: \"pointer\",\r\n zIndex: 2,\r\n transition: \"all 0.3s ease-in-out\",\r\n borderRadius: \"0 0 0 8px\",\r\n boxShadow: \"0 1px 2px rgba(0,0,0,.2)\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleListItemClick(item.label);\r\n }}\r\n >\r\n <MoreHorizIcon fontSize=\"large\" color=\"secondary\" />\r\n </Button>\r\n ) : null}\r\n <Tooltip\r\n title={t(item.label)}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <ListItemText\r\n key={code}\r\n primary={t(item.label)}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n </Tooltip>\r\n ) : localdrawerOpen ? (\r\n <ListItemText\r\n key={code}\r\n primary={t(item.label)}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n ) : null}\r\n </ListItem>\r\n );\r\n};\r\n\r\nconst SingleListItem: FC<{\r\n item: NavItemType;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n slimSize?: boolean;\r\n drawerOpen?: any;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n handleClickAction?: Function;\r\n}> = ({\r\n item,\r\n classes,\r\n level,\r\n slimSize,\r\n drawerOpen,\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n handleClickAction,\r\n}) => {\r\n const [code, setCode] = useState(\"\");\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setCode(i18n.language);\r\n }, [t]);\r\n const isActiveMenu = isActiveMenuFromhref(\r\n window.location?.pathname ?? \"\",\r\n item?.href ?? \"\",\r\n item?.navigationProps,\r\n rootUrl,\r\n dashboardUrl,\r\n );\r\n if (isActiveMenu) {\r\n // GeneralAPI.setDocumentName(item.label);\r\n let titleText = document.title;\r\n document.title = titleText.split(\" - \")[0] + \" - \" + item.label;\r\n }\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n\r\n const icon =\r\n item.icon.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n );\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n return (\r\n <ListItem\r\n button\r\n // disabled ={item?.allow_open !== \"Y\"}\r\n disableGutters\r\n className={clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.activeMenuItem]: isActiveMenu,\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })}\r\n onClick={async (e) => {\r\n if (\r\n (e?.ctrlKey || e?.metaKey) &&\r\n typeof handleClickAction === \"function\"\r\n ) {\r\n handleClickAction(e, item);\r\n return;\r\n }\r\n e.preventDefault();\r\n if (item.isRouterLink) {\r\n let path = item.href;\r\n path =\r\n item.href?.substring(0, 1) === \"/\"\r\n ? item.href.substring(1)\r\n : item.href;\r\n if (item.passNavigationPropsAsURLParmas) {\r\n let urlParms = new URLSearchParams(item?.navigationProps);\r\n navigate(`${path}?${urlParms.toString()}`);\r\n } else {\r\n navigate(`${path}` as string, {\r\n state: { ...item?.navigationProps },\r\n });\r\n }\r\n } else if (Boolean(item.href)) {\r\n window.open(item.href, item.rel ?? \"_newtab\");\r\n }\r\n }}\r\n >\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {/* {console.log(localdrawerOpen, item.label.length)} */}\r\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\r\n <Tooltip\r\n title={\r\n item.system_code\r\n ? t(item.system_code, { defaultValue: item.label })\r\n : t(item.label)\r\n }\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <ListItemText\r\n key={code}\r\n primary={\r\n item.system_code\r\n ? t(item.system_code, { defaultValue: item.label })\r\n : t(item.label)\r\n }\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n </Tooltip>\r\n ) : localdrawerOpen ? (\r\n <ListItemText\r\n key={code}\r\n primary={t(\r\n item?.navigationProps\r\n ? `reportID${item?.system_code ?? \"\"}`\r\n : item?.system_code || item?.label || \"\",\r\n { defaultValue: item?.label ?? \"\" },\r\n )}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n ) : null}\r\n {/* <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText> */}\r\n </ListItem>\r\n );\r\n};\r\n\r\nconst NestedListItem: FC<{\r\n item: NavItemType;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n handleDrawerOpen: Function;\r\n drawerOpen: boolean;\r\n slimSize?: boolean;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n handleListItemClick?: (flag: string) => void;\r\n handleClickAction?: Function;\r\n}> = ({\r\n item,\r\n classes,\r\n level,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n slimSize,\r\n rootUrl,\r\n navigate,\r\n handleListItemClick,\r\n handleClickAction,\r\n}) => {\r\n const [code, setCode] = useState(\"\");\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setCode(i18n.language);\r\n }, [t]);\r\n const [open, setOpen] = useState(false);\r\n const handleClick = () => {\r\n if (!drawerOpen) {\r\n // handleDrawerOpen();\r\n }\r\n setOpen(!open);\r\n };\r\n const childrens = item.children?.map((one) => {\r\n if (Array.isArray(one.children)) {\r\n return (\r\n <NestedListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={level + 1}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n navigate={navigate}\r\n handleListItemClick={handleListItemClick}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n } else {\r\n return (\r\n <SingleListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={level + 1}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n navigate={navigate}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n }\r\n });\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n\r\n const icon =\r\n item.icon?.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n );\r\n\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n return (\r\n <>\r\n <ListItem\r\n button\r\n onClick={handleClick}\r\n disableGutters\r\n sx={{ position: \"relative\", overflow: \"hidden\" }}\r\n className={\r\n open\r\n ? clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.openCurrent]: true,\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })\r\n : clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })\r\n }\r\n >\r\n {typeof handleListItemClick === \"function\" ? (\r\n <Button\r\n className=\"__more-btn__\"\r\n title={t(\"OpenScreensList\")}\r\n sx={{\r\n background: \"#ddd\",\r\n outline: \"none\",\r\n border: \"none\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 0,\r\n right: 0,\r\n minWidth: \"38px\",\r\n height: \"20px\",\r\n lineHeight: \"10px\",\r\n cursor: \"pointer\",\r\n zIndex: 2,\r\n transition: \"all 0.3s ease-in-out\",\r\n borderRadius: \"0 0 0 8px\",\r\n boxShadow: \"0 1px 2px rgba(0,0,0,.2)\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleListItemClick(item.label);\r\n }}\r\n >\r\n <MoreHorizIcon fontSize=\"large\" color=\"secondary\" />\r\n </Button>\r\n ) : null}\r\n\r\n <Tooltip\r\n title={t(item.label)}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {/* {icon} */}\r\n {drawerOpen || !Boolean(icon) ? (\r\n <>\r\n <ListItemText\r\n key={code}\r\n primary={t(item.label)}\r\n secondary={item.secondaryLabel ?? null}\r\n color=\"primary\"\r\n className={classes.link}\r\n ></ListItemText>\r\n {open ? <ExpandLess /> : <ExpandMore />}\r\n </>\r\n ) : null}\r\n </ListItem>\r\n\r\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n <List\r\n component=\"div\"\r\n disablePadding\r\n className={open ? classes.openList : \"\"}\r\n >\r\n {childrens}\r\n </List>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\nconst isActiveMenuFromhref = (\r\n location,\r\n menuhref,\r\n navigationProps,\r\n rootUrl,\r\n dashboardUrl,\r\n) => {\r\n if (\r\n (location === `/${rootUrl}` || location === `/${rootUrl}/`) &&\r\n menuhref === dashboardUrl\r\n ) {\r\n return true;\r\n } else if (menuhref === \"report\") {\r\n try {\r\n let urlParms = new URLSearchParams(navigationProps);\r\n if (\"?\" + urlParms.toString() === window.location.search) {\r\n return true;\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return false;\r\n } else if (\r\n location !== `/${rootUrl}` &&\r\n location !== \"/\" &&\r\n Boolean(menuhref) &&\r\n location.includes(menuhref)\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n","import { NavItemType } from \"./types\";\r\n\r\nconst matchByValue = (search, tags, navItem) => {\r\n if (!Array.isArray(tags)) {\r\n tags = [tags];\r\n }\r\n return tags.some((one) =>\r\n navItem[one]\r\n ?.toLocaleLowerCase?.()\r\n ?.includes(search?.toLocaleLowerCase?.()),\r\n );\r\n};\r\n\r\nexport const filterMetaDataByValue = (\r\n searchString: string,\r\n navItems: NavItemType[],\r\n tagsToSearch?: string[],\r\n): NavItemType[] => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (matchByValue(searchString, tagsToSearch, navItems[i])) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaDataByValue(\r\n searchString,\r\n children,\r\n tagsToSearch,\r\n );\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n newNavItems.push({ ...newItem });\r\n }\r\n }\r\n }\r\n return newNavItems;\r\n};\r\n","import { FC, useEffect, useMemo, useState } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { SearchBar } from \"@acuteinfo/common-base\";\r\nimport ArrowBackIosNewIcon from \"@mui/icons-material/ArrowBackIosNew\";\r\nimport { useStylesSideBar } from \"./style\";\r\nimport { filterMetaDataByValue } from \"./filterMetaData\";\r\nimport { SideBarNav } from \"./sideBarNavigation\";\r\nimport { SideBarRendererType } from \"./types\";\r\nimport { ListItem, ListItemIcon, ListItemText } from \"@mui/material\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface NewSideBarNav extends SideBarRendererType {\r\n label: string;\r\n icon?: any;\r\n placeholder?: any;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n MessageBox?: any;\r\n handleClickAction?: Function;\r\n}\r\n\r\nexport const SearchViewNavigation: FC<NewSideBarNav> = ({\r\n metaData,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n setView,\r\n label,\r\n icon,\r\n placeholder = \"Search Reports...\",\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n MessageBox,\r\n handleClickAction,\r\n}) => {\r\n const [code, setCode] = useState(\"\");\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setCode(i18n.language);\r\n }, [t]);\r\n\r\n const [search, setSearch] = useState(\"\");\r\n const translatedMetaData = useMemo(() => {\r\n return metaData.navItems.map((item) => ({\r\n ...item,\r\n label: item.system_code\r\n ? t(item.system_code, { defaultValue: item.label })\r\n : item.label,\r\n }));\r\n }, [metaData.navItems, t]);\r\n\r\n const filteredMetaData = useMemo(() => {\r\n return filterMetaDataByValue(search, translatedMetaData, [\r\n \"label\",\r\n \"secondaryLabel\",\r\n ]);\r\n }, [search, translatedMetaData]);\r\n\r\n const classes = useStylesSideBar();\r\n\r\n const myIcon = icon ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <ArrowBackIosNewIcon />\r\n </ListItemIcon>\r\n ) : null;\r\n const handleClick = () => {\r\n if (!drawerOpen) {\r\n handleDrawerOpen();\r\n }\r\n };\r\n return (\r\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\r\n <ListItem\r\n button\r\n className={clsx({\r\n [classes.item]: true,\r\n [classes.nestedMenuLevel1]: true,\r\n [classes.linktext]: true,\r\n })}\r\n onClick={() => setView(\"/\")}\r\n sx={{ width: !drawerOpen ? \"80% !important\" : \"auto\" }}\r\n >\r\n {myIcon}\r\n <ListItemText key={code} primary={t(label)} className={classes.link} />\r\n </ListItem>\r\n {/* <div onClick={handleDrawerOpen}> */}\r\n <SearchBar\r\n sx={{ overflow: \"hidden\" }}\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n onClick={handleClick}\r\n placeholder={\r\n Boolean(placeholder)\r\n ? t(\"SidebarPlaceholder\", {\r\n defaultValue: placeholder,\r\n searchLabel: t(placeholder?.split(\" \")?.[1]) ?? \"\",\r\n })\r\n : \"Search Reports...\"\r\n }\r\n autoFocus={drawerOpen}\r\n />\r\n {/* </div> */}\r\n <SideBarNav\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n setView={setView}\r\n metaData={{\r\n navItems: filteredMetaData,\r\n config: { rel: \"\", target: \"_blank\" },\r\n }}\r\n slimSize={true}\r\n isFromSeparetView={true}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n MessageBox={MessageBox}\r\n handleClickAction={handleClickAction}\r\n />\r\n </div>\r\n );\r\n};\r\n","import { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport {\r\n faHandsHelping,\r\n faUsers,\r\n faBars,\r\n faBalanceScale,\r\n faHandHoldingHeart,\r\n faTasks,\r\n faCog,\r\n faHome,\r\n faTh,\r\n faUsersCog,\r\n faCircle,\r\n faUserCircle,\r\n faHashtag,\r\n faThumbtack,\r\n faSquare,\r\n faLink,\r\n faQuestion,\r\n faPlus,\r\n faTable,\r\n faLocationArrow,\r\n faHeadset,\r\n faGears,\r\n faArrowDown,\r\n faArrowUp,\r\n faSpinner,\r\n faCircleExclamation,\r\n faRotateRight,\r\n faUserLock,\r\n faUserClock,\r\n faGripHorizontal,\r\n faBarsProgress,\r\n faFileExport,\r\n faFileLines,\r\n faGear,\r\n faHeadphones,\r\n faUsersGear,\r\n faMessage,\r\n faUnlock,\r\n faUserPlus,\r\n faUserCheck,\r\n faKey,\r\n faIdCard,\r\n faIdBadge,\r\n faCheck,\r\n faCheckDouble,\r\n faCircleCheck,\r\n faPenToSquare,\r\n faCircleXmark,\r\n faUserTag,\r\n faAddressCard,\r\n faChartColumn,\r\n faUserPen,\r\n faHandHolding,\r\n faHandHoldingMedical,\r\n faObjectGroup,\r\n faTowerCell,\r\n faTowerObservation,\r\n faBuilding,\r\n faMailBulk,\r\n faLandmarkFlag,\r\n faCreditCard,\r\n faHospitalSymbol,\r\n faPlugCircleBolt,\r\n faCodeBranch,\r\n faPersonCircleCheck,\r\n faBank,\r\n faServer,\r\n faNotesMedical,\r\n faA,\r\n faB,\r\n faC,\r\n faD,\r\n faE,\r\n faF,\r\n faG,\r\n faH,\r\n faI,\r\n faJ,\r\n faK,\r\n faL,\r\n faM,\r\n faN,\r\n faO,\r\n faP,\r\n faQ,\r\n faR,\r\n faS,\r\n faT,\r\n faU,\r\n faV,\r\n faW,\r\n faX,\r\n faY,\r\n faZ,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nlibrary.add(\r\n faHandsHelping,\r\n faUsers,\r\n faBars,\r\n faBalanceScale,\r\n faHandHoldingHeart,\r\n faTasks,\r\n faCog,\r\n faHome,\r\n faTh,\r\n faUsersCog,\r\n faCircle,\r\n faUserCircle,\r\n faHashtag,\r\n faThumbtack,\r\n faSquare,\r\n faLink,\r\n faQuestion,\r\n faPlus,\r\n faTable,\r\n faLocationArrow,\r\n faHeadset,\r\n faGears,\r\n faArrowDown,\r\n faArrowUp,\r\n faSpinner,\r\n faCircleExclamation,\r\n faRotateRight,\r\n faUserLock,\r\n faUserClock,\r\n faGripHorizontal,\r\n faFileLines,\r\n faGear,\r\n faHeadphones,\r\n faUsersGear,\r\n faMessage,\r\n faUnlock,\r\n faUserPlus,\r\n faUserCheck,\r\n faKey,\r\n faIdCard,\r\n faIdBadge,\r\n faCheck,\r\n faCheckDouble,\r\n faCircleCheck,\r\n faCircleXmark,\r\n faUserTag,\r\n faAddressCard,\r\n faChartColumn,\r\n faUserPen,\r\n faHandHolding,\r\n faHandHoldingMedical,\r\n faObjectGroup,\r\n faTowerCell,\r\n faTowerObservation,\r\n faBuilding,\r\n faMailBulk,\r\n faLandmarkFlag,\r\n faCreditCard,\r\n faHospitalSymbol,\r\n faPlugCircleBolt,\r\n faCodeBranch,\r\n faPersonCircleCheck,\r\n faBank,\r\n faServer,\r\n faNotesMedical,\r\n faPenToSquare,\r\n faBarsProgress,\r\n faFileExport,\r\n faA,\r\n faB,\r\n faC,\r\n faD,\r\n faE,\r\n faF,\r\n faG,\r\n faH,\r\n faI,\r\n faJ,\r\n faK,\r\n faL,\r\n faM,\r\n faN,\r\n faO,\r\n faP,\r\n faQ,\r\n faR,\r\n faS,\r\n faT,\r\n faU,\r\n faV,\r\n faW,\r\n faX,\r\n faY,\r\n faZ,\r\n);\r\n","import { NavBarMetaDataType, NavItemType } from \"./navigation\";\r\nimport { cloneDeep } from \"lodash\";\r\n\r\nexport const transformMetaDataAsPerRole = (\r\n metaData: NavBarMetaDataType,\r\n role: number,\r\n branches: string[],\r\n company: string,\r\n access: any,\r\n products: string[],\r\n) => {\r\n let navItems = filterMetaData(\r\n metaData.navItems,\r\n role,\r\n branches,\r\n company,\r\n access,\r\n products,\r\n );\r\n //console.log(navItems);\r\n let newnavItem = navItems.map((item) => {\r\n let { children, ...newItem } = item;\r\n if (Array.isArray(children) && children.length > 5) {\r\n if (!Boolean(newItem.seperateView)) {\r\n newItem.seperateView = true;\r\n newItem.viewName = \"newfilterview\";\r\n //console.log(newItem);\r\n }\r\n }\r\n return { ...newItem, children: children };\r\n });\r\n return {\r\n config: metaData.config,\r\n navItems: newnavItem,\r\n };\r\n};\r\nexport const transformMetaDataAsPerMenuRights = (\r\n metaData: NavBarMetaDataType,\r\n authState: any,\r\n) => {\r\n let newMetadata = cloneDeep(metaData) as NavBarMetaDataType;\r\n let NavItem = filterMetaDataAsperRights(newMetadata.navItems, authState);\r\n newMetadata.navItems = NavItem;\r\n return newMetadata;\r\n};\r\nconst filterMetaDataAsperRights = (navItems, accessgroup) => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaDataAsperRights(children, accessgroup);\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n //if(newItem?.doccd) ///condition\r\n ///newNavItems.push({ ...newItem });\r\n }\r\n }\r\n return newNavItems;\r\n};\r\nconst matchBranches = (userBranches, accessBranches) => {\r\n if (!Array.isArray(accessBranches) || !Array.isArray(userBranches)) {\r\n return true;\r\n }\r\n if (accessBranches.length <= 0 || userBranches.length <= 0) {\r\n return true;\r\n }\r\n for (const one of accessBranches) {\r\n if (userBranches.indexOf(one) >= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nconst matchComany = (userCompany, accessCompany) => {\r\n if (!Array.isArray(accessCompany) || !Boolean(userCompany)) {\r\n return true;\r\n }\r\n if (accessCompany.length <= 0) {\r\n return true;\r\n }\r\n if (accessCompany.indexOf(userCompany) >= 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst matchRoles = (userRole, accessRoles) => {\r\n if (!Array.isArray(accessRoles) || typeof userRole !== \"number\") {\r\n return true;\r\n }\r\n if (accessRoles.length <= 0) {\r\n return true;\r\n }\r\n if (accessRoles.indexOf(userRole) >= 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst matchInvisibleRoles = (userRole, accessRoles) => {\r\n if (!Array.isArray(accessRoles) || typeof userRole !== \"number\") {\r\n return true;\r\n }\r\n if (accessRoles.length <= 0) {\r\n return true;\r\n }\r\n if (accessRoles.indexOf(userRole) >= 0) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nconst matchProducts = (userProducts, accessProducts) => {\r\n if (!Array.isArray(accessProducts) || !Array.isArray(userProducts)) {\r\n return true;\r\n }\r\n if (accessProducts.length <= 0 || userProducts.length <= 0) {\r\n return true;\r\n }\r\n\r\n for (const one of accessProducts) {\r\n if (userProducts.indexOf(one) >= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\nconst ishrefisNotNull = (item) => {\r\n if (\r\n !(Array.isArray(item.children) && item.children.length > 0) &&\r\n !Boolean(item.href)\r\n ) {\r\n //console.log(item);\r\n return false;\r\n }\r\n return true;\r\n};\r\nconst filterMetaData = (\r\n navItems: NavItemType[],\r\n role: number,\r\n branches: string[],\r\n company: string,\r\n access: any,\r\n products: string[],\r\n): NavItemType[] => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (\r\n matchRoles(Number(role), navItems[i].visibleToRoles) &&\r\n matchComany(company, navItems[i].visibleToCompanies) &&\r\n matchBranches(branches, navItems[i].visibleToBranches) &&\r\n matchInvisibleRoles(Number(role), navItems[i].invisibleToRoles) &&\r\n matchProducts(products, navItems[i].visibleToProducts) &&\r\n ishrefisNotNull(navItems[i])\r\n ) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaData(\r\n children,\r\n role,\r\n branches,\r\n company,\r\n access,\r\n products,\r\n );\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n newNavItems.push({ ...newItem, secondaryLabel: newItem.system_code });\r\n }\r\n }\r\n }\r\n return newNavItems;\r\n};\r\n","import { FC, useMemo, useState } from \"react\";\r\nimport { reportMetaData } from \"./reportMetaData\";\r\nimport { SideBarNav } from \"./navigation\";\r\nimport { SearchViewNavigation } from \"./navigation/searchViewNavigation\";\r\nimport \"./icons\";\r\nimport { transformMetaDataAsPerRole } from \"./transformer\";\r\n\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nexport const SideBar = ({\r\n authState,\r\n handleDrawerOpen,\r\n open,\r\n rootUrl,\r\n dashboardUrl = \"dashboard\",\r\n navigate,\r\n handleListItemClick,\r\n handleClickAction,\r\n}: any) => {\r\n const [view, setView] = useState(\"/\");\r\n const [NewFilterView, setNewFilterView] = useState<any>({});\r\n const [NewFilterData, setNewFilterData] = useState([]);\r\n\r\n const branches = useMemo(() => {\r\n let myBranches = authState?.access?.entities?.Branch ?? [];\r\n if (Array.isArray(myBranches) && myBranches.length >= 0) {\r\n return myBranches.map((one) => one.branchCode);\r\n } else {\r\n return [];\r\n }\r\n }, []);\r\n\r\n const products = useMemo(() => {\r\n let myProducts = authState?.access?.products ?? [];\r\n if (Array.isArray(myProducts) && myProducts.length >= 0) {\r\n return myProducts.map((one) => one.categoryCode);\r\n } else {\r\n return [];\r\n }\r\n }, []);\r\n let newMetaData = { navItems: authState.menulistdata };\r\n let filteredMetaDataSideBar = transformMetaDataAsPerRole(\r\n newMetaData,\r\n Number(authState.role),\r\n branches,\r\n authState.companyID,\r\n authState.access,\r\n products,\r\n );\r\n\r\n let filteredReportsMetaData = transformMetaDataAsPerRole(\r\n {\r\n config: { rel: \"\", target: \"_blank\" },\r\n navItems: reportMetaData,\r\n },\r\n Number(authState.role),\r\n branches,\r\n authState.companyID,\r\n authState.access,\r\n products,\r\n );\r\n return view === \"report\" ? (\r\n <SearchViewNavigation\r\n metaData={filteredReportsMetaData}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n label=\"Reports\"\r\n icon=\"table\"\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n handleClickAction={handleClickAction}\r\n />\r\n ) : view === \"newfilterview\" ? (\r\n <SearchViewNavigation\r\n metaData={{\r\n config: { rel: \"\", target: \"_blank\" },\r\n navItems: NewFilterData,\r\n }}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n label={NewFilterView?.label ?? \"Reports\"}\r\n icon=\"table\"\r\n placeholder={NewFilterView?.placeholder}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n handleClickAction={handleClickAction}\r\n />\r\n ) : (\r\n <>\r\n <SideBarNav\r\n metaData={filteredMetaDataSideBar}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n slimSize={true}\r\n setNewFilterData={setNewFilterData}\r\n setNewFilterView={setNewFilterView}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n authState={authState}\r\n handleListItemClick={handleListItemClick}\r\n handleClickAction={handleClickAction}\r\n />\r\n </>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { useStyles } from \"./style\";\r\nimport { Drawer } from \"@mui/material\";\r\nimport { SideBar } from \"./sideBar\";\r\n\r\ninterface SidebarWrapperProps {\r\n authState: any;\r\n navigate: NavigateFunction;\r\n handleDrawerOpen: Function;\r\n handleDrawerClose?: Function;\r\n open: boolean;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n handleListItemClick?: (flag: string) => void;\r\n hideUpperSpace?: boolean;\r\n handleClickAction?: Function;\r\n}\r\n\r\nexport const SidebarWrapper: React.FC<SidebarWrapperProps> = (props) => {\r\n const classes = useStyles({});\r\n return (\r\n <Drawer\r\n variant=\"permanent\"\r\n sx={{\r\n height: \"100dvh\",\r\n }}\r\n classes={{\r\n paper: clsx(\r\n classes.drawerPaper,\r\n !props.open && classes.drawerPaperClose,\r\n ),\r\n }}\r\n open={props.open}\r\n >\r\n {!props.hideUpperSpace ? (\r\n <div className={classes.toolbarIcon}></div>\r\n ) : null}\r\n <SideBar {...props} />\r\n </Drawer>\r\n );\r\n};\r\n"],"names":["useStyles","makeStyles","theme","wrapper","minHeight","boxShadow","background","loginEmp","padding","spacing","display","maxWidth","margin","borderRadius","breakpoints","down","width","formWrap","marginTop","loginBtn","minWidth","fontSize","border","color","fontWeight","letterSpacing","textTransform","alignSelf","OTPTimer","palette","primary","main","resendLink","cursor","secondary","logo","marginBottom","loginLeft","loginRight","loginImg","verifybutton","otpButtons","divflex","otpinputpadding","marginRight","height","ibtnvisible","btnvisibleoff","OTPalignName","alignItems","justifyContent","fonWeight","lineHeight","resendOTPalign","resendbtnLink","textDecoration","dialogTitleClass","lang_svg","dialogContent","whiteSpace","button","flexDirection","UsernamePasswordField","classes","loginState","verifyUsernamePassword","forgotPasswordEndpoint","preventSpecialChars","input","setInput","useState","userName","password","showPasswordTime","setShowPasswordTime","blurred","setBlurred","showPassword","Date","now","forceUpdate","timerRef","useRef","t","useTranslation","useEffect","clearTimeout","current","handleChange","event","name","target","value","split","some","char","includes","isUsernameError","isPasswordError","values","inputRef","inputPassRef","inputButtonRef","timeoutCd","setTimeout","focus","old","otpmodelClose","_jsx","Fragment","children","Container","_jsxs","Grid","style","paddingTop","fontStyle","className","TextField","autoFocus","label","placeholder","String","fullWidth","type","trimStart","onChange","error","helperText","userMessageforusername","InputLabelProps","shrink","disabled","loading","autoComplete","onKeyDown","e","key","click","inputProps","maxLength","repeat","onBlur","onFocus","userMessageforpassword","InputProps","endAdornment","InputAdornment","position","IconButton","onClick","onMouseDown","preventDefault","Visibility","VisibilityOff","flex","textAlign","href","GradientButton","toLowerCase","ref","endicon","undefined","rotateIcon","CircularProgress","size","thickness","OTPModel","OTPResendRequest","open","handleClose","VerifyOTP","OTPError","setOTPError","previousStep","setNewRequestID","id","otpresendCount","resendFlag","OTP","setOTP","otpContainerRef","btnshow","setbtnshow","resendotpLoading","setResendotpLoading","enqueueSnackbar","useSnackbar","Boolean","firstInput","querySelector","authType","defaultValue","otpSentText","username","charAt","toUpperCase","slice","description","ResendOTP","onResendClick","async","status","data","message","comapanyCD","branchCD","contactUser","otpValidFor","TRAN_CD","variant","renderButton","buttonProps","remainingTime","other","clsx","remainingtime","renderTime","parseInt","maxTime","OTPInput","OTPLength","otpType","otploading","secure","FormHelperText","gap","textColor","sx","opacity","transform","transition","starticon","length","OTPModelForm","handleCloseEvent","forgotOtpSentText","auth_type","company_ID","branch_cd","VerifyFinger","verifyFinger","Typography","isBiometricError","eFingerUi","fingerUi","FingerprintSharpIcon","borderBottom","FingerIcon","isScanning","_Fragment","biometric","userMessage","keyCode","decryptString","encryptedText","iv","keyIv","CryptoJS","PBKDF2","enc","Utf8","parse","keySize","iterations","hasher","algo","SHA1","lib","WordArray","create","words","getKeyAndIv","outerDecoded","Latin1","stringify","Base64","cipherParams","CipherParams","ciphertext","bytes","wordArray","sigBytes","u8","Uint8Array","i","wordArrayToUint8Array","AES","decrypt","mode","CBC","pad","Pkcs7","result","TextDecoder","decode","Error","isBase64","str","test","BankDetails","bannerDetails","loginImageURL","setLoginImageURL","urlObj","banner","useMemo","bannerImg","blob","utilFunction","base64toBlob","URL","createObjectURL","item","xs","md","lg","alt","objectFit","objectPosition","src","bannerTitle","marginLeft","bannerNote","PasswordRotation","ResetPassword","accessToken","tokenType","validatePasswordFn","MessageBox","usePopupContext","oldpassword","confirmpassword","pwdReset","setPasswordReset","isLoading","isNewpwdLoading","isoldPwdError","oldpassworderror","isnewpwdError","newpassworderror","isconfirmnewpwdError","confirmnewpassworderror","handleBlur","validateStatus","validateData","USER_ID","PASSWORD","SCREEN_REF","O_STATUS","O_MESSAGE","paddingBottom","response","messageTitle","icon","inititalState","firstName","lastName","isError","OtpuserMessage","currentFlow","transactionID","access_token","token_type","reducer","state","action","isOTPError","payload","errorPassword","errorUsername","otpmodelclose","auth_data","totpReg","secretTocken","secretTockenQR","errorMessage","AuthControllerWrapper","logoUrl","logoTitle","loginFn","veirfyUsernameandPassword","verifyOTP","LanguageComponent","onOtpVerifyFailFn","dispath","useReducer","openpwdreset","setOpenPwdReset","failureCount","dashboardLogoURL","setDashboardLogoURL","otpResendRef","changeUserName","container","overflow","sm","direction","ml","Tooltip","describeChild","title","flag","responseType","BASE_COMP_CD","BASE_BRANCH_CD","CONTACT2","REQUEST_CD","DESCRIPTION","AUTH_TYPE","AUTH_DATA","OTP_VALID","OTP_SENT_TEXT","TOTP_REG","SECRET_TOCKEN","SECRET_TOCKEN_QR","STATUS","ALERT_MSG_LIST","err","OTPNumber","toString","newRequestID","fingerResponse","jsondata","JSON","Quality","TimeOut","rawResponse","fetch","method","headers","Accept","body","json","API.capture","ErrorCode","promise","rows","captureFinger","element","MFS100Request","GalleryTemplate","IMG_DATA","ProbTemplate","BioType","Status","errorCode","sr_cd","SR_CD","console","matchFinger","IsoTemplate","ErrorMessage","ForgotPasswordFields","onSubmit","navigate","loginPageEndpoint","validatePassword","workingState","mobileno","showConfirmPasswordTime","setShowConfirmPasswordTime","showConfirmPassword","replace","isMobileError","userMessageforMobileno","userMessageforPassword","passwordValidateloading","isConfirmPasswordError","userMessageforconfirmPassword","isApiError","apierrorMessage","requestCd","newPasswordMessage","confirmPasswordValidateloading","ForgotPasswordControllerWrapper","screenFlag","updatenewPassword","veirfyUsernameandMobileNo","verifyOTPForPWDReset","TotpEnbaledDisabled","setOpen","totp","setTotp","Enable","totpdata","verifyRequestData","validationData","isNaN","pwdverify","ValidatePassword","resdata","USER_NAME","MESSAGE","COMP_CD","BRANCH_CD","trim","heading_user_img","heading_user_img_border","BranchSelectionGridMetaData","gridConfig","dense","gridLabel","rowIdColumn","defaultColumnConfig","allowColumnReordering","disableSorting","hideHeader","disableGroupBy","enablePagination","containerHeight","min","max","occupiedHeight","allowFilter","allowColumnHiding","allowRowSelection","isCusrsorFocused","hideFooter","columns","accessor","columnName","sequence","alignment","componentType","dateFormat","actions","actionName","actionLabel","multiple","rowDoubleClick","actionTextColor","actionBackground","startsIcon","onEnterSubmit","endsIcon","LightTooltip","styled","props","popper","tooltipClasses","tooltip","backgroundColor","common","white","shadows","Greetings","userId","hours","getHours","BranchSelectionGrid","selectionMode","authState","isBranchSelectedFn","isLoggedInFn","logoutFn","logos","BranchSelectionGridDataApiFn","GetMenuDataApiFn","sideImage","branchSelectFn","dashboardUrl","loginUrl","appTranCd","enableEnterToFocus","isFetching","refetch","useQuery","queryClient","removeQueries","mutation","useMutation","onSuccess","extraData","menulistdata","branchCode","branch","BRANCH_NM","baseBranchCode","mutationError","setCurrentAction","useCallback","defFocusBtnName","mutate","GROUP_NAME","groupName","APP_TRAN_CD","COMP_NM","DAYEND_STATUS","EOD_RUNNING_STATUS","IS_UPD_DEF_BRANCH","user","isUpdDefBranch","COMP_BASE_BRANCH_CD","buttonNames","openBranchExists","b","renderError","Alert","severity","errorMsg","error_msg","errorDetail","error_detail","xl","visibility","profile","Stack","Box","roleName","placement","Avatar","bank","companyName","employeeID","GridWrapper","finalMetaData","setData","setAction","controlsAtBottom","actionContextAtBottom","disableMultipleRowSelect","defaultSelectedRowId","defaultSelectBranch","headerToolbarStyle","Button","right","bottom","BranchSelectionGridWrapper","ClearCacheProvider","appBar","transitions","easing","sharp","duration","leavingScreen","searchBar","searchList","top","maxHeight","overflowY","outline","appBarShift","paddingLeft","enteringScreen","heading_user_dtl","left","toolbar","flexGrow","searchRoot","fontFamily","typography","alpha","search","pointerEvents","inputRoot","inputInput","loggedInUser","nameClass","dropDown","vTop","verticalAlign","userDesignation","userprofilehover","version01","DrawerClose_icon","marquee","animation","animationDelay","popover","blinkHard","StyledAppBar","AppBar","LogoContainer","CompanyLogo","BankInfoContainer","BankInfoText","Search","shape","up","RightSection","GreetingText","AppbarWrapper","handleDrawerOpen","handleDrawerClose","SearchComponent","bankLogo","profilePic","handleLogout","handleProfile","hideGreetings","menuIconConfig","optionalComponents","idleTimer","above1300","useMediaQuery","countdownMessage","setCountdownMessage","blinker","setBlinker","CloseIconComponent","OpenIconComponent","menuIconPosition","interval","setInterval","getRemainingTime","remainingSeconds","Math","floor","prev","clearInterval","Toolbar","disableRipple","MenuOutlinedIcon","version","BecomePartnerImg","textOverflow","workingDate","checkDateAndDisplay","format","lastLogin","greet","map","component","Component","arrow","LogoutIcon","dateStr","drawerPaper","zIndex","drawerPaperClose","overflowX","toolbarIcon","mixins","hrCSS","buttonLink","reportMetaData","navBarCSS","headerDropdown","navLinkHeader","paddingRight","productLink","font13","loginDropdown","useStylesSideBar","root","drawer","fill","drawerIconSize","justifyItems","btnRoot","navLinks","navLinksforseparateView","nestedMenuLevel1","nestedMenuLevel2","listIcon","link","fontweight","linktext","faSmall","openList","openCurrent","slimList","activeMenuItem","localdrawerOpen","SideBarNav","metaData","drawerOpen","setView","slimSize","setNewFilterData","setNewFilterView","isFromSeparetView","rootUrl","handleListItemClick","handleClickAction","Array","isArray","navItems","one","seperateView","SeperateListView","level","NestedListItem","SingleListItem","List","disablePadding","ScrollBar","code","setCode","i18n","language","labelStart","substring","ListItemIcon","FontAwesomeIcon","levelClassName","ListItem","disableGutters","viewName","newChield","item1","secondaryLabel","user_code","stopPropagation","MoreHorizIcon","ListItemText","isActiveMenu","isActiveMenuFromhref","window","location","pathname","navigationProps","titleText","document","ctrlKey","metaKey","isRouterLink","path","passNavigationPropsAsURLParmas","urlParms","URLSearchParams","rel","system_code","childrens","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","menuhref","log","matchByValue","tags","navItem","toLocaleLowerCase","filterMetaDataByValue","searchString","tagsToSearch","newNavItems","newItem","newChildren","push","SearchViewNavigation","setSearch","translatedMetaData","filteredMetaData","myIcon","ArrowBackIosNewIcon","SearchBar","searchLabel","config","library","add","faHandsHelping","faUsers","faBars","faBalanceScale","faHandHoldingHeart","faTasks","faCog","faHome","faTh","faUsersCog","faCircle","faUserCircle","faHashtag","faThumbtack","faSquare","faLink","faQuestion","faPlus","faTable","faLocationArrow","faHeadset","faGears","faArrowDown","faArrowUp","faSpinner","faCircleExclamation","faRotateRight","faUserLock","faUserClock","faGripHorizontal","faFileLines","faGear","faHeadphones","faUsersGear","faMessage","faUnlock","faUserPlus","faUserCheck","faKey","faIdCard","faIdBadge","faCheck","faCheckDouble","faCircleCheck","faCircleXmark","faUserTag","faAddressCard","faChartColumn","faUserPen","faHandHolding","faHandHoldingMedical","faObjectGroup","faTowerCell","faTowerObservation","faBuilding","faMailBulk","faLandmarkFlag","faCreditCard","faHospitalSymbol","faPlugCircleBolt","faCodeBranch","faPersonCircleCheck","faBank","faServer","faNotesMedical","faPenToSquare","faBarsProgress","faFileExport","faA","faB","faC","faD","faE","faF","faG","faH","faI","faJ","faK","faL","faM","faN","faO","faP","faQ","faR","faS","faT","faU","faV","faW","faX","faY","faZ","transformMetaDataAsPerRole","role","branches","company","access","products","newnavItem","filterMetaData","matchBranches","userBranches","accessBranches","indexOf","matchComany","userCompany","accessCompany","matchRoles","userRole","accessRoles","matchInvisibleRoles","matchProducts","userProducts","accessProducts","ishrefisNotNull","Number","visibleToRoles","visibleToCompanies","visibleToBranches","invisibleToRoles","visibleToProducts","SideBar","view","NewFilterView","NewFilterData","myBranches","entities","Branch","myProducts","categoryCode","newMetaData","filteredMetaDataSideBar","companyID","filteredReportsMetaData","SidebarWrapper","Drawer","paper","hideUpperSpace"],"mappings":"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1BiF,EACDpuB,EAAC0rB,EAAY,CAAYxwB,QAASqD,EAAEqC,GAAQH,UAAWtD,EAAQqrB,MAA5CgC,MAGrBxqB,EAACsuB,EAAS,CACR9mB,GAAI,CAAEuK,SAAU,UAChB/S,MAAOijB,EACP/gB,SAAWU,GAAMqsB,EAAUrsB,EAAE7C,OAAOC,OACpC0D,QAzBc,KACbymB,GACHpF,KAwBEljB,YACEmE,QAAQnE,GACJtC,EAAE,qBAAsB,CACtB6G,aAAcvE,EACd0tB,YAAahwB,EAAEsC,GAAa5B,MAAM,OAAO,KAAO,KAElD,oBAEN0B,UAAWwoB,IAGbnpB,EAACipB,GAAU,CACTlF,iBAAkBA,EAClBoF,WAAYA,EACZC,QAASA,EACTF,SAAU,CACRY,SAAUqE,EACVK,OAAQ,CAAE9B,IAAK,GAAI3tB,OAAQ,WAE7BsqB,UAAU,EACVG,mBAAmB,EACnBC,QAASA,EACTpN,aAAcA,EACd1G,SAAUA,EACV9H,WAAYA,EACZ8b,kBAAmBA,QCrB3B8E,GAAQC,IACNC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IC7LK,MAAMC,GAA6B,CACxCvL,EACAwL,EACAC,EACAC,EACAC,EACAC,KAEA,IASIC,E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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/pages/auth/style.ts","../src/customHooks/usePreventClipboard.tsx","../src/pages/auth/usernamePassword.tsx","../src/pages/auth/otpPopup.tsx","../src/pages/auth/verifyFinger.tsx","../src/pages/auth/biometric.ts","../src/pages/auth/utils.ts","../src/pages/auth/bankDetails.tsx","../src/pages/auth/passwordRotation.tsx","../src/pages/auth/authController.tsx","../src/pages/auth/api.ts","../src/pages/auth/forgotPasswordField.tsx","../src/pages/auth/forgotPassword.tsx","../src/pages/branchSelection/style.ts","../src/pages/branchSelection/gridMetadata.ts","../src/pages/branchSelection/branchSelectionGrid.tsx","../src/pages/appbar/style.ts","../src/pages/appbar/appBar.tsx","../src/pages/sidebar/style.ts","../src/pages/sidebar/reportMetaData.ts","../src/pages/sidebar/navigation/style.ts","../src/pages/sidebar/navigation/sideBarNavigation.tsx","../src/pages/sidebar/navigation/filterMetaData.ts","../src/pages/sidebar/navigation/searchViewNavigation.tsx","../src/pages/sidebar/icons.ts","../src/pages/sidebar/transformer.ts","../src/pages/sidebar/sideBar.tsx","../src/pages/sidebar/drawer.tsx"],"sourcesContent":["import { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: any) => ({\r\n wrapper: {\r\n minHeight: \"100vh\",\r\n boxShadow: \"0 3px 6px rgba(0,0,0,0.03)\",\r\n // background: \"#fff\",\r\n background: \"var(--white)\",\r\n },\r\n loginEmp: {\r\n background: \"#fff\",\r\n padding: theme.spacing(2, 4),\r\n display: \"flex\",\r\n maxWidth: \"400px\",\r\n margin: \"auto\",\r\n boxShadow: \"0 0 20px rgba(0,0,0,0.06)\",\r\n borderRadius: \"8px\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n width: \"100%\",\r\n },\r\n },\r\n formWrap: {\r\n marginTop: theme.spacing(2),\r\n },\r\n loginBtn: {\r\n minWidth: \"100% !important\",\r\n margin: theme.spacing(2, 0),\r\n fontSize: \"1rem\",\r\n padding: \"10px .75rem\",\r\n background: \"rgb(128,0,0)\",\r\n border: 0,\r\n color: \"#fff !important\",\r\n fontWeight: 600,\r\n letterSpacing: \"0.02857em\",\r\n boxShadow: \"none\",\r\n textTransform: \"capitalize\",\r\n alignSelf: \"flex-end\",\r\n \"&:hover\": {\r\n background: \"#fedad8\",\r\n boxShadow: \"none\",\r\n },\r\n },\r\n OTPTimer: {\r\n marginTop: \"10px\",\r\n color: theme.palette.primary.main,\r\n fontWeight: 600,\r\n },\r\n resendLink: {\r\n marginTop: \"10px\",\r\n cursor: \"pointer\",\r\n color: theme.palette.secondary.main,\r\n fontWeight: 600,\r\n fontSize: \"0.875 rem\",\r\n },\r\n logo: {\r\n marginBottom: theme.spacing(1),\r\n },\r\n\r\n loginLeft: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n loginRight: {\r\n background: \"#fff\",\r\n padding: theme.spacing(2, 4),\r\n display: \"flex\",\r\n maxWidth: \"400px\",\r\n margin: \"auto\",\r\n boxShadow: \"0 0 20px rgba(0,0,0,0.06)\",\r\n borderRadius: \"8px\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n width: \"100%\",\r\n },\r\n \"& img\": {\r\n alignSelf: \"center\",\r\n },\r\n },\r\n\r\n loginImg: {},\r\n\r\n verifybutton: {\r\n alignSelf: \"center\",\r\n // marginBottom: \"10px\",\r\n // marginTop: \"10px\",\r\n padding: \"5px\",\r\n },\r\n otpButtons: {\r\n // padding: \"10px\",\r\n },\r\n\r\n divflex: {\r\n display: \"flex\",\r\n },\r\n otpinputpadding: {\r\n \"& input\": {\r\n marginRight: \"25px !important\",\r\n border: \"1.42444px solid var(--theme-color3)\",\r\n borderRadius: \"10px\",\r\n width: \"45px !important\",\r\n height: \"45px !important\",\r\n marginBottom: \"15px\",\r\n boxShadow: \"0px 5.69775px 11.3955px rgba(66, 99, 199, 0.16)\",\r\n },\r\n },\r\n ibtnvisible: {\r\n // padding: \"7px !important\",\r\n // alignItems: \"baseline\",\r\n marginBottom: \"15px\",\r\n },\r\n btnvisibleoff: {\r\n display: \"none\",\r\n },\r\n OTPalignName: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n marginBottom: \"12px\",\r\n color: \"#1C1C1C\",\r\n fonWeight: \"400\",\r\n fontSize: \"17px\",\r\n lineHeight: \"33px\",\r\n },\r\n resendOTPalign: {\r\n color: \"var(--theme-color3)\",\r\n fonWeight: \"400\",\r\n fontSize: \"17px\",\r\n lineHeight: \"33px\",\r\n // margin: \"0 auto\",\r\n // marginTop: \"15px\",\r\n // display: \"block !important\",\r\n },\r\n resendbtnLink: {\r\n textDecoration: \"underline\",\r\n color: \"var(--theme-color3)\",\r\n cursor: \"pointer\",\r\n \"&:hover\": {\r\n textDecoration: \"underline\",\r\n color: \"var(--theme-color3)\",\r\n },\r\n },\r\n dialogTitleClass: {\r\n background: \"var(--primary-bg)\",\r\n padding: \"6px 15px !important\",\r\n margin: \"10px\",\r\n color: \"var(--white)\",\r\n borderRadius: \"4px\",\r\n \"& h2\": {\r\n fontWeight: \"500 !important\",\r\n },\r\n },\r\n lang_svg: {\r\n marginRight: \"10px\",\r\n width: \"22px\",\r\n height: \"22px\",\r\n },\r\n dialogContent: {\r\n padding: \"0px 15px\",\r\n \"& p\": {\r\n whiteSpace: \"pre-wrap\",\r\n color: \"black\",\r\n marginTop: \"8px\",\r\n marginBottom: \"6px\",\r\n },\r\n },\r\n button: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexDirection: \"column\",\r\n margin: \"6px\",\r\n background: \"var(--theme-color1)\",\r\n \"&:hover\": {\r\n background: \"var(--theme-color1) !important\",\r\n },\r\n },\r\n}));\r\n","import {\n useMemo,\n type ClipboardEventHandler,\n type DragEventHandler,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type SyntheticEvent,\n} from \"react\";\n\nexport type ClipboardProtectionHandlers = {\n onCopy: ClipboardEventHandler<HTMLInputElement>;\n onCut: ClipboardEventHandler<HTMLInputElement>;\n onPaste: ClipboardEventHandler<HTMLInputElement>;\n onDrop: DragEventHandler<HTMLInputElement>;\n onDragOver: DragEventHandler<HTMLInputElement>;\n onContextMenu: MouseEventHandler<HTMLInputElement>;\n onKeyDown: KeyboardEventHandler<HTMLInputElement>;\n};\n\nexport type UsePreventClipboardActionsReturn = {\n handleClipBoardEvent: ClipboardProtectionHandlers;\n};\n\n/**\n * Prevents the default browser behavior and stops the event\n * from propagating to parent elements.\n */\nconst preventClipboardEvent = (\n event: SyntheticEvent<HTMLInputElement>,\n): void => {\n event.preventDefault();\n event.stopPropagation();\n};\n\n/**\n * Determines whether the pressed key combination is a\n * clipboard-related shortcut that should be blocked.\n */\nconst shouldBlockClipboardShortcut = (\n event: KeyboardEvent<HTMLInputElement>,\n): boolean => {\n const { key, ctrlKey, metaKey, shiftKey } = event;\n const normalizedKey = key.toLowerCase();\n\n return (\n // Ctrl/Cmd + C/X/V\n ((ctrlKey || metaKey) && [\"c\", \"x\", \"v\"].includes(normalizedKey)) ||\n // Shift + Insert (Paste)\n (shiftKey && normalizedKey === \"insert\") ||\n // Ctrl + Insert (Copy)\n (ctrlKey && normalizedKey === \"insert\")\n );\n};\n\n/**\n * Hook that disables clipboard interactions for an input element.\n *\n * Prevents:\n * - Copy\n * - Cut\n * - Paste\n * - Drag & Drop\n * - Context menu\n * - Keyboard clipboard shortcuts\n */\nexport const usePreventClipboardActions = (\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>,\n): UsePreventClipboardActionsReturn => {\n const handleClipBoardEvent: ClipboardProtectionHandlers = useMemo(\n () => ({\n // Block clipboard operations.\n onCopy: preventClipboardEvent,\n onCut: preventClipboardEvent,\n onPaste: preventClipboardEvent,\n\n // Prevent text drag-and-drop into the input.\n onDrop: preventClipboardEvent,\n onDragOver: preventClipboardEvent,\n\n // Disable the browser context menu.\n onContextMenu: preventClipboardEvent,\n\n // Block keyboard shortcuts while allowing other key events.\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n if (shouldBlockClipboardShortcut(event)) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n // Forward non-blocked key events to the consumer.\n onKeyDown?.(event);\n },\n }),\n [onKeyDown],\n );\n\n return { handleClipBoardEvent };\n};\n","import { GradientButton, TextField } from \"@acuteinfo/common-base\";\nimport { Fragment, useState, useEffect, useRef } from \"react\";\nimport Visibility from \"@mui/icons-material/Visibility\";\nimport VisibilityOff from \"@mui/icons-material/VisibilityOff\";\nimport { CircularProgress, IconButton, InputAdornment } from \"@mui/material\";\nimport { Container } from \"@mui/material\";\nimport { Grid } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport { usePreventClipboardActions } from \"customHooks\";\nexport const UsernamePasswordField = ({\n classes,\n loginState,\n verifyUsernamePassword,\n forgotPasswordEndpoint,\n preventSpecialChars,\n}) => {\n const [input, setInput] = useState({ userName: \"\", password: \"\" });\n const [showPasswordTime, setShowPasswordTime] = useState(0);\n const [blurred, setBlurred] = useState(false);\n const showPassword = Date.now() < showPasswordTime;\n const [, forceUpdate] = useState<any | null>();\n const timerRef = useRef<any>(null);\n const { t } = useTranslation();\n useEffect(() => {\n return () => clearTimeout(timerRef.current);\n }, []);\n const handleChange = (event) => {\n const name = event.target.name;\n const value = event.target.value;\n if (\n name === \"userName\" &&\n preventSpecialChars &&\n value &&\n preventSpecialChars.split(\"\").some((char) => value.includes(char))\n ) {\n return;\n }\n if (name === \"userName\" && value) {\n loginState.isUsernameError = false;\n }\n if (name === \"password\" && value) {\n loginState.isPasswordError = false;\n }\n\n setInput((values) => ({ ...values, [name]: value }));\n };\n const inputRef = useRef<any>(null);\n const inputPassRef = useRef<any>(null);\n const inputButtonRef = useRef<any>(null);\n const { handleClipBoardEvent } = usePreventClipboardActions();\n\n useEffect(() => {\n let timeoutCd;\n if (loginState.isUsernameError) {\n timeoutCd = setTimeout(() => {\n inputRef?.current?.focus?.();\n }, 100);\n } else if (loginState.isPasswordError) {\n setInput((old) => ({ ...old, password: \"\" }));\n timeoutCd = setTimeout(() => {\n inputPassRef?.current?.focus?.();\n }, 100);\n }\n return () => {\n if (timeoutCd) {\n clearTimeout(timeoutCd);\n }\n };\n }, [loginState.isUsernameError, loginState.isPasswordError]);\n useEffect(() => {\n let timeoutCd;\n if (loginState?.otpmodelClose ?? false) {\n setInput((values) => ({ ...values, password: \"\" }));\n timeoutCd = setTimeout(() => {\n inputPassRef?.current?.focus?.();\n }, 1500);\n }\n return () => {\n if (timeoutCd) {\n clearTimeout(timeoutCd);\n }\n };\n }, [loginState.otpmodelClose]);\n\n return (\n <Fragment>\n <Container maxWidth=\"xs\">\n <Grid alignItems=\"center\" style={{ paddingTop: \"20px\" }}>\n <div\n style={{\n color: \"#000000 !important\",\n fontSize: \"30px\",\n fontWeight: \"600\",\n // fontFamily: \"Poppins\",\n alignItems: \"center\",\n fontStyle: \"normal\",\n lineHeight: \"150%\",\n }}\n >\n <h3>{t(\"SignIn\")}</h3>\n </div>\n <div\n className=\"\"\n style={{\n color: \"#949597\",\n fontSize: \"16px\",\n fontWeight: \"400\",\n // fontFamily: \"Poppins\",\n alignItems: \"center\",\n fontStyle: \"normal\",\n\n width: \"360px\",\n }}\n >\n {t(\"SignInWithUserIDandPassword\")}\n </div>\n <div className={classes.formWrap}>\n <TextField\n // variant=\"filled\"\n // color=\"secondary\"\n autoFocus={true}\n label={t(\"UserID\")}\n // placeholder=\"User ID\"\n placeholder={String(t(\"UserID\"))}\n style={{\n marginTop: \"10px\",\n marginBottom: \"17px\",\n }}\n fullWidth\n type={\"text\"}\n name=\"userName\"\n value={input.userName.trimStart() || \"\"}\n onChange={handleChange}\n error={loginState.isUsernameError}\n helperText={\n loginState.isUsernameError\n ? t(loginState.userMessageforusername)\n : \"\"\n }\n InputLabelProps={{ shrink: true }}\n disabled={loginState.loading}\n autoComplete=\"off\"\n inputRef={inputRef}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n inputButtonRef?.current?.click?.();\n }\n }}\n inputProps={{\n maxLength: \"16\",\n }}\n />\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row-reverse\",\n marginTop: \"8px\",\n }}\n >\n <TextField\n key=\"employee\"\n label={t(\"Password\")}\n // variant=\"filled\"\n // color=\"secondary\"\n\n placeholder={String(t(\"EnterPassword\"))}\n InputLabelProps={{\n shrink: true,\n }}\n fullWidth\n type={showPassword ? \"text\" : \"password\"}\n name=\"password\"\n value={\n blurred && !showPassword\n ? \"•\".repeat(16)\n : input.password.trimStart() || \"\"\n }\n onChange={(e) => {\n setBlurred(false); // reset blur effect on change\n handleChange(e);\n }}\n onBlur={() => {\n if (!showPassword && input.password.trimStart())\n setBlurred(true);\n }}\n onFocus={() => setBlurred(false)}\n error={loginState.isPasswordError}\n helperText={\n loginState.isPasswordError\n ? t(loginState.userMessageforpassword)\n : \"\"\n }\n disabled={loginState.loading}\n inputRef={inputPassRef}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n if (!showPassword && input.password.trimStart())\n setBlurred(true);\n inputButtonRef?.current?.click?.();\n }\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={() => {\n if (!showPassword) {\n setShowPasswordTime(Date.now() + 5000);\n timerRef.current = setTimeout(\n () => forceUpdate(Date.now()),\n 5000,\n );\n } else if (showPassword) setShowPasswordTime(0);\n }}\n onMouseDown={(e) => e.preventDefault()}\n disabled={loginState.loading}\n >\n {showPassword ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n inputProps={{\n maxLength: \"16\",\n ...handleClipBoardEvent,\n }}\n />\n </div>\n <div style={{ marginTop: \"20px\", display: \"flex\" }}>\n <div style={{ flex: \"auto\", textAlign: \"end\" }}>\n <a\n href={forgotPasswordEndpoint ?? \"\"}\n style={{ color: \"var(--theme-color3)\" }}\n >\n {t(\"ForgotPassword\")}\n </a>\n </div>\n </div>\n <div style={{ marginTop: \"20px\", display: \"flex\" }}>\n <div\n style={{\n flex: \"auto\",\n textAlign: \"center\",\n marginTop: \"5px\",\n marginBottom: \"17px\",\n }}\n >\n <GradientButton\n style={{\n borderRadius: loginState.loading ? \"50%\" : \"10px\",\n height: loginState.loading ? \"40px\" : \"100%\",\n width: loginState.loading ? \"0px\" : \"100%\",\n minWidth: loginState.loading ? \"40px\" : \"80px\",\n }}\n fullWidth\n disabled={loginState.loading}\n onClick={() =>\n verifyUsernamePassword(\n (input.userName || \"\").toLowerCase(),\n input.password,\n )\n }\n ref={inputButtonRef}\n endicon={loginState.loading ? undefined : \"East\"}\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\n >\n {loginState.loading ? (\n <CircularProgress size={25} thickness={4.6} />\n ) : (\n t(\"Next\")\n )}\n </GradientButton>\n </div>\n </div>\n </div>\n </Grid>\n </Container>\n </Fragment>\n );\n};\n","import { FormHelperText } from \"@mui/material\";\r\nimport { GradientButton } from \"@acuteinfo/common-base\";\r\nimport { Fragment, useState, useRef, useEffect } from \"react\";\r\nimport OTPInput, { ResendOTP } from \"otp-input-react\";\r\nimport Visibility from \"@mui/icons-material/Visibility\";\r\nimport VisibilityOff from \"@mui/icons-material/VisibilityOff\";\r\nimport { CircularProgress } from \"@mui/material\";\r\nimport { Container } from \"@mui/material\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport { Grid } from \"@mui/material\";\r\nimport clsx from \"clsx\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const OTPModel = ({\r\n classes,\r\n OTPResendRequest,\r\n open,\r\n handleClose,\r\n loginState,\r\n VerifyOTP,\r\n OTPError,\r\n setOTPError,\r\n previousStep,\r\n setNewRequestID = (id) => {},\r\n otpresendCount = 0,\r\n resendFlag,\r\n}) => {\r\n const [OTP, setOTP] = useState(\"\");\r\n const [showPasswordTime, setShowPasswordTime] = useState(0);\r\n const showPassword = Date.now() < showPasswordTime;\r\n const [, forceUpdate] = useState<any | null>();\r\n const timerRef = useRef<any>(null);\r\n const otpContainerRef = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n return () => clearTimeout(timerRef.current);\r\n }, []);\r\n const [btnshow, setbtnshow] = useState(false);\r\n const inputButtonRef = useRef<any>(null);\r\n const [resendotpLoading, setResendotpLoading] = useState(false);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { t } = useTranslation();\r\n // const renderButton = (buttonProps) => {\r\n // let { remainingTime, ...other } = buttonProps;\r\n // return resendotpLoading ? (\r\n // <a\r\n // remainingtime={remainingTime}\r\n // {...other}\r\n // className={clsx(\r\n // classes.resendbtnLink,\r\n // !btnshow && classes.btnvisibleoff\r\n // )}\r\n // >\r\n // {t(\"ResendOTP\")}\r\n // </a>\r\n // ) : null;\r\n // };\r\n const renderButton = (buttonProps) => {\r\n let { remainingTime, ...other } = buttonProps;\r\n return resendotpLoading ? (\r\n <a\r\n className={clsx(\r\n classes.resendbtnLink,\r\n !btnshow && classes.btnvisibleoff,\r\n )}\r\n style={{ cursor: \"wait\" }}\r\n >\r\n {/* {t(\"ResendOTP\")} {<CircularProgress size={20} color=\"secondary\" />} */}\r\n {t(\"GetNewOTP\")} {<CircularProgress size={20} color=\"secondary\" />}\r\n </a>\r\n ) : (\r\n <a\r\n remainingtime={remainingTime}\r\n {...other}\r\n className={clsx(\r\n classes.resendbtnLink,\r\n !btnshow && classes.btnvisibleoff,\r\n )}\r\n >\r\n {/* {t(\"ResendOTP\")} */}\r\n {t(\"GetNewOTP\")}\r\n </a>\r\n );\r\n };\r\n\r\n const ClickEventHandler = () => {\r\n if (!Boolean(OTP) || OTP.length < 6) {\r\n setOTPError(\"EnterOTPDigit\");\r\n } else {\r\n setOTPError(\"\");\r\n VerifyOTP(OTP);\r\n }\r\n };\r\n const handleResendClick = async () => {\r\n setResendotpLoading(true);\r\n setOTPError(\"\");\r\n const { status, data, message } = await OTPResendRequest(\r\n // resendFlag === \"FORGET_PW\" || resendFlag === \"FORGT_TOTP\"\r\n // ? loginState?.requestCd\r\n // : loginState?.transactionID,\r\n loginState?.comapanyCD,\r\n loginState?.branchCD,\r\n loginState?.contactUser,\r\n resendFlag,\r\n loginState?.otpValidFor,\r\n loginState?.username,\r\n // resendFlag,\r\n // loginState.auth_data?.[0]?.company_ID,\r\n // loginState.auth_data?.[0]?.branch_cd,\r\n );\r\n setResendotpLoading(false);\r\n if (status === \"0\") {\r\n setNewRequestID(data?.TRAN_CD);\r\n setbtnshow(false);\r\n enqueueSnackbar(message, { variant: \"success\" });\r\n setTimeout(() => {\r\n if (otpContainerRef.current) {\r\n const firstInput = otpContainerRef.current.querySelector(\"input\");\r\n if (firstInput) {\r\n firstInput.focus();\r\n }\r\n }\r\n }, 100);\r\n } else {\r\n enqueueSnackbar(message, { variant: \"error\" });\r\n }\r\n };\r\n const handleCloseEvent = () => {\r\n setOTPError(\"\");\r\n setOTP(\"\");\r\n handleClose(\"\");\r\n };\r\n const renderTime = (remainingtime) => {\r\n if (parseInt(remainingtime) === 0) {\r\n setTimeout(() => {\r\n setbtnshow(true);\r\n }, 700);\r\n }\r\n return (\r\n <span className={clsx(btnshow && classes.btnvisibleoff)}>\r\n {t(\"OtpExpired\")} {remainingtime} {t(\"second\")}\r\n {/* {t(\"ValidFor\")} {remainingtime} */}\r\n </span>\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n if (loginState?.otpmodelClose ?? false) {\r\n handleCloseEvent();\r\n } else if (Boolean(OTPError)) {\r\n setOTP(\"\");\r\n setTimeout(() => {\r\n if (otpContainerRef.current) {\r\n const firstInput = otpContainerRef.current.querySelector(\"input\");\r\n if (firstInput) {\r\n firstInput.focus();\r\n }\r\n }\r\n }, 100);\r\n }\r\n }, [loginState.otpmodelClose, OTPError]);\r\n return (\r\n <Fragment>\r\n <Container maxWidth=\"sm\">\r\n <Grid alignItems=\"center\" marginTop={\"4em\"}>\r\n <div\r\n // className={classes.formWrap}\r\n style={\r\n {\r\n // marginRight: \"25px\",\r\n // width: \"100%\",\r\n // position: \"relative\",\r\n // right: \"42px\",\r\n // bottom: \"13px\",\r\n }\r\n }\r\n >\r\n <div\r\n style={{\r\n color: \"#000000\",\r\n fontSize: \"30px\",\r\n fontWeight: \"600\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"150%\",\r\n marginBottom: \"10px\",\r\n }}\r\n >\r\n {loginState?.authType === \"OTP\"\r\n ? t(\"OTPAuthentication\")\r\n : loginState?.authType === \"TOTP\"\r\n ? t(\"TOTPAuthentication\")\r\n : null}\r\n </div>\r\n <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"33px\",\r\n }}\r\n >\r\n {loginState?.authType === \"OTP\" || loginState?.authType === \"TOTP\"\r\n ? t(\"OTPSentMobileNo\", {\r\n defaultValue: loginState?.otpSentText ?? \"\",\r\n })\r\n : null}\r\n </div>\r\n {/* <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"33px\",\r\n }}\r\n >\r\n {t(\"GenerateNewOTP\")}\r\n </div> */}\r\n\r\n <div className={classes.OTPalignName}>\r\n {t(\"Hello\")}{\" \"}\r\n {loginState?.username\r\n ? loginState.username.charAt(0).toUpperCase() +\r\n loginState.username.slice(1)\r\n : null}\r\n {loginState?.description ? `(${loginState.description})` : null}\r\n {loginState?.authType === \"OTP\" && (\r\n <ResendOTP\r\n // onResendClick={() => setbtnshow(false)}\r\n onResendClick={handleResendClick}\r\n // onTimerComplete={() => setbtnshow(true)}\r\n renderButton={renderButton}\r\n renderTime={renderTime}\r\n maxTime={loginState?.otpValidFor ?? 60}\r\n className={classes.resendOTPalign}\r\n />\r\n )}\r\n </div>\r\n <div\r\n className={classes.divflex}\r\n ref={otpContainerRef}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n >\r\n <OTPInput\r\n value={OTP}\r\n onChange={setOTP}\r\n autoFocus\r\n OTPLength={6}\r\n otpType=\"number\"\r\n disabled={loginState.otploading || loginState.loading}\r\n secure={!showPassword}\r\n className={classes.otpinputpadding}\r\n />\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n onClick={() => {\r\n if (!showPassword) {\r\n setShowPasswordTime(Date.now() + 5000);\r\n timerRef.current = setTimeout(\r\n () => forceUpdate(Date.now()),\r\n 5000,\r\n );\r\n } else if (showPassword) setShowPasswordTime(0);\r\n }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.otploading}\r\n className={classes.ibtnvisible}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </div>\r\n {Boolean(OTPError) ? (\r\n <FormHelperText style={{ color: \"red\" }}>\r\n {OTPError}\r\n </FormHelperText>\r\n ) : null}\r\n {loginState?.authType === \"TOTP\" ? (\r\n <div>\r\n <a href=\"forgot-totp\" style={{ color: \"var(--theme-color3)\" }}>\r\n {t(\"ResetTOTP\")}\r\n </a>\r\n </div>\r\n ) : (\r\n <></>\r\n )}\r\n <div\r\n style={{\r\n display: \"flex\",\r\n gap: \"10px\",\r\n margin: \"42px 0 0 42px\",\r\n width: \"60%\",\r\n }}\r\n >\r\n <GradientButton\r\n // fullWidth\r\n disabled={loginState.otploading || loginState.loading}\r\n onClick={() => {\r\n previousStep(false, \"\");\r\n }}\r\n className={classes.otpButtons}\r\n textColor={\"var(--theme-color3)\"}\r\n sx={{\r\n border: \"var(--theme-color3) 1px solid\",\r\n minWidth: \"50%\",\r\n background: \"var(--white)\",\r\n borderRadius: \"10px\",\r\n \"&:disabled\": {\r\n color: \"var(--theme-color3) !important\",\r\n opacity: 0.7,\r\n },\r\n \"&:hover\": {\r\n background: \"var(--white) !important\",\r\n \"& .MuiSvgIcon-root\": {\r\n transform: \"scale(1.4) rotateX(360deg)\",\r\n transition: \"transform 2s ease-in-out\",\r\n },\r\n },\r\n }}\r\n // customstyle = {{color : \"var(--theme-color3) !important\"}}\r\n starticon={\"West\"}\r\n >\r\n {t(\"Back\")}\r\n </GradientButton>\r\n <GradientButton\r\n style={{\r\n borderRadius: loginState.loading ? \"50%\" : \"10px\",\r\n height: loginState.loading ? \"40px\" : \"100%\",\r\n width: loginState.loading ? \"0px\" : \"100%\",\r\n minWidth: loginState.loading ? \"40px\" : \"80px\",\r\n }}\r\n fullWidth\r\n disabled={loginState.loading}\r\n onClick={ClickEventHandler}\r\n ref={inputButtonRef}\r\n className={classes.otpButtons}\r\n endicon={loginState.loading ? undefined : \"TaskAlt\"}\r\n rotateIcon=\"scale(1.4)\"\r\n >\r\n {loginState.loading ? (\r\n <CircularProgress size={25} thickness={4.6} />\r\n ) : (\r\n t(\"VerifyOTP\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Container>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport const OTPModelForm = ({\r\n classes,\r\n OTPResendRequest,\r\n handleClose,\r\n loginState,\r\n VerifyOTP,\r\n OTPError,\r\n setOTPError,\r\n resendFlag,\r\n setNewRequestID = (id) => {},\r\n otpresendCount = 0,\r\n}) => {\r\n const [OTP, setOTP] = useState(\"\");\r\n const [showPasswordTime, setShowPasswordTime] = useState(0);\r\n const showPassword = Date.now() < showPasswordTime;\r\n const [, forceUpdate] = useState<any | null>();\r\n const timerRef = useRef<any>(null);\r\n const otpContainerRef = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n return () => clearTimeout(timerRef.current);\r\n }, []);\r\n const [btnshow, setbtnshow] = useState(false);\r\n const [resendotpLoading, setResendotpLoading] = useState(false);\r\n const inputButtonRef = useRef<any>(null);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { t } = useTranslation();\r\n const renderButton = (buttonProps) => {\r\n let { remainingTime, ...other } = buttonProps;\r\n return resendotpLoading ? (\r\n <a\r\n className={clsx(\r\n classes.resendbtnLink,\r\n !btnshow && classes.btnvisibleoff,\r\n )}\r\n style={{ cursor: \"wait\" }}\r\n >\r\n {/* {t(\"ResendOTP\")} {<CircularProgress size={20} color=\"secondary\" />} */}\r\n {t(\"GetNewOTP\")} {<CircularProgress size={20} color=\"secondary\" />}\r\n </a>\r\n ) : (\r\n <a\r\n remainingtime={remainingTime}\r\n {...other}\r\n className={clsx(\r\n classes.resendbtnLink,\r\n !btnshow && classes.btnvisibleoff,\r\n )}\r\n >\r\n {/* {t(\"ResendOTP\")} */}\r\n {t(\"GetNewOTP\")}\r\n </a>\r\n );\r\n };\r\n const ClickEventHandler = () => {\r\n if (!Boolean(OTP) || OTP.length < 6) {\r\n setOTPError(\"EnterOTPDigit\");\r\n } else {\r\n setOTPError(\"\");\r\n VerifyOTP(OTP);\r\n }\r\n };\r\n const handleResendClick = async () => {\r\n setResendotpLoading(true);\r\n setOTPError(\"\");\r\n const { status, data, message } = await OTPResendRequest(\r\n // resendFlag === \"FORGET_PW\"\r\n // ? loginState?.requestCd\r\n // : loginState?.transactionID,\r\n // resendFlag,\r\n loginState?.company_ID,\r\n loginState?.branch_cd,\r\n loginState?.contactUser,\r\n resendFlag,\r\n loginState?.otpValidFor,\r\n loginState?.username,\r\n );\r\n setResendotpLoading(false);\r\n if (status === \"0\") {\r\n setNewRequestID(data?.TRAN_CD);\r\n setbtnshow(false);\r\n enqueueSnackbar(message, { variant: \"success\" });\r\n setTimeout(() => {\r\n if (otpContainerRef.current) {\r\n const firstInput = otpContainerRef.current.querySelector(\"input\");\r\n if (firstInput) {\r\n firstInput.focus();\r\n }\r\n }\r\n }, 100);\r\n } else {\r\n enqueueSnackbar(message, { variant: \"error\" });\r\n }\r\n };\r\n const handleCloseEvent = () => {\r\n setOTPError(\"\");\r\n setOTP(\"\");\r\n handleClose();\r\n };\r\n const renderTime = (remainingtime) => {\r\n if (parseInt(remainingtime) === 0) {\r\n setTimeout(() => {\r\n setbtnshow(true);\r\n }, 700);\r\n }\r\n return (\r\n <span className={clsx(btnshow && classes.btnvisibleoff)}>\r\n {t(\"OtpExpired\")} {remainingtime}\r\n </span>\r\n );\r\n };\r\n useEffect(() => {\r\n if (loginState?.otpmodelClose ?? false) {\r\n handleCloseEvent();\r\n } else if (Boolean(OTPError)) {\r\n setOTP(\"\");\r\n setTimeout(() => {\r\n if (otpContainerRef.current) {\r\n const firstInput = otpContainerRef.current.querySelector(\"input\");\r\n if (firstInput) {\r\n firstInput.focus();\r\n }\r\n }\r\n }, 100);\r\n }\r\n }, [loginState.otpmodelClose, OTPError]);\r\n\r\n return (\r\n <Fragment>\r\n <Grid alignItems=\"center\">\r\n <div>\r\n <div\r\n style={{\r\n color: \"#000000\",\r\n fontSize: \"30px\",\r\n fontWeight: \"600\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"150%\",\r\n marginBottom: \"10px\",\r\n }}\r\n >\r\n {t(\"OTPAuthentication\")}\r\n </div>\r\n {/* <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n lineHeight: \"33px\",\r\n }}\r\n >\r\n {t(\"GenerateNewOTP\")}\r\n </div> */}\r\n <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"33px\",\r\n }}\r\n >\r\n {t(\"OTPSentMobileNo\", {\r\n defaultValue: loginState?.forgotOtpSentText ?? \"\",\r\n })}\r\n </div>\r\n <div className={classes.OTPalignName}>\r\n {t(\"Hello\")}{\" \"}\r\n {loginState?.username\r\n ? loginState.username.charAt(0).toUpperCase() +\r\n loginState.username.slice(1)\r\n : null}\r\n {loginState?.description ? `(${loginState.description})` : null}\r\n {loginState.otploading ||\r\n otpresendCount >= 3 ||\r\n loginState?.auth_type === \"TOTP\" ? null : (\r\n <ResendOTP\r\n onResendClick={handleResendClick}\r\n // onTimerComplete={() => setbtnshow(true)}\r\n renderButton={renderButton}\r\n renderTime={renderTime}\r\n maxTime={loginState?.otpValidFor ?? 60}\r\n className={classes.resendOTPalign}\r\n />\r\n )}\r\n </div>\r\n <div\r\n className={classes.divflex}\r\n ref={otpContainerRef}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n >\r\n <OTPInput\r\n value={OTP}\r\n onChange={setOTP}\r\n autoFocus\r\n OTPLength={6}\r\n otpType=\"number\"\r\n disabled={loginState.otploading || loginState.loading}\r\n secure={!showPassword}\r\n className={classes.otpinputpadding}\r\n />\r\n\r\n {/* <IconButton\r\n aria-label=\"toggle password visibility\"\r\n // onClick={() => {\r\n // if (!showPassword) {\r\n // setShowPasswordTime(Date.now() + 5000);\r\n // timerRef.current = setTimeout(\r\n // () => forceUpdate(Date.now()),\r\n // 5000\r\n // );\r\n // } else if (showPassword) setShowPasswordTime(0);\r\n // }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.otploading}\r\n className={classes.ibtnvisible}\r\n >\r\n {showPassword ? <VisibilityOffIcon /> : <VisibilityIcon />}\r\n </IconButton> */}\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n onClick={() => {\r\n if (!showPassword) {\r\n setShowPasswordTime(Date.now() + 5000);\r\n timerRef.current = setTimeout(\r\n () => forceUpdate(Date.now()),\r\n 5000,\r\n );\r\n } else if (showPassword) setShowPasswordTime(0);\r\n }}\r\n onMouseDown={(e) => e.preventDefault()}\r\n disabled={loginState.otploading}\r\n className={classes.ibtnvisible}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </div>\r\n {Boolean(OTPError) ? (\r\n <FormHelperText style={{ color: \"red\" }}>{OTPError}</FormHelperText>\r\n ) : null}\r\n\r\n <div\r\n style={{\r\n display: \"flex\",\r\n gap: \"10px\",\r\n margin: \"42px 0 0 42px\",\r\n width: \"60%\",\r\n }}\r\n >\r\n <GradientButton\r\n fullWidth\r\n disabled={loginState.otploading || loginState.loading}\r\n onClick={handleCloseEvent}\r\n className={classes.otpButtons}\r\n starticon={\"West\"}\r\n textColor={\"var(--white) !important\"}\r\n sx={{\r\n \"&:disabled\": {\r\n color: \"var(-theme-color3) !important\",\r\n },\r\n }}\r\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\r\n style={{\r\n // border: \"var(--theme-color3) 1px solid\",\r\n // color: \"var(--white)\",\r\n // background: \"var(--white)\",\r\n borderRadius: \"10px\",\r\n minWidth: \"48%\",\r\n }}\r\n >\r\n {t(\"Back\")}\r\n </GradientButton>\r\n <GradientButton\r\n style={{\r\n borderRadius: loginState.otploading ? \"50%\" : \"10px\",\r\n height: loginState.otploading ? \"40px\" : \"100%\",\r\n width: loginState.otploading ? \"0px\" : \"100%\",\r\n minWidth: loginState.otploading ? \"40px\" : \"80px\",\r\n }}\r\n // fullWidth\r\n disabled={loginState.loading}\r\n onClick={ClickEventHandler}\r\n ref={inputButtonRef}\r\n className={classes.otpButtons}\r\n >\r\n {loginState.otploading ? (\r\n <CircularProgress size={25} thickness={4.6} />\r\n ) : (\r\n t(\"VerifyOTP\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Fragment>\r\n );\r\n};\r\n","import { Fragment } from \"react\";\r\nimport { GradientButton } from \"@acuteinfo/common-base\";\r\nimport FingerprintSharpIcon from \"@mui/icons-material/FingerprintSharp\";\r\nimport { CircularProgress, Container, Typography } from \"@mui/material\";\r\nimport { Grid } from \"@mui/material\";\r\nimport \"./verify.css\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const VerifyFinger = ({\r\n classes,\r\n loginState,\r\n verifyFinger,\r\n previousStep,\r\n}) => {\r\n const { t } = useTranslation();\r\n return (\r\n <Fragment>\r\n <Container maxWidth=\"xs\">\r\n <Grid alignItems=\"center\">\r\n <div\r\n style={{\r\n marginRight: \"25px\",\r\n width: \"102%\",\r\n // marginBottom: \"55px\",\r\n }}\r\n >\r\n <br />\r\n <div\r\n style={{\r\n color: \"#000000\",\r\n fontSize: \"34px\",\r\n fontWeight: \"600\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"150%\",\r\n marginBottom: \"10px\",\r\n }}\r\n >\r\n {t(\"BiometrixAuthentication\")}\r\n </div>\r\n <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"18px\",\r\n fontWeight: \"400\",\r\n // fontFamily: \"Poppins\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"33px\",\r\n // marginBottom: \"10px\",\r\n }}\r\n >\r\n {t(\"Kindlyplaceyoufinger\")}\r\n </div>\r\n <br />\r\n <Typography variant=\"h5\" style={{ color: \"#000000\" }}>\r\n {t(\"Hello\")} {\"\"}\r\n {` ${\r\n loginState?.username\r\n ? loginState.username.charAt(0).toUpperCase() +\r\n loginState.username.slice(1)\r\n : null\r\n }`}\r\n </Typography>\r\n <br />\r\n <div\r\n className={\r\n loginState?.isBiometricError\r\n ? classes.eFingerUi\r\n : classes.fingerUi\r\n }\r\n >\r\n <div className=\"spinner-wrap\">\r\n <FingerprintSharpIcon\r\n sx={{\r\n fontSize: \"80px\",\r\n opacity: \"0.4\",\r\n borderRadius: \"50%\",\r\n display: \"flex\",\r\n margin: \"0 auto\",\r\n \"&:after\": {\r\n borderBottom: \"2px solid #26A456\",\r\n },\r\n }}\r\n className={\r\n loginState?.isBiometricError ? classes.FingerIcon : null\r\n }\r\n color={loginState?.isBiometricError ? \"error\" : \"inherit\"}\r\n />\r\n {loginState?.isScanning ? (\r\n <>\r\n <div\r\n className=\"spinner-item\"\r\n style={{\r\n border: loginState?.isScanning\r\n ? \"1px solid #949597\"\r\n : \" 1px solid red\",\r\n }}\r\n ></div>\r\n <div\r\n className=\"spinner-item spinner-item--2\"\r\n style={{\r\n border: loginState?.isScanning\r\n ? \"1px solid #949597\"\r\n : \"1px solid red\",\r\n }}\r\n ></div>\r\n <div\r\n className=\"spinner-item spinner-item--3\"\r\n style={{\r\n border: loginState?.isScanning\r\n ? \"1px solid #949597\"\r\n : \"1px solid red\",\r\n }}\r\n ></div>\r\n </>\r\n ) : null}\r\n </div>\r\n </div>\r\n\r\n <div className={classes.biometric}>\r\n <div style={{ marginTop: \"50px\" }}>\r\n <div className={loginState.isScanning ? \"progress\" : \"hide\"}>\r\n <div\r\n className=\"bar\"\r\n style={{ width: loginState.isScanning ? \"30%\" : \"0%\" }}\r\n ></div>\r\n </div>\r\n <h3\r\n style={{\r\n display: \"flex\",\r\n marginTop: \"20px\",\r\n justifyContent: \"space-around\",\r\n color: loginState?.isBiometricError\r\n ? \"rgb(255 0 0 / 65%)\"\r\n : \"inherit\",\r\n }}\r\n >\r\n {loginState?.isBiometricError\r\n ? loginState?.userMessage\r\n : loginState?.loading\r\n ? t(\"Loading\")\r\n : loginState?.isScanning\r\n ? t(\"Scanning\")\r\n : null}\r\n </h3>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n margin: \"42px 0 0 42px\",\r\n // margin: \"38px 0 0 0\",\r\n gap: \"10px\",\r\n }}\r\n >\r\n <GradientButton\r\n fullWidth\r\n disabled={loginState.loading}\r\n onClick={() => {\r\n previousStep(false, \"\");\r\n }}\r\n className={classes.otpButtons}\r\n starticon={\"West\"}\r\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\r\n textColor={\"var(--theme-color3) !important\"}\r\n style={{\r\n border: \"var(--theme-color3)1px solid\",\r\n color: \"var(--theme-color3)\",\r\n background: \"var(--white)\",\r\n borderRadius: \"10px\",\r\n minWidth: \"48%\",\r\n }}\r\n >\r\n {t(\"Back\")}\r\n </GradientButton>\r\n <GradientButton\r\n style={{\r\n borderRadius: loginState.loading ? \"50%\" : \"10px\",\r\n height: loginState.loading ? \"40px\" : \"100%\",\r\n width: loginState.loading ? \"0px\" : \"100%\",\r\n minWidth: loginState.loading ? \"40px\" : \"80px\",\r\n // width: loginState.loading ? \"0px\" : \"90%\",\r\n // minWidth: loginState.loading ? \"40px\" : \"80px\",\r\n }}\r\n disabled={loginState.loading}\r\n onKeyDown={(e) => e.keyCode === 13 && verifyFinger}\r\n onClick={verifyFinger}\r\n className={classes.otpButtons}\r\n >\r\n {loginState.loading ? (\r\n <CircularProgress\r\n size={25}\r\n thickness={4.6}\r\n style={{ color: \"#fff\" }}\r\n />\r\n ) : (\r\n t(\"Verify\")\r\n )}\r\n </GradientButton>\r\n </div>\r\n </Grid>\r\n </Container>\r\n </Fragment>\r\n );\r\n};\r\n","import CryptoJS from \"crypto-js\";\n\nconst PASSWORD = \"SUPERACUTE@MKS\";\nconst SALT = \"Ivan Medvedev\";\n\nconst getKeyAndIv = () => {\n const keyIv = CryptoJS.PBKDF2(PASSWORD, CryptoJS.enc.Utf8.parse(SALT), {\n keySize: 48 / 4,\n iterations: 1000,\n hasher: CryptoJS.algo.SHA1,\n });\n\n const key = CryptoJS.lib.WordArray.create(keyIv.words.slice(0, 8), 32);\n const iv = CryptoJS.lib.WordArray.create(keyIv.words.slice(8, 12), 16);\n\n return { key, iv };\n};\n\nfunction wordArrayToUint8Array(wordArray: CryptoJS.lib.WordArray) {\n const { words, sigBytes } = wordArray;\n const u8 = new Uint8Array(sigBytes);\n\n for (let i = 0; i < sigBytes; i++) {\n u8[i] = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n }\n\n return u8;\n}\n\nconst decryptString = (encryptedText: string): string => {\n const { key, iv } = getKeyAndIv();\n\n // Decode outer Base64\n const outerDecoded = CryptoJS.enc.Latin1.stringify(\n CryptoJS.enc.Base64.parse(encryptedText),\n );\n\n // Parse inner Base64\n const cipherParams = CryptoJS.lib.CipherParams.create({\n ciphertext: CryptoJS.enc.Base64.parse(outerDecoded),\n });\n\n const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {\n iv,\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n });\n\n const bytes = wordArrayToUint8Array(decrypted);\n const result = new TextDecoder(\"utf-16le\").decode(bytes);\n\n if (!result) {\n throw new Error(\"Decryption failed\");\n }\n\n return result;\n};\n\nexport default decryptString;\n\nexport const matchFinger = async (rows: any, captureFinger: string) => {\n try {\n if (typeof rows === \"string\") {\n rows = JSON.parse(rows);\n }\n\n for (const element of rows) {\n const galleryTemplate = decryptString(element.IMG_DATA);\n const MFS100Request = {\n GalleryTemplate: galleryTemplate,\n ProbTemplate: captureFinger,\n BioType: \"Iso\",\n };\n const response = await fetch(\"http://localhost:8004/mfs100/verify\", {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(MFS100Request),\n });\n const data = await response.json();\n\n if (data?.ErrorCode === \"0\" && data?.Status) {\n return {\n status: true,\n errorCode: \"0\",\n errorMessage: \"\",\n isError: false,\n sr_cd: element.SR_CD,\n };\n }\n }\n\n return {\n status: false,\n errorCode: \"999\",\n errorMessage: \"Finger not matched\",\n isError: false,\n };\n } catch (err: any) {\n console.error(err);\n return {\n status: false,\n errorCode: \"999\",\n errorMessage: err?.message || \"Something went wrong!\",\n isError: true,\n };\n }\n};\n","export const isBase64 = (str = \"\"): boolean => {\r\n if (typeof str !== \"string\") {\r\n return false;\r\n }\r\n const base64Regex =\r\n /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\r\n\r\n return base64Regex.test(str);\r\n};\r\n","import { useEffect, useState, useRef, useMemo } from \"react\";\r\nimport { useStyles } from \"./style\";\r\nimport { Grid } from \"@mui/material\";\r\nimport { Container } from \"@mui/material\";\r\nimport { utilFunction } from \"@acuteinfo/common-base\";\r\nimport { isBase64 } from \"./utils\";\r\nimport { t } from \"i18next\";\r\n\r\nexport const BankDetails = ({ bannerDetails }: any) => {\r\n const [loginImageURL, setLoginImageURL] = useState<any | null>(null);\r\n const urlObj = useRef<any>(null);\r\n const classes = useStyles();\r\n\r\n const banner = useMemo(() => bannerDetails, []);\r\n\r\n useEffect(() => {\r\n if (Boolean(banner?.bannerImg)) {\r\n if (isBase64(banner?.bannerImg)) {\r\n let blob = utilFunction.base64toBlob(banner?.bannerImg);\r\n urlObj.current =\r\n typeof blob === \"object\" && Boolean(blob)\r\n ? URL.createObjectURL(blob)\r\n : \"\";\r\n setLoginImageURL(urlObj.current);\r\n } else {\r\n setLoginImageURL(banner?.bannerImg);\r\n }\r\n }\r\n }, [banner]);\r\n return (\r\n <>\r\n {/* <Grid container style={{ height: \"100vh\", overflow: \"hidden\" }}> */}\r\n <Grid item xs={6} md={6} lg={6} className={classes.loginLeft}>\r\n <Grid item xs={12} md={12} lg={12} style={{ height: \"70vh\" }}>\r\n <img\r\n alt=\"\"\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"fill\",\r\n objectPosition: \"center\",\r\n }}\r\n src={Boolean(loginImageURL) ? loginImageURL : \"\"}\r\n />\r\n </Grid>\r\n <Grid\r\n item\r\n xs={12}\r\n md={12}\r\n lg={12}\r\n style={{\r\n height: \"30vh\",\r\n background: \"var(--primary-bg)\",\r\n }}\r\n >\r\n <Container maxWidth=\"sm\">\r\n <div\r\n className=\"text\"\r\n style={{\r\n color: \"white\",\r\n fontStyle: \"normal\",\r\n fontSize: \"31px\",\r\n paddingTop: \"30px\",\r\n }}\r\n >\r\n {t(\"WelcometoEnfinityCore\", {\r\n defaultValue: banner?.bannerTitle ?? \"\",\r\n })}\r\n <span style={{ marginLeft: \"8px\", fontWeight: \"900\" }}>\r\n {/* EasyBank */}\r\n </span>\r\n </div>\r\n <div\r\n style={{\r\n lineHeight: \"27px\",\r\n fontSize: \"15px\",\r\n fontWeight: \"500px\",\r\n letterSpacing: \"0.02em\",\r\n color: \"#ebedee\",\r\n maxWidth: \"464px\",\r\n }}\r\n >\r\n {t(\"WelcomeNote\", { defaultValue: banner?.bannerNote ?? \"\" })}\r\n </div>\r\n </Container>\r\n </Grid>\r\n </Grid>\r\n {/* </Grid> */}\r\n </>\r\n );\r\n};\r\n","import {\n TextField,\n GradientButton,\n usePopupContext,\n} from \"@acuteinfo/common-base\";\n\nimport {\n CircularProgress,\n Container,\n FormHelperText,\n Grid,\n InputAdornment,\n} from \"@mui/material\";\nimport { Fragment, useRef, useState } from \"react\";\n// import { ResetPassword } from \"./api\";\nimport { useSnackbar } from \"notistack\";\nimport { useTranslation } from \"react-i18next\";\nimport { usePreventClipboardActions } from \"customHooks\";\n\nexport const PasswordRotation = ({\n classes,\n ResetPassword,\n open,\n username,\n accessToken,\n tokenType,\n handleClose,\n validatePasswordFn,\n}) => {\n const inputButtonRef = useRef<any>(null);\n const { MessageBox } = usePopupContext();\n const { enqueueSnackbar } = useSnackbar();\n const { t } = useTranslation();\n const [input, setInput] = useState({\n userName: username,\n oldpassword: \"\",\n password: \"\",\n confirmpassword: \"\",\n });\n const [pwdReset, setPasswordReset] = useState({\n isLoading: false,\n isNewpwdLoading: false,\n isoldPwdError: false,\n oldpassworderror: \"\",\n isnewpwdError: false,\n newpassworderror: \"\",\n isconfirmnewpwdError: false,\n confirmnewpassworderror: \"\",\n });\n const { handleClipBoardEvent } = usePreventClipboardActions();\n\n const handleCloseEvent = () => {\n handleClose(\"\");\n };\n const ClickEventHandler = async () => {\n if (!Boolean(input.oldpassword)) {\n setPasswordReset((values) => ({\n ...values,\n isoldPwdError: true,\n oldpassworderror: \"CurrentPasswordisrequired\",\n }));\n } else if (!Boolean(input.confirmpassword)) {\n setPasswordReset((values) => ({\n ...values,\n isconfirmnewpwdError: true,\n confirmnewpassworderror: \"Confirmnewpasswordisrequired\",\n }));\n } else if (input.password !== input.confirmpassword) {\n setPasswordReset((values) => ({\n ...values,\n isconfirmnewpwdError: true,\n confirmnewpassworderror: \"NewPasswordandConfirmPassworddidnotmatched\",\n }));\n } else if (\n !pwdReset?.isoldPwdError &&\n !pwdReset?.isnewpwdError &&\n !pwdReset?.isconfirmnewpwdError &&\n input.oldpassword &&\n input.password &&\n input?.confirmpassword\n ) {\n setPasswordReset((values) => ({ ...values, isLoading: true }));\n let response = await ResetPassword(\n input.userName,\n input.oldpassword,\n input.password,\n accessToken,\n tokenType,\n );\n\n if (response.status === \"0\") {\n setPasswordReset((values) => ({ ...values, isLoading: false }));\n enqueueSnackbar(t(\"Passwordsuccessfullychanged\"), {\n variant: \"success\",\n });\n handleClose(\"0\");\n } else {\n setPasswordReset((values) => ({ ...values, isLoading: false }));\n MessageBox({\n messageTitle: \"ValidationFailed\",\n message: response.message ?? \"ValidationFailed\",\n icon: \"ERROR\",\n });\n }\n }\n };\n\n const handleChange = (event) => {\n const name = event.target.name;\n let value = event.target.value;\n if (name === \"oldpassword\" && Boolean(value)) {\n setPasswordReset((values) => ({ ...values, isoldPwdError: false }));\n } else if (name === \"password\" && Boolean(value)) {\n setPasswordReset((values) => ({ ...values, isnewpwdError: false }));\n } else if (name === \"confirmpassword\" && Boolean(value)) {\n setPasswordReset((values) => ({\n ...values,\n isconfirmnewpwdError: false,\n }));\n }\n setInput((values) => ({ ...values, [name]: value }));\n };\n\n const handleBlur = async (event) => {\n const name = event.target.name;\n\n if (name === \"oldpassword\") {\n if (!Boolean(input.oldpassword)) {\n setPasswordReset((values) => ({\n ...values,\n isoldPwdError: true,\n oldpassworderror: \"CurrentPasswordisrequired\",\n }));\n } else if (\n Boolean(input.oldpassword) &&\n Boolean(input.password) &&\n input.oldpassword === input.password\n ) {\n setPasswordReset((values) => ({\n ...values,\n isnewpwdError: true,\n newpassworderror: \"newPasswordCantbeSameasOldPassword\",\n }));\n }\n } else if (name === \"password\") {\n if (!Boolean(input.password)) {\n setPasswordReset((values) => ({\n ...values,\n isnewpwdError: true,\n newpassworderror: \"Newpasswordisrequired\",\n }));\n } else if (\n Boolean(input.oldpassword) &&\n Boolean(input.password) &&\n input.oldpassword === input.password\n ) {\n setPasswordReset((values) => ({\n ...values,\n isnewpwdError: true,\n newpassworderror: \"newPasswordCantbeSameasOldPassword\",\n }));\n } else if (Boolean(input.password)) {\n setPasswordReset((values) => ({ ...values, isNewpwdLoading: true }));\n const { validateStatus, validateData } = await validatePasswordFn({\n USER_ID: input.userName,\n PASSWORD: input.password,\n SCREEN_REF: \"LOGIN\",\n });\n\n if (validateData?.O_STATUS !== \"0\") {\n setPasswordReset((values) => ({ ...values, isNewpwdLoading: false }));\n setPasswordReset((values) => ({\n ...values,\n isnewpwdError: true,\n newpassworderror: validateData?.O_MESSAGE,\n }));\n } else {\n setPasswordReset((values) => ({ ...values, isNewpwdLoading: false }));\n setPasswordReset((values) => ({\n ...values,\n isnewpwdError: false,\n newpassworderror: \"\",\n }));\n }\n }\n } else if (name === \"confirmpassword\") {\n if (!Boolean(input.confirmpassword)) {\n setPasswordReset((values) => ({\n ...values,\n isconfirmnewpwdError: true,\n confirmnewpassworderror: \"Confirmnewpasswordisrequired\",\n }));\n } else if (\n Boolean(input.password) &&\n input.password !== input.confirmpassword\n ) {\n setPasswordReset((values) => ({\n ...values,\n isconfirmnewpwdError: true,\n confirmnewpassworderror: \"NewPasswordandConfirmPassworddidnotmatched\",\n }));\n }\n }\n };\n\n return (\n <Fragment>\n <Container maxWidth=\"xs\">\n <Grid alignItems=\"center\">\n <div\n style={{\n color: \"#000000 !important\",\n fontSize: \"30px\",\n fontWeight: \"600\",\n alignItems: \"center\",\n fontStyle: \"normal\",\n }}\n >\n <h3>{t(\"PasswordRotation\")}</h3>\n </div>\n <div className={classes.formWrap}>\n <TextField\n label={t(\"UserId\")}\n placeholder={t(\"EnterUserId\")}\n fullWidth\n type={\"text\"}\n name=\"userName\"\n value={input.userName || \"\"}\n onChange={handleChange}\n InputLabelProps={{ shrink: true }}\n disabled={true}\n autoComplete=\"off\"\n inputProps={{ maxLength: 16 }}\n style={{ paddingBottom: \"8px\" }}\n />\n <TextField\n autoFocus={true}\n label={t(\"CurrentPassword\")}\n placeholder={t(\"EnterCurrentPassword\")}\n fullWidth\n type={\"password\"}\n name=\"oldpassword\"\n value={input.oldpassword || \"\"}\n onChange={handleChange}\n onBlur={handleBlur}\n error={pwdReset.isoldPwdError}\n helperText={\n pwdReset.isoldPwdError ? t(pwdReset.oldpassworderror) : \"\"\n }\n InputLabelProps={{ shrink: true }}\n disabled={pwdReset.isLoading}\n autoComplete=\"off\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n inputButtonRef?.current?.click?.();\n }\n }}\n inputProps={{\n maxLength: 16,\n ...handleClipBoardEvent,\n }}\n style={{ paddingBottom: \"8px\" }}\n />\n <TextField\n label={t(\"NewPassword\")}\n placeholder={t(\"EnterNewPassword\")}\n fullWidth\n type={\"password\"}\n name=\"password\"\n value={input.password || \"\"}\n onChange={handleChange}\n onBlur={handleBlur}\n error={pwdReset.isnewpwdError}\n helperText={\n pwdReset.isnewpwdError ? t(pwdReset.newpassworderror) : \"\"\n }\n InputLabelProps={{ shrink: true }}\n disabled={pwdReset.isLoading || pwdReset.isNewpwdLoading}\n autoComplete=\"off\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n inputButtonRef?.current?.click?.();\n }\n }}\n inputProps={{\n maxLength: 16,\n ...handleClipBoardEvent,\n }}\n InputProps={{\n endAdornment: pwdReset.isNewpwdLoading ? (\n <InputAdornment position=\"end\">\n <CircularProgress\n sx={{ color: \"var(--theme-color3)\" }}\n size={25}\n thickness={4.6}\n />\n </InputAdornment>\n ) : null,\n }}\n style={{ paddingBottom: \"8px\" }}\n />\n <TextField\n label={t(\"ConfirmNewPassword\")}\n placeholder={t(\"Enterconfirmnewpassword\")}\n fullWidth\n type={\"password\"}\n name=\"confirmpassword\"\n value={input.confirmpassword || \"\"}\n onChange={handleChange}\n onBlur={handleBlur}\n error={pwdReset.isconfirmnewpwdError}\n helperText={\n pwdReset.isconfirmnewpwdError\n ? t(pwdReset.confirmnewpassworderror)\n : \"\"\n }\n InputLabelProps={{ shrink: true }}\n disabled={pwdReset.isLoading}\n autoComplete=\"off\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n inputButtonRef?.current?.click?.();\n }\n }}\n inputProps={{\n maxLength: 16,\n ...handleClipBoardEvent,\n }}\n style={{ paddingBottom: \"8px\" }}\n />\n </div>\n <div\n style={{\n display: \"flex\",\n gap: \"10px\",\n margin: \"20px 0 0 10px\",\n width: \"94%\",\n }}\n >\n <GradientButton\n fullWidth\n disabled={pwdReset.isLoading}\n onClick={handleCloseEvent}\n className={classes.otpButtons}\n style={{\n border: \"var(--theme-color3)1px solid\",\n color: \"var(--theme-color3)\",\n // pebbackground: \"var(--white)\",\n borderRadius: \"10px\",\n }}\n >\n {t(\"Back\")}\n </GradientButton>\n <GradientButton\n style={{\n borderRadius: pwdReset.isLoading ? \"50%\" : \"10px\",\n height: pwdReset.isLoading ? \"40px\" : \"100%\",\n width: pwdReset.isLoading ? \"0px\" : \"100%\",\n minWidth: pwdReset.isLoading ? \"40px\" : \"80px\",\n }}\n fullWidth\n disabled={pwdReset.isLoading}\n onClick={ClickEventHandler}\n ref={inputButtonRef}\n className={classes.otpButtons}\n >\n {pwdReset.isLoading ? (\n <CircularProgress size={25} thickness={4.6} />\n ) : (\n t(\"Update\")\n )}\n </GradientButton>\n </div>\n </Grid>\n </Container>\n </Fragment>\n );\n};\n","import { usePopupContext, utilFunction } from \"@acuteinfo/common-base\";\r\n\r\nimport { useReducer, useEffect, useState, useRef } from \"react\";\r\nimport { useStyles } from \"./style\";\r\nimport { UsernamePasswordField } from \"./usernamePassword\";\r\nimport { OTPModel, OTPModelForm } from \"./otpPopup\";\r\nimport { VerifyFinger } from \"./verifyFinger\";\r\nimport * as API from \"./api\";\r\nimport { matchFinger } from \"./biometric\";\r\nimport { Grid, Tooltip } from \"@mui/material\";\r\nimport { BankDetails } from \"./bankDetails\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { PasswordRotation } from \"./passwordRotation\";\r\nimport { isBase64 } from \"./utils\";\r\nimport {\r\n OTPResendRequestFnType,\r\n ResetPasswordFnType,\r\n ValidatePasswordFnType,\r\n VerifyOtpFnType,\r\n VerifyUsernamePassFnType,\r\n} from \"pages/types\";\r\n\r\nconst inititalState = {\r\n username: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n loading: false,\r\n otploading: false,\r\n isError: false,\r\n isUsernameError: false,\r\n isPasswordError: false,\r\n userMessage: \"\",\r\n OtpuserMessage: \"\",\r\n userMessageforpassword: \"\",\r\n userMessageforusername: \"\",\r\n currentFlow: \"username\",\r\n transactionID: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n contactUser: \"\",\r\n access_token: \"\",\r\n token_type: \"\",\r\n otpmodelClose: false,\r\n authType: \"\",\r\n isScanning: false,\r\n auth_type: \"O\",\r\n otpValidFor: 60,\r\n otpSentText: \"\",\r\n description: \"\",\r\n};\r\n\r\nconst reducer = (state, action) => {\r\n switch (action.type) {\r\n case \"inititateUserFingerVerification\":\r\n case \"inititateOTPVerification\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n isError: false,\r\n isUsernameError: false,\r\n isPasswordError: false,\r\n isOTPError: false,\r\n isBiometricError: false,\r\n userMessage: \"\",\r\n };\r\n }\r\n case \"inititateUserFingerScanner\": {\r\n return { ...state, isScanning: true, isBiometricError: false };\r\n }\r\n case \"usernameandpasswordrequired\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: true,\r\n isUsernameError: true,\r\n isPasswordError: true,\r\n otploading: false,\r\n userMessage: action?.payload?.error,\r\n userMessageforpassword: action?.payload?.errorPassword,\r\n userMessageforusername: action?.payload?.errorUsername,\r\n username: \"\",\r\n description: \"\",\r\n transactionID: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n contactUser: \"\",\r\n };\r\n }\r\n case \"passwordVerificationFailure\":\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: true,\r\n isUsernameError: false,\r\n isPasswordError: true,\r\n otploading: false,\r\n userMessage: action?.payload?.error,\r\n userMessageforpassword: action?.payload?.errorPassword,\r\n username: \"\",\r\n description: \"\",\r\n transactionID: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n };\r\n case \"usernameVerificationFailure\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: true,\r\n isUsernameError: true,\r\n isPasswordError: false,\r\n otploading: false,\r\n userMessage: action?.payload?.error,\r\n userMessageforusername: action?.payload?.errorUsername,\r\n username: \"\",\r\n description: \"\",\r\n transactionID: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n contactUser: \"\",\r\n };\r\n }\r\n case \"inititatePasswordVerification\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n isError: false,\r\n isUsernameError: false,\r\n isPasswordError: false,\r\n otploading: false,\r\n userMessage: \"\",\r\n userMessageforusername: \"\",\r\n userMessageforpassword: \"\",\r\n username: \"\",\r\n description: \"\",\r\n transactionID: \"\",\r\n access_token: \"\",\r\n comapanyCD: \"\",\r\n branchCD: \"\",\r\n contactUser: \"\",\r\n };\r\n }\r\n case \"passwordRotation\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n username: action?.payload?.username,\r\n description: action?.payload?.description ?? \"\",\r\n access_token: action?.payload?.access_token,\r\n token_type: action?.payload?.token_type,\r\n };\r\n }\r\n case \"passwordRotationsuccess\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otpmodelClose: Boolean(action?.payload?.otpmodelclose),\r\n };\r\n }\r\n case \"passwordVerificationSuccessful\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: false,\r\n transactionID: action?.payload?.transactionID,\r\n comapanyCD: action?.payload?.comapanyCD,\r\n branchCD: action?.payload?.branchCD,\r\n contactUser: action?.payload?.contactUser,\r\n username: action?.payload?.username,\r\n description: action?.payload?.description,\r\n auth_type: action?.payload?.auth_type,\r\n OtpuserMessage: \"\",\r\n access_token: action?.payload?.access_token,\r\n token_type: action?.payload?.token_type,\r\n otpmodelClose: false,\r\n currentFlow: \"OTP\",\r\n authType: action?.payload?.authType,\r\n auth_data: action?.payload?.auth_data,\r\n otpValidFor: action?.payload?.otpValidFor,\r\n otpSentText: action?.payload?.otpSentText,\r\n totpReg: action?.payload?.totpReg,\r\n secretTocken: action?.payload?.secretTocken,\r\n secretTockenQR: action?.payload?.secretTockenQR,\r\n };\r\n }\r\n case \"inititatebiometricVerification\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n otploading: true,\r\n OtpuserMessage: \"\",\r\n otpmodelClose: false,\r\n };\r\n }\r\n case \"biometricVerificationFailure\":\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: true,\r\n isBiometricError: true,\r\n userMessage: action?.payload?.error,\r\n isScanning: false,\r\n };\r\n case \"biometricVerificationSuccessful\":\r\n return {\r\n ...state,\r\n loading: false,\r\n isError: false,\r\n isBiometricError: false,\r\n state: action.payload,\r\n isScanning: false,\r\n };\r\n case \"OTPVerificationComplate\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: false,\r\n OtpuserMessage: \"\",\r\n };\r\n }\r\n case \"OTPVerificationFailed\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: false,\r\n OtpuserMessage: action?.payload?.error,\r\n otpmodelClose: Boolean(action?.payload?.otpmodelclose),\r\n };\r\n }\r\n case \"OTPResendSuccess\": {\r\n return {\r\n ...state,\r\n transactionID: action?.payload?.transactionID,\r\n };\r\n }\r\n case \"backToUsernameVerification\": {\r\n return {\r\n ...inititalState,\r\n isPasswordError: action?.payload?.isError,\r\n userMessageforpassword: action?.payload?.errorMessage,\r\n };\r\n }\r\n\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\ninterface AuthControllerProps {\r\n bannerDetails: {\r\n bannerImg: string;\r\n bannerTitle: string;\r\n bannerNote: string;\r\n };\r\n logoUrl?: string;\r\n logoTitle?: string;\r\n loginFn: Function;\r\n veirfyUsernameandPassword: VerifyUsernamePassFnType;\r\n validatePasswordFn: ValidatePasswordFnType;\r\n verifyOTP: VerifyOtpFnType;\r\n OTPResendRequest: OTPResendRequestFnType;\r\n ResetPassword: ResetPasswordFnType;\r\n LanguageComponent?: React.ComponentType<any>;\r\n forgotPasswordEndpoint: string;\r\n /**\r\n * Prevents characters input from specified string in username field\r\n *\r\n * e.g. \"!@#\". Characters `!`, `@`, `#` will be prevented in username field\r\n */\r\n preventSpecialChars?: string | null;\r\n /**\r\n * Callback to run on otp verify fail\r\n * @param e Error Object\r\n * @returns void\r\n */\r\n onOtpVerifyFailFn?: (e: any) => void;\r\n}\r\n\r\nexport const AuthControllerWrapper: React.FC<AuthControllerProps> = ({\r\n bannerDetails,\r\n logoUrl,\r\n logoTitle,\r\n loginFn,\r\n veirfyUsernameandPassword,\r\n validatePasswordFn,\r\n verifyOTP,\r\n OTPResendRequest,\r\n ResetPassword,\r\n LanguageComponent,\r\n forgotPasswordEndpoint,\r\n preventSpecialChars,\r\n onOtpVerifyFailFn,\r\n}) => {\r\n const classes = useStyles();\r\n const [loginState, dispath] = useReducer(reducer, inititalState);\r\n const [openpwdreset, setOpenPwdReset] = useState(false);\r\n const failureCount = useRef(0);\r\n const [dashboardLogoURL, setDashboardLogoURL] = useState<any | null>(null);\r\n const urlObj = useRef<any>(null);\r\n const { t } = useTranslation();\r\n const otpResendRef = useRef(1);\r\n const { MessageBox } = usePopupContext();\r\n\r\n useEffect(() => {\r\n if (Boolean(logoUrl)) {\r\n if (isBase64(logoUrl)) {\r\n let blob = utilFunction.base64toBlob(logoUrl);\r\n urlObj.current =\r\n typeof blob === \"object\" && Boolean(blob)\r\n ? URL.createObjectURL(blob)\r\n : \"\";\r\n setDashboardLogoURL(urlObj.current);\r\n } else {\r\n setDashboardLogoURL(logoUrl);\r\n }\r\n }\r\n }, [logoUrl]);\r\n\r\n const verifyUsernamePassword = async (username, password) => {\r\n if (Boolean(username) && Boolean(password)) {\r\n dispath({ type: \"inititatePasswordVerification\" });\r\n try {\r\n const {\r\n status = \"\",\r\n data = null,\r\n message = \"\",\r\n responseType = \"\",\r\n access_token = null,\r\n } = await veirfyUsernameandPassword(username, password);\r\n\r\n if (status === \"0\" && responseType === \"S\") {\r\n dispath({\r\n type: \"passwordRotation\",\r\n payload: {\r\n username: username,\r\n access_token: access_token?.access_token || \"\",\r\n token_type: access_token?.token_type || \"\",\r\n },\r\n });\r\n setOpenPwdReset(true);\r\n } else if (status === \"0\") {\r\n dispath({\r\n type: \"passwordVerificationSuccessful\",\r\n payload: {\r\n comapanyCD: data?.BASE_COMP_CD,\r\n branchCD: data?.BASE_BRANCH_CD,\r\n contactUser: data?.CONTACT2,\r\n transactionID: data?.REQUEST_CD,\r\n username: username,\r\n description: data?.DESCRIPTION,\r\n access_token: access_token?.access_token,\r\n token_type: access_token?.token_type,\r\n authType: data?.AUTH_TYPE,\r\n auth_data: data?.AUTH_DATA,\r\n otpValidFor: data?.OTP_VALID,\r\n otpSentText: data?.OTP_SENT_TEXT,\r\n totpReg: data?.TOTP_REG,\r\n secretTocken: data?.SECRET_TOCKEN,\r\n secretTockenQR: data?.SECRET_TOCKEN_QR,\r\n },\r\n });\r\n if (data?.STATUS === \"0\") {\r\n for (let i = 0; i < data?.ALERT_MSG_LIST.length; i++) {\r\n await MessageBox({\r\n messageTitle: \"Password Alert\",\r\n message: data?.ALERT_MSG_LIST[i],\r\n });\r\n }\r\n }\r\n } else {\r\n dispath({\r\n type: \"passwordVerificationFailure\",\r\n payload: {\r\n error: message,\r\n errorPassword: t(\"UserIDPasswordisincorrect\", {\r\n defaultValue: message,\r\n }),\r\n },\r\n });\r\n }\r\n } catch (err) {\r\n throw new Error(\r\n \"Error occurred while verifying username and password: \" + err,\r\n );\r\n }\r\n } else if (!Boolean(username) && !Boolean(password)) {\r\n dispath({\r\n type: \"usernameandpasswordrequired\",\r\n payload: {\r\n error: \"UsernamenandPasswordisRequired\",\r\n errorUsername: \"UsernameisRequired\",\r\n errorPassword: \"PasswordisRequired\",\r\n },\r\n });\r\n } else if (!Boolean(username)) {\r\n dispath({\r\n type: \"usernameVerificationFailure\",\r\n payload: {\r\n error: \"UsernameisRequired\",\r\n errorUsername: \"UsernameisRequired\",\r\n },\r\n });\r\n } else {\r\n dispath({\r\n type: \"passwordVerificationFailure\",\r\n payload: {\r\n error: \"PasswordisRequired\",\r\n errorPassword: \"PasswordisRequired\",\r\n },\r\n });\r\n }\r\n };\r\n\r\n const VerifyOTP = async (OTPNumber) => {\r\n try {\r\n if (Boolean(OTPNumber) && OTPNumber.toString().length === 6) {\r\n dispath({ type: \"inititateOTPVerification\" });\r\n const { status, data, message } = await verifyOTP(\r\n loginState.transactionID,\r\n // loginState.app_transactionId,\r\n loginState.username,\r\n OTPNumber,\r\n loginState.access_token,\r\n loginState.token_type,\r\n loginState.authType,\r\n );\r\n if (status === \"0\") {\r\n // try {\r\n // audio.play();\r\n // } catch (error) {\r\n // console.log(error);\r\n // }\r\n dispath({ type: \"OTPVerificationComplate\" });\r\n loginFn({\r\n ...data,\r\n totpReg: loginState?.totpReg,\r\n secretTocken: loginState?.secretTocken,\r\n secretTockenQR: loginState?.secretTockenQR,\r\n });\r\n } else if (status === \"999\") {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: message, otpmodelclose: true },\r\n });\r\n // enqueueSnackbar(message, { variant: \"error\" });\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: message, otpmodelclose: false },\r\n });\r\n }\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: \"Please enter a 6 digit OTP number\" },\r\n });\r\n }\r\n } catch (e: any) {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: e?.message ?? \"Otp verification Failed!\" },\r\n });\r\n if (typeof onOtpVerifyFailFn === \"function\") {\r\n onOtpVerifyFailFn(e);\r\n }\r\n }\r\n };\r\n\r\n const handlePasswordRotationClose = (flag) => {\r\n if (flag === \"0\") {\r\n dispath({\r\n type: \"passwordRotationsuccess\",\r\n payload: { otpmodelclose: true },\r\n });\r\n }\r\n setOpenPwdReset(false);\r\n };\r\n const changeUserName = (isError = false, errorMessage = \"\") => {\r\n dispath({\r\n type: \"backToUsernameVerification\",\r\n payload: {\r\n isError: isError,\r\n errorMessage: errorMessage,\r\n },\r\n });\r\n };\r\n const verifyFinger = async () => {\r\n try {\r\n dispath({ type: \"inititateUserFingerScanner\" });\r\n const fingerResponse = await API.capture();\r\n if (fingerResponse?.ErrorCode === \"0\") {\r\n dispath({ type: \"inititateUserFingerVerification\" });\r\n const promise: any = await matchFinger(\r\n loginState.auth_data,\r\n fingerResponse.IsoTemplate,\r\n );\r\n if (promise.isError) {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: promise?.errorMessage ?? \"Something went wrong.\",\r\n },\r\n });\r\n } else {\r\n const { status, data, message } = await verifyOTP(\r\n loginState.transactionID,\r\n loginState.username,\r\n String(promise?.sr_cd ?? \"0\"),\r\n loginState.access_token,\r\n loginState.token_type,\r\n loginState.authType,\r\n promise.status ? \"Y\" : \"N\",\r\n );\r\n if (status === \"0\" && promise.status) {\r\n dispath({ type: \"biometricVerificationSuccessful\" });\r\n loginFn(data);\r\n } else if (status === \"0\" && !promise.status) {\r\n failureCount.current = failureCount.current + 1;\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: \"Finger Not Match.Please Try Again\",\r\n },\r\n });\r\n if (failureCount.current >= 3)\r\n changeUserName(true, \"Finger Not Match.Please Try Again\");\r\n } else if (status === \"99\") {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: message ?? \"Finger Not Match.Please Try Again\",\r\n },\r\n });\r\n } else if (status === \"999\") {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: message ?? \"Finger Not Match.Please Try Again\",\r\n },\r\n });\r\n changeUserName(\r\n true,\r\n message ?? \"Finger Not Match.Please Try Again\",\r\n );\r\n } else {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: message ?? \"Finger Not Match.Please Try Again\",\r\n },\r\n });\r\n }\r\n }\r\n } else {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: fingerResponse?.ErrorMessage ?? t(\"MFS100NotFound\"),\r\n },\r\n });\r\n }\r\n } catch (e: any) {\r\n dispath({\r\n type: \"biometricVerificationFailure\",\r\n payload: {\r\n error: e?.message ?? t(\"Unknownerroroccured\"),\r\n },\r\n });\r\n }\r\n };\r\n return (\r\n <>\r\n <Grid container style={{ height: \"100vh\", overflow: \"hidden\" }}>\r\n <BankDetails bannerDetails={bannerDetails} />\r\n <Grid item xs={11} md={6} lg={6} sm={6}>\r\n {logoUrl ? (\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-end\"\r\n alignItems=\"center\"\r\n padding={\"25px\"}\r\n maxWidth={\"210px\"}\r\n ml={\"auto\"}\r\n >\r\n <Tooltip describeChild title={logoTitle ?? \"\"}>\r\n <img\r\n src={Boolean(dashboardLogoURL) ? dashboardLogoURL : \"\"}\r\n alt=\"Logo\"\r\n width={\"100%\"}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n ) : null}\r\n\r\n {LanguageComponent ? (\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-end\"\r\n alignItems=\"center\"\r\n padding={\"0 35px 0 0\"}\r\n maxWidth={\"180px\"}\r\n ml={\"auto\"}\r\n >\r\n <LanguageComponent />\r\n </Grid>\r\n ) : null}\r\n\r\n {openpwdreset ? (\r\n <PasswordRotation\r\n classes={classes}\r\n ResetPassword={ResetPassword}\r\n open={openpwdreset}\r\n username={loginState.username}\r\n accessToken={loginState.access_token}\r\n tokenType={loginState.token_type}\r\n handleClose={handlePasswordRotationClose}\r\n validatePasswordFn={validatePasswordFn}\r\n />\r\n ) : (\r\n <>\r\n {loginState.currentFlow === \"username\" ? (\r\n <UsernamePasswordField\r\n key=\"username\"\r\n classes={classes}\r\n loginState={loginState}\r\n verifyUsernamePassword={verifyUsernamePassword}\r\n forgotPasswordEndpoint={forgotPasswordEndpoint}\r\n preventSpecialChars={preventSpecialChars}\r\n />\r\n ) : (\r\n <>\r\n {loginState.authType === \"OTP\" ||\r\n loginState.authType === \"TOTP\" ? (\r\n <OTPModel\r\n key=\"otp\"\r\n OTPResendRequest={OTPResendRequest}\r\n classes={classes}\r\n loginState={loginState}\r\n VerifyOTP={VerifyOTP}\r\n previousStep={changeUserName}\r\n OTPError={t(loginState?.OtpuserMessage ?? \"\")}\r\n setOTPError={(error) => {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: error },\r\n });\r\n }}\r\n open={true}\r\n handleClose={changeUserName}\r\n resendFlag={\"LOGIN\"}\r\n setNewRequestID={(newRequestID) => {\r\n dispath({\r\n type: \"OTPResendSuccess\",\r\n payload: { transactionID: newRequestID },\r\n });\r\n otpResendRef.current = otpResendRef.current + 1;\r\n }}\r\n otpresendCount={otpResendRef.current}\r\n />\r\n ) : (\r\n <VerifyFinger\r\n key=\"biometric\"\r\n classes={classes}\r\n loginState={loginState}\r\n verifyFinger={verifyFinger}\r\n previousStep={changeUserName}\r\n />\r\n )}\r\n </>\r\n )}\r\n </>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n};\r\n","export const capture = async () => {\r\n var MFS100Request = {\r\n Quality: 60,\r\n TimeOut: 10,\r\n };\r\n var jsondata = JSON.stringify(MFS100Request);\r\n const rawResponse = await fetch(\"http://localhost:8004/mfs100/capture\", {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: jsondata,\r\n });\r\n const content = await rawResponse.json();\r\n return content;\r\n};\r\n","import { TextField, GradientButton } from \"@acuteinfo/common-base\";\n\nimport { Fragment, useState, useEffect, useRef } from \"react\";\nimport {\n CircularProgress,\n FormHelperText,\n IconButton,\n InputAdornment,\n} from \"@mui/material\";\nimport Visibility from \"@mui/icons-material/Visibility\";\nimport VisibilityOff from \"@mui/icons-material/VisibilityOff\";\nimport { useTranslation } from \"react-i18next\";\nimport { usePreventClipboardActions } from \"customHooks\";\n\nexport const ForgotPasswordFields = ({\n classes,\n loginState,\n onSubmit,\n navigate,\n loginPageEndpoint,\n preventSpecialChars,\n validatePassword,\n}) => {\n const [input, setInput] = useState({\n userName: loginState.workingState === 1 ? loginState?.username : \"\",\n mobileno: \"\",\n password: \"\",\n confirmpassword: \"\",\n });\n const inputRef = useRef<any>(null);\n const inputPassRef = useRef<any>(null);\n const inputButtonRef = useRef<any>(null);\n const [showPasswordTime, setShowPasswordTime] = useState(0);\n const [showConfirmPasswordTime, setShowConfirmPasswordTime] = useState(0);\n const showPassword = Date.now() < showPasswordTime;\n const showConfirmPassword = Date.now() < showConfirmPasswordTime;\n const [, forceUpdate] = useState<any | null>();\n const timerRef = useRef<any>(null);\n const { handleClipBoardEvent } = usePreventClipboardActions();\n\n useEffect(() => {\n return () => clearTimeout(timerRef.current);\n }, []);\n // const navigate = useNavigate();\n const { t } = useTranslation();\n const handleChange = (event) => {\n const name = event.target.name;\n let value = event.target.value;\n if (\n name === \"userName\" &&\n preventSpecialChars &&\n value &&\n preventSpecialChars.split(\"\").some((char) => value.includes(char))\n ) {\n return;\n }\n if (name === \"userName\" && value) {\n loginState.isUsernameError = false;\n }\n if (name === \"mobileno\" && value) {\n value = value.replace(/\\D/g, \"\");\n if (Boolean(value)) {\n loginState.isMobileError = false;\n }\n }\n setInput((values) => ({ ...values, [name]: value }));\n };\n useEffect(() => {\n if (loginState.workingState === 1) {\n setTimeout(() => {\n inputPassRef?.current?.focus?.();\n }, 2000);\n }\n }, [loginState.workingState]);\n return (\n <Fragment>\n <div className={classes.formWrap}>\n <TextField\n autoFocus={true}\n label={t(\"UserID\")}\n placeholder={String(t(\"UserID\"))}\n fullWidth\n type={\"text\"}\n name=\"userName\"\n value={input.userName.trimStart() || \"\"}\n onChange={handleChange}\n error={loginState.isUsernameError}\n helperText={\n loginState.isUsernameError\n ? t(loginState.userMessageforusername)\n : \"\"\n }\n InputLabelProps={{ shrink: true }}\n disabled={\n loginState.loading\n ? true\n : loginState.workingState === 0\n ? false\n : true\n }\n autoComplete=\"off\"\n ref={inputRef}\n inputProps={{ maxLength: 16 }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n inputButtonRef?.current?.click?.();\n }\n }}\n style={{ paddingBottom: \"8px\" }}\n />\n {loginState.workingState === 0 ? (\n <TextField\n label={t(\"MobileNo\")}\n placeholder={t(\"EnterMobileNo\")}\n // placeholder={String(t(\"EnterMobileNo\"))}\n fullWidth\n type={\"text\"}\n name=\"mobileno\"\n value={input.mobileno.trimStart() || \"\"}\n onChange={handleChange}\n error={loginState.isMobileError}\n helperText={\n loginState.isMobileError\n ? t(loginState.userMessageforMobileno)\n : \"\"\n }\n InputLabelProps={{ shrink: true }}\n disabled={\n loginState.loading\n ? true\n : loginState.workingState === 0\n ? false\n : true\n }\n autoComplete=\"off\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n inputButtonRef?.current?.click?.();\n }\n }}\n inputProps={{ maxLength: 13 }}\n style={{ paddingBottom: \"8px\" }}\n />\n ) : null}\n {loginState.workingState === 1 ? (\n <>\n <TextField\n autoFocus={true}\n label={t(\"Password\")}\n placeholder={t(\"EnterPassword\")}\n fullWidth\n type={showPassword ? \"text\" : \"password\"}\n name=\"password\"\n value={input.password.trimStart() || \"\"}\n onChange={handleChange}\n onBlur={async () => await validatePassword(input, \"P\")}\n error={loginState.isPasswordError}\n helperText={\n loginState.isPasswordError\n ? t(loginState.userMessageforPassword)\n : \"\"\n }\n InputLabelProps={{ shrink: true }}\n disabled={loginState.loading}\n autoComplete=\"off\"\n ref={inputPassRef}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n inputButtonRef?.current?.click?.();\n }\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {loginState.passwordValidateloading ? (\n <CircularProgress\n color=\"secondary\"\n variant=\"indeterminate\"\n size={24}\n thickness={4.6}\n />\n ) : null}\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={() => {\n if (!showPassword) {\n setShowPasswordTime(Date.now() + 5000);\n timerRef.current = setTimeout(\n () => forceUpdate(Date.now()),\n 5000,\n );\n } else if (showPassword) setShowPasswordTime(0);\n }}\n onMouseDown={(e) => e.preventDefault()}\n disabled={loginState.loading}\n >\n {showPassword ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n inputProps={{\n maxLength: 16,\n ...handleClipBoardEvent,\n }}\n style={{ paddingBottom: \"8px\" }}\n />\n <TextField\n label={t(\"ConfirmPassword\")}\n placeholder={String(t(\"EnterConfirmPassword\"))}\n fullWidth\n type={showConfirmPassword ? \"text\" : \"password\"}\n name=\"confirmpassword\"\n value={input.confirmpassword.trimStart() || \"\"}\n onChange={handleChange}\n onBlur={async () => await validatePassword(input, \"C\")}\n error={loginState.isConfirmPasswordError}\n helperText={\n loginState.isConfirmPasswordError\n ? t(loginState.userMessageforconfirmPassword)\n : \"\"\n }\n InputLabelProps={{ shrink: true }}\n disabled={loginState.loading}\n autoComplete=\"off\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n inputButtonRef?.current?.click?.();\n }\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={() => {\n if (!showConfirmPassword) {\n setShowConfirmPasswordTime(Date.now() + 5000);\n timerRef.current = setTimeout(\n () => forceUpdate(Date.now()),\n 5000,\n );\n } else if (showConfirmPassword)\n setShowConfirmPasswordTime(0);\n }}\n onMouseDown={(e) => e.preventDefault()}\n disabled={loginState.loading}\n >\n {showConfirmPassword ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n inputProps={{\n maxLength: 16,\n ...handleClipBoardEvent,\n }}\n style={{ paddingBottom: \"8px\" }}\n />\n </>\n ) : null}\n {loginState.isApiError ? (\n <FormHelperText style={{ color: \"red\" }}>\n {loginState.apierrorMessage}\n </FormHelperText>\n ) : null}\n <div\n style={{\n marginTop: \"20px\",\n display: \"flex\",\n flexDirection: \"row-reverse\",\n }}\n >\n <div\n style={{\n flex: \"auto\",\n textAlign: \"center\",\n marginTop: \"5px\",\n marginBottom: \"17px\",\n }}\n >\n <div>\n <GradientButton\n style={{ borderRadius: \"10px\", marginRight: \"5px\" }}\n // fullWidth\n\n disabled={loginState.loading}\n onClick={() => {\n navigate(loginPageEndpoint);\n }}\n starticon={\"West\"}\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\n >\n {t(\"backtologin\")}\n </GradientButton>\n\n <GradientButton\n style={{ borderRadius: \"10px\" }}\n disabled={loginState.loading}\n onClick={() => {\n onSubmit(input, loginState.workingState);\n }}\n ref={inputButtonRef}\n endicon={loginState.loading ? undefined : \"East\"}\n rotateIcon=\"scale(1.4) rotateX(360deg)\"\n >\n {loginState.loading ? (\n <CircularProgress size={25} thickness={4.6} />\n ) : (\n t(\"Next\")\n )}\n </GradientButton>\n </div>\n </div>\n </div>\n </div>\n </Fragment>\n );\n};\n","import { useReducer, useState, useRef, useEffect } from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useStyles } from \"./style\";\r\nimport { ForgotPasswordFields } from \"./forgotPasswordField\";\r\nimport { OTPModelForm } from \"./otpPopup\";\r\nimport { utilFunction } from \"@acuteinfo/common-base\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { Container, Grid, Tooltip } from \"@mui/material\";\r\nimport { BankDetails } from \"./bankDetails\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { isBase64 } from \"./utils\";\r\nimport {\r\n OTPResendRequestFnType,\r\n UpdateNewPasswordFnType,\r\n ValidatePasswordFnType,\r\n VerifyOtpForPWDResetFnType,\r\n VerifyUsernameMobileFnType,\r\n} from \"pages/types\";\r\n\r\nconst inititalState = {\r\n isUsernameError: false,\r\n userMessageforusername: \"\",\r\n loading: false,\r\n isMobileError: false,\r\n userMessageforMobileno: \"\",\r\n isPasswordError: false,\r\n userMessageforPassword: \"\",\r\n isConfirmPasswordError: false,\r\n userMessageforconfirmPassword: \"\",\r\n workingState: 0,\r\n isApiError: false,\r\n apierrorMessage: \"\",\r\n otploading: false,\r\n OtpuserMessage: \"\",\r\n otpmodelClose: false,\r\n requestCd: \"\",\r\n username: \"\",\r\n description: \"\",\r\n auth_type: \"O\",\r\n transactionID: \"\",\r\n contactUser: \"\",\r\n forgotOtpSentText: \"\",\r\n newPasswordMessage: \"\",\r\n passwordValidateloading: false,\r\n confirmPasswordValidateloading: false,\r\n};\r\nconst reducer = (state, action) => {\r\n switch (action.type) {\r\n case \"verifyUserNameandMobileNoFailed\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isUsernameError: action?.payload?.isUsernameError ?? false,\r\n isMobileError: action?.payload?.isMobileError ?? false,\r\n userMessageforusername: action?.payload?.userMessageforusername ?? \"\",\r\n userMessageforMobileno: action?.payload?.userMessageforMobileno ?? \"\",\r\n isApiError: action?.payload?.isApiError ?? false,\r\n apierrorMessage: action?.payload?.apierrorMessage ?? \"\",\r\n requestCd: \"\",\r\n username: \"\",\r\n description: \"\",\r\n contactUser: \"\",\r\n };\r\n }\r\n case \"initverifyUserNameandMobileNo\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n isUsernameError: false,\r\n isMobileError: false,\r\n requestCd: \"\",\r\n username: \"\",\r\n description: \"\",\r\n };\r\n }\r\n case \"verifyUserNameandMobileNoSuccess\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isUsernameError: false,\r\n isMobileError: false,\r\n workingState: 0,\r\n isApiError: false,\r\n apierrorMessage: \"\",\r\n requestCd: action?.payload?.requestCd ?? \"\",\r\n username: action?.payload?.username ?? \"\",\r\n description: action?.payload?.description ?? \"\",\r\n auth_type: action?.payload?.auth_type,\r\n company_ID: action?.payload?.company_ID,\r\n branch_cd: action?.payload?.branch_cd,\r\n otpValidFor: action?.payload?.otpValidFor,\r\n contactUser: action?.payload?.contactUser,\r\n forgotOtpSentText: action?.payload?.forgotOtpSentText,\r\n };\r\n }\r\n case \"inititateOTPVerification\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: true,\r\n OtpuserMessage: \"\",\r\n otpmodelClose: false,\r\n };\r\n }\r\n case \"OTPVerificationComplate\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n otploading: false,\r\n OtpuserMessage: \"\",\r\n workingState: 1,\r\n otpmodelClose: Boolean(action?.payload?.otpmodelclose),\r\n newPasswordMessage: action?.payload?.newPasswordMessage,\r\n };\r\n }\r\n case \"OTPVerificationFailed\": {\r\n return {\r\n ...state,\r\n otploading: false,\r\n OtpuserMessage: action?.payload?.error,\r\n otpmodelClose: Boolean(action?.payload?.otpmodelclose),\r\n };\r\n }\r\n case \"verifyPasswordFailed\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isPasswordError: action?.payload?.isPasswordError ?? false,\r\n isConfirmPasswordError:\r\n action?.payload?.isConfirmPasswordError ?? false,\r\n userMessageforPassword: action?.payload?.userMessageforPassword ?? \"\",\r\n userMessageforconfirmPassword:\r\n action?.payload?.userMessageforconfirmPassword ?? \"\",\r\n isApiError: false,\r\n apierrorMessage: \"\",\r\n passwordValidateloading: false,\r\n confirmPasswordValidateloading: false,\r\n };\r\n }\r\n case \"initverifyPasswordSetReq\": {\r\n return {\r\n ...state,\r\n loading: true,\r\n isPasswordError: false,\r\n isConfirmPasswordError: false,\r\n };\r\n }\r\n case \"passwordRegistaredSuccess\": {\r\n return {\r\n ...state,\r\n loading: false,\r\n isPasswordError: false,\r\n isConfirmPasswordError: false,\r\n };\r\n }\r\n case \"OTPResendSuccess\": {\r\n return {\r\n ...state,\r\n requestCd: action?.payload?.requestCd,\r\n };\r\n }\r\n case \"initPasswordValidate\": {\r\n return {\r\n ...state,\r\n passwordValidateloading: action?.payload?.passwordValidateloading,\r\n confirmPasswordValidateloading:\r\n action?.payload?.confirmPasswordValidateloading,\r\n isPasswordError: false,\r\n isConfirmPasswordError: false,\r\n };\r\n }\r\n case \"passwordValidateSuccess\": {\r\n return {\r\n ...state,\r\n passwordValidateloading: false,\r\n confirmPasswordValidateloading: false,\r\n isPasswordError: false,\r\n isConfirmPasswordError: false,\r\n };\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\ninterface ForgotPasswordControllerProps {\r\n bannerDetails: {\r\n bannerImg: string;\r\n bannerTitle: string;\r\n bannerNote: string;\r\n };\r\n logoUrl?: string;\r\n logoTitle?: string;\r\n updatenewPassword: UpdateNewPasswordFnType;\r\n OTPResendRequest: OTPResendRequestFnType;\r\n veirfyUsernameandMobileNo: VerifyUsernameMobileFnType;\r\n validatePasswordFn: ValidatePasswordFnType;\r\n verifyOTPForPWDReset: VerifyOtpForPWDResetFnType;\r\n LanguageComponent?: React.ComponentType<any>;\r\n screenFlag: \"password\" | \"totp\";\r\n navigate: NavigateFunction;\r\n loginPageEndpoint: string;\r\n TotpEnbaledDisabled?: React.ComponentType<any>;\r\n /**\r\n * Prevents characters input from specified string in username field\r\n *\r\n * e.g. \"!@#\". Characters `!`, `@`, `#` will be prevented in username field\r\n */\r\n preventSpecialChars?: string | null;\r\n}\r\n\r\nexport const ForgotPasswordControllerWrapper: React.FC<\r\n ForgotPasswordControllerProps\r\n> = ({\r\n screenFlag,\r\n updatenewPassword,\r\n validatePasswordFn,\r\n veirfyUsernameandMobileNo,\r\n verifyOTPForPWDReset,\r\n OTPResendRequest,\r\n logoUrl,\r\n logoTitle,\r\n LanguageComponent,\r\n bannerDetails,\r\n navigate,\r\n loginPageEndpoint,\r\n preventSpecialChars,\r\n TotpEnbaledDisabled,\r\n}) => {\r\n const classes = useStyles();\r\n const [loginState, dispath] = useReducer(reducer, inititalState);\r\n const [open, setOpen] = useState(false);\r\n const [totp, setTotp] = useState<any>({\r\n Enable: false,\r\n totpdata: \"\",\r\n });\r\n const { enqueueSnackbar } = useSnackbar();\r\n const otpResendRef = useRef(1);\r\n const { t } = useTranslation();\r\n const [dashboardLogoURL, setDashboardLogoURL] = useState<any | null>(null);\r\n const urlObj = useRef<any>(null);\r\n useEffect(() => {\r\n if (Boolean(logoUrl)) {\r\n if (isBase64(logoUrl)) {\r\n let blob = utilFunction.base64toBlob(logoUrl);\r\n urlObj.current =\r\n typeof blob === \"object\" && Boolean(blob)\r\n ? URL.createObjectURL(blob)\r\n : \"\";\r\n setDashboardLogoURL(urlObj.current);\r\n } else {\r\n setDashboardLogoURL(logoUrl);\r\n }\r\n }\r\n }, [logoUrl]);\r\n\r\n const validatePassword = async (data, flag) => {\r\n if (flag === \"P\" && data?.password.trim()?.length > 0) {\r\n dispath({\r\n type: \"initPasswordValidate\",\r\n payload: {\r\n passwordValidateloading: flag === \"P\" ? true : false,\r\n },\r\n });\r\n const { validateStatus, validateData } = await validatePasswordFn({\r\n USER_ID: data.userName,\r\n PASSWORD: flag === \"P\" ? data?.password : data?.confirmpassword,\r\n SCREEN_REF: \"FORGET_PW\",\r\n });\r\n if (validateStatus === \"0\") {\r\n switch (validateData?.O_STATUS) {\r\n case \"999\":\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: {\r\n isPasswordError: flag === \"P\" ? true : false,\r\n isConfirmPasswordError: flag === \"P\" ? false : true,\r\n userMessageforPassword:\r\n flag === \"P\" ? validateData?.O_MESSAGE : \"\",\r\n userMessageforconfirmPassword:\r\n flag === \"P\" ? \"\" : (validateData?.O_MESSAGE ?? \"\"),\r\n apierrorMessage: validateData?.O_MESSAGE,\r\n },\r\n });\r\n break;\r\n case \"0\":\r\n dispath({ type: \"passwordValidateSuccess\" });\r\n break;\r\n }\r\n }\r\n } else if (flag === \"C\" && data?.confirmpassword.trim()?.length > 0) {\r\n let validationData = {\r\n isPasswordError: false,\r\n userMessageforPassword: \"\",\r\n isConfirmPasswordError: false,\r\n userMessageforconfirmPassword: \"\",\r\n };\r\n if (!Boolean(data.confirmpassword)) {\r\n validationData.isConfirmPasswordError = true;\r\n validationData.userMessageforconfirmPassword =\r\n \"Confirmpasswordisrequired\";\r\n } else if (\r\n Boolean(data.password) &&\r\n data.password !== data.confirmpassword\r\n ) {\r\n validationData.isConfirmPasswordError = true;\r\n validationData.userMessageforconfirmPassword =\r\n \"New Password and Confirm Password did not matched\";\r\n }\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: validationData,\r\n });\r\n }\r\n };\r\n\r\n const onSubmitHandel = async (data, flag) => {\r\n if (verifyRequestData(data, flag)) {\r\n if (flag === 0) {\r\n dispath({ type: \"initverifyUserNameandMobileNo\" });\r\n const {\r\n status,\r\n data: resdata,\r\n message,\r\n } = await veirfyUsernameandMobileNo(\r\n data?.userName.toLowerCase(),\r\n data?.mobileno,\r\n screenFlag,\r\n );\r\n\r\n if (status === \"0\") {\r\n dispath({\r\n type: \"verifyUserNameandMobileNoSuccess\",\r\n payload: {\r\n requestCd: String(resdata?.TRAN_CD ?? \"\"),\r\n username: data?.userName,\r\n description: resdata?.DESCRIPTION,\r\n auth_type: resdata?.AUTH_TYPE,\r\n company_ID: resdata?.COMP_CD,\r\n branch_cd: resdata?.BRANCH_CD,\r\n otpValidFor: resdata?.OTP_VALID,\r\n contactUser: resdata?.CONTACT2,\r\n forgotOtpSentText: resdata?.OTP_SENT_TEXT,\r\n },\r\n });\r\n setOpen(true);\r\n } else {\r\n dispath({\r\n type: \"verifyUserNameandMobileNoFailed\",\r\n payload: {\r\n isApiError: true,\r\n apierrorMessage: message,\r\n },\r\n });\r\n }\r\n } else if (flag === 1) {\r\n dispath({ type: \"initverifyPasswordSetReq\" });\r\n const { validateStatus, validateData } = await validatePasswordFn({\r\n USER_ID: data?.userName,\r\n PASSWORD: data?.password,\r\n SCREEN_REF: \"FORGET_PW\",\r\n });\r\n // console.log(\"validateData\", validateData?.O_MESSAGE, validateStatus)\r\n if (validateStatus === \"0\") {\r\n switch (validateData?.O_STATUS) {\r\n case \"999\":\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: {\r\n isPasswordError: true,\r\n userMessageforPassword: validateData?.O_MESSAGE,\r\n apierrorMessage: validateData?.O_MESSAGE,\r\n },\r\n });\r\n break;\r\n case \"0\":\r\n const {\r\n status,\r\n data: resdata,\r\n message,\r\n } = await updatenewPassword(\r\n loginState?.requestCd,\r\n loginState?.username,\r\n data?.password,\r\n );\r\n if (status === \"0\") {\r\n dispath({ type: \"passwordRegistaredSuccess\" });\r\n enqueueSnackbar(t(\"PasswordSuccessfullyReset\"), {\r\n variant: \"success\",\r\n });\r\n navigate(loginPageEndpoint);\r\n } else if (status === \"99\") {\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: {\r\n isApiError: true,\r\n apierrorMessage: message,\r\n },\r\n });\r\n } else {\r\n enqueueSnackbar(message, {\r\n variant: \"error\",\r\n });\r\n navigate(loginPageEndpoint);\r\n }\r\n }\r\n } else {\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: {\r\n isApiError: true,\r\n apierrorMessage: validateData?.O_MESSAGE,\r\n },\r\n });\r\n }\r\n }\r\n }\r\n };\r\n const verifyRequestData = (data, flag) => {\r\n if (flag === 0) {\r\n let validationData = {\r\n isUsernameError: false,\r\n isMobileError: false,\r\n userMessageforusername: \"\",\r\n userMessageforMobileno: \"\",\r\n };\r\n if (!Boolean(data.userName)) {\r\n validationData.isUsernameError = true;\r\n validationData.userMessageforusername = \"UsernameisRequired\";\r\n }\r\n if (!Boolean(data.mobileno)) {\r\n validationData.isMobileError = true;\r\n validationData.userMessageforMobileno = \"MobileNoisRequired\";\r\n } else if (\r\n isNaN(data.mobileno) ||\r\n (data.mobileno.length !== 10 && data.mobileno.length !== 13)\r\n ) {\r\n validationData.isMobileError = true;\r\n validationData.userMessageforMobileno = \"Please enter valid Mobile No.\";\r\n }\r\n dispath({\r\n type: \"verifyUserNameandMobileNoFailed\",\r\n payload: validationData,\r\n });\r\n return !(validationData.isMobileError || validationData.isUsernameError);\r\n } else if (flag === 1) {\r\n let validationData = {\r\n isPasswordError: false,\r\n userMessageforPassword: \"\",\r\n isConfirmPasswordError: false,\r\n userMessageforconfirmPassword: \"\",\r\n };\r\n let pwdverify = utilFunction.ValidatePassword(data.password);\r\n if (Boolean(pwdverify)) {\r\n validationData.isPasswordError = true;\r\n validationData.userMessageforPassword = pwdverify;\r\n }\r\n if (!Boolean(data.confirmpassword)) {\r\n validationData.isConfirmPasswordError = true;\r\n validationData.userMessageforconfirmPassword =\r\n \"Confirmpasswordisrequired\";\r\n } else if (\r\n Boolean(data.password) &&\r\n data.password !== data.confirmpassword\r\n ) {\r\n validationData.isConfirmPasswordError = true;\r\n validationData.userMessageforconfirmPassword =\r\n \"New Password and Confirm Password did not matched\";\r\n }\r\n dispath({\r\n type: \"verifyPasswordFailed\",\r\n payload: validationData,\r\n });\r\n return !(\r\n validationData.isConfirmPasswordError || validationData.isPasswordError\r\n );\r\n }\r\n return true;\r\n };\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n const changeUserName = () => {\r\n dispath({\r\n type: \"backToUsernameVerification\",\r\n });\r\n };\r\n\r\n const VerifyOTP = async (OTPNumber) => {\r\n if (Boolean(OTPNumber) && OTPNumber.toString().length === 6) {\r\n dispath({ type: \"inititateOTPVerification\" });\r\n const {\r\n status,\r\n data: resdata,\r\n message,\r\n } = await verifyOTPForPWDReset(\r\n loginState?.requestCd,\r\n loginState?.username,\r\n OTPNumber,\r\n loginState?.auth_type,\r\n screenFlag,\r\n );\r\n if (status === \"0\") {\r\n if (screenFlag === \"totp\") {\r\n setTotp({\r\n totpdata: {\r\n secretTockenQR: resdata?.SECRET_TOCKEN_QR,\r\n secretTocken: resdata?.SECRET_TOCKEN,\r\n userName: resdata?.USER_NAME,\r\n },\r\n Enable: true,\r\n });\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationComplate\",\r\n payload: {\r\n otpmodelclose: true,\r\n newPasswordMessage: resdata?.MESSAGE,\r\n },\r\n });\r\n }\r\n } else if (status === \"99\") {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: message },\r\n });\r\n } else {\r\n enqueueSnackbar(message, {\r\n variant: \"error\",\r\n });\r\n navigate(loginPageEndpoint);\r\n }\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: \"Please enter a 6 digit OTP number\" },\r\n });\r\n }\r\n };\r\n return (\r\n <>\r\n <Grid container style={{ height: \"100vh\", overflow: \"hidden\" }}>\r\n <BankDetails bannerDetails={bannerDetails} />\r\n <Grid item xs={6} md={6} lg={6} sm={6}>\r\n {logoUrl ? (\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-end\"\r\n alignItems=\"center\"\r\n padding={\"31px\"}\r\n maxWidth={\"210px\"}\r\n ml={\"auto\"}\r\n >\r\n <Tooltip describeChild title={logoTitle ?? \"\"}>\r\n <img\r\n src={Boolean(dashboardLogoURL) ? dashboardLogoURL : \"\"}\r\n alt=\"Logo\"\r\n width={\"100%\"}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n ) : null}\r\n {LanguageComponent ? (\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-end\"\r\n alignItems=\"center\"\r\n padding={\"0 35px 0 0\"}\r\n maxWidth={\"180px\"}\r\n ml={\"auto\"}\r\n >\r\n <LanguageComponent />\r\n </Grid>\r\n ) : null}\r\n <Container maxWidth=\"xs\">\r\n <Grid alignItems=\"center\" style={{ paddingTop: \"20px\" }}>\r\n <h2 style={{ margin: \"10px 0\" }}>\r\n {loginState.workingState === 1\r\n ? t(\"Setnewpassword\")\r\n : screenFlag === \"totp\"\r\n ? t(\"ResetTOTP\")\r\n : t(\"ForgotPassword\")}\r\n </h2>\r\n {loginState.workingState === 1 ? (\r\n <>\r\n <div\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n lineHeight: \"27px\",\r\n }}\r\n >\r\n <span\r\n style={{\r\n marginRight: \"12px\",\r\n color: \"#1C1C1C\",\r\n }}\r\n >\r\n {\" \"}\r\n {t(\"Hello\")}{\" \"}\r\n {loginState?.username\r\n ? loginState.username.charAt(0).toUpperCase() +\r\n loginState.username.slice(1)\r\n : null}\r\n </span>\r\n {t(\"OTSuccessfullynewpassword\", {\r\n defaultValue: loginState?.newPasswordMessage ?? \"\",\r\n })}\r\n </div>\r\n </>\r\n ) : null}\r\n {open ? (\r\n <OTPModelForm\r\n classes={classes}\r\n handleClose={handleClose}\r\n loginState={loginState}\r\n VerifyOTP={VerifyOTP}\r\n OTPError={t(loginState?.OtpuserMessage ?? \"\")}\r\n setOTPError={(error) => {\r\n dispath({\r\n type: \"OTPVerificationFailed\",\r\n payload: { error: error },\r\n });\r\n }}\r\n resendFlag={\"FORGET_PW\"}\r\n setNewRequestID={(newRequestID) => {\r\n dispath({\r\n type: \"OTPResendSuccess\",\r\n payload: { requestCd: newRequestID },\r\n });\r\n otpResendRef.current = otpResendRef.current + 1;\r\n }}\r\n otpresendCount={otpResendRef.current}\r\n OTPResendRequest={OTPResendRequest}\r\n />\r\n ) : (\r\n <ForgotPasswordFields\r\n classes={classes}\r\n loginState={loginState}\r\n onSubmit={onSubmitHandel}\r\n navigate={navigate}\r\n loginPageEndpoint={loginPageEndpoint}\r\n preventSpecialChars={preventSpecialChars}\r\n validatePassword={validatePassword}\r\n />\r\n )}\r\n </Grid>\r\n </Container>\r\n {totp?.Enable && TotpEnbaledDisabled ? (\r\n <TotpEnbaledDisabled totpdata={totp?.totpdata} flag=\"reset\" />\r\n ) : null}\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n};\r\n","import { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: any) => ({\r\n heading_user_img: {\r\n width: \"40px\",\r\n height: \"40px\",\r\n // cursor: \"pointer\",\r\n },\r\n heading_user_img_border: {\r\n border: \"2px dashed var(--theme-color3)\",\r\n borderRadius: \"50%\",\r\n padding: \"4px\",\r\n },\r\n logo: {\r\n height: \"38px\",\r\n },\r\n}));\r\n","import { GridMetaDataType } from \"@acuteinfo/common-base\";\r\nexport const BranchSelectionGridMetaData: GridMetaDataType = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"AccessBranchList\",\r\n rowIdColumn: \"BRANCH_CD\",\r\n // searchPlaceholder: \"Branches\",\r\n defaultColumnConfig: {\r\n width: 400,\r\n maxWidth: 450,\r\n minWidth: 300,\r\n },\r\n\r\n allowColumnReordering: false,\r\n disableSorting: false,\r\n hideHeader: false,\r\n disableGroupBy: true,\r\n enablePagination: false,\r\n containerHeight: {\r\n min: \"100vh\",\r\n max: \"100vh \",\r\n },\r\n occupiedHeight: {\r\n min: \"180px\",\r\n max: \"180px\",\r\n },\r\n allowFilter: false,\r\n allowColumnHiding: false,\r\n allowRowSelection: false,\r\n isCusrsorFocused: true,\r\n hideFooter: true,\r\n },\r\n columns: [\r\n {\r\n accessor: \"BRANCH_CD\",\r\n columnName: \"BranchCode\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 200,\r\n minWidth: 140,\r\n maxWidth: 220,\r\n },\r\n {\r\n accessor: \"BRANCH_NM\",\r\n columnName: \"BranchName\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 280,\r\n minWidth: 280,\r\n maxWidth: 420,\r\n },\r\n {\r\n accessor: \"DISP_STATUS\",\r\n columnName: \"Status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 200,\r\n minWidth: 140,\r\n maxWidth: 220,\r\n },\r\n {\r\n accessor: \"BEGIN_DATETIME\",\r\n columnName: \"BeginTime\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n componentType: \"date\",\r\n dateFormat: \"dd/MM/yyyy hh:mm a\",\r\n width: 222,\r\n minWidth: 140,\r\n maxWidth: 240,\r\n },\r\n {\r\n accessor: \"END_DATETIME\",\r\n columnName: \"EndTime\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n componentType: \"date\",\r\n dateFormat: \"dd/MM/yyyy hh:mm a\",\r\n width: 222,\r\n minWidth: 140,\r\n maxWidth: 240,\r\n },\r\n // {\r\n // accessor: \"DAYEND_STATUS\",\r\n // columnName: \"Dayend Status\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"EOD_RUNNING_STATUS\",\r\n // columnName: \"EOD Running Status\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"BASE_COMP_CD\",\r\n // columnName: \"Base Comp Cd\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"BASE_BRANCH_CD\",\r\n // columnName: \"Base Branch Cd\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"COMP_CD\",\r\n // columnName: \"Comp Cd\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n // {\r\n // accessor: \"COMP_NM\",\r\n // columnName: \"Comp Name\",\r\n // sequence: 6,\r\n // componentType: \"default\",\r\n // isVisible: false,\r\n // },\r\n ],\r\n};\r\n","import { useCallback, useEffect } from \"react\";\r\nimport {\r\n GridWrapper,\r\n ActionTypes,\r\n GridMetaDataType,\r\n ClearCacheProvider,\r\n Alert,\r\n queryClient,\r\n usePopupContext,\r\n} from \"@acuteinfo/common-base\";\r\nimport {\r\n Avatar,\r\n Box,\r\n Button,\r\n Grid,\r\n Stack,\r\n Tooltip,\r\n tooltipClasses,\r\n} from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { useQuery, useMutation } from \"react-query\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { t } from \"i18next\";\r\nimport { useStyles } from \"./style\";\r\nimport \"./styles.css\";\r\nimport { BranchSelectionGridMetaData } from \"./gridMetadata\";\r\nimport { BranchSelectionGridDataFnType, GetMenuDataFnType } from \"pages/types\";\r\n\r\nconst actions: ActionTypes[] = [\r\n {\r\n actionName: \"back\",\r\n actionLabel: \"Back\",\r\n multiple: false,\r\n rowDoubleClick: false,\r\n actionTextColor: \"var(--theme-color3)\",\r\n actionBackground: \"var(--white)\",\r\n startsIcon: \"West\",\r\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\r\n },\r\n {\r\n actionName: \"proceed\",\r\n actionLabel: \"Proceed\",\r\n multiple: false,\r\n rowDoubleClick: true,\r\n actionTextColor: \"var(--white)\",\r\n actionBackground: \"var(--theme-color3)\",\r\n onEnterSubmit: true,\r\n endsIcon: \"East\",\r\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\r\n },\r\n];\r\n\r\nconst LightTooltip = styled(({ className, ...props }: any) => (\r\n <Tooltip {...props} classes={{ popper: className }} />\r\n))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: theme.palette.common.white,\r\n color: \"rgba(0, 0, 0, 0.87)\",\r\n boxShadow: theme.shadows[1],\r\n fontSize: 13,\r\n },\r\n}));\r\n\r\nconst Greetings = (userId: string) => {\r\n const hours = new Date().getHours();\r\n const greet = hours < 12 ? \"morning\" : hours <= 16 ? \"afternoon\" : \"evening\";\r\n\r\n return (\r\n <span>\r\n Good {greet} {userId},\r\n </span>\r\n );\r\n};\r\n\r\ninterface BranchSelectionWrapperProps {\r\n selectionMode: \"S\" | \"C\";\r\n authState: any;\r\n isBranchSelectedFn: () => boolean;\r\n isLoggedInFn: () => boolean;\r\n logoutFn: () => void;\r\n branchSelectFn: Function;\r\n BranchSelectionGridDataApiFn: BranchSelectionGridDataFnType;\r\n GetMenuDataApiFn: GetMenuDataFnType;\r\n sideImage?: string;\r\n logos: any;\r\n logo?: string;\r\n navigate: NavigateFunction;\r\n dashboardUrl: string;\r\n loginUrl: string;\r\n appTranCd: string;\r\n enableEnterToFocus?: boolean;\r\n}\r\n\r\nconst BranchSelectionGrid: React.FC<BranchSelectionWrapperProps> = ({\r\n selectionMode,\r\n authState,\r\n isBranchSelectedFn,\r\n isLoggedInFn,\r\n logoutFn,\r\n logos,\r\n logo,\r\n navigate,\r\n BranchSelectionGridDataApiFn,\r\n GetMenuDataApiFn,\r\n sideImage,\r\n branchSelectFn,\r\n dashboardUrl,\r\n loginUrl,\r\n appTranCd,\r\n enableEnterToFocus,\r\n}) => {\r\n const classes = useStyles();\r\n const { MessageBox } = usePopupContext();\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { data, isLoading, isFetching, isError, error, refetch } = useQuery(\r\n [\"BranchSelectionGridData\"],\r\n () => BranchSelectionGridDataApiFn(),\r\n );\r\n\r\n useEffect(() => {\r\n refetch();\r\n return () => queryClient.removeQueries([\"BranchSelectionGridData\"]);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoggedInFn()) navigate(loginUrl);\r\n else if (isBranchSelectedFn() && selectionMode !== \"C\")\r\n navigate(dashboardUrl);\r\n }, [isLoggedInFn, isBranchSelectedFn]);\r\n const mutation: any = useMutation(GetMenuDataApiFn, {\r\n onSuccess: (data, extraData: any) => {\r\n branchSelectFn({\r\n menulistdata: data,\r\n branchCode: extraData?.BRANCH_CD,\r\n branch: extraData?.BRANCH_NM,\r\n baseBranchCode: extraData?.BASE_BRANCH_CD,\r\n });\r\n },\r\n });\r\n\r\n const mutationError = mutation.error as {\r\n severity: string;\r\n error_msg: string;\r\n error_detail: string;\r\n };\r\n\r\n const setCurrentAction = useCallback(\r\n async ({ name, rows }) => {\r\n if (name === \"proceed\") {\r\n if (!rows?.length) {\r\n enqueueSnackbar(t(\"PleaseSelectBranch\"), { variant: \"error\" });\r\n return;\r\n }\r\n\r\n const branch = rows[0]?.data;\r\n if (branch.STATUS === \"C\") {\r\n await MessageBox({\r\n message: \"BranchDayEndMessage\",\r\n messageTitle: \"BranchDayEndTitle\",\r\n icon: \"ERROR\",\r\n defFocusBtnName: \"Ok\",\r\n });\r\n return;\r\n }\r\n\r\n mutation.mutate({\r\n BASE_COMP_CD: branch.BASE_COMP_CD ?? \"\",\r\n BASE_BRANCH_CD: branch.BASE_BRANCH_CD ?? \"\",\r\n COMP_CD: branch.COMP_CD ?? \"\",\r\n BRANCH_CD: branch.BRANCH_CD ?? \"\",\r\n GROUP_NAME: authState?.groupName ?? \"\",\r\n APP_TRAN_CD: appTranCd,\r\n COMP_NM: branch.COMP_NM ?? \"\",\r\n BRANCH_NM: branch.BRANCH_NM ?? \"\",\r\n DAYEND_STATUS: branch.DAYEND_STATUS ?? \"\",\r\n EOD_RUNNING_STATUS: branch.EOD_RUNNING_STATUS ?? \"\",\r\n IS_UPD_DEF_BRANCH: authState?.user?.isUpdDefBranch ?? \"\",\r\n COMP_BASE_BRANCH_CD: branch.COMP_BASE_BRANCH_CD ?? \"\",\r\n selectionMode,\r\n authState,\r\n });\r\n }\r\n\r\n if (name === \"back\") {\r\n const res = await MessageBox({\r\n messageTitle: \"confirmation\",\r\n message: \"AreYouSureToExit\",\r\n icon: \"CONFIRM\",\r\n buttonNames: [\"Yes\", \"No\"],\r\n defFocusBtnName: \"Yes\",\r\n });\r\n\r\n if (res === \"Yes\") {\r\n if (selectionMode === \"C\") navigate(dashboardUrl, { replace: true });\r\n else logoutFn();\r\n }\r\n }\r\n },\r\n [mutation, authState],\r\n );\r\n\r\n useEffect(() => {\r\n const openBranchExists = data?.some((b) => b.STATUS === \"O\");\r\n if (openBranchExists === false) {\r\n enqueueSnackbar(\r\n \"Branch is in Day End Status.~rPlease contact system Vendor.\",\r\n {\r\n variant: \"error\",\r\n },\r\n );\r\n logoutFn();\r\n } else if (data?.length === 1 && data[0]?.STATUS === \"O\") {\r\n setCurrentAction({ name: \"proceed\", rows: [{ data: data[0] }] });\r\n }\r\n }, [JSON.stringify(data)]);\r\n\r\n const renderError = (err: any) => (\r\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\r\n <Alert\r\n severity={err?.severity ?? \"error\"}\r\n errorMsg={err?.error_msg ?? \"Error\"}\r\n errorDetail={err?.error_detail ?? \"\"}\r\n />\r\n </div>\r\n );\r\n\r\n const renderHeader = () => (\r\n <Grid container lg={12} md={12} xl={12} xs={12}>\r\n {/* Profile avatar */}\r\n <Grid\r\n xs={12}\r\n sm={1}\r\n md={1}\r\n lg={1}\r\n xl={1}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n visibility: logos?.profile ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n <Stack direction=\"row\" spacing={4} ml={1}>\r\n <Box\r\n className={classes.heading_user_img_border}\r\n sx={{ cursor: \"pointer\" }}\r\n >\r\n <LightTooltip\r\n title={\r\n <>\r\n <div>\r\n {t(\"UserID\")}: {authState?.user?.id ?? \"\"}\r\n </div>\r\n <div>\r\n {t(\"Role\")}: {authState?.roleName ?? \"\"}\r\n </div>\r\n <div>{t(\"LastUnsuccessfulLogin\")}: \"\"</div>\r\n </>\r\n }\r\n placement=\"bottom-start\"\r\n >\r\n <Avatar\r\n className={classes.heading_user_img}\r\n src={logos?.profile ?? \"\"}\r\n />\r\n </LightTooltip>\r\n </Box>\r\n </Stack>\r\n </Grid>\r\n\r\n {/* Greetings */}\r\n <Grid\r\n xs={12}\r\n sm={5}\r\n md={5}\r\n lg={5}\r\n xl={5}\r\n sx={{\r\n justifyContent: \"center\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }}\r\n >\r\n <h1\r\n className=\"name-heading\"\r\n style={{ fontSize: \"24px\", margin: \"4px 0px\" }}\r\n >\r\n {t(\"Welcome\")} <span>{`${authState?.user?.name ?? \"\"},`}</span>\r\n </h1>\r\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\r\n <h3 style={{ margin: \"4px 0px\" }}>\r\n {Greetings(authState?.user?.id ?? \"\")}\r\n </h3>\r\n 👋\r\n </div>\r\n </Grid>\r\n\r\n {/* Bank logo */}\r\n <Grid\r\n xs={12}\r\n sm={1}\r\n md={1}\r\n lg={1}\r\n xl={1}\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n visibility: logos?.bank ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n <Avatar className={classes.heading_user_img} src={logos?.bank ?? \"\"} />\r\n </Grid>\r\n {/* Bank info */}\r\n <Grid\r\n xs={12}\r\n sm={3}\r\n md={3}\r\n lg={3}\r\n xl={3}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <p className=\"bank-name\">{`${t(\"BankName\")}: ${authState?.companyName ?? \"\"}`}</p>\r\n <p className=\"emp-id\">{`${t(\"EmpId\")}: ${authState?.user?.employeeID ?? \"\"}`}</p>\r\n </Grid>\r\n {/* App logo */}\r\n <Grid\r\n xs={12}\r\n sm={3}\r\n md={3}\r\n lg={2}\r\n xl={2}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"right\",\r\n visibility: logo ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n <img src={logo ?? \"\"} alt=\"bank_logo\" className={classes.logo} />\r\n </Grid>\r\n </Grid>\r\n );\r\n\r\n return (\r\n <Grid container sx={{ margin: 0, padding: 0, height: \"100vh\" }}>\r\n {sideImage && (\r\n <Grid item lg={1} md={1} xl={1} xs={1}>\r\n <img className=\"sideImage\" src={sideImage} alt=\"side\" />\r\n </Grid>\r\n )}\r\n\r\n <Grid\r\n item\r\n lg={11}\r\n md={11}\r\n xl={11}\r\n xs={11}\r\n sx={{ display: \"flex\", justifyContent: \"center\" }}\r\n >\r\n <Grid\r\n container\r\n sx={{ minHeight: \"100vh\", padding: \"10px 0\" }}\r\n lg={11}\r\n md={11}\r\n xl={11}\r\n xs={11}\r\n >\r\n {renderHeader()}\r\n\r\n {(isError && renderError(error)) ||\r\n (mutation.isError && renderError(mutationError))}\r\n\r\n <GridWrapper\r\n key=\"branchSelection\"\r\n finalMetaData={BranchSelectionGridMetaData as GridMetaDataType}\r\n data={data ?? []}\r\n setData={() => null}\r\n actions={actions}\r\n setAction={setCurrentAction}\r\n controlsAtBottom\r\n actionContextAtBottom\r\n disableMultipleRowSelect\r\n variant=\"outlined\"\r\n loading={isLoading || isFetching || mutation.isLoading}\r\n defaultSelectedRowId={authState?.user?.defaultSelectBranch ?? null}\r\n headerToolbarStyle={{\r\n background: \"#fff !important\",\r\n padding: 0,\r\n \"& .MuiTypography-root\": { color: \"black\" },\r\n }}\r\n enableEnterToFocus={enableEnterToFocus}\r\n />\r\n {(isError || !data?.length) && (\r\n <Button\r\n sx={{\r\n backgroundColor: \"var(--theme-color3)\",\r\n position: \"absolute\",\r\n right: \"113px\",\r\n bottom: \"20px\",\r\n width: \"7rem\",\r\n \"&:hover\": { backgroundColor: \"var(--theme-color3)\" },\r\n }}\r\n onClick={async () => {\r\n const res = await MessageBox({\r\n messageTitle: \"confirmation\",\r\n message: \"AreYouSureToExit\",\r\n icon: \"CONFIRM\",\r\n buttonNames: [\"Yes\", \"No\"],\r\n defFocusBtnName: \"Yes\",\r\n });\r\n if (res === \"Yes\") {\r\n selectionMode === \"C\"\r\n ? navigate(dashboardUrl, { replace: true })\r\n : logoutFn();\r\n }\r\n }}\r\n >\r\n Back\r\n </Button>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n );\r\n};\r\n\r\nexport const BranchSelectionGridWrapper: React.FC<\r\n BranchSelectionWrapperProps\r\n> = (props) => (\r\n <ClearCacheProvider>\r\n <BranchSelectionGrid {...props} />\r\n </ClearCacheProvider>\r\n);\r\n","import { alpha } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: any) => ({\r\n appBar: {\r\n // zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n color: \"#0063A3\",\r\n height: \"unset\",\r\n background: \"var(--white)\",\r\n boxShadow: \"0px 1px 0px -0.5px #DEE0E2\",\r\n },\r\n searchBar: {\r\n width: 290,\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, 0.87) !important\",\r\n backgroundColor: \"rgb(235 237 238 / 26%)!important\",\r\n\r\n \"& input\": {\r\n width: \"100% !important\",\r\n },\r\n },\r\n searchList: {\r\n position: \"absolute\",\r\n background: \"#fff\",\r\n width: \"100%\",\r\n borderRadius: \"6px\",\r\n boxShadow: \"0 12px 25px rgba(0,0,0,.3)\",\r\n top: \"120%\",\r\n height: \"auto\",\r\n maxHeight: \"325px\",\r\n overflowY: \"auto\",\r\n\r\n \"& .list-links\": {\r\n background: \"none\",\r\n border: \"none\",\r\n outline: \"none\",\r\n cursor: \"pointer\",\r\n textDecoration: \"none\",\r\n padding: \"0.7rem 1rem\",\r\n fontSize: \"0.90rem\",\r\n textAlign: \"left\",\r\n borderBottom: \"1px solid #ddd\",\r\n color: \"#222 !important\",\r\n fontWeight: 500,\r\n \"&:hover, &.active\": {\r\n backgroundColor: \"#f4f4f4\",\r\n },\r\n },\r\n },\r\n appBarShift: {\r\n paddingLeft: \"0px\",\r\n // width: `calc(100% - ${drawerWidth}px)`,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n background: \"rgba(250, 251, 255, 0.9)\",\r\n }),\r\n },\r\n heading_user_dtl: {\r\n width: \"458px\",\r\n height: \"73px\",\r\n left: \"37px\",\r\n top: \"calc(50% - 73px/2)\",\r\n },\r\n heading_user_img: {\r\n width: \"40px\",\r\n height: \"40px\",\r\n // cursor: \"pointer\",\r\n },\r\n heading_user_img_border: {\r\n border: \"2px dashed var(--theme-color3)\",\r\n borderRadius: \"50%\",\r\n padding: \"4px\",\r\n },\r\n toolbar: {\r\n paddingLeft: \"0px\",\r\n },\r\n title: {\r\n flexGrow: 1,\r\n padding: theme.spacing(0.5, 0),\r\n color: \"var(--theme-color1)\",\r\n },\r\n searchRoot: {\r\n fontFamily: theme.typography.fontFamily,\r\n position: \"relative\",\r\n boxShadow:\r\n \"0px 2px 4px -1px rgba(0,0,0,0.2), 0px 4px 5px 0px rgba(0,0,0,0.14), 0px 1px 10px 0px rgba(0,0,0,0.12)\",\r\n marginRight: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginBottom: theme.spacing(0.25),\r\n marginTop: theme.spacing(0.25),\r\n borderRadius: 40,\r\n backgroundColor: alpha(theme.palette.common.white, 0.15),\r\n \"&:hover\": {\r\n backgroundColor: alpha(theme.palette.common.white, 0.25),\r\n },\r\n \"& $inputInput\": {\r\n transition: theme.transitions.create(\"width\"),\r\n width: 120,\r\n \"&:focus\": {\r\n width: 170,\r\n },\r\n },\r\n },\r\n search: {\r\n width: theme.spacing(6),\r\n height: \"100%\",\r\n position: \"absolute\",\r\n pointerEvents: \"none\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n inputRoot: {\r\n color: \"inherit\",\r\n marginTop: 0,\r\n borderRadius: \"40px\",\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 1, 1, 6),\r\n },\r\n\r\n loggedInUser: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n nameClass: {\r\n color: \"#0063A3\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n lineHeight: \"1.4\",\r\n textAlign: \"left\",\r\n },\r\n dropDown: {\r\n fontSize: \"2rem\",\r\n },\r\n vTop: {\r\n verticalAlign: \"top\",\r\n paddingLeft: \"4px\",\r\n color: \"var(--theme-color1)\",\r\n },\r\n userDesignation: {\r\n margin: \"0px\",\r\n fontWeight: 500,\r\n fontSize: \"0.875rem\",\r\n lineHeight: 1.57,\r\n color: \"var(--theme-color1)\",\r\n },\r\n userName: {\r\n margin: \"0px\",\r\n fontWeight: 500,\r\n fontSize: \"0.875rem\",\r\n lineHeight: 1.57,\r\n color: \"var(--theme-color3)\",\r\n },\r\n userprofilehover: {\r\n \"&:hover\": {\r\n backgroundColor: \"var(--white)\",\r\n },\r\n },\r\n lang_svg: {\r\n marginRight: \"10px\",\r\n width: \"22px\",\r\n height: \"22px\",\r\n },\r\n logo: {\r\n height: \"38px\",\r\n },\r\n version01: {\r\n margin: \"0\",\r\n textAlign: \"center\",\r\n color: \"var(--theme-color3)\",\r\n fontSize: \"9px\",\r\n },\r\n DrawerClose_icon: {\r\n color: \"var(--theme-color3)\",\r\n position: \"static\",\r\n background: \"transperant\",\r\n \"&:hover\": {\r\n background: \"var(--theme-color4)\",\r\n },\r\n width: \"46px\",\r\n height: \"46px\",\r\n },\r\n marquee: {\r\n animation: \"$marquee 10s linear infinite\",\r\n animationDelay: \"3s\",\r\n },\r\n \"@keyframes marquee\": {\r\n \"0%\": { transform: \"translateX(100%)\" },\r\n \"100%\": { transform: \"translateX(-100%)\" },\r\n },\r\n popover: {\r\n popover: {\r\n maxWidth: \"100%\",\r\n width: \"fit-content\",\r\n \"& .MuiPopover-paper\": {\r\n maxWidth: \"100%\",\r\n },\r\n },\r\n },\r\n blinkHard: {\r\n animation: \"$blinker 1s step-end infinite\",\r\n },\r\n \"@keyframes blinker\": {\r\n \"50%\": {\r\n opacity: 0,\r\n },\r\n },\r\n}));\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useStyles } from \"./style\";\r\nimport BecomePartnerImg from \"../../assets/images/BecomePartnerImg.svg\";\r\nimport LogoutIcon from \"@mui/icons-material/Logout\";\r\nimport MenuOutlinedIcon from \"@mui/icons-material/MenuOutlined\";\r\nimport { styled, alpha } from \"@mui/material/styles\";\r\nimport {\r\n AppBar,\r\n Avatar,\r\n Box,\r\n IconButton,\r\n Stack,\r\n Toolbar,\r\n Tooltip,\r\n Typography,\r\n tooltipClasses,\r\n useMediaQuery,\r\n} from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { format } from \"date-fns\";\r\n\r\ninterface AppbarWrapperProps {\r\n handleDrawerOpen: Function;\r\n handleDrawerClose: Function;\r\n open: boolean;\r\n authState: any;\r\n LanguageComponent?: React.ComponentType<any>;\r\n SearchComponent?: React.ComponentType<any>;\r\n dashboardUrl?: string;\r\n logos?: any;\r\n bankLogo?: any;\r\n profilePic?: string;\r\n handleLogout?: Function;\r\n handleProfile?: Function;\r\n navigate: NavigateFunction;\r\n hideGreetings?: boolean;\r\n menuIconConfig?: {\r\n menuIconPosition?: \"left\" | \"right\";\r\n OpenIconComponent?: React.ReactNode;\r\n CloseIconComponent?: React.ReactNode;\r\n };\r\n optionalComponents?: {\r\n Component: React.ComponentType<any>;\r\n props?: { [key: string]: any };\r\n }[];\r\n /**\r\n * Accepts useIdleTimer instance\r\n */\r\n idleTimer?: any;\r\n}\r\n\r\nconst StyledAppBar = styled(AppBar)(({ theme }) => ({\r\n boxShadow: \"0 2px 4px rgba(0,0,0,0.1)\",\r\n padding: \"0 0 2.5px 0\",\r\n}));\r\n\r\nconst LogoContainer = styled(Box)(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: theme.spacing(1),\r\n minWidth: \"fit-content\",\r\n}));\r\n\r\nconst CompanyLogo = styled(Avatar)(({ theme }) => ({\r\n backgroundColor: \"white\",\r\n width: 35,\r\n height: 35,\r\n}));\r\n\r\nconst BankInfoContainer = styled(Box)(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: theme.spacing(2),\r\n marginLeft: theme.spacing(3),\r\n [theme.breakpoints.down(\"md\")]: {\r\n marginLeft: theme.spacing(1),\r\n gap: theme.spacing(1),\r\n },\r\n}));\r\n\r\nconst BankInfoText = styled(Box)(({ theme }) => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n color: \"white\",\r\n}));\r\n\r\nconst Search = styled(\"div\")(({ theme }) => ({\r\n position: \"relative\",\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: alpha(theme.palette.common.white, 0.15),\r\n \"&:hover\": {\r\n backgroundColor: alpha(theme.palette.common.white, 0.25),\r\n },\r\n marginLeft: 0,\r\n width: \"100%\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: \"auto\",\r\n },\r\n}));\r\n\r\nconst RightSection = styled(Box)(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: theme.spacing(1),\r\n marginLeft: \"auto\",\r\n}));\r\n\r\nconst GreetingText = styled(Typography)(({ theme }) => ({\r\n color: \"var(--theme-color3)\",\r\n fontSize: \"14px\",\r\n marginRight: theme.spacing(1),\r\n [theme.breakpoints.down(\"md\")]: {\r\n display: \"none\",\r\n },\r\n}));\r\n\r\nexport const AppbarWrapper: React.FC<AppbarWrapperProps> = ({\r\n handleDrawerOpen,\r\n handleDrawerClose,\r\n open,\r\n authState,\r\n LanguageComponent,\r\n SearchComponent,\r\n dashboardUrl,\r\n logos,\r\n bankLogo,\r\n profilePic,\r\n handleLogout,\r\n handleProfile,\r\n navigate,\r\n hideGreetings,\r\n menuIconConfig = {},\r\n optionalComponents = [],\r\n idleTimer,\r\n // menuIconPosition = \"left\",\r\n}) => {\r\n const above1300 = useMediaQuery(\"(min-width:1300px)\");\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const [countdownMessage, setCountdownMessage] = useState(\"\");\r\n const [blinker, setBlinker] = useState(0);\r\n const {\r\n CloseIconComponent,\r\n OpenIconComponent,\r\n menuIconPosition = \"right\",\r\n } = menuIconConfig;\r\n\r\n const LightTooltip = styled(({ className, ...props }: any) => (\r\n <Tooltip {...props} classes={{ popper: className }} />\r\n ))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: theme.palette.common.white,\r\n color: \"rgba(0, 0, 0, 0.87)\",\r\n boxShadow: theme.shadows[1],\r\n fontSize: 13,\r\n },\r\n }));\r\n const Greetings = () => {\r\n let hours = new Date().getHours();\r\n let greet;\r\n\r\n if (hours < 12) greet = \"morning\";\r\n else if (hours >= 12 && hours <= 16) greet = \"afternoon\";\r\n else if (hours >= 16 && hours <= 24) greet = \"evening\";\r\n\r\n return <span>Good {greet},</span>;\r\n };\r\n\r\n useEffect(() => {\r\n if (!idleTimer) return;\r\n const updateCountdown = () => {\r\n const remainingTime = idleTimer.getRemainingTime();\r\n const remainingSeconds = Math.floor(remainingTime / 1000); // Convert to seconds\r\n if (remainingSeconds <= 30 && remainingSeconds > 0) {\r\n setCountdownMessage(\r\n t(\"sessionTimeoutInSec\", {\r\n remainingSeconds,\r\n }),\r\n );\r\n setBlinker((prev) => prev + 1);\r\n } else {\r\n setCountdownMessage(\"\"); // Clear the message if more than 30 seconds\r\n setBlinker(0);\r\n }\r\n };\r\n const interval = setInterval(updateCountdown, 1000);\r\n return () => clearInterval(interval);\r\n }, []);\r\n\r\n return (\r\n <>\r\n <StyledAppBar position=\"fixed\">\r\n <Toolbar\r\n sx={{\r\n minHeight: \"64px !important\",\r\n }}\r\n >\r\n {/* Left Section - Logo and Menu */}\r\n <LogoContainer\r\n sx={{\r\n flexDirection:\r\n menuIconPosition === \"left\" ? \"row\" : \"row-reverse\",\r\n }}\r\n >\r\n {open ? (\r\n <IconButton\r\n disableRipple\r\n onClick={() => handleDrawerClose()}\r\n className={classes.DrawerClose_icon}\r\n >\r\n {OpenIconComponent ? (\r\n OpenIconComponent\r\n ) : (\r\n <MenuOutlinedIcon fontSize=\"large\" />\r\n )}\r\n </IconButton>\r\n ) : (\r\n <IconButton\r\n disableRipple\r\n aria-label=\"open drawer\"\r\n onClick={() => handleDrawerOpen()}\r\n className={classes.DrawerClose_icon}\r\n >\r\n {CloseIconComponent ? (\r\n CloseIconComponent\r\n ) : (\r\n <MenuOutlinedIcon fontSize=\"large\" />\r\n )}\r\n </IconButton>\r\n )}\r\n <CompanyLogo>\r\n {Boolean(bankLogo) && (\r\n <div>\r\n <img\r\n src={bankLogo ?? \"\"}\r\n alt=\"bank_logo\"\r\n className={classes.logo}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n navigate(dashboardUrl ?? \"./dashboard\");\r\n }}\r\n />\r\n <p className={classes.version01}>{logos?.version}</p>\r\n </div>\r\n )}\r\n </CompanyLogo>\r\n </LogoContainer>\r\n\r\n {/* Bank Information - Hidden on mobile */}\r\n <BankInfoContainer>\r\n <Stack direction=\"row\" spacing={4}>\r\n <Box className={classes.heading_user_img_border}>\r\n <Avatar\r\n className={classes.heading_user_img}\r\n alt=\"Remy Sharp\"\r\n src={Boolean(logos?.bank) ? logos?.bank : BecomePartnerImg}\r\n />\r\n </Box>\r\n </Stack>\r\n <BankInfoText>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontWeight: \"bold\",\r\n fontSize: {\r\n xs: \"10px\",\r\n sm: \"11px\",\r\n md: \"12px\",\r\n lg: \"15px\",\r\n xl: \"15px\",\r\n },\r\n lineHeight: 1.2,\r\n overflow: \"hidden\",\r\n textOverflow: \"unset\",\r\n whiteSpace: \"unset\",\r\n color: \"var(--theme-color1)\",\r\n marginBottom: \"6px\",\r\n }}\r\n >\r\n {authState?.companyName || \"\"}\r\n </Typography>\r\n <Typography\r\n variant=\"caption\"\r\n sx={{\r\n fontSize: { xs: \"8px\", sm: \"9px\", md: \"10px\" },\r\n opacity: 0.9,\r\n color: \"var(--theme-color3)\",\r\n lineHeight: 1.2,\r\n }}\r\n >\r\n {t(\"Branch\")}:{authState?.user?.branchCode ?? \"001 \"}-\r\n {authState?.user?.branch ?? \"\"}\r\n </Typography>\r\n <Typography\r\n variant=\"caption\"\r\n sx={{\r\n fontSize: { xs: \"8px\", sm: \"9px\", md: \"10px\" },\r\n opacity: 0.9,\r\n color: \"var(--theme-color3)\",\r\n lineHeight: 1.2,\r\n }}\r\n >\r\n {t(\"WorkingDate\")}:{\" \"}\r\n {Boolean(authState?.workingDate)\r\n ? checkDateAndDisplay(\r\n format(new Date(authState?.workingDate), \"dd/MM/yyyy\"),\r\n // authState?.workingDate ?? \"\"\r\n )\r\n : \"not found\"}{\" \"}\r\n {t(\"LastLoginDate\")} :{\" \"}\r\n {checkDateAndDisplay(authState?.user?.lastLogin ?? \"\")}\r\n </Typography>\r\n </BankInfoText>\r\n </BankInfoContainer>\r\n\r\n {/* Right Section */}\r\n <RightSection>\r\n <Stack alignItems={\"flex-end\"}>\r\n <Stack direction={\"row\"} gap={\"1rem\"}>\r\n <Typography\r\n key={blinker}\r\n className={classes.blinkHard}\r\n fontSize={\"15px\"}\r\n color={\"#1C1C1C\"}\r\n >\r\n {countdownMessage}\r\n </Typography>\r\n {!hideGreetings ? (\r\n <GreetingText>\r\n {Greetings()} {authState?.user?.id ?? \"\"} 👋\r\n </GreetingText>\r\n ) : null}\r\n </Stack>\r\n <Stack direction=\"row\" alignItems={\"center\"}>\r\n {/* Search - Responsive */}\r\n {SearchComponent ? (\r\n <Search>\r\n <SearchComponent />\r\n </Search>\r\n ) : null}\r\n\r\n {/* Language Selector - Hidden on small screens */}\r\n {LanguageComponent ? <LanguageComponent /> : null}\r\n\r\n {/* User Actions */}\r\n <Box\r\n display={\"flex\"}\r\n justifyContent={\"space-between\"}\r\n gap={\"0.8rem\"}\r\n padding={\"0 0.5rem\"}\r\n alignItems={\"center\"}\r\n >\r\n {optionalComponents.map((component) => {\r\n let componentProps = { ...component.props };\r\n if (Array.isArray(componentProps)) componentProps = {};\r\n return <component.Component {...component.props} />;\r\n })}\r\n\r\n {above1300 && (\r\n <Tooltip title=\"Logout\" placement=\"bottom\" arrow>\r\n <IconButton\r\n onClick={() =>\r\n typeof handleLogout === \"function\"\r\n ? handleLogout()\r\n : null\r\n }\r\n color=\"error\"\r\n sx={{\r\n backgroundColor: \"rgba(235, 237, 238, 0.45)\",\r\n borderRadius: \"10px\",\r\n height: \"36px\",\r\n width: !above1300 ? \"100%\" : \"auto\",\r\n padding: \"0 8px\",\r\n \"&:hover\": {\r\n background: \"var(--theme-color2)\",\r\n boxShadow:\r\n \"rgba(0, 0, 0, 0.16) 0px 3px 6px, rgba(0, 0, 0, 0.23) 0px 3px 6px\",\r\n transition: \"all 0.2s ease\",\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n }}\r\n aria-label=\"logout\"\r\n >\r\n <LogoutIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n </Box>\r\n </Stack>\r\n </Stack>\r\n\r\n {/* User Avatar */}\r\n <Stack direction=\"row\" spacing={4}>\r\n <Box\r\n className={classes.heading_user_img_border}\r\n sx={{ cursor: \"pointer\" }}\r\n >\r\n <LightTooltip\r\n title={\r\n <>\r\n <div>\r\n {\" \"}\r\n {t(\"UserID\")}: {authState?.user?.id}\r\n </div>\r\n <div>\r\n {t(\"Role\")} : {authState?.roleName}\r\n </div>\r\n <div>{t(\"LastUnsuccessfulLogin\")} : \"\"</div>\r\n </>\r\n }\r\n placement=\"bottom-start\"\r\n >\r\n <Avatar\r\n className={classes.heading_user_img}\r\n onClick={() =>\r\n typeof handleProfile === \"function\"\r\n ? handleProfile()\r\n : null\r\n }\r\n alt=\"Remy Sharp\"\r\n src={profilePic ?? \"\"}\r\n />\r\n </LightTooltip>\r\n </Box>\r\n </Stack>\r\n </RightSection>\r\n </Toolbar>\r\n </StyledAppBar>\r\n </>\r\n );\r\n};\r\n\r\nexport const checkDateAndDisplay = (dateStr: string) => {\r\n // const dt = new Date(dateStr);\r\n // //@ts-ignore\r\n // if (dt instanceof Date && !isNaN(dt)) {\r\n // return dt.toDateString();\r\n // }\r\n if (Boolean(dateStr)) {\r\n return dateStr;\r\n }\r\n return \"N/A\";\r\n};\r\n","import { Theme } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nconst drawerWidth = 227;\r\n\r\nexport const useStyles = makeStyles((theme: Theme) => {\r\n return {\r\n drawerPaper: {\r\n boxShadow: \"0 0 10px rgba(0, 0, 0, 0.1)\",\r\n position: \"relative\",\r\n whiteSpace: \"nowrap\",\r\n width: drawerWidth,\r\n transition: theme.transitions.create(\"width\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n border: \"none\",\r\n overflow: \"hidden\",\r\n zIndex: 120,\r\n },\r\n drawerPaperClose: {\r\n overflowX: \"hidden\",\r\n transition: theme.transitions.create(\"width\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n width: theme.spacing(8),\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: theme.spacing(8),\r\n },\r\n },\r\n toolbarIcon: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n zIndex: 9999,\r\n ...theme.mixins.toolbar,\r\n background: \"var(--white)\",\r\n justifyContent: \"center\",\r\n height: \"67px\",\r\n // borderBottom: \"1px dashed #949597\",\r\n },\r\n hrCSS: {\r\n zIndex: 9999,\r\n },\r\n buttonLink: {\r\n backgroundColor: \"transparent\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n textDecoration: \"underline\",\r\n display: \"inline\",\r\n margin: 0,\r\n padding: 0,\r\n \"&:focus\": {\r\n textDecoration: \"none\",\r\n },\r\n \"$:hover\": {\r\n textDecoration: \"none\",\r\n },\r\n },\r\n };\r\n});\r\n\r\n/*\r\n \r\n*/\r\n","import { NavItemType } from \"./navigation\";\r\n\r\nexport const reportMetaData: NavItemType[] = [];\r\n","// import { createTheme } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n// const theme = createTheme();\r\n\r\nexport const useStylesBootstrapNav = makeStyles((theme: any) => ({\r\n navBarCSS: {\r\n padding: \"4px 1rem \",\r\n backgroundColor: \"#fff !important\",\r\n minHeight: \"64px\",\r\n boxShadow: \"0 3px 6px rgba(0,0,0,0.03)\",\r\n margin: \"10px\",\r\n },\r\n headerDropdown: {\r\n backgroundColor: \"#fff\",\r\n minWidth: \"205px\",\r\n boxShadow: \"0 3px 6px rgba(0,0,0,0.16)\",\r\n textDecoration: \"none\",\r\n borderBottom: \"3px solid #26A456\",\r\n },\r\n navLinkHeader: {\r\n color: \"#555\",\r\n fontSize: \"14px\",\r\n lineHeight: \"1.2\",\r\n paddingTop: \"4px\",\r\n paddingBottom: \"4px\",\r\n paddingRight: \".5rem\",\r\n paddingLeft: \".5rem\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n\r\n \"& hover\": {\r\n color: \"#0b6fb8\",\r\n },\r\n },\r\n productLink: {\r\n color: \"#555\",\r\n padding: \"0 1rem 8px 1rem\",\r\n display: \"inline-block\",\r\n verticalAlign: \"middle\",\r\n cursor: \"pointer\",\r\n textTransform: \"capitalize\",\r\n },\r\n font13: {\r\n fontSize: \"13px\",\r\n },\r\n loginDropdown: {\r\n width: \"160px\",\r\n },\r\n}));\r\n\r\nexport const useStylesSideBar = makeStyles((theme: any) => ({\r\n root: {\r\n justifyContent: \"center\",\r\n },\r\n drawer: {\r\n margin: \"5px\",\r\n },\r\n item: {\r\n display: \"flex\",\r\n //borderBottom: \"2px solid #93242433\",\r\n borderRadius: \"8px\",\r\n marginLeft: \"7px\",\r\n marginTop: \"6.5px\",\r\n width: \"93%\",\r\n height: \"50px\",\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(2),\r\n background: \"var(--white)\",\r\n boxShadow: \"3px 6px 6px rgba(93, 95, 121, 0.2)\",\r\n \"& svg\": {\r\n // color: theme.palette.primary.main,\r\n color: \"var(--theme-color1)\",\r\n },\r\n \"&:hover\": {\r\n boxShadow:\r\n \"6px 6px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 0px 0px rgba(0,0,5,0.12)\",\r\n background: \"var(--theme-color4)\",\r\n transition: \"0.3s ease\",\r\n \"& .__more-btn__\": {\r\n opacity: 1,\r\n pointerEvents: \"auto\",\r\n background: \"#ddd\",\r\n \"& svg\": {\r\n fill: \"var(--theme-color1) !important\",\r\n },\r\n },\r\n },\r\n },\r\n drawerIconSize: {\r\n width: \"50px\",\r\n height: \"50px\",\r\n padding: \"18px\",\r\n justifyItems: \"cenetr\",\r\n },\r\n button: {\r\n color: \"#0063A3\",\r\n padding: \"10px 8px\",\r\n //justifyContent: \"flex-start\",\r\n textTransform: \"none\",\r\n letterSpacing: 0,\r\n width: \"100%\",\r\n textAlign: \"left\",\r\n \"&:hover\": {\r\n backgroundColor: \"var(--theme-color1)\",\r\n // boxShadow: \"0px 15px 20px rgb(221 176 176 / 37%)\",\r\n },\r\n },\r\n btnRoot: {\r\n paddingLeft: \"24px\",\r\n justifyContent: \"left \",\r\n },\r\n navLinks: {\r\n // height: \"calc(100vh - 78px)\",\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n // height:\"100px\",\r\n // backgroundColor: \"rgba(250, 251, 255, 0.9);\",\r\n // height: \"calc(100vh - 230px)\",\r\n //background: \"var(--theme-color1)\",\r\n // marginTop: \"25px\",\r\n // boxShadow: \"0 3px 6px rgba(255, 99, 71, 0.3)\",\r\n borderRadius: \"10px\",\r\n paddingTop: \"5px\",\r\n \"&>.scrollbar-container\": {\r\n paddingBottom: \"10px\",\r\n },\r\n //margin: \"5px\",\r\n },\r\n navLinksforseparateView: {\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n height: \"calc(100vh - 180px)\",\r\n // height:\"auto\",\r\n paddingTop: \"10px\",\r\n },\r\n nestedMenuLevel1: {\r\n paddingLeft: \"20px\",\r\n marginTop: \"11px\",\r\n paddingRight: theme.spacing(3),\r\n height: \"auto\",\r\n fontSize: \"13px\",\r\n \"& div > svg\": {\r\n fontSize: \"14px\",\r\n },\r\n },\r\n nestedMenuLevel2: {\r\n paddingLeft: \"20px\",\r\n marginTop: \"11px\",\r\n fontSize: \"12px\",\r\n \"& div > svg\": {\r\n fontSize: \"9px\",\r\n },\r\n },\r\n listIcon: {\r\n minWidth: \"30px !important\",\r\n justifyItems: \"center\",\r\n color: \"var(--theme-color6)\",\r\n fontWeight: 700,\r\n fontSize: \"18px\",\r\n },\r\n link: {\r\n fontSize: \"1rem \",\r\n marginTop: \"2px\",\r\n marginBottom: \"2px\",\r\n textOverflow: \"ellipsis\",\r\n color: \"var(--theme-color1)\",\r\n marginLeft: \"15px\",\r\n whiteSpace: \"break-spaces\",\r\n \"& span\": {\r\n fontWeight: 400,\r\n whiteSpace: \"break-spaces\",\r\n },\r\n \"& p\": {\r\n color: \"var(--theme-color3)\",\r\n fontweight: 400,\r\n },\r\n },\r\n linktext: {\r\n backgroundColor: \"var(--white)\",\r\n \"&:hover\": {\r\n background: \"var(--theme-color1)\",\r\n \"& div\": {\r\n color: \"var(--white) !important\",\r\n },\r\n \"& div > svg\": {\r\n color: \"var(--white) !important\",\r\n },\r\n },\r\n },\r\n faSmall: {\r\n fontSize: \"13px \",\r\n },\r\n openList: {\r\n \":not(activeMenuItem)\": {\r\n \"& > div\": {\r\n backgroundColor: \"rgba(0, 0, 0, 0.04)\",\r\n },\r\n \"& *\": {\r\n color: \"var(--white)\",\r\n },\r\n },\r\n },\r\n openCurrent: {\r\n backgroundColor: \"var(--theme-color1)\",\r\n \"& *\": {\r\n color: \"var(--white)\",\r\n },\r\n \"&:hover\": {\r\n backgroundColor: \"var(--theme-color1)\",\r\n },\r\n },\r\n slimList: {\r\n paddingTop: \"15px\",\r\n paddingBottom: \"13px\",\r\n height: \"auto\",\r\n paddingLeft: \"15px\",\r\n justifyItems: \"center\",\r\n },\r\n activeMenuItem: {\r\n backgroundColor: \"var(--theme-color1)!important \", //\"var(--white)!important\",\r\n\r\n \"& > div\": {\r\n color: \"var(--white)!important\",\r\n },\r\n \"& svg\": {\r\n color: \"var(--theme-color4)\",\r\n },\r\n \"& hover\": {\r\n \"& > div\": {\r\n color: \"var(--theme-color3)\",\r\n },\r\n },\r\n \"& p\": {\r\n color: \"var(--theme-color4)\",\r\n },\r\n },\r\n}));\r\n","import { FC, useEffect } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { NavItemType, SideBarRendererType } from \"./types\";\r\nimport { useStylesSideBar } from \"./style\";\r\nimport ScrollBar from \"react-perfect-scrollbar\";\r\nimport {\r\n Button,\r\n Collapse,\r\n List,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n Tooltip,\r\n} from \"@mui/material\";\r\nimport { ExpandLess, ExpandMore } from \"@mui/icons-material\";\r\nimport { usePopupContext } from \"@acuteinfo/common-base\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport MoreHorizIcon from \"@mui/icons-material/MoreHoriz\";\r\nlet localdrawerOpen = true;\r\n\r\ninterface SideBarNavProps extends SideBarRendererType {\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n authState?: any;\r\n handleListItemClick?: (flag: string) => void;\r\n handleClickAction?: Function;\r\n}\r\n\r\nexport const SideBarNav: FC<SideBarNavProps> = ({\r\n metaData,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n setView,\r\n slimSize,\r\n setNewFilterData,\r\n setNewFilterView,\r\n isFromSeparetView = false,\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n handleListItemClick,\r\n authState,\r\n handleClickAction,\r\n}) => {\r\n const classes = useStylesSideBar();\r\n let result: JSX.Element[] | null = null;\r\n localdrawerOpen = drawerOpen;\r\n if (Array.isArray(metaData.navItems)) {\r\n result = metaData.navItems.map((one) => {\r\n if (one?.seperateView === true) {\r\n return (\r\n <SeperateListView\r\n key={one.label}\r\n item={one}\r\n setView={setView}\r\n classes={classes}\r\n level={0}\r\n slimSize={slimSize}\r\n setNewFilterData={setNewFilterData}\r\n setNewFilterView={setNewFilterView}\r\n handleListItemClick={handleListItemClick}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n } else if (Array.isArray(one.children)) {\r\n return (\r\n <NestedListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={0}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n handleListItemClick={handleListItemClick}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n } else {\r\n return (\r\n <SingleListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={0}\r\n slimSize={slimSize}\r\n drawerOpen={drawerOpen}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n }\r\n });\r\n }\r\n return (\r\n <List\r\n component=\"nav\"\r\n disablePadding\r\n className={\r\n isFromSeparetView ? classes.navLinksforseparateView : classes.navLinks\r\n }\r\n >\r\n <ScrollBar>{result}</ScrollBar>\r\n </List>\r\n );\r\n};\r\n\r\nconst SeperateListView: FC<{\r\n item: NavItemType;\r\n setView: any;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n slimSize?: boolean;\r\n setNewFilterData?: any;\r\n setNewFilterView?: any;\r\n handleListItemClick?: (flag: string) => void;\r\n handleClickAction?: Function;\r\n}> = ({\r\n item,\r\n setView,\r\n level,\r\n classes,\r\n slimSize,\r\n setNewFilterData,\r\n setNewFilterView,\r\n handleListItemClick,\r\n}) => {\r\n const [code, setCode] = useState(\"\");\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setCode(i18n.language);\r\n }, [t]);\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n // const icon = item.icon ? (\r\n // <ListItemIcon className={classes.listIcon}>\r\n // <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n // </ListItemIcon>\r\n // ) : null;\r\n\r\n const icon =\r\n item.icon?.toLowerCase() !== \"process.gif\" && item.icon ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n );\r\n\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n\r\n return (\r\n <ListItem\r\n button\r\n disableGutters\r\n sx={{ position: \"relative\", overflow: \"hidden\" }}\r\n className={clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })}\r\n onClick={() => {\r\n if (item.viewName === \"newfilterview\" && Array.isArray(item.children)) {\r\n setNewFilterView({\r\n label: item.label,\r\n placeholder: \"Search \" + item.label + \" Screen...\",\r\n });\r\n let newChield = item.children.map((item1) => {\r\n return { ...item1, secondaryLabel: item1.user_code };\r\n });\r\n setNewFilterData(newChield);\r\n }\r\n setView(item.viewName);\r\n }}\r\n >\r\n {typeof handleListItemClick === \"function\" ? (\r\n <Button\r\n className=\"__more-btn__\"\r\n title={t(\"OpenScreensList\")}\r\n sx={{\r\n background: \"#ddd\",\r\n outline: \"none\",\r\n border: \"none\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 0,\r\n right: 0,\r\n minWidth: \"38px\",\r\n height: \"20px\",\r\n lineHeight: \"10px\",\r\n cursor: \"pointer\",\r\n zIndex: 2,\r\n transition: \"all 0.3s ease-in-out\",\r\n borderRadius: \"0 0 0 8px\",\r\n boxShadow: \"0 1px 2px rgba(0,0,0,.2)\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleListItemClick(item.label);\r\n }}\r\n >\r\n <MoreHorizIcon fontSize=\"large\" color=\"secondary\" />\r\n </Button>\r\n ) : null}\r\n <Tooltip\r\n title={t(item.label)}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <ListItemText\r\n key={code}\r\n primary={t(item.label)}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n </Tooltip>\r\n ) : localdrawerOpen ? (\r\n <ListItemText\r\n key={code}\r\n primary={t(item.label)}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n ) : null}\r\n </ListItem>\r\n );\r\n};\r\n\r\nconst SingleListItem: FC<{\r\n item: NavItemType;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n slimSize?: boolean;\r\n drawerOpen?: any;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n handleClickAction?: Function;\r\n}> = ({\r\n item,\r\n classes,\r\n level,\r\n slimSize,\r\n drawerOpen,\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n handleClickAction,\r\n}) => {\r\n const [code, setCode] = useState(\"\");\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setCode(i18n.language);\r\n }, [t]);\r\n const isActiveMenu = isActiveMenuFromhref(\r\n window.location?.pathname ?? \"\",\r\n item?.href ?? \"\",\r\n item?.navigationProps,\r\n rootUrl,\r\n dashboardUrl,\r\n );\r\n if (isActiveMenu) {\r\n // GeneralAPI.setDocumentName(item.label);\r\n let titleText = document.title;\r\n document.title = titleText.split(\" - \")[0] + \" - \" + item.label;\r\n }\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n\r\n const icon =\r\n item.icon.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n );\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n return (\r\n <ListItem\r\n button\r\n // disabled ={item?.allow_open !== \"Y\"}\r\n disableGutters\r\n className={clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.activeMenuItem]: isActiveMenu,\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })}\r\n onClick={async (e) => {\r\n if (\r\n (e?.ctrlKey || e?.metaKey) &&\r\n typeof handleClickAction === \"function\"\r\n ) {\r\n handleClickAction(e, item);\r\n return;\r\n }\r\n e.preventDefault();\r\n if (item.isRouterLink) {\r\n let path = item.href;\r\n path =\r\n item.href?.substring(0, 1) === \"/\"\r\n ? item.href.substring(1)\r\n : item.href;\r\n if (item.passNavigationPropsAsURLParmas) {\r\n let urlParms = new URLSearchParams(item?.navigationProps);\r\n navigate(`${path}?${urlParms.toString()}`);\r\n } else {\r\n navigate(`${path}` as string, {\r\n state: { ...item?.navigationProps },\r\n });\r\n }\r\n } else if (Boolean(item.href)) {\r\n window.open(item.href, item.rel ?? \"_newtab\");\r\n }\r\n }}\r\n >\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {/* {console.log(localdrawerOpen, item.label.length)} */}\r\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\r\n <Tooltip\r\n title={\r\n item.system_code\r\n ? t(item.system_code, { defaultValue: item.label })\r\n : t(item.label)\r\n }\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <ListItemText\r\n key={code}\r\n primary={\r\n item.system_code\r\n ? t(item.system_code, { defaultValue: item.label })\r\n : t(item.label)\r\n }\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n </Tooltip>\r\n ) : localdrawerOpen ? (\r\n <ListItemText\r\n key={code}\r\n primary={t(\r\n item?.navigationProps\r\n ? `reportID${item?.system_code ?? \"\"}`\r\n : item?.system_code || item?.label || \"\",\r\n { defaultValue: item?.label ?? \"\" },\r\n )}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n ) : null}\r\n {/* <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText> */}\r\n </ListItem>\r\n );\r\n};\r\n\r\nconst NestedListItem: FC<{\r\n item: NavItemType;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n handleDrawerOpen: Function;\r\n drawerOpen: boolean;\r\n slimSize?: boolean;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n handleListItemClick?: (flag: string) => void;\r\n handleClickAction?: Function;\r\n}> = ({\r\n item,\r\n classes,\r\n level,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n slimSize,\r\n rootUrl,\r\n navigate,\r\n handleListItemClick,\r\n handleClickAction,\r\n}) => {\r\n const [code, setCode] = useState(\"\");\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setCode(i18n.language);\r\n }, [t]);\r\n const [open, setOpen] = useState(false);\r\n const handleClick = () => {\r\n if (!drawerOpen) {\r\n // handleDrawerOpen();\r\n }\r\n setOpen(!open);\r\n };\r\n const childrens = item.children?.map((one) => {\r\n if (Array.isArray(one.children)) {\r\n return (\r\n <NestedListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={level + 1}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n navigate={navigate}\r\n handleListItemClick={handleListItemClick}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n } else {\r\n return (\r\n <SingleListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={level + 1}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n navigate={navigate}\r\n handleClickAction={handleClickAction}\r\n />\r\n );\r\n }\r\n });\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n\r\n const icon =\r\n item.icon?.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n );\r\n\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n return (\r\n <>\r\n <ListItem\r\n button\r\n onClick={handleClick}\r\n disableGutters\r\n sx={{ position: \"relative\", overflow: \"hidden\" }}\r\n className={\r\n open\r\n ? clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.openCurrent]: true,\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })\r\n : clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })\r\n }\r\n >\r\n {typeof handleListItemClick === \"function\" ? (\r\n <Button\r\n className=\"__more-btn__\"\r\n title={t(\"OpenScreensList\")}\r\n sx={{\r\n background: \"#ddd\",\r\n outline: \"none\",\r\n border: \"none\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 0,\r\n right: 0,\r\n minWidth: \"38px\",\r\n height: \"20px\",\r\n lineHeight: \"10px\",\r\n cursor: \"pointer\",\r\n zIndex: 2,\r\n transition: \"all 0.3s ease-in-out\",\r\n borderRadius: \"0 0 0 8px\",\r\n boxShadow: \"0 1px 2px rgba(0,0,0,.2)\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleListItemClick(item.label);\r\n }}\r\n >\r\n <MoreHorizIcon fontSize=\"large\" color=\"secondary\" />\r\n </Button>\r\n ) : null}\r\n\r\n <Tooltip\r\n title={t(item.label)}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {/* {icon} */}\r\n {drawerOpen || !Boolean(icon) ? (\r\n <>\r\n <ListItemText\r\n key={code}\r\n primary={t(item.label)}\r\n secondary={item.secondaryLabel ?? null}\r\n color=\"primary\"\r\n className={classes.link}\r\n ></ListItemText>\r\n {open ? <ExpandLess /> : <ExpandMore />}\r\n </>\r\n ) : null}\r\n </ListItem>\r\n\r\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n <List\r\n component=\"div\"\r\n disablePadding\r\n className={open ? classes.openList : \"\"}\r\n >\r\n {childrens}\r\n </List>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\nconst isActiveMenuFromhref = (\r\n location,\r\n menuhref,\r\n navigationProps,\r\n rootUrl,\r\n dashboardUrl,\r\n) => {\r\n if (\r\n (location === `/${rootUrl}` || location === `/${rootUrl}/`) &&\r\n menuhref === dashboardUrl\r\n ) {\r\n return true;\r\n } else if (menuhref === \"report\") {\r\n try {\r\n let urlParms = new URLSearchParams(navigationProps);\r\n if (\"?\" + urlParms.toString() === window.location.search) {\r\n return true;\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return false;\r\n } else if (\r\n location !== `/${rootUrl}` &&\r\n location !== \"/\" &&\r\n Boolean(menuhref) &&\r\n location.includes(menuhref)\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n","import { NavItemType } from \"./types\";\r\n\r\nconst matchByValue = (search, tags, navItem) => {\r\n if (!Array.isArray(tags)) {\r\n tags = [tags];\r\n }\r\n return tags.some((one) =>\r\n navItem[one]\r\n ?.toLocaleLowerCase?.()\r\n ?.includes(search?.toLocaleLowerCase?.()),\r\n );\r\n};\r\n\r\nexport const filterMetaDataByValue = (\r\n searchString: string,\r\n navItems: NavItemType[],\r\n tagsToSearch?: string[],\r\n): NavItemType[] => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (matchByValue(searchString, tagsToSearch, navItems[i])) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaDataByValue(\r\n searchString,\r\n children,\r\n tagsToSearch,\r\n );\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n newNavItems.push({ ...newItem });\r\n }\r\n }\r\n }\r\n return newNavItems;\r\n};\r\n","import { FC, useEffect, useMemo, useState } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { SearchBar } from \"@acuteinfo/common-base\";\r\nimport ArrowBackIosNewIcon from \"@mui/icons-material/ArrowBackIosNew\";\r\nimport { useStylesSideBar } from \"./style\";\r\nimport { filterMetaDataByValue } from \"./filterMetaData\";\r\nimport { SideBarNav } from \"./sideBarNavigation\";\r\nimport { SideBarRendererType } from \"./types\";\r\nimport { ListItem, ListItemIcon, ListItemText } from \"@mui/material\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface NewSideBarNav extends SideBarRendererType {\r\n label: string;\r\n icon?: any;\r\n placeholder?: any;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n MessageBox?: any;\r\n handleClickAction?: Function;\r\n}\r\n\r\nexport const SearchViewNavigation: FC<NewSideBarNav> = ({\r\n metaData,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n setView,\r\n label,\r\n icon,\r\n placeholder = \"Search Reports...\",\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n MessageBox,\r\n handleClickAction,\r\n}) => {\r\n const [code, setCode] = useState(\"\");\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setCode(i18n.language);\r\n }, [t]);\r\n\r\n const [search, setSearch] = useState(\"\");\r\n const translatedMetaData = useMemo(() => {\r\n return metaData.navItems.map((item) => ({\r\n ...item,\r\n label: item.system_code\r\n ? t(item.system_code, { defaultValue: item.label })\r\n : item.label,\r\n }));\r\n }, [metaData.navItems, t]);\r\n\r\n const filteredMetaData = useMemo(() => {\r\n return filterMetaDataByValue(search, translatedMetaData, [\r\n \"label\",\r\n \"secondaryLabel\",\r\n ]);\r\n }, [search, translatedMetaData]);\r\n\r\n const classes = useStylesSideBar();\r\n\r\n const myIcon = icon ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <ArrowBackIosNewIcon />\r\n </ListItemIcon>\r\n ) : null;\r\n const handleClick = () => {\r\n if (!drawerOpen) {\r\n handleDrawerOpen();\r\n }\r\n };\r\n return (\r\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\r\n <ListItem\r\n button\r\n className={clsx({\r\n [classes.item]: true,\r\n [classes.nestedMenuLevel1]: true,\r\n [classes.linktext]: true,\r\n })}\r\n onClick={() => setView(\"/\")}\r\n sx={{ width: !drawerOpen ? \"80% !important\" : \"auto\" }}\r\n >\r\n {myIcon}\r\n <ListItemText key={code} primary={t(label)} className={classes.link} />\r\n </ListItem>\r\n {/* <div onClick={handleDrawerOpen}> */}\r\n <SearchBar\r\n sx={{ overflow: \"hidden\" }}\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n onClick={handleClick}\r\n placeholder={\r\n Boolean(placeholder)\r\n ? t(\"SidebarPlaceholder\", {\r\n defaultValue: placeholder,\r\n searchLabel: t(placeholder?.split(\" \")?.[1]) ?? \"\",\r\n })\r\n : \"Search Reports...\"\r\n }\r\n autoFocus={drawerOpen}\r\n />\r\n {/* </div> */}\r\n <SideBarNav\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n setView={setView}\r\n metaData={{\r\n navItems: filteredMetaData,\r\n config: { rel: \"\", target: \"_blank\" },\r\n }}\r\n slimSize={true}\r\n isFromSeparetView={true}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n MessageBox={MessageBox}\r\n handleClickAction={handleClickAction}\r\n />\r\n </div>\r\n );\r\n};\r\n","import { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport {\r\n faHandsHelping,\r\n faUsers,\r\n faBars,\r\n faBalanceScale,\r\n faHandHoldingHeart,\r\n faTasks,\r\n faCog,\r\n faHome,\r\n faTh,\r\n faUsersCog,\r\n faCircle,\r\n faUserCircle,\r\n faHashtag,\r\n faThumbtack,\r\n faSquare,\r\n faLink,\r\n faQuestion,\r\n faPlus,\r\n faTable,\r\n faLocationArrow,\r\n faHeadset,\r\n faGears,\r\n faArrowDown,\r\n faArrowUp,\r\n faSpinner,\r\n faCircleExclamation,\r\n faRotateRight,\r\n faUserLock,\r\n faUserClock,\r\n faGripHorizontal,\r\n faBarsProgress,\r\n faFileExport,\r\n faFileLines,\r\n faGear,\r\n faHeadphones,\r\n faUsersGear,\r\n faMessage,\r\n faUnlock,\r\n faUserPlus,\r\n faUserCheck,\r\n faKey,\r\n faIdCard,\r\n faIdBadge,\r\n faCheck,\r\n faCheckDouble,\r\n faCircleCheck,\r\n faPenToSquare,\r\n faCircleXmark,\r\n faUserTag,\r\n faAddressCard,\r\n faChartColumn,\r\n faUserPen,\r\n faHandHolding,\r\n faHandHoldingMedical,\r\n faObjectGroup,\r\n faTowerCell,\r\n faTowerObservation,\r\n faBuilding,\r\n faMailBulk,\r\n faLandmarkFlag,\r\n faCreditCard,\r\n faHospitalSymbol,\r\n faPlugCircleBolt,\r\n faCodeBranch,\r\n faPersonCircleCheck,\r\n faBank,\r\n faServer,\r\n faNotesMedical,\r\n faA,\r\n faB,\r\n faC,\r\n faD,\r\n faE,\r\n faF,\r\n faG,\r\n faH,\r\n faI,\r\n faJ,\r\n faK,\r\n faL,\r\n faM,\r\n faN,\r\n faO,\r\n faP,\r\n faQ,\r\n faR,\r\n faS,\r\n faT,\r\n faU,\r\n faV,\r\n faW,\r\n faX,\r\n faY,\r\n faZ,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nlibrary.add(\r\n faHandsHelping,\r\n faUsers,\r\n faBars,\r\n faBalanceScale,\r\n faHandHoldingHeart,\r\n faTasks,\r\n faCog,\r\n faHome,\r\n faTh,\r\n faUsersCog,\r\n faCircle,\r\n faUserCircle,\r\n faHashtag,\r\n faThumbtack,\r\n faSquare,\r\n faLink,\r\n faQuestion,\r\n faPlus,\r\n faTable,\r\n faLocationArrow,\r\n faHeadset,\r\n faGears,\r\n faArrowDown,\r\n faArrowUp,\r\n faSpinner,\r\n faCircleExclamation,\r\n faRotateRight,\r\n faUserLock,\r\n faUserClock,\r\n faGripHorizontal,\r\n faFileLines,\r\n faGear,\r\n faHeadphones,\r\n faUsersGear,\r\n faMessage,\r\n faUnlock,\r\n faUserPlus,\r\n faUserCheck,\r\n faKey,\r\n faIdCard,\r\n faIdBadge,\r\n faCheck,\r\n faCheckDouble,\r\n faCircleCheck,\r\n faCircleXmark,\r\n faUserTag,\r\n faAddressCard,\r\n faChartColumn,\r\n faUserPen,\r\n faHandHolding,\r\n faHandHoldingMedical,\r\n faObjectGroup,\r\n faTowerCell,\r\n faTowerObservation,\r\n faBuilding,\r\n faMailBulk,\r\n faLandmarkFlag,\r\n faCreditCard,\r\n faHospitalSymbol,\r\n faPlugCircleBolt,\r\n faCodeBranch,\r\n faPersonCircleCheck,\r\n faBank,\r\n faServer,\r\n faNotesMedical,\r\n faPenToSquare,\r\n faBarsProgress,\r\n faFileExport,\r\n faA,\r\n faB,\r\n faC,\r\n faD,\r\n faE,\r\n faF,\r\n faG,\r\n faH,\r\n faI,\r\n faJ,\r\n faK,\r\n faL,\r\n faM,\r\n faN,\r\n faO,\r\n faP,\r\n faQ,\r\n faR,\r\n faS,\r\n faT,\r\n faU,\r\n faV,\r\n faW,\r\n faX,\r\n faY,\r\n faZ,\r\n);\r\n","import { NavBarMetaDataType, NavItemType } from \"./navigation\";\r\nimport { cloneDeep } from \"lodash\";\r\n\r\nexport const transformMetaDataAsPerRole = (\r\n metaData: NavBarMetaDataType,\r\n role: number,\r\n branches: string[],\r\n company: string,\r\n access: any,\r\n products: string[],\r\n) => {\r\n let navItems = filterMetaData(\r\n metaData.navItems,\r\n role,\r\n branches,\r\n company,\r\n access,\r\n products,\r\n );\r\n //console.log(navItems);\r\n let newnavItem = navItems.map((item) => {\r\n let { children, ...newItem } = item;\r\n if (Array.isArray(children) && children.length > 5) {\r\n if (!Boolean(newItem.seperateView)) {\r\n newItem.seperateView = true;\r\n newItem.viewName = \"newfilterview\";\r\n //console.log(newItem);\r\n }\r\n }\r\n return { ...newItem, children: children };\r\n });\r\n return {\r\n config: metaData.config,\r\n navItems: newnavItem,\r\n };\r\n};\r\nexport const transformMetaDataAsPerMenuRights = (\r\n metaData: NavBarMetaDataType,\r\n authState: any,\r\n) => {\r\n let newMetadata = cloneDeep(metaData) as NavBarMetaDataType;\r\n let NavItem = filterMetaDataAsperRights(newMetadata.navItems, authState);\r\n newMetadata.navItems = NavItem;\r\n return newMetadata;\r\n};\r\nconst filterMetaDataAsperRights = (navItems, accessgroup) => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaDataAsperRights(children, accessgroup);\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n //if(newItem?.doccd) ///condition\r\n ///newNavItems.push({ ...newItem });\r\n }\r\n }\r\n return newNavItems;\r\n};\r\nconst matchBranches = (userBranches, accessBranches) => {\r\n if (!Array.isArray(accessBranches) || !Array.isArray(userBranches)) {\r\n return true;\r\n }\r\n if (accessBranches.length <= 0 || userBranches.length <= 0) {\r\n return true;\r\n }\r\n for (const one of accessBranches) {\r\n if (userBranches.indexOf(one) >= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nconst matchComany = (userCompany, accessCompany) => {\r\n if (!Array.isArray(accessCompany) || !Boolean(userCompany)) {\r\n return true;\r\n }\r\n if (accessCompany.length <= 0) {\r\n return true;\r\n }\r\n if (accessCompany.indexOf(userCompany) >= 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst matchRoles = (userRole, accessRoles) => {\r\n if (!Array.isArray(accessRoles) || typeof userRole !== \"number\") {\r\n return true;\r\n }\r\n if (accessRoles.length <= 0) {\r\n return true;\r\n }\r\n if (accessRoles.indexOf(userRole) >= 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst matchInvisibleRoles = (userRole, accessRoles) => {\r\n if (!Array.isArray(accessRoles) || typeof userRole !== \"number\") {\r\n return true;\r\n }\r\n if (accessRoles.length <= 0) {\r\n return true;\r\n }\r\n if (accessRoles.indexOf(userRole) >= 0) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nconst matchProducts = (userProducts, accessProducts) => {\r\n if (!Array.isArray(accessProducts) || !Array.isArray(userProducts)) {\r\n return true;\r\n }\r\n if (accessProducts.length <= 0 || userProducts.length <= 0) {\r\n return true;\r\n }\r\n\r\n for (const one of accessProducts) {\r\n if (userProducts.indexOf(one) >= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\nconst ishrefisNotNull = (item) => {\r\n if (\r\n !(Array.isArray(item.children) && item.children.length > 0) &&\r\n !Boolean(item.href)\r\n ) {\r\n //console.log(item);\r\n return false;\r\n }\r\n return true;\r\n};\r\nconst filterMetaData = (\r\n navItems: NavItemType[],\r\n role: number,\r\n branches: string[],\r\n company: string,\r\n access: any,\r\n products: string[],\r\n): NavItemType[] => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (\r\n matchRoles(Number(role), navItems[i].visibleToRoles) &&\r\n matchComany(company, navItems[i].visibleToCompanies) &&\r\n matchBranches(branches, navItems[i].visibleToBranches) &&\r\n matchInvisibleRoles(Number(role), navItems[i].invisibleToRoles) &&\r\n matchProducts(products, navItems[i].visibleToProducts) &&\r\n ishrefisNotNull(navItems[i])\r\n ) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaData(\r\n children,\r\n role,\r\n branches,\r\n company,\r\n access,\r\n products,\r\n );\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n newNavItems.push({ ...newItem, secondaryLabel: newItem.system_code });\r\n }\r\n }\r\n }\r\n return newNavItems;\r\n};\r\n","import { FC, useMemo, useState } from \"react\";\r\nimport { reportMetaData } from \"./reportMetaData\";\r\nimport { SideBarNav } from \"./navigation\";\r\nimport { SearchViewNavigation } from \"./navigation/searchViewNavigation\";\r\nimport \"./icons\";\r\nimport { transformMetaDataAsPerRole } from \"./transformer\";\r\n\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nexport const SideBar = ({\r\n authState,\r\n handleDrawerOpen,\r\n open,\r\n rootUrl,\r\n dashboardUrl = \"dashboard\",\r\n navigate,\r\n handleListItemClick,\r\n handleClickAction,\r\n}: any) => {\r\n const [view, setView] = useState(\"/\");\r\n const [NewFilterView, setNewFilterView] = useState<any>({});\r\n const [NewFilterData, setNewFilterData] = useState([]);\r\n\r\n const branches = useMemo(() => {\r\n let myBranches = authState?.access?.entities?.Branch ?? [];\r\n if (Array.isArray(myBranches) && myBranches.length >= 0) {\r\n return myBranches.map((one) => one.branchCode);\r\n } else {\r\n return [];\r\n }\r\n }, []);\r\n\r\n const products = useMemo(() => {\r\n let myProducts = authState?.access?.products ?? [];\r\n if (Array.isArray(myProducts) && myProducts.length >= 0) {\r\n return myProducts.map((one) => one.categoryCode);\r\n } else {\r\n return [];\r\n }\r\n }, []);\r\n let newMetaData = { navItems: authState.menulistdata };\r\n let filteredMetaDataSideBar = transformMetaDataAsPerRole(\r\n newMetaData,\r\n Number(authState.role),\r\n branches,\r\n authState.companyID,\r\n authState.access,\r\n products,\r\n );\r\n\r\n let filteredReportsMetaData = transformMetaDataAsPerRole(\r\n {\r\n config: { rel: \"\", target: \"_blank\" },\r\n navItems: reportMetaData,\r\n },\r\n Number(authState.role),\r\n branches,\r\n authState.companyID,\r\n authState.access,\r\n products,\r\n );\r\n return view === \"report\" ? (\r\n <SearchViewNavigation\r\n metaData={filteredReportsMetaData}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n label=\"Reports\"\r\n icon=\"table\"\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n handleClickAction={handleClickAction}\r\n />\r\n ) : view === \"newfilterview\" ? (\r\n <SearchViewNavigation\r\n metaData={{\r\n config: { rel: \"\", target: \"_blank\" },\r\n navItems: NewFilterData,\r\n }}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n label={NewFilterView?.label ?? \"Reports\"}\r\n icon=\"table\"\r\n placeholder={NewFilterView?.placeholder}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n handleClickAction={handleClickAction}\r\n />\r\n ) : (\r\n <>\r\n <SideBarNav\r\n metaData={filteredMetaDataSideBar}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n slimSize={true}\r\n setNewFilterData={setNewFilterData}\r\n setNewFilterView={setNewFilterView}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n authState={authState}\r\n handleListItemClick={handleListItemClick}\r\n handleClickAction={handleClickAction}\r\n />\r\n </>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { useStyles } from \"./style\";\r\nimport { Drawer } from \"@mui/material\";\r\nimport { SideBar } from \"./sideBar\";\r\n\r\ninterface SidebarWrapperProps {\r\n authState: any;\r\n navigate: NavigateFunction;\r\n handleDrawerOpen: Function;\r\n handleDrawerClose?: Function;\r\n open: boolean;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n handleListItemClick?: (flag: string) => void;\r\n hideUpperSpace?: boolean;\r\n handleClickAction?: Function;\r\n}\r\n\r\nexport const SidebarWrapper: React.FC<SidebarWrapperProps> = (props) => {\r\n const classes = useStyles({});\r\n return (\r\n <Drawer\r\n variant=\"permanent\"\r\n sx={{\r\n height: \"100dvh\",\r\n }}\r\n classes={{\r\n paper: clsx(\r\n classes.drawerPaper,\r\n !props.open && classes.drawerPaperClose,\r\n ),\r\n }}\r\n open={props.open}\r\n >\r\n {!props.hideUpperSpace ? (\r\n <div className={classes.toolbarIcon}></div>\r\n ) : null}\r\n <SideBar {...props} />\r\n </Drawer>\r\n );\r\n};\r\n"],"names":["useStyles","makeStyles","theme","wrapper","minHeight","boxShadow","background","loginEmp","padding","spacing","display","maxWidth","margin","borderRadius","breakpoints","down","width","formWrap","marginTop","loginBtn","minWidth","fontSize","border","color","fontWeight","letterSpacing","textTransform","alignSelf","OTPTimer","palette","primary","main","resendLink","cursor","secondary","logo","marginBottom","loginLeft","loginRight","loginImg","verifybutton","otpButtons","divflex","otpinputpadding","marginRight","height","ibtnvisible","btnvisibleoff","OTPalignName","alignItems","justifyContent","fonWeight","lineHeight","resendOTPalign","resendbtnLink","textDecoration","dialogTitleClass","lang_svg","dialogContent","whiteSpace","button","flexDirection","preventClipboardEvent","event","preventDefault","stopPropagation","usePreventClipboardActions","onKeyDown","handleClipBoardEvent","useMemo","onCopy","onCut","onPaste","onDrop","onDragOver","onContextMenu","key","ctrlKey","metaKey","shiftKey","normalizedKey","toLowerCase","includes","shouldBlockClipboardShortcut","UsernamePasswordField","classes","loginState","verifyUsernamePassword","forgotPasswordEndpoint","preventSpecialChars","input","setInput","useState","userName","password","showPasswordTime","setShowPasswordTime","blurred","setBlurred","showPassword","Date","now","forceUpdate","timerRef","useRef","t","useTranslation","useEffect","clearTimeout","current","handleChange","name","target","value","split","some","char","isUsernameError","isPasswordError","values","inputRef","inputPassRef","inputButtonRef","timeoutCd","setTimeout","focus","old","otpmodelClose","_jsx","Fragment","children","Container","_jsxs","Grid","style","paddingTop","fontStyle","className","TextField","autoFocus","label","placeholder","String","fullWidth","type","trimStart","onChange","error","helperText","userMessageforusername","InputLabelProps","shrink","disabled","loading","autoComplete","e","click","inputProps","maxLength","repeat","onBlur","onFocus","userMessageforpassword","InputProps","endAdornment","InputAdornment","position","IconButton","onClick","onMouseDown","Visibility","VisibilityOff","flex","textAlign","href","GradientButton","ref","endicon","undefined","rotateIcon","CircularProgress","size","thickness","OTPModel","OTPResendRequest","open","handleClose","VerifyOTP","OTPError","setOTPError","previousStep","setNewRequestID","id","otpresendCount","resendFlag","OTP","setOTP","otpContainerRef","btnshow","setbtnshow","resendotpLoading","setResendotpLoading","enqueueSnackbar","useSnackbar","Boolean","firstInput","querySelector","authType","defaultValue","otpSentText","username","charAt","toUpperCase","slice","description","ResendOTP","onResendClick","async","status","data","message","comapanyCD","branchCD","contactUser","otpValidFor","TRAN_CD","variant","renderButton","buttonProps","remainingTime","other","clsx","remainingtime","renderTime","parseInt","maxTime","OTPInput","OTPLength","otpType","otploading","secure","FormHelperText","gap","textColor","sx","opacity","transform","transition","starticon","length","OTPModelForm","handleCloseEvent","forgotOtpSentText","auth_type","company_ID","branch_cd","VerifyFinger","verifyFinger","Typography","isBiometricError","eFingerUi","fingerUi","FingerprintSharpIcon","borderBottom","FingerIcon","isScanning","_Fragment","biometric","userMessage","keyCode","decryptString","encryptedText","iv","keyIv","CryptoJS","PBKDF2","enc","Utf8","parse","keySize","iterations","hasher","algo","SHA1","lib","WordArray","create","words","getKeyAndIv","outerDecoded","Latin1","stringify","Base64","cipherParams","CipherParams","ciphertext","bytes","wordArray","sigBytes","u8","Uint8Array","i","wordArrayToUint8Array","AES","decrypt","mode","CBC","pad","Pkcs7","result","TextDecoder","decode","Error","isBase64","str","test","BankDetails","bannerDetails","loginImageURL","setLoginImageURL","urlObj","banner","bannerImg","blob","utilFunction","base64toBlob","URL","createObjectURL","item","xs","md","lg","alt","objectFit","objectPosition","src","bannerTitle","marginLeft","bannerNote","PasswordRotation","ResetPassword","accessToken","tokenType","validatePasswordFn","MessageBox","usePopupContext","oldpassword","confirmpassword","pwdReset","setPasswordReset","isLoading","isNewpwdLoading","isoldPwdError","oldpassworderror","isnewpwdError","newpassworderror","isconfirmnewpwdError","confirmnewpassworderror","handleBlur","validateStatus","validateData","USER_ID","PASSWORD","SCREEN_REF","O_STATUS","O_MESSAGE","paddingBottom","response","messageTitle","icon","inititalState","firstName","lastName","isError","OtpuserMessage","currentFlow","transactionID","access_token","token_type","reducer","state","action","isOTPError","payload","errorPassword","errorUsername","otpmodelclose","auth_data","totpReg","secretTocken","secretTockenQR","errorMessage","AuthControllerWrapper","logoUrl","logoTitle","loginFn","veirfyUsernameandPassword","verifyOTP","LanguageComponent","onOtpVerifyFailFn","dispath","useReducer","openpwdreset","setOpenPwdReset","failureCount","dashboardLogoURL","setDashboardLogoURL","otpResendRef","changeUserName","container","overflow","sm","direction","ml","Tooltip","describeChild","title","flag","responseType","BASE_COMP_CD","BASE_BRANCH_CD","CONTACT2","REQUEST_CD","DESCRIPTION","AUTH_TYPE","AUTH_DATA","OTP_VALID","OTP_SENT_TEXT","TOTP_REG","SECRET_TOCKEN","SECRET_TOCKEN_QR","STATUS","ALERT_MSG_LIST","err","OTPNumber","toString","newRequestID","fingerResponse","jsondata","JSON","Quality","TimeOut","rawResponse","fetch","method","headers","Accept","body","json","API.capture","ErrorCode","promise","rows","captureFinger","element","MFS100Request","GalleryTemplate","IMG_DATA","ProbTemplate","BioType","Status","errorCode","sr_cd","SR_CD","console","matchFinger","IsoTemplate","ErrorMessage","ForgotPasswordFields","onSubmit","navigate","loginPageEndpoint","validatePassword","workingState","mobileno","showConfirmPasswordTime","setShowConfirmPasswordTime","showConfirmPassword","replace","isMobileError","userMessageforMobileno","userMessageforPassword","passwordValidateloading","isConfirmPasswordError","userMessageforconfirmPassword","isApiError","apierrorMessage","requestCd","newPasswordMessage","confirmPasswordValidateloading","ForgotPasswordControllerWrapper","screenFlag","updatenewPassword","veirfyUsernameandMobileNo","verifyOTPForPWDReset","TotpEnbaledDisabled","setOpen","totp","setTotp","Enable","totpdata","verifyRequestData","validationData","isNaN","pwdverify","ValidatePassword","resdata","USER_NAME","MESSAGE","COMP_CD","BRANCH_CD","trim","heading_user_img","heading_user_img_border","BranchSelectionGridMetaData","gridConfig","dense","gridLabel","rowIdColumn","defaultColumnConfig","allowColumnReordering","disableSorting","hideHeader","disableGroupBy","enablePagination","containerHeight","min","max","occupiedHeight","allowFilter","allowColumnHiding","allowRowSelection","isCusrsorFocused","hideFooter","columns","accessor","columnName","sequence","alignment","componentType","dateFormat","actions","actionName","actionLabel","multiple","rowDoubleClick","actionTextColor","actionBackground","startsIcon","onEnterSubmit","endsIcon","LightTooltip","styled","props","popper","tooltipClasses","tooltip","backgroundColor","common","white","shadows","Greetings","userId","hours","getHours","BranchSelectionGrid","selectionMode","authState","isBranchSelectedFn","isLoggedInFn","logoutFn","logos","BranchSelectionGridDataApiFn","GetMenuDataApiFn","sideImage","branchSelectFn","dashboardUrl","loginUrl","appTranCd","enableEnterToFocus","isFetching","refetch","useQuery","queryClient","removeQueries","mutation","useMutation","onSuccess","extraData","menulistdata","branchCode","branch","BRANCH_NM","baseBranchCode","mutationError","setCurrentAction","useCallback","defFocusBtnName","mutate","GROUP_NAME","groupName","APP_TRAN_CD","COMP_NM","DAYEND_STATUS","EOD_RUNNING_STATUS","IS_UPD_DEF_BRANCH","user","isUpdDefBranch","COMP_BASE_BRANCH_CD","buttonNames","openBranchExists","b","renderError","Alert","severity","errorMsg","error_msg","errorDetail","error_detail","xl","visibility","profile","Stack","Box","roleName","placement","Avatar","bank","companyName","employeeID","GridWrapper","finalMetaData","setData","setAction","controlsAtBottom","actionContextAtBottom","disableMultipleRowSelect","defaultSelectedRowId","defaultSelectBranch","headerToolbarStyle","Button","right","bottom","BranchSelectionGridWrapper","ClearCacheProvider","appBar","transitions","easing","sharp","duration","leavingScreen","searchBar","searchList","top","maxHeight","overflowY","outline","appBarShift","paddingLeft","enteringScreen","heading_user_dtl","left","toolbar","flexGrow","searchRoot","fontFamily","typography","alpha","search","pointerEvents","inputRoot","inputInput","loggedInUser","nameClass","dropDown","vTop","verticalAlign","userDesignation","userprofilehover","version01","DrawerClose_icon","marquee","animation","animationDelay","popover","blinkHard","StyledAppBar","AppBar","LogoContainer","CompanyLogo","BankInfoContainer","BankInfoText","Search","shape","up","RightSection","GreetingText","AppbarWrapper","handleDrawerOpen","handleDrawerClose","SearchComponent","bankLogo","profilePic","handleLogout","handleProfile","hideGreetings","menuIconConfig","optionalComponents","idleTimer","above1300","useMediaQuery","countdownMessage","setCountdownMessage","blinker","setBlinker","CloseIconComponent","OpenIconComponent","menuIconPosition","interval","setInterval","getRemainingTime","remainingSeconds","Math","floor","prev","clearInterval","Toolbar","disableRipple","MenuOutlinedIcon","version","BecomePartnerImg","textOverflow","workingDate","checkDateAndDisplay","format","lastLogin","greet","map","component","Component","arrow","LogoutIcon","dateStr","drawerPaper","zIndex","drawerPaperClose","overflowX","toolbarIcon","mixins","hrCSS","buttonLink","reportMetaData","navBarCSS","headerDropdown","navLinkHeader","paddingRight","productLink","font13","loginDropdown","useStylesSideBar","root","drawer","fill","drawerIconSize","justifyItems","btnRoot","navLinks","navLinksforseparateView","nestedMenuLevel1","nestedMenuLevel2","listIcon","link","fontweight","linktext","faSmall","openList","openCurrent","slimList","activeMenuItem","localdrawerOpen","SideBarNav","metaData","drawerOpen","setView","slimSize","setNewFilterData","setNewFilterView","isFromSeparetView","rootUrl","handleListItemClick","handleClickAction","Array","isArray","navItems","one","seperateView","SeperateListView","level","NestedListItem","SingleListItem","List","disablePadding","ScrollBar","code","setCode","i18n","language","labelStart","substring","ListItemIcon","FontAwesomeIcon","levelClassName","ListItem","disableGutters","viewName","newChield","item1","secondaryLabel","user_code","MoreHorizIcon","ListItemText","isActiveMenu","isActiveMenuFromhref","window","location","pathname","navigationProps","titleText","document","isRouterLink","path","passNavigationPropsAsURLParmas","urlParms","URLSearchParams","rel","system_code","childrens","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","menuhref","log","matchByValue","tags","navItem","toLocaleLowerCase","filterMetaDataByValue","searchString","tagsToSearch","newNavItems","newItem","newChildren","push","SearchViewNavigation","setSearch","translatedMetaData","filteredMetaData","myIcon","ArrowBackIosNewIcon","SearchBar","searchLabel","config","library","add","faHandsHelping","faUsers","faBars","faBalanceScale","faHandHoldingHeart","faTasks","faCog","faHome","faTh","faUsersCog","faCircle","faUserCircle","faHashtag","faThumbtack","faSquare","faLink","faQuestion","faPlus","faTable","faLocationArrow","faHeadset","faGears","faArrowDown","faArrowUp","faSpinner","faCircleExclamation","faRotateRight","faUserLock","faUserClock","faGripHorizontal","faFileLines","faGear","faHeadphones","faUsersGear","faMessage","faUnlock","faUserPlus","faUserCheck","faKey","faIdCard","faIdBadge","faCheck","faCheckDouble","faCircleCheck","faCircleXmark","faUserTag","faAddressCard","faChartColumn","faUserPen","faHandHolding","faHandHoldingMedical","faObjectGroup","faTowerCell","faTowerObservation","faBuilding","faMailBulk","faLandmarkFlag","faCreditCard","faHospitalSymbol","faPlugCircleBolt","faCodeBranch","faPersonCircleCheck","faBank","faServer","faNotesMedical","faPenToSquare","faBarsProgress","faFileExport","faA","faB","faC","faD","faE","faF","faG","faH","faI","faJ","faK","faL","faM","faN","faO","faP","faQ","faR","faS","faT","faU","faV","faW","faX","faY","faZ","transformMetaDataAsPerRole","role","branches","company","access","products","newnavItem","filterMetaData","matchBranches","userBranches","accessBranches","indexOf","matchComany","userCompany","accessCompany","matchRoles","userRole","accessRoles","matchInvisibleRoles","matchProducts","userProducts","accessProducts","ishrefisNotNull","Number","visibleToRoles","visibleToCompanies","visibleToBranches","invisibleToRoles","visibleToProducts","SideBar","view","NewFilterView","NewFilterData","myBranches","entities","Branch","myProducts","categoryCode","newMetaData","filteredMetaDataSideBar","companyID","filteredReportsMetaData","SidebarWrapper","Drawer","paper","hideUpperSpace"],"mappings":"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ACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IC7LK,MAAMC,GAA6B,CACxCpL,EACAqL,EACAC,EACAC,EACAC,EACAC,KAEA,IASIC,EATWC,GACb3L,EAASY,SACTyK,EACAC,EACAC,EACAC,EACAC,GAGwBrO,IAAKzZ,IAC7B,IAAItM,SAAEA,KAAamtB,GAAY7gB,EAQ/B,OAPI+c,MAAMC,QAAQtpB,IAAaA,EAASuH,OAAS,IAC1C7C,QAAQyoB,EAAQ1D,gBACnB0D,EAAQ1D,cAAe,EACvB0D,EAAQvC,SAAW,kBAIhB,IAAKuC,EAASntB,SAAUA,KAEjC,MAAO,CACL8tB,OAAQnF,EAASmF,OACjBvE,SAAU8K,IA4BRE,GAAgB,CAACC,EAAcC,KACnC,IAAKpL,MAAMC,QAAQmL,KAAoBpL,MAAMC,QAAQkL,GACnD,OAAO,EAET,GAAIC,EAAeltB,QAAU,GAAKitB,EAAajtB,QAAU,EACvD,OAAO,EAET,IAAK,MAAMiiB,KAAOiL,EAChB,GAAID,EAAaE,QAAQlL,IAAQ,EAC/B,OAAO,EAGX,OAAO,GAGHmL,GAAc,CAACC,EAAaC,KAC3BxL,MAAMC,QAAQuL,KAAmBnwB,QAAQkwB,KAG1CC,EAActtB,QAAU,GAGxBstB,EAAcH,QAAQE,IAAgB,GAMtCE,GAAa,CAACC,EAAUC,KACvB3L,MAAMC,QAAQ0L,IAAoC,iBAAbD,IAGtCC,EAAYztB,QAAU,GAGtBytB,EAAYN,QAAQK,IAAa,GAMjCE,GAAsB,CAACF,EAAUC,KAChC3L,MAAMC,QAAQ0L,IAAoC,iBAAbD,IAGtCC,EAAYztB,QAAU,KAGtBytB,EAAYN,QAAQK,IAAa,IAMjCG,GAAgB,CAACC,EAAcC,KACnC,IAAK/L,MAAMC,QAAQ8L,KAAoB/L,MAAMC,QAAQ6L,GACnD,OAAO,EAET,GAAIC,EAAe7tB,QAAU,GAAK4tB,EAAa5tB,QAAU,EACvD,OAAO,EAGT,IAAK,MAAMiiB,KAAO4L,EAChB,GAAID,EAAaT,QAAQlL,IAAQ,EAC/B,OAAO,EAGX,OAAO,GAEH6L,GAAmB/oB,MAEnB+c,MAAMC,QAAQhd,EAAKtM,WAAasM,EAAKtM,SAASuH,OAAS,GACxD7C,QAAQ4H,EAAK1J,OAOZ0xB,GAAiB,CACrB/K,EACAyK,EACAC,EACAC,EACAC,EACAC,KAEA,IAAIlH,EAA6B,GACjC,IAAK,IAAIviB,EAAI,EAAGA,EAAI4e,EAAShiB,OAAQoD,IACnC,GACEmqB,GAAWQ,OAAOtB,GAAOzK,EAAS5e,GAAG4qB,iBACrCZ,GAAYT,EAAS3K,EAAS5e,GAAG6qB,qBACjCjB,GAAcN,EAAU1K,EAAS5e,GAAG8qB,oBACpCR,GAAoBK,OAAOtB,GAAOzK,EAAS5e,GAAG+qB,mBAC9CR,GAAcd,EAAU7K,EAAS5e,GAAGgrB,oBACpCN,GAAgB9L,EAAS5e,IACzB,CACA,IAAI3K,SAAEA,KAAamtB,GAAY5D,EAAS5e,GACxC,GAAI0e,MAAMC,QAAQtpB,IAAaA,EAASuH,OAAS,EAAG,CAClD,IAAI6lB,EAAckH,GAChBt0B,EACAg0B,EACAC,EACAC,EACAC,EACAC,GAEEhH,EAAY7lB,OAAS,GACvB2lB,EAAYG,KAAK,IAAKF,EAASntB,SAAUotB,GAE5C,MACCF,EAAYG,KAAK,IAAKF,EAASpC,eAAgBoC,EAAQlB,aAE1D,CAEH,OAAOiB,GCxKI0I,GAAU,EACrBva,YACAmI,mBACAjgB,OACA2lB,UACApN,eAAe,YACf1G,WACA+T,sBACAC,wBAEA,MAAOyM,EAAMhN,GAAWnrB,EAAS,MAC1Bo4B,EAAe9M,GAAoBtrB,EAAc,CAAA,IACjDq4B,EAAehN,GAAoBrrB,EAAS,IAE7Cu2B,EAAW93B,EAAQ,KACvB,IAAI65B,EAAa3a,GAAW8Y,QAAQ8B,UAAUC,QAAU,GACxD,OAAI7M,MAAMC,QAAQ0M,IAAeA,EAAWzuB,QAAU,EAC7CyuB,EAAWjQ,IAAKyD,GAAQA,EAAI5M,YAE5B,IAER,IAEGwX,EAAWj4B,EAAQ,KACvB,IAAIg6B,EAAa9a,GAAW8Y,QAAQC,UAAY,GAChD,OAAI/K,MAAMC,QAAQ6M,IAAeA,EAAW5uB,QAAU,EAC7C4uB,EAAWpQ,IAAKyD,GAAQA,EAAI4M,cAE5B,IAER,IACH,IAAIC,EAAc,CAAE9M,SAAUlO,EAAUsB,cACpC2Z,EAA0BvC,GAC5BsC,EACAf,OAAOja,EAAU2Y,MACjBC,EACA5Y,EAAUkb,UACVlb,EAAU8Y,OACVC,GAGEoC,EAA0BzC,GAC5B,CACEjG,OAAQ,CAAE9B,IAAK,GAAIltB,OAAQ,UAC3ByqB,SAAU1C,IAEZyO,OAAOja,EAAU2Y,MACjBC,EACA5Y,EAAUkb,UACVlb,EAAU8Y,OACVC,GAEF,MAAgB,WAATyB,EACL/1B,EAACwtB,GAAoB,CACnB3E,SAAU6N,EACVhT,iBAAkBA,EAClBoF,WAAYrlB,EACZslB,QAASA,EACTnoB,MAAM,UACNqO,KAAK,QACLma,QAASA,EACTpN,aAAcA,EACd1G,SAAUA,EACVgU,kBAAmBA,IAEV,kBAATyM,EACF/1B,EAACwtB,GAAoB,CACnB3E,SAAU,CACRmF,OAAQ,CAAE9B,IAAK,GAAIltB,OAAQ,UAC3ByqB,SAAUwM,GAEZvS,iBAAkBA,EAClBoF,WAAYrlB,EACZslB,QAASA,EACTnoB,MAAOo1B,GAAep1B,OAAS,UAC/BqO,KAAK,QACLpO,YAAam1B,GAAen1B,YAC5BuoB,QAASA,EACTpN,aAAcA,EACd1G,SAAUA,EACVgU,kBAAmBA,IAGrBtpB,EAAA0I,EAAA,CAAAxI,SACEF,EAAC4oB,IACCC,SAAU2N,EACV9S,iBAAkBA,EAClBoF,WAAYrlB,EACZslB,QAASA,EACTC,UAAU,EACVC,iBAAkBA,EAClBC,iBAAkBA,EAClBE,QAASA,EACTpN,aAAcA,EACd1G,SAAUA,EACViG,UAAWA,EACX8N,oBAAqBA,EACrBC,kBAAmBA,OCrFdqN,GAAiDlc,IAC5D,MAAMpd,EAAUrF,GAAU,CAAA,GAC1B,OACEoI,EAACw2B,EAAM,CACL1wB,QAAQ,YACRkB,GAAI,CACFvM,OAAQ,UAEVwC,QAAS,CACPw5B,MAAOtwB,EACLlJ,EAAQkpB,aACP9L,EAAMhX,MAAQpG,EAAQopB,mBAG3BhjB,KAAMgX,EAAMhX,KAAIvD,SAAA,CAEdua,EAAMqc,eAEJ,KADF92B,SAAKS,UAAWpD,EAAQspB,cAE1B3mB,EAAC81B,GAAO,IAAKrb"}
|