@acuteinfo/common-screens 1.0.86 → 1.0.88
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/index.js +1 -1
- package/dist/index.js.map +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/gridMetadata.ts","../src/pages/branchSelection/style.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 }, 1000);\r\n } else if (loginState.isPasswordError) {\r\n timeoutCd = setTimeout(() => {\r\n inputPassRef?.current?.focus?.();\r\n }, 1000);\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 ref={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() ) setBlurred(true);\r\n }}\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 ref={inputPassRef}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n if (!showPassword && input.password.trimStart()) \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 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(\"otp.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(\"otp.ResendOTP\")} {<CircularProgress size={20} color=\"secondary\" />} */}\r\n {t(\"otp.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(\"otp.ResendOTP\")} */}\r\n {t(\"otp.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(\"otp.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 } 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(\"otp.OtpExpired\")} {remainingtime} {t(\"otp.second\")}\r\n {/* {t(\"otp.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 }\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(\"otp.OTPAuthentication\")\r\n : loginState?.authType === \"TOTP\"\r\n ? t(\"otp.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 ? (loginState?.otpSentText ?? \"\")\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(\"otp.GenerateNewOTP\")}\r\n </div> */}\r\n\r\n <div className={classes.OTPalignName}>\r\n {t(\"otp.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 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(\"otp.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(\"otp.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 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(\"otp.ResendOTP\")} {<CircularProgress size={20} color=\"secondary\" />} */}\r\n {t(\"otp.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(\"otp.ResendOTP\")} */}\r\n {t(\"otp.GetNewOTP\")}\r\n </a>\r\n );\r\n };\r\n const ClickEventHandler = () => {\r\n if (!Boolean(OTP) || OTP.length < 6) {\r\n setOTPError(\"otp.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 } 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(\"otp.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 }\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(\"otp.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(\"otp.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 {loginState?.forgotOtpSentText ?? \"\"}\r\n </div>\r\n <div className={classes.OTPalignName}>\r\n {t(\"otp.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 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(\"otp.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(\"otp.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(\"Biometric.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(\"Biometric.Kindlyplaceyoufinger\")}\r\n </div>\r\n <br />\r\n <Typography variant=\"h5\" style={{ color: \"#000000\" }}>\r\n {t(\"otp.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(\"Biometric.Loading\")\r\n : loginState?.isScanning\r\n ? t(\"Biometric.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(\"otp.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(\"Biometric.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\";\r\n\r\nconst decryptString = (encryptString: string) => {\r\n var secretKey = \"SUPERACUTE@MKS\";\r\n var keyBytes = CryptoJS.PBKDF2(secretKey, \"Ivan Medvedev\", {\r\n keySize: 48 / 4,\r\n iterations: 1000,\r\n });\r\n console.log(keyBytes.toString());\r\n\r\n // take first 32 bytes as key (like in C# code)\r\n var key = new CryptoJS.lib.WordArray.init(keyBytes.words, 32);\r\n\r\n // // skip first 32 bytes and take next 16 bytes as IV\r\n var iv = new CryptoJS.lib.WordArray.init(keyBytes.words.splice(32 / 4), 16);\r\n\r\n // console.log(key.toString());\r\n //console.log(encryptString, CryptoJS.enc.Base64.parse(encryptString));\r\n\r\n var dec = CryptoJS.AES.decrypt(\r\n {\r\n ciphertext: CryptoJS.enc.Base64.parse(\r\n CryptoJS.enc.Base64.parse(encryptString).toString(CryptoJS.enc.Utf8),\r\n ),\r\n },\r\n key,\r\n {\r\n iv: iv,\r\n },\r\n );\r\n console.log(\"CryptoJS.AES.decrypt\", dec);\r\n return dec.toString(CryptoJS.enc.Utf8).split(String.fromCharCode(0)).join(\"\");\r\n return dec.toString();\r\n};\r\n\r\nexport const matchFinger = async (rows: any, captureFinger: string) => {\r\n var promise = new Promise((resolve, reject) => {\r\n //console.log(\"matchFinger\", rows, typeof rows);\r\n if (typeof rows === \"string\") {\r\n rows = JSON.parse(rows);\r\n }\r\n rows.forEach(async (element: any, i: number) => {\r\n try {\r\n var galleryTemplate = decryptString(element.IMG_DATA);\r\n var MFS100Request = {\r\n GalleryTemplate: galleryTemplate,\r\n ProbTemplate: captureFinger,\r\n BioType: \"Iso\",\r\n };\r\n var jsondata = JSON.stringify(MFS100Request);\r\n await fetch(\"http://localhost:8004/mfs100/verify\", {\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 .then((response: any) => response.json())\r\n .then((response: any) => {\r\n if (response?.ErrorCode === \"0\" && response[\"Status\"]) {\r\n resolve({\r\n status: true,\r\n errorCode: \"0\",\r\n errorMessage: \"\",\r\n isError: false,\r\n sr_cd: element.SR_CD,\r\n });\r\n return;\r\n }\r\n\r\n if (rows.length === i + 1) {\r\n resolve({\r\n status: false,\r\n errorCode: response.ErrorCode,\r\n errorMessage: response.ErrorMessage,\r\n isError: false,\r\n });\r\n return;\r\n }\r\n })\r\n .catch((reason) => {\r\n resolve({\r\n status: false,\r\n errorCode: \"999\",\r\n errorMessage: reason,\r\n isError: true,\r\n });\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n resolve({\r\n status: false,\r\n errorCode: \"999\",\r\n errorMessage: \"Something went wrong!\",\r\n isError: true,\r\n });\r\n }\r\n });\r\n });\r\n return promise;\r\n};\r\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\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: \"cover\",\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 {banner?.bannerTitle ?? \"\"}\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 {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 utilFunction,\r\n} from \"@acuteinfo/common-base\";\r\n\r\nimport {\r\n CircularProgress,\r\n Container,\r\n FormHelperText,\r\n Grid,\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 { 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 isError: false,\r\n errorMessage: \"\",\r\n isLoading: 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 let isError = false;\r\n let setPwdData = {\r\n isError: false,\r\n errorMessage: \"\",\r\n isLoading: 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 // Local validation\r\n if (!Boolean(input.oldpassword)) {\r\n setPwdData.isoldPwdError = true;\r\n setPwdData.oldpassworderror = \"Current Password is required.\";\r\n isError = true;\r\n }\r\n\r\n let pwdData = utilFunction.ValidatePassword(input.password);\r\n if (Boolean(pwdData)) {\r\n setPwdData.isnewpwdError = true;\r\n setPwdData.newpassworderror = pwdData;\r\n isError = true;\r\n }\r\n if (\r\n Boolean(input.oldpassword) &&\r\n Boolean(input.password) &&\r\n input.oldpassword === input.password\r\n ) {\r\n setPwdData.isnewpwdError = true;\r\n setPwdData.newpassworderror =\r\n \"The new password cannot be the same as the old password\";\r\n isError = true;\r\n }\r\n if (!Boolean(input.confirmpassword)) {\r\n setPwdData.isconfirmnewpwdError = true;\r\n setPwdData.confirmnewpassworderror = \"Confirm new password is required.\";\r\n isError = true;\r\n } else if (\r\n Boolean(input.password) &&\r\n input.password !== input.confirmpassword\r\n ) {\r\n setPwdData.isconfirmnewpwdError = true;\r\n setPwdData.confirmnewpassworderror =\r\n \"New Password and Confirm Password did not match\";\r\n isError = true;\r\n }\r\n if (isError) {\r\n setPasswordReset(setPwdData);\r\n return;\r\n }\r\n\r\n // API validation\r\n setPasswordReset((values) => ({ ...values, isLoading: 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 setPasswordReset((values) => ({ ...values, isLoading: false }));\r\n\r\n if (validateStatus === \"0\") {\r\n switch (validateData?.O_STATUS) {\r\n case \"999\":\r\n setPwdData.isnewpwdError = true;\r\n setPwdData.newpassworderror = validateData?.O_MESSAGE;\r\n setPasswordReset(setPwdData);\r\n return;\r\n case \"0\":\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 setPasswordReset((values) => ({ ...values, isLoading: true }));\r\n if (response.status === \"0\") {\r\n enqueueSnackbar(\"Password successfully changed.\", {\r\n variant: \"success\",\r\n });\r\n handleClose(\"0\");\r\n setPasswordReset((values) => ({ ...values, isLoading: false }));\r\n } else {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isError: true,\r\n errorMessage: response.message,\r\n }));\r\n }\r\n break;\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 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>Password Rotation</h3>\r\n </div>\r\n <div\r\n className=\"\"\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"18px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n width: \"360px\",\r\n }}\r\n >\r\n Please Verify OTP\r\n </div>\r\n <div className={classes.formWrap}>\r\n <TextField\r\n label={\"User ID\"}\r\n placeholder=\"Enter User ID\"\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={\"Current Password\"}\r\n placeholder=\"Enter Current Password\"\r\n fullWidth\r\n type={\"password\"}\r\n name=\"oldpassword\"\r\n value={input.oldpassword || \"\"}\r\n onChange={handleChange}\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={\"New Password\"}\r\n placeholder=\"Enter New Password\"\r\n fullWidth\r\n type={\"password\"}\r\n name=\"password\"\r\n value={input.password || \"\"}\r\n onChange={handleChange}\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}\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={\"Confirm New Password\"}\r\n placeholder=\"Enter confirm new password\"\r\n fullWidth\r\n type={\"password\"}\r\n name=\"confirmpassword\"\r\n value={input.confirmpassword || \"\"}\r\n onChange={handleChange}\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 {pwdReset.isError ? (\r\n <FormHelperText style={{ color: \"red\" }}>\r\n {pwdReset.errorMessage}\r\n </FormHelperText>\r\n ) : null}\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 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 \"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: { error: message, errorPassword: message },\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:\r\n fingerResponse?.ErrorMessage ?? t(\"Biometric.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(\"Biometric.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=\"Enter Mobile No.\"\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=\"Enter Password\"\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(\"Password successfully reset\", {\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(\"otp.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 {loginState?.newPasswordMessage ?? \"\"}\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 { GridMetaDataType } from \"@acuteinfo/common-base\";\nexport const BranchSelectionGridMetaData: GridMetaDataType = {\n gridConfig: {\n dense: true,\n gridLabel: \"Access Branch List\",\n rowIdColumn: \"BRANCH_CD\",\n // searchPlaceholder: \"Branches\",\n defaultColumnConfig: {\n width: 400,\n maxWidth: 450,\n minWidth: 300,\n },\n\n allowColumnReordering: false,\n disableSorting: false,\n hideHeader: false,\n disableGroupBy: true,\n enablePagination: false,\n containerHeight: {\n min: \"68vh\",\n max: \"68vh \",\n },\n allowFilter: false,\n allowColumnHiding: false,\n allowRowSelection: false,\n isCusrsorFocused: true,\n hideFooter: true,\n },\n columns: [\n {\n accessor: \"BRANCH_CD\",\n columnName: \"Branch Code\",\n sequence: 1,\n alignment: \"left\",\n componentType: \"default\",\n width: 200,\n minWidth: 140,\n maxWidth: 220,\n },\n {\n accessor: \"BRANCH_NM\",\n columnName: \"Branch Name\",\n sequence: 2,\n alignment: \"left\",\n componentType: \"default\",\n width: 280,\n minWidth: 280,\n maxWidth: 420,\n },\n {\n accessor: \"DISP_STATUS\",\n columnName: \"Status\",\n sequence: 3,\n alignment: \"left\",\n componentType: \"default\",\n width: 200,\n minWidth: 140,\n maxWidth: 220,\n },\n {\n accessor: \"BEGIN_DATETIME\",\n columnName: \"Begin Time\",\n sequence: 4,\n alignment: \"left\",\n componentType: \"date\",\n dateFormat: \"dd/MM/yyyy hh:mm a\",\n width: 222,\n minWidth: 140,\n maxWidth: 240,\n },\n {\n accessor: \"END_DATETIME\",\n columnName: \"End Time\",\n sequence: 5,\n alignment: \"left\",\n componentType: \"date\",\n dateFormat: \"dd/MM/yyyy hh:mm a\",\n width: 222,\n minWidth: 140,\n maxWidth: 240,\n },\n // {\n // accessor: \"DAYEND_STATUS\",\n // columnName: \"Dayend Status\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"EOD_RUNNING_STATUS\",\n // columnName: \"EOD Running Status\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"BASE_COMP_CD\",\n // columnName: \"Base Comp Cd\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"BASE_BRANCH_CD\",\n // columnName: \"Base Branch Cd\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"COMP_CD\",\n // columnName: \"Comp Cd\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"COMP_NM\",\n // columnName: \"Comp Name\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n ],\n};\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 {\n GridWrapper,\n ActionTypes,\n GridMetaDataType,\n ClearCacheProvider,\n Alert,\n queryClient,\n usePopupContext,\n} from \"@acuteinfo/common-base\";\n\nimport { Fragment, useCallback, useEffect } from \"react\";\nimport { BranchSelectionGridMetaData } from \"./gridMetadata\";\nimport \"./styles.css\";\nimport {\n Avatar,\n Box,\n Button,\n Grid,\n Stack,\n Tooltip,\n tooltipClasses,\n} from \"@mui/material\";\nimport { useMutation, useQuery } from \"react-query\";\nimport { NavigateFunction } from \"react-router-dom\";\nimport { useSnackbar } from \"notistack\";\nimport bank_logo_default from \"../../assets/images/BecomePartnerImg.svg\";\nimport Waving_hand from \"../../assets/images/waving-hand.png\";\n\nimport { useStyles } from \"./style\";\nimport { styled } from \"@mui/material/styles\";\nimport USER_PROFILE_DEFAULT from \"../../assets/images/profile-default.png\";\nimport { BranchSelectionGridDataFnType, GetMenuDataFnType } from \"pages/types\";\nconst actions: ActionTypes[] = [\n {\n actionName: \"back\",\n actionLabel: \"Back\",\n multiple: false,\n rowDoubleClick: false,\n actionTextColor: \"var(--theme-color3)\",\n actionBackground: \"var(--white)\",\n startsIcon: \"West\",\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\n },\n {\n actionName: \"proceed\",\n actionLabel: \"Proceed\",\n multiple: false,\n rowDoubleClick: true,\n actionTextColor: \"var(--white)\",\n actionBackground: \"var(--theme-color3)\",\n onEnterSubmit: true,\n endsIcon: \"East\",\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\n },\n];\n\ninterface BranchSelectionWrapperProps {\n selectionMode: \"S\" | \"C\";\n authState: any;\n isBranchSelectedFn: () => boolean;\n isLoggedInFn: () => boolean;\n logoutFn: () => void;\n branchSelectFn: Function;\n BranchSelectionGridDataApiFn: BranchSelectionGridDataFnType;\n GetMenuDataApiFn: GetMenuDataFnType;\n sideImage?: string;\n logos: any;\n logo?: string;\n navigate: NavigateFunction;\n dashboardUrl: string;\n loginUrl: string;\n appTranCd: string;\n}\n\nconst BranchSelectionGrid: React.FC<BranchSelectionWrapperProps> = ({\n selectionMode,\n authState,\n isBranchSelectedFn,\n isLoggedInFn,\n logoutFn,\n logos,\n logo,\n navigate,\n BranchSelectionGridDataApiFn,\n GetMenuDataApiFn,\n sideImage,\n branchSelectFn,\n dashboardUrl,\n loginUrl,\n appTranCd,\n}) => {\n const classes = useStyles();\n const { MessageBox } = usePopupContext();\n\n const { enqueueSnackbar } = useSnackbar();\n const { data, isLoading, isFetching, error, isError, refetch } = useQuery<\n any,\n any\n >([\"BranchSelectionGridData\"], () => BranchSelectionGridDataApiFn());\n\n useEffect(() => {\n refetch();\n return () => {\n queryClient.removeQueries([\"BranchSelectionGridData\", {}]);\n };\n }, []);\n\n useEffect(() => {\n if (!isLoggedInFn()) {\n navigate(loginUrl);\n } else if (isBranchSelectedFn() && selectionMode !== \"C\") {\n navigate(dashboardUrl);\n }\n }, [isBranchSelectedFn, isLoggedInFn]);\n\n type MutationErrorType = {\n severity: string;\n error_msg: string;\n error_detail: string;\n };\n\n const mutation: any = useMutation(GetMenuDataApiFn, {\n onSuccess: (data, extreData: any) => {\n branchSelectFn({\n menulistdata: data,\n branchCode: extreData?.BRANCH_CD,\n branch: extreData?.BRANCH_NM,\n baseBranchCode: extreData?.BASE_BRANCH_CD,\n });\n },\n });\n const getError: any = mutation.error as MutationErrorType;\n const setCurrentAction = useCallback(\n async (data) => {\n if (data.name === \"proceed\") {\n if (data.rows?.length === 0) {\n enqueueSnackbar(\"Please Select Branch\", {\n variant: \"error\",\n });\n } else if (data.rows?.[0]?.data?.STATUS === \"C\") {\n await MessageBox({\n message: \"BranchDayEndMessage\",\n messageTitle: \"BranchDayEndTitle\",\n icon: \"ERROR\",\n defFocusBtnName: \"Ok\",\n });\n } else {\n mutation.mutate({\n BASE_COMP_CD: data.rows?.[0]?.data?.BASE_COMP_CD ?? \"\",\n BASE_BRANCH_CD: data.rows?.[0]?.data?.BASE_BRANCH_CD ?? \"\",\n COMP_CD: data.rows?.[0]?.data?.COMP_CD ?? \"\",\n BRANCH_CD: data.rows?.[0]?.data?.BRANCH_CD ?? \"\",\n GROUP_NAME: authState?.groupName ?? \"\",\n APP_TRAN_CD: appTranCd,\n COMP_NM: data.rows?.[0]?.data?.COMP_NM ?? \"\",\n BRANCH_NM: data.rows?.[0]?.data?.BRANCH_NM ?? \"\",\n DAYEND_STATUS: data.rows?.[0]?.data?.DAYEND_STATUS ?? \"\",\n EOD_RUNNING_STATUS: data.rows?.[0]?.data?.EOD_RUNNING_STATUS ?? \"\",\n IS_UPD_DEF_BRANCH: authState?.user?.isUpdDefBranch ?? \"\",\n COMP_BASE_BRANCH_CD:\n data.rows?.[0]?.data?.COMP_BASE_BRANCH_CD ?? \"\",\n selectionMode: selectionMode,\n authState,\n });\n }\n } else if (data.name === \"back\") {\n const res = await MessageBox({\n messageTitle: \"confirmation\",\n message: \"AreYouSureToExit\",\n icon: \"CONFIRM\",\n buttonNames: [\"Yes\", \"No\"],\n defFocusBtnName: \"Yes\",\n });\n\n if (res === \"Yes\") {\n if (selectionMode === \"C\") {\n navigate(dashboardUrl, {\n replace: true,\n });\n } else {\n logoutFn();\n }\n }\n }\n },\n [navigate, data, mutation],\n );\n\n useEffect(() => {\n var oneBranchOpen = data?.some((branch) => branch.STATUS === \"O\");\n if (oneBranchOpen === false) {\n enqueueSnackbar(\n \"Branch is in Day End Status.~rPlease contact system Vendor.\",\n {\n variant: \"error\",\n },\n );\n logoutFn();\n }\n if (data?.length === 1) {\n if (data?.[0]?.STATUS === \"O\") {\n setCurrentAction({ name: \"proceed\", rows: [{ data: { ...data[0] } }] });\n }\n }\n }, [JSON.stringify(data)]);\n\n const Greetings = (userId) => {\n let hours = new Date().getHours();\n let greet;\n\n if (hours < 12) greet = \"morning\";\n else if (hours >= 12 && hours <= 16) greet = \"afternoon\";\n else if (hours >= 16 && hours <= 24) greet = \"evening\";\n\n return (\n <span>\n Good {greet} {userId},\n </span>\n );\n };\n\n const LightTooltip = styled(({ className, ...props }: any) => (\n <Tooltip {...props} classes={{ popper: className }} />\n ))(({ theme }) => ({\n [`& .${tooltipClasses.tooltip}`]: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 13,\n },\n }));\n\n // const greet = Greetings();\n\n return (\n <>\n <Grid\n container\n style={{\n margin: \"0\",\n padding: \"0\",\n height: \"100vh\",\n // overflowY: \"hidden\",\n }}\n >\n {sideImage ? (\n <Grid item lg={1} md={1} xl={1} xs={1} sm={1}>\n <img className=\"sideImage\" src={sideImage} alt=\"side-Image\" />\n </Grid>\n ) : null}\n\n <Grid\n item\n lg={11}\n md={11}\n xl={11}\n xs={11}\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n <Grid\n container\n style={{\n minHeight: \"100vh\",\n padding: \"10px 0px 0px 0px\",\n }}\n lg={11}\n md={11}\n xl={11}\n xs={11}\n >\n <Grid\n container\n style={{\n margin: \"0\",\n padding: \"0\",\n // height: \"12vh\",\n }}\n lg={12}\n md={12}\n xl={12}\n xs={12}\n >\n <Grid\n xs={12}\n sm={1}\n md={1}\n lg={1}\n xl={1}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n visibility: Boolean(logos?.profile) ? \"visible\" : \"hidden\",\n // justifyContent: \"center\",\n }}\n >\n <Stack direction=\"row\" spacing={4} ml={1}>\n <Box\n className={classes.heading_user_img_border}\n sx={{ cursor: \"pointer\" }}\n >\n <LightTooltip\n title={\n <>\n <div>User ID : {authState?.user?.id ?? \"\"}</div>\n <div>Role : {authState?.roleName ?? \"\"}</div>\n <div>Last Unsuccessful Login : \"\"</div>\n </>\n }\n placement=\"bottom-start\"\n >\n <Avatar\n className={classes.heading_user_img}\n // onClick={handleNavigate}\n alt=\"Remy Sharp\"\n src={logos?.profile ?? \"\"}\n />\n </LightTooltip>\n </Box>\n </Stack>\n </Grid>\n <Grid\n xs={12}\n sm={5}\n md={5}\n lg={5}\n xl={5}\n sx={{\n justifyContent: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <h1\n className=\"name-heading\"\n style={{ fontSize: \"24px\", margin: \"4px 0px\" }}\n >\n Welcome <span>{`${authState?.user?.name ?? \"\"},`}</span>\n </h1>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <h3 style={{ margin: \"4px 0px\" }}>\n {Greetings(authState?.user?.id ?? \"\")}\n </h3>\n <img src={Waving_hand} alt=\"\" style={{ height: \"18px\" }} />\n </div>\n </Grid>\n <Grid\n xs={12}\n sm={1}\n md={1}\n lg={1}\n xl={1}\n sx={{\n display: \"flex\",\n // flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n visibility: Boolean(logos?.bank) ? \"visible\" : \"hidden\",\n }}\n >\n <Stack direction=\"row\" justifyContent=\"flex-start\" spacing={2}>\n <Box className={classes.heading_user_img_border}>\n <Avatar\n className={classes.heading_user_img}\n alt=\"Remy Sharp\"\n src={logos?.bank ?? \"\"}\n />\n </Box>\n </Stack>\n </Grid>\n <Grid\n xs={12}\n sm={3}\n md={3}\n lg={3}\n xl={3}\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n }}\n >\n <div\n className=\"bank-name-container\"\n style={{ fontSize: \"14px\" }}\n >\n <p className=\"bank-name\">\n {`Bank Name: ${authState?.companyName ?? \"\"}`}\n </p>\n </div>\n\n <p className=\"emp-id\">\n {`Emp. Id: ${authState?.user?.employeeID ?? \"\"}`}\n </p>\n </Grid>\n <Grid\n xs={12}\n sm={3}\n md={3}\n lg={2}\n xl={2}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"right\",\n visibility: Boolean(logo) ? \"visible\" : \"hidden\",\n }}\n >\n {\" \"}\n <div>\n <img\n src={logo ?? \"\"}\n alt=\"bank_logo\"\n className={classes.logo}\n />\n </div>\n </Grid>\n </Grid>\n\n {isError ? (\n <Fragment>\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\n <Alert\n severity={error?.severity ?? \"error\"}\n errorMsg={error?.error_msg ?? \"Error\"}\n errorDetail={error?.error_detail ?? \"\"}\n />\n </div>\n </Fragment>\n ) : mutation.isError && mutation.error ? (\n <Fragment>\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\n <Alert\n severity={getError.severity ?? \"error\"}\n errorMsg={getError.error_msg ?? \"Error\"}\n errorDetail={getError.error_detail ?? \"\"}\n />\n </div>\n </Fragment>\n ) : null}\n <GridWrapper\n key={`branchSelection`}\n finalMetaData={BranchSelectionGridMetaData as GridMetaDataType}\n data={data ?? []}\n setData={() => null}\n actions={actions}\n setAction={setCurrentAction}\n controlsAtBottom={true}\n actionContextAtBottom={true}\n headerToolbarStyle={{\n background: \"#fff !important\",\n padding: \"0\",\n \"& .MuiTypography-root\": {\n color: \"black\",\n },\n }}\n disableMultipleRowSelect={true}\n variant=\"outlined\"\n loading={isLoading || isFetching || mutation.isLoading}\n defaultSelectedRowId={authState?.user?.branchCode ?? null}\n />\n {isError || data?.length === 0 ? (\n <Button\n sx={{\n backgroundColor: \"var(--theme-color3)\",\n position: \"absolute\",\n right: \"113px\",\n bottom: \"20px\",\n width: \"7rem\",\n \"&:hover\": {\n backgroundColor: \"var(--theme-color3)\",\n },\n }}\n onClick={async () => {\n const res = await MessageBox({\n messageTitle: \"confirmation\",\n message: \"AreYouSureToExit\",\n icon: \"CONFIRM\",\n buttonNames: [\"Yes\", \"No\"],\n defFocusBtnName: \"Yes\",\n });\n if (res === \"Yes\") {\n if (selectionMode === \"C\") {\n navigate(dashboardUrl, {\n replace: true,\n });\n } else {\n logoutFn();\n }\n }\n }}\n >\n Back\n </Button>\n ) : null}\n </Grid>\n </Grid>\n </Grid>\n </>\n );\n};\n\nexport const BranchSelectionGridWrapper: React.FC<\n BranchSelectionWrapperProps\n> = (props) => {\n return (\n <ClearCacheProvider>\n <BranchSelectionGrid {...props} />\n </ClearCacheProvider>\n );\n};\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: \"80px\",\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 minHeight: \"80px\",\r\n paddingLeft: \"0px\",\r\n height: \"80px\",\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 { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { useStyles } from \"./style\";\r\nimport Waving_hand from \"../../assets/images/waving-hand.png\";\r\nimport BecomePartnerImg from \"../../assets/images/BecomePartnerImg.svg\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport LogoutIcon from \"@mui/icons-material/Logout\";\r\nimport MenuOutlinedIcon from \"@mui/icons-material/MenuOutlined\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport {\r\n AppBar,\r\n Avatar,\r\n Box,\r\n Stack,\r\n Toolbar,\r\n Tooltip,\r\n Typography,\r\n tooltipClasses,\r\n} from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { format } from \"date-fns\";\r\nimport { useEffect, useState } from \"react\";\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\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 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 `Your session will time out in ${remainingSeconds} seconds`,\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 <AppBar\r\n position=\"fixed\"\r\n elevation={0}\r\n className={clsx(classes.appBar, open && classes.appBarShift)}\r\n >\r\n <Toolbar className={classes.toolbar}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"space-evenly\",\r\n alignItems: \"center\",\r\n height: \"80px\",\r\n width: Boolean(bankLogo) ? \"227px\" : \"40px\",\r\n flexDirection: menuIconPosition === \"right\" ? \"row-reverse\" : \"row\",\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\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 </Box>\r\n <Stack direction=\"row\" spacing={4} mx={2}>\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 <Typography\r\n component=\"h1\"\r\n variant=\"h6\"\r\n color=\"inherit\"\r\n noWrap\r\n className={classes.title}\r\n >\r\n <Box\r\n style={{\r\n marginBottom: \"8px\",\r\n fontSize: \"17px\",\r\n color: \"var(--theme-color1)\",\r\n width: \"555px\",\r\n }}\r\n className={clsx({\r\n [classes.marquee]: authState?.companyName.length > 55,\r\n })}\r\n >\r\n {authState?.companyName || \"\"}\r\n </Box>\r\n <div style={{ display: \"flex\", gap: \"8px\" }}>\r\n <div style={{ color: \"var(--theme-color6)\" }}>\r\n <Typography\r\n variant=\"caption\"\r\n display=\"block\"\r\n lineHeight={0}\r\n fontSize={\"11px\"}\r\n >\r\n {t(\"appBar.Branch\")}:{authState?.user?.branchCode ?? \"001 \"}-\r\n {authState?.user?.branch ?? \"\"}\r\n </Typography>\r\n <Typography variant=\"caption\" display=\"inline\" fontSize={\"11px\"}>\r\n {t(\"appBar.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 </Typography>\r\n <Typography\r\n marginLeft={1}\r\n variant=\"caption\"\r\n display=\"inline\"\r\n fontSize={\"11px\"}\r\n >\r\n {t(\"appBar.LastLoginDate\")} :{\" \"}\r\n {checkDateAndDisplay(authState?.user?.lastLogin ?? \"Vastrapur\")}\r\n </Typography>\r\n </div>\r\n </div>\r\n </Typography>\r\n <Box>\r\n {!hideGreetings ? (\r\n <Box sx={{ marginBottom: \"3px\", paddingRight: \"15px\" }}>\r\n <Stack\r\n direction=\"row\"\r\n spacing={2}\r\n justifyContent={\"flex-end\"}\r\n alignItems={\"center\"}\r\n >\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 <Typography fontSize={\"17px\"} color={\"#1C1C1C\"}>\r\n {Greetings()} {authState?.user?.id ?? \"\"}\r\n </Typography>\r\n <img src={Waving_hand} alt=\"\" style={{ height: \"18px\" }} />\r\n </Stack>\r\n </Box>\r\n ) : null}\r\n <Box\r\n display={\"flex\"}\r\n justifyContent={\"space-evenly\"}\r\n alignItems={\"center\"}\r\n >\r\n {SearchComponent ? <SearchComponent /> : null}\r\n {LanguageComponent ? <LanguageComponent /> : null}\r\n\r\n <Box\r\n maxWidth={170}\r\n display={\"flex\"}\r\n justifyContent={\"space-between\"}\r\n gap={\"0.8rem\"}\r\n padding={\"0 0.5rem\"}\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 <Tooltip title=\"Logout\" placement=\"bottom\" arrow>\r\n <IconButton\r\n onClick={() =>\r\n typeof handleLogout === \"function\" ? handleLogout() : null\r\n }\r\n color=\"error\"\r\n sx={{\r\n backgroundColor: \"rgba(235, 237, 238, 0.45)\",\r\n\r\n borderRadius: \"10px\",\r\n height: \"30px\",\r\n width: \"30px\",\r\n \"&:hover\": {\r\n background: \"var(--white)\",\r\n borderRadius: \"10px\",\r\n transition: \"all 0.2s ease 0s\",\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 \"& .MuiSvgIcon-root\": {\r\n height: \"32px\",\r\n width: \"32px\",\r\n transition: \"all 0.2s ease 0s\",\r\n padding: \"4px\",\r\n },\r\n },\r\n }}\r\n aria-label=\"logout\"\r\n >\r\n <LogoutIcon />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n </Box>\r\n </Box>\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 {\" \"}\r\n {t(\"appBar.UserID\")}: {authState?.user?.id}\r\n </div>\r\n <div>\r\n {t(\"appBar.Role\")} : {authState?.roleName}\r\n </div>\r\n <div>{t(\"appBar.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\" ? handleProfile() : 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 </Toolbar>\r\n </AppBar>\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: \"80px\",\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 },\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 } from \"react\";\nimport { useState } from \"react\";\nimport { NavigateFunction } from \"react-router-dom\";\nimport clsx from \"clsx\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { NavItemType, SideBarRendererType } from \"./types\";\nimport { useStylesSideBar } from \"./style\";\nimport ScrollBar from \"react-perfect-scrollbar\";\nimport {\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Tooltip,\n} from \"@mui/material\";\nimport { ExpandLess, ExpandMore } from \"@mui/icons-material\";\nimport { usePopupContext } from \"@acuteinfo/common-base\";\nlet localdrawerOpen = true;\n\ninterface SideBarNavProps extends SideBarRendererType {\n rootUrl: string;\n dashboardUrl?: string;\n navigate: NavigateFunction;\n authState?: any;\n}\n\nexport const SideBarNav: FC<SideBarNavProps> = ({\n metaData,\n handleDrawerOpen,\n drawerOpen,\n setView,\n slimSize,\n setNewFilterData,\n setNewFilterView,\n isFromSeparetView = false,\n rootUrl,\n dashboardUrl,\n navigate,\n authState,\n}) => {\n const { MessageBox } = usePopupContext();\n const classes = useStylesSideBar();\n let result: JSX.Element[] | null = null;\n localdrawerOpen = drawerOpen;\n if (Array.isArray(metaData.navItems)) {\n result = metaData.navItems.map((one) => {\n if (one?.seperateView === true) {\n return (\n <SeperateListView\n key={one.label}\n item={one}\n setView={setView}\n classes={classes}\n level={0}\n slimSize={slimSize}\n setNewFilterData={setNewFilterData}\n setNewFilterView={setNewFilterView}\n />\n );\n } else if (Array.isArray(one.children)) {\n return (\n <NestedListItem\n key={one.label}\n item={one}\n classes={classes}\n level={0}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={drawerOpen}\n slimSize={slimSize}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n MessageBox={MessageBox}\n authState={authState}\n />\n );\n } else {\n return (\n <SingleListItem\n key={one.label}\n item={one}\n classes={classes}\n level={0}\n slimSize={slimSize}\n drawerOpen={drawerOpen}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n MessageBox={MessageBox}\n authState={authState}\n />\n );\n }\n });\n }\n return (\n <List\n component=\"nav\"\n disablePadding\n className={\n isFromSeparetView ? classes.navLinksforseparateView : classes.navLinks\n }\n >\n <ScrollBar>{result}</ScrollBar>\n </List>\n );\n};\n\nconst SeperateListView: FC<{\n item: NavItemType;\n setView: any;\n classes: ReturnType<typeof useStylesSideBar>;\n level: number;\n slimSize?: boolean;\n setNewFilterData?: any;\n setNewFilterView?: any;\n}> = ({\n item,\n setView,\n level,\n classes,\n slimSize,\n setNewFilterData,\n setNewFilterView,\n}) => {\n let labelStart: any =\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\n // const icon = item.icon ? (\n // <ListItemIcon className={classes.listIcon}>\n // <FontAwesomeIcon icon={[\"fas\", labelStart]} />\n // </ListItemIcon>\n // ) : null;\n\n const icon =\n item.icon?.toLowerCase() !== \"process.gif\" && item.icon ? (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\n </ListItemIcon>\n ) : (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\n </ListItemIcon>\n );\n\n const levelClassName =\n level === 1\n ? classes.nestedMenuLevel1\n : level === 2\n ? classes.nestedMenuLevel2\n : \"\";\n\n return (\n <ListItem\n button\n disableGutters\n className={clsx({\n [classes.item]: true,\n [levelClassName]: Boolean(levelClassName),\n [classes.slimList]: Boolean(slimSize),\n [classes.drawerIconSize]: !localdrawerOpen,\n })}\n onClick={() => {\n if (item.viewName === \"newfilterview\" && Array.isArray(item.children)) {\n setNewFilterView({\n label: item.label,\n placeholder: \"Search \" + item.label + \" Screen...\",\n });\n let newChield = item.children.map((item1) => {\n return { ...item1, secondaryLabel: item1.user_code };\n });\n setNewFilterData(newChield);\n }\n setView(item.viewName);\n }}\n >\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <span>{icon}</span>\n </Tooltip>\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText>\n </Tooltip>\n ) : localdrawerOpen ? (\n <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText>\n ) : null}\n </ListItem>\n );\n};\n\nconst SingleListItem: FC<{\n item: NavItemType;\n classes: ReturnType<typeof useStylesSideBar>;\n level: number;\n slimSize?: boolean;\n drawerOpen?: any;\n rootUrl: string;\n dashboardUrl?: string;\n navigate: NavigateFunction;\n MessageBox?: any;\n authState?: any;\n}> = ({\n item,\n classes,\n level,\n slimSize,\n drawerOpen,\n rootUrl,\n dashboardUrl,\n navigate,\n MessageBox,\n authState,\n}) => {\n const isActiveMenu = isActiveMenuFromhref(\n window.location?.pathname ?? \"\",\n item?.href ?? \"\",\n item?.navigationProps,\n rootUrl,\n dashboardUrl,\n );\n if (isActiveMenu) {\n // GeneralAPI.setDocumentName(item.label);\n let titleText = document.title;\n document.title = titleText.split(\" - \")[0] + \" - \" + item.label;\n }\n let labelStart: any =\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\n\n const icon =\n item.icon.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\n </ListItemIcon>\n ) : (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\n </ListItemIcon>\n );\n const levelClassName =\n level === 1\n ? classes.nestedMenuLevel1\n : level === 2\n ? classes.nestedMenuLevel2\n : \"\";\n return (\n <ListItem\n button\n // disabled ={item?.allow_open !== \"Y\"}\n disableGutters\n className={clsx({\n [classes.item]: true,\n [levelClassName]: Boolean(levelClassName),\n [classes.slimList]: Boolean(slimSize),\n [classes.activeMenuItem]: isActiveMenu,\n [classes.drawerIconSize]: !localdrawerOpen,\n })}\n onClick={async (e) => {\n e.preventDefault();\n if (item?.allow_open && item?.allow_open !== \"Y\") {\n if (MessageBox) {\n await MessageBox({\n messageTitle: \"You are not authorized.\",\n message: `${item?.label} Screen is Restricted for ${authState?.role} user level.`,\n icon: \"ERROR\",\n });\n } else {\n console.error(\"MessageBox is not defined.\");\n }\n } else {\n if (item.isRouterLink) {\n let path = item.href;\n path =\n item.href?.substring(0, 1) === \"/\"\n ? item.href.substring(1)\n : item.href;\n if (item.passNavigationPropsAsURLParmas) {\n let urlParms = new URLSearchParams(item?.navigationProps);\n navigate(`${path}?${urlParms.toString()}`);\n } else {\n navigate(`${path}` as string, {\n state: { ...item?.navigationProps },\n });\n }\n } else if (Boolean(item.href)) {\n window.open(item.href, item.rel ?? \"_newtab\");\n }\n }\n }}\n >\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <span>{icon}</span>\n </Tooltip>\n {/* {console.log(localdrawerOpen, item.label.length)} */}\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText>\n </Tooltip>\n ) : localdrawerOpen ? (\n <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText>\n ) : null}\n {/* <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText> */}\n </ListItem>\n );\n};\n\nconst NestedListItem: FC<{\n item: NavItemType;\n classes: ReturnType<typeof useStylesSideBar>;\n level: number;\n handleDrawerOpen: Function;\n drawerOpen: boolean;\n slimSize?: boolean;\n rootUrl: string;\n dashboardUrl?: string;\n navigate: NavigateFunction;\n MessageBox?: any;\n authState?: any;\n}> = ({\n item,\n classes,\n level,\n handleDrawerOpen,\n drawerOpen,\n slimSize,\n rootUrl,\n navigate,\n MessageBox,\n authState,\n}) => {\n const [open, setOpen] = useState(false);\n const handleClick = () => {\n if (!drawerOpen) {\n // handleDrawerOpen();\n }\n setOpen(!open);\n };\n const childrens = item.children?.map((one) => {\n if (Array.isArray(one.children)) {\n return (\n <NestedListItem\n key={one.label}\n item={one}\n classes={classes}\n level={level + 1}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={drawerOpen}\n slimSize={slimSize}\n rootUrl={rootUrl}\n navigate={navigate}\n />\n );\n } else {\n return (\n <SingleListItem\n key={one.label}\n item={one}\n classes={classes}\n level={level + 1}\n slimSize={slimSize}\n rootUrl={rootUrl}\n navigate={navigate}\n MessageBox={MessageBox}\n authState={authState}\n />\n );\n }\n });\n let labelStart: any =\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\n\n const icon =\n item.icon?.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\n </ListItemIcon>\n ) : (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\n </ListItemIcon>\n );\n\n const levelClassName =\n level === 1\n ? classes.nestedMenuLevel1\n : level === 2\n ? classes.nestedMenuLevel2\n : \"\";\n return (\n <>\n <ListItem\n button\n onClick={handleClick}\n disableGutters\n className={\n open\n ? clsx({\n [classes.item]: true,\n [levelClassName]: Boolean(levelClassName),\n [classes.slimList]: Boolean(slimSize),\n [classes.openCurrent]: true,\n [classes.drawerIconSize]: !localdrawerOpen,\n })\n : clsx({\n [classes.item]: true,\n [levelClassName]: Boolean(levelClassName),\n [classes.slimList]: Boolean(slimSize),\n [classes.drawerIconSize]: !localdrawerOpen,\n })\n }\n >\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <span>{icon}</span>\n </Tooltip>\n {/* {icon} */}\n {drawerOpen || !Boolean(icon) ? (\n <>\n <ListItemText\n primary={item.label}\n secondary={item.secondaryLabel ?? null}\n color=\"primary\"\n className={classes.link}\n ></ListItemText>\n {open ? <ExpandLess /> : <ExpandMore />}\n </>\n ) : null}\n </ListItem>\n\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List\n component=\"div\"\n disablePadding\n className={open ? classes.openList : \"\"}\n >\n {childrens}\n </List>\n </Collapse>\n </>\n );\n};\nconst isActiveMenuFromhref = (\n location,\n menuhref,\n navigationProps,\n rootUrl,\n dashboardUrl,\n) => {\n if (\n (location === `/${rootUrl}` || location === `/${rootUrl}/`) &&\n menuhref === dashboardUrl\n ) {\n return true;\n } else if (menuhref === \"report\") {\n try {\n let urlParms = new URLSearchParams(navigationProps);\n if (\"?\" + urlParms.toString() === window.location.search) {\n return true;\n }\n } catch (error) {\n console.log(error);\n }\n return false;\n } else if (\n location !== `/${rootUrl}` &&\n location !== \"/\" &&\n Boolean(menuhref) &&\n location.includes(menuhref)\n ) {\n return true;\n }\n return false;\n};\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, useMemo, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { SearchBar } from \"@acuteinfo/common-base\";\nimport ArrowBackIosNewIcon from \"@mui/icons-material/ArrowBackIosNew\";\nimport { useStylesSideBar } from \"./style\";\nimport { filterMetaDataByValue } from \"./filterMetaData\";\nimport { SideBarNav } from \"./sideBarNavigation\";\nimport { SideBarRendererType } from \"./types\";\nimport { ListItem, ListItemIcon, ListItemText } from \"@mui/material\";\nimport { NavigateFunction } from \"react-router-dom\";\n\ninterface NewSideBarNav extends SideBarRendererType {\n label: string;\n icon?: any;\n placeholder?: any;\n rootUrl: string;\n dashboardUrl?: string;\n navigate: NavigateFunction;\n MessageBox?: any;\n}\n\nexport const SearchViewNavigation: FC<NewSideBarNav> = ({\n metaData,\n handleDrawerOpen,\n drawerOpen,\n setView,\n label,\n icon,\n placeholder = \"Search Reports...\",\n rootUrl,\n dashboardUrl,\n navigate,\n MessageBox,\n}) => {\n const [search, setSearch] = useState(\"\");\n const filteredMetaData = useMemo(() => {\n return filterMetaDataByValue(search, metaData.navItems, [\n \"label\",\n \"secondaryLabel\",\n ]);\n }, [search, metaData.navItems]);\n const classes = useStylesSideBar();\n\n const myIcon = icon ? (\n <ListItemIcon className={classes.listIcon}>\n <ArrowBackIosNewIcon />\n </ListItemIcon>\n ) : null;\n const handleClick = () => {\n if (!drawerOpen) {\n handleDrawerOpen();\n }\n };\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <ListItem\n button\n className={clsx({\n [classes.item]: true,\n [classes.nestedMenuLevel1]: true,\n [classes.linktext]: true,\n })}\n onClick={() => setView(\"/\")}\n sx={{ width: !drawerOpen ? \"80% !important\" : \"auto\" }}\n >\n {myIcon}\n <ListItemText primary={label} className={classes.link} />\n </ListItem>\n {/* <div onClick={handleDrawerOpen}> */}\n <SearchBar\n sx={{ overflow: \"hidden\" }}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onClick={handleClick}\n placeholder={Boolean(placeholder) ? placeholder : \"Search Reports...\"}\n autoFocus={drawerOpen}\n />\n {/* </div> */}\n <SideBarNav\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={drawerOpen}\n setView={setView}\n metaData={{\n navItems: filteredMetaData,\n config: { rel: \"\", target: \"_blank\" },\n }}\n slimSize={true}\n isFromSeparetView={true}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n MessageBox={MessageBox}\n />\n </div>\n );\n};\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\";\nimport { reportMetaData } from \"./reportMetaData\";\nimport { SideBarNav } from \"./navigation\";\nimport { SearchViewNavigation } from \"./navigation/searchViewNavigation\";\nimport \"./icons\";\nimport { transformMetaDataAsPerRole } from \"./transformer\";\n\n/* eslint-disable react-hooks/exhaustive-deps */\nexport const SideBar = ({\n authState,\n handleDrawerOpen,\n open,\n rootUrl,\n dashboardUrl = \"dashboard\",\n navigate,\n}) => {\n const [view, setView] = useState(\"/\");\n const [NewFilterView, setNewFilterView] = useState<any>({});\n const [NewFilterData, setNewFilterData] = useState([]);\n\n const branches = useMemo(() => {\n let myBranches = authState?.access?.entities?.Branch ?? [];\n if (Array.isArray(myBranches) && myBranches.length >= 0) {\n return myBranches.map((one) => one.branchCode);\n } else {\n return [];\n }\n }, []);\n\n const products = useMemo(() => {\n let myProducts = authState?.access?.products ?? [];\n if (Array.isArray(myProducts) && myProducts.length >= 0) {\n return myProducts.map((one) => one.categoryCode);\n } else {\n return [];\n }\n }, []);\n let newMetaData = { navItems: authState.menulistdata };\n let filteredMetaDataSideBar = transformMetaDataAsPerRole(\n newMetaData,\n Number(authState.role),\n branches,\n authState.companyID,\n authState.access,\n products,\n );\n\n let filteredReportsMetaData = transformMetaDataAsPerRole(\n {\n config: { rel: \"\", target: \"_blank\" },\n navItems: reportMetaData,\n },\n Number(authState.role),\n branches,\n authState.companyID,\n authState.access,\n products,\n );\n return view === \"report\" ? (\n <SearchViewNavigation\n metaData={filteredReportsMetaData}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={open}\n setView={setView}\n label=\"Reports\"\n icon=\"table\"\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n />\n ) : view === \"newfilterview\" ? (\n <SearchViewNavigation\n metaData={{\n config: { rel: \"\", target: \"_blank\" },\n navItems: NewFilterData,\n }}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={open}\n setView={setView}\n label={NewFilterView?.label ?? \"Reports\"}\n icon=\"table\"\n placeholder={NewFilterView?.placeholder}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n />\n ) : (\n <>\n <SideBarNav\n metaData={filteredMetaDataSideBar}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={open}\n setView={setView}\n slimSize={true}\n setNewFilterData={setNewFilterData}\n setNewFilterView={setNewFilterView}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n authState={authState}\n />\n </>\n );\n};\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}\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 <div className={classes.toolbarIcon}></div>\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","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","ref","onKeyDown","e","key","click","inputProps","maxLength","repeat","onBlur","userMessageforpassword","InputProps","endAdornment","InputAdornment","position","IconButton","onClick","onMouseDown","preventDefault","Visibility","VisibilityOff","flex","textAlign","href","GradientButton","toLowerCase","endicon","undefined","rotateIcon","CircularProgress","size","thickness","OTPModel","OTPResendRequest","open","handleClose","VerifyOTP","OTPError","setOTPError","previousStep","setNewRequestID","id","otpresendCount","resendFlag","OTP","setOTP","btnshow","setbtnshow","resendotpLoading","setResendotpLoading","enqueueSnackbar","useSnackbar","Boolean","authType","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","matchFinger","rows","captureFinger","Promise","resolve","reject","JSON","parse","forEach","element","i","MFS100Request","GalleryTemplate","encryptString","keyBytes","CryptoJS","PBKDF2","keySize","iterations","console","log","toString","lib","WordArray","init","words","iv","splice","dec","AES","decrypt","ciphertext","enc","Base64","Utf8","fromCharCode","join","decryptString","IMG_DATA","ProbTemplate","BioType","jsondata","stringify","fetch","method","headers","Accept","body","then","response","json","ErrorCode","errorCode","errorMessage","isError","sr_cd","SR_CD","ErrorMessage","catch","reason","err","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","oldpassword","confirmpassword","pwdReset","setPasswordReset","isLoading","isoldPwdError","oldpassworderror","isnewpwdError","newpassworderror","isconfirmnewpwdError","confirmnewpassworderror","paddingBottom","setPwdData","pwdData","ValidatePassword","validateStatus","validateData","USER_ID","PASSWORD","SCREEN_REF","O_STATUS","O_MESSAGE","inititalState","firstName","lastName","OtpuserMessage","currentFlow","transactionID","access_token","token_type","reducer","state","action","isOTPError","payload","errorPassword","errorUsername","otpmodelclose","auth_data","totpReg","secretTocken","secretTockenQR","AuthControllerWrapper","logoUrl","logoTitle","loginFn","veirfyUsernameandPassword","verifyOTP","LanguageComponent","onOtpVerifyFailFn","dispath","useReducer","openpwdreset","setOpenPwdReset","failureCount","dashboardLogoURL","setDashboardLogoURL","otpResendRef","MessageBox","usePopupContext","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","messageTitle","Error","OTPNumber","newRequestID","fingerResponse","Quality","TimeOut","rawResponse","API.capture","promise","IsoTemplate","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","resdata","USER_NAME","MESSAGE","COMP_CD","BRANCH_CD","trim","BranchSelectionGridMetaData","gridConfig","dense","gridLabel","rowIdColumn","defaultColumnConfig","allowColumnReordering","disableSorting","hideHeader","disableGroupBy","enablePagination","containerHeight","min","max","allowFilter","allowColumnHiding","allowRowSelection","isCusrsorFocused","hideFooter","columns","accessor","columnName","sequence","alignment","componentType","dateFormat","heading_user_img","heading_user_img_border","actions","actionName","actionLabel","multiple","rowDoubleClick","actionTextColor","actionBackground","startsIcon","onEnterSubmit","endsIcon","BranchSelectionGrid","selectionMode","authState","isBranchSelectedFn","isLoggedInFn","logoutFn","logos","BranchSelectionGridDataApiFn","GetMenuDataApiFn","sideImage","branchSelectFn","dashboardUrl","loginUrl","appTranCd","isFetching","refetch","useQuery","queryClient","removeQueries","mutation","useMutation","onSuccess","extreData","menulistdata","branchCode","branch","BRANCH_NM","baseBranchCode","getError","setCurrentAction","useCallback","icon","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","oneBranchOpen","LightTooltip","styled","props","popper","tooltipClasses","tooltip","backgroundColor","common","white","shadows","xl","visibility","profile","Stack","Box","roleName","placement","Avatar","userId","greet","hours","getHours","Greetings","Waving_hand","bank","companyName","employeeID","Alert","severity","errorMsg","error_msg","errorDetail","error_detail","GridWrapper","finalMetaData","setData","setAction","controlsAtBottom","actionContextAtBottom","headerToolbarStyle","disableMultipleRowSelect","defaultSelectedRowId","Button","right","bottom","BranchSelectionGridWrapper","ClearCacheProvider","appBar","transitions","create","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","AppbarWrapper","handleDrawerOpen","handleDrawerClose","SearchComponent","bankLogo","profilePic","handleLogout","handleProfile","hideGreetings","menuIconConfig","optionalComponents","idleTimer","countdownMessage","setCountdownMessage","blinker","setBlinker","CloseIconComponent","OpenIconComponent","menuIconPosition","interval","setInterval","getRemainingTime","remainingSeconds","Math","floor","prev","clearInterval","AppBar","elevation","Toolbar","disableRipple","MenuOutlinedIcon","version","mx","BecomePartnerImg","component","noWrap","workingDate","checkDateAndDisplay","format","lastLogin","paddingRight","map","Component","arrow","LogoutIcon","dateStr","drawerPaper","zIndex","drawerPaperClose","overflowX","up","toolbarIcon","mixins","hrCSS","buttonLink","reportMetaData","navBarCSS","headerDropdown","navLinkHeader","productLink","font13","loginDropdown","useStylesSideBar","root","drawer","drawerIconSize","justifyItems","btnRoot","navLinks","navLinksforseparateView","nestedMenuLevel1","nestedMenuLevel2","listIcon","link","textOverflow","fontweight","linktext","faSmall","openList","openCurrent","slimList","activeMenuItem","localdrawerOpen","SideBarNav","metaData","drawerOpen","setView","slimSize","setNewFilterData","setNewFilterView","isFromSeparetView","rootUrl","result","Array","isArray","navItems","one","seperateView","SeperateListView","level","NestedListItem","SingleListItem","List","disablePadding","ScrollBar","labelStart","substring","ListItemIcon","FontAwesomeIcon","levelClassName","ListItem","disableGutters","viewName","newChield","item1","secondaryLabel","user_code","ListItemText","isActiveMenu","isActiveMenuFromhref","window","location","pathname","navigationProps","titleText","document","allow_open","role","isRouterLink","path","passNavigationPropsAsURLParmas","urlParms","URLSearchParams","rel","childrens","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","menuhref","matchByValue","tags","navItem","toLocaleLowerCase","filterMetaDataByValue","searchString","tagsToSearch","newNavItems","newItem","newChildren","push","SearchViewNavigation","setSearch","filteredMetaData","myIcon","ArrowBackIosNewIcon","SearchBar","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","branches","company","access","products","newnavItem","filterMetaData","matchBranches","userBranches","accessBranches","indexOf","matchInvisibleRoles","userRole","accessRoles","matchProducts","userProducts","accessProducts","Number","visibleToRoles","userCompany","accessCompany","visibleToCompanies","visibleToBranches","invisibleToRoles","visibleToProducts","system_code","SideBar","view","NewFilterView","NewFilterData","myBranches","entities","Branch","myProducts","categoryCode","newMetaData","filteredMetaDataSideBar","companyID","filteredReportsMetaData","SidebarWrapper","Drawer","paper"],"mappings":"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"}
|
|
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/gridMetadata.ts","../src/pages/branchSelection/style.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\";\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\";\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\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()) 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()) 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={{ maxLength: \"16\" }}\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 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(\"otp.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(\"otp.ResendOTP\")} {<CircularProgress size={20} color=\"secondary\" />} */}\r\n {t(\"otp.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(\"otp.ResendOTP\")} */}\r\n {t(\"otp.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(\"otp.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 } 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(\"otp.OtpExpired\")} {remainingtime} {t(\"otp.second\")}\r\n {/* {t(\"otp.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 }\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(\"otp.OTPAuthentication\")\r\n : loginState?.authType === \"TOTP\"\r\n ? t(\"otp.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 ? (loginState?.otpSentText ?? \"\")\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(\"otp.GenerateNewOTP\")}\r\n </div> */}\r\n\r\n <div className={classes.OTPalignName}>\r\n {t(\"otp.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 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(\"otp.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(\"otp.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 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(\"otp.ResendOTP\")} {<CircularProgress size={20} color=\"secondary\" />} */}\r\n {t(\"otp.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(\"otp.ResendOTP\")} */}\r\n {t(\"otp.GetNewOTP\")}\r\n </a>\r\n );\r\n };\r\n const ClickEventHandler = () => {\r\n if (!Boolean(OTP) || OTP.length < 6) {\r\n setOTPError(\"otp.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 } 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(\"otp.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 }\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(\"otp.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(\"otp.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 {loginState?.forgotOtpSentText ?? \"\"}\r\n </div>\r\n <div className={classes.OTPalignName}>\r\n {t(\"otp.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 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(\"otp.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(\"otp.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(\"Biometric.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(\"Biometric.Kindlyplaceyoufinger\")}\r\n </div>\r\n <br />\r\n <Typography variant=\"h5\" style={{ color: \"#000000\" }}>\r\n {t(\"otp.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(\"Biometric.Loading\")\r\n : loginState?.isScanning\r\n ? t(\"Biometric.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(\"otp.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(\"Biometric.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\";\r\n\r\nconst decryptString = (encryptString: string) => {\r\n var secretKey = \"SUPERACUTE@MKS\";\r\n var keyBytes = CryptoJS.PBKDF2(secretKey, \"Ivan Medvedev\", {\r\n keySize: 48 / 4,\r\n iterations: 1000,\r\n });\r\n console.log(keyBytes.toString());\r\n\r\n // take first 32 bytes as key (like in C# code)\r\n var key = new CryptoJS.lib.WordArray.init(keyBytes.words, 32);\r\n\r\n // // skip first 32 bytes and take next 16 bytes as IV\r\n var iv = new CryptoJS.lib.WordArray.init(keyBytes.words.splice(32 / 4), 16);\r\n\r\n // console.log(key.toString());\r\n //console.log(encryptString, CryptoJS.enc.Base64.parse(encryptString));\r\n\r\n var dec = CryptoJS.AES.decrypt(\r\n {\r\n ciphertext: CryptoJS.enc.Base64.parse(\r\n CryptoJS.enc.Base64.parse(encryptString).toString(CryptoJS.enc.Utf8),\r\n ),\r\n },\r\n key,\r\n {\r\n iv: iv,\r\n },\r\n );\r\n console.log(\"CryptoJS.AES.decrypt\", dec);\r\n return dec.toString(CryptoJS.enc.Utf8).split(String.fromCharCode(0)).join(\"\");\r\n return dec.toString();\r\n};\r\n\r\nexport const matchFinger = async (rows: any, captureFinger: string) => {\r\n var promise = new Promise((resolve, reject) => {\r\n //console.log(\"matchFinger\", rows, typeof rows);\r\n if (typeof rows === \"string\") {\r\n rows = JSON.parse(rows);\r\n }\r\n rows.forEach(async (element: any, i: number) => {\r\n try {\r\n var galleryTemplate = decryptString(element.IMG_DATA);\r\n var MFS100Request = {\r\n GalleryTemplate: galleryTemplate,\r\n ProbTemplate: captureFinger,\r\n BioType: \"Iso\",\r\n };\r\n var jsondata = JSON.stringify(MFS100Request);\r\n await fetch(\"http://localhost:8004/mfs100/verify\", {\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 .then((response: any) => response.json())\r\n .then((response: any) => {\r\n if (response?.ErrorCode === \"0\" && response[\"Status\"]) {\r\n resolve({\r\n status: true,\r\n errorCode: \"0\",\r\n errorMessage: \"\",\r\n isError: false,\r\n sr_cd: element.SR_CD,\r\n });\r\n return;\r\n }\r\n\r\n if (rows.length === i + 1) {\r\n resolve({\r\n status: false,\r\n errorCode: response.ErrorCode,\r\n errorMessage: response.ErrorMessage,\r\n isError: false,\r\n });\r\n return;\r\n }\r\n })\r\n .catch((reason) => {\r\n resolve({\r\n status: false,\r\n errorCode: \"999\",\r\n errorMessage: reason,\r\n isError: true,\r\n });\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n resolve({\r\n status: false,\r\n errorCode: \"999\",\r\n errorMessage: \"Something went wrong!\",\r\n isError: true,\r\n });\r\n }\r\n });\r\n });\r\n return promise;\r\n};\r\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\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: \"cover\",\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 {banner?.bannerTitle ?? \"\"}\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 {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 utilFunction,\r\n} from \"@acuteinfo/common-base\";\r\n\r\nimport {\r\n CircularProgress,\r\n Container,\r\n FormHelperText,\r\n Grid,\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 { 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 isError: false,\r\n errorMessage: \"\",\r\n isLoading: 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 let isError = false;\r\n let setPwdData = {\r\n isError: false,\r\n errorMessage: \"\",\r\n isLoading: 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 // Local validation\r\n if (!Boolean(input.oldpassword)) {\r\n setPwdData.isoldPwdError = true;\r\n setPwdData.oldpassworderror = \"Current Password is required.\";\r\n isError = true;\r\n }\r\n\r\n let pwdData = utilFunction.ValidatePassword(input.password);\r\n if (Boolean(pwdData)) {\r\n setPwdData.isnewpwdError = true;\r\n setPwdData.newpassworderror = pwdData;\r\n isError = true;\r\n }\r\n if (\r\n Boolean(input.oldpassword) &&\r\n Boolean(input.password) &&\r\n input.oldpassword === input.password\r\n ) {\r\n setPwdData.isnewpwdError = true;\r\n setPwdData.newpassworderror =\r\n \"The new password cannot be the same as the old password\";\r\n isError = true;\r\n }\r\n if (!Boolean(input.confirmpassword)) {\r\n setPwdData.isconfirmnewpwdError = true;\r\n setPwdData.confirmnewpassworderror = \"Confirm new password is required.\";\r\n isError = true;\r\n } else if (\r\n Boolean(input.password) &&\r\n input.password !== input.confirmpassword\r\n ) {\r\n setPwdData.isconfirmnewpwdError = true;\r\n setPwdData.confirmnewpassworderror =\r\n \"New Password and Confirm Password did not match\";\r\n isError = true;\r\n }\r\n if (isError) {\r\n setPasswordReset(setPwdData);\r\n return;\r\n }\r\n\r\n // API validation\r\n setPasswordReset((values) => ({ ...values, isLoading: 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 setPasswordReset((values) => ({ ...values, isLoading: false }));\r\n\r\n if (validateStatus === \"0\") {\r\n switch (validateData?.O_STATUS) {\r\n case \"999\":\r\n setPwdData.isnewpwdError = true;\r\n setPwdData.newpassworderror = validateData?.O_MESSAGE;\r\n setPasswordReset(setPwdData);\r\n return;\r\n case \"0\":\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 setPasswordReset((values) => ({ ...values, isLoading: true }));\r\n if (response.status === \"0\") {\r\n enqueueSnackbar(\"Password successfully changed.\", {\r\n variant: \"success\",\r\n });\r\n handleClose(\"0\");\r\n setPasswordReset((values) => ({ ...values, isLoading: false }));\r\n } else {\r\n setPasswordReset((values) => ({\r\n ...values,\r\n isError: true,\r\n errorMessage: response.message,\r\n }));\r\n }\r\n break;\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 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>Password Rotation</h3>\r\n </div>\r\n <div\r\n className=\"\"\r\n style={{\r\n color: \"#949597\",\r\n fontSize: \"18px\",\r\n fontWeight: \"400\",\r\n alignItems: \"center\",\r\n fontStyle: \"normal\",\r\n width: \"360px\",\r\n }}\r\n >\r\n Please Verify OTP\r\n </div>\r\n <div className={classes.formWrap}>\r\n <TextField\r\n label={\"User ID\"}\r\n placeholder=\"Enter User ID\"\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={\"Current Password\"}\r\n placeholder=\"Enter Current Password\"\r\n fullWidth\r\n type={\"password\"}\r\n name=\"oldpassword\"\r\n value={input.oldpassword || \"\"}\r\n onChange={handleChange}\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={\"New Password\"}\r\n placeholder=\"Enter New Password\"\r\n fullWidth\r\n type={\"password\"}\r\n name=\"password\"\r\n value={input.password || \"\"}\r\n onChange={handleChange}\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}\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={\"Confirm New Password\"}\r\n placeholder=\"Enter confirm new password\"\r\n fullWidth\r\n type={\"password\"}\r\n name=\"confirmpassword\"\r\n value={input.confirmpassword || \"\"}\r\n onChange={handleChange}\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 {pwdReset.isError ? (\r\n <FormHelperText style={{ color: \"red\" }}>\r\n {pwdReset.errorMessage}\r\n </FormHelperText>\r\n ) : null}\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 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 \"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: { error: message, errorPassword: message },\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:\r\n fingerResponse?.ErrorMessage ?? t(\"Biometric.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(\"Biometric.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=\"Enter Mobile No.\"\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=\"Enter Password\"\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(\"Password successfully reset\", {\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(\"otp.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 {loginState?.newPasswordMessage ?? \"\"}\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 { GridMetaDataType } from \"@acuteinfo/common-base\";\nexport const BranchSelectionGridMetaData: GridMetaDataType = {\n gridConfig: {\n dense: true,\n gridLabel: \"Access Branch List\",\n rowIdColumn: \"BRANCH_CD\",\n // searchPlaceholder: \"Branches\",\n defaultColumnConfig: {\n width: 400,\n maxWidth: 450,\n minWidth: 300,\n },\n\n allowColumnReordering: false,\n disableSorting: false,\n hideHeader: false,\n disableGroupBy: true,\n enablePagination: false,\n containerHeight: {\n min: \"68vh\",\n max: \"68vh \",\n },\n allowFilter: false,\n allowColumnHiding: false,\n allowRowSelection: false,\n isCusrsorFocused: true,\n hideFooter: true,\n },\n columns: [\n {\n accessor: \"BRANCH_CD\",\n columnName: \"Branch Code\",\n sequence: 1,\n alignment: \"left\",\n componentType: \"default\",\n width: 200,\n minWidth: 140,\n maxWidth: 220,\n },\n {\n accessor: \"BRANCH_NM\",\n columnName: \"Branch Name\",\n sequence: 2,\n alignment: \"left\",\n componentType: \"default\",\n width: 280,\n minWidth: 280,\n maxWidth: 420,\n },\n {\n accessor: \"DISP_STATUS\",\n columnName: \"Status\",\n sequence: 3,\n alignment: \"left\",\n componentType: \"default\",\n width: 200,\n minWidth: 140,\n maxWidth: 220,\n },\n {\n accessor: \"BEGIN_DATETIME\",\n columnName: \"Begin Time\",\n sequence: 4,\n alignment: \"left\",\n componentType: \"date\",\n dateFormat: \"dd/MM/yyyy hh:mm a\",\n width: 222,\n minWidth: 140,\n maxWidth: 240,\n },\n {\n accessor: \"END_DATETIME\",\n columnName: \"End Time\",\n sequence: 5,\n alignment: \"left\",\n componentType: \"date\",\n dateFormat: \"dd/MM/yyyy hh:mm a\",\n width: 222,\n minWidth: 140,\n maxWidth: 240,\n },\n // {\n // accessor: \"DAYEND_STATUS\",\n // columnName: \"Dayend Status\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"EOD_RUNNING_STATUS\",\n // columnName: \"EOD Running Status\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"BASE_COMP_CD\",\n // columnName: \"Base Comp Cd\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"BASE_BRANCH_CD\",\n // columnName: \"Base Branch Cd\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"COMP_CD\",\n // columnName: \"Comp Cd\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n // {\n // accessor: \"COMP_NM\",\n // columnName: \"Comp Name\",\n // sequence: 6,\n // componentType: \"default\",\n // isVisible: false,\n // },\n ],\n};\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 {\n GridWrapper,\n ActionTypes,\n GridMetaDataType,\n ClearCacheProvider,\n Alert,\n queryClient,\n usePopupContext,\n} from \"@acuteinfo/common-base\";\n\nimport { Fragment, useCallback, useEffect } from \"react\";\nimport { BranchSelectionGridMetaData } from \"./gridMetadata\";\nimport \"./styles.css\";\nimport {\n Avatar,\n Box,\n Button,\n Grid,\n Stack,\n Tooltip,\n tooltipClasses,\n} from \"@mui/material\";\nimport { useMutation, useQuery } from \"react-query\";\nimport { NavigateFunction } from \"react-router-dom\";\nimport { useSnackbar } from \"notistack\";\nimport bank_logo_default from \"../../assets/images/BecomePartnerImg.svg\";\nimport Waving_hand from \"../../assets/images/waving-hand.png\";\n\nimport { useStyles } from \"./style\";\nimport { styled } from \"@mui/material/styles\";\nimport USER_PROFILE_DEFAULT from \"../../assets/images/profile-default.png\";\nimport { BranchSelectionGridDataFnType, GetMenuDataFnType } from \"pages/types\";\nconst actions: ActionTypes[] = [\n {\n actionName: \"back\",\n actionLabel: \"Back\",\n multiple: false,\n rowDoubleClick: false,\n actionTextColor: \"var(--theme-color3)\",\n actionBackground: \"var(--white)\",\n startsIcon: \"West\",\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\n },\n {\n actionName: \"proceed\",\n actionLabel: \"Proceed\",\n multiple: false,\n rowDoubleClick: true,\n actionTextColor: \"var(--white)\",\n actionBackground: \"var(--theme-color3)\",\n onEnterSubmit: true,\n endsIcon: \"East\",\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\n },\n];\n\ninterface BranchSelectionWrapperProps {\n selectionMode: \"S\" | \"C\";\n authState: any;\n isBranchSelectedFn: () => boolean;\n isLoggedInFn: () => boolean;\n logoutFn: () => void;\n branchSelectFn: Function;\n BranchSelectionGridDataApiFn: BranchSelectionGridDataFnType;\n GetMenuDataApiFn: GetMenuDataFnType;\n sideImage?: string;\n logos: any;\n logo?: string;\n navigate: NavigateFunction;\n dashboardUrl: string;\n loginUrl: string;\n appTranCd: string;\n}\n\nconst BranchSelectionGrid: React.FC<BranchSelectionWrapperProps> = ({\n selectionMode,\n authState,\n isBranchSelectedFn,\n isLoggedInFn,\n logoutFn,\n logos,\n logo,\n navigate,\n BranchSelectionGridDataApiFn,\n GetMenuDataApiFn,\n sideImage,\n branchSelectFn,\n dashboardUrl,\n loginUrl,\n appTranCd,\n}) => {\n const classes = useStyles();\n const { MessageBox } = usePopupContext();\n\n const { enqueueSnackbar } = useSnackbar();\n const { data, isLoading, isFetching, error, isError, refetch } = useQuery<\n any,\n any\n >([\"BranchSelectionGridData\"], () => BranchSelectionGridDataApiFn());\n\n useEffect(() => {\n refetch();\n return () => {\n queryClient.removeQueries([\"BranchSelectionGridData\", {}]);\n };\n }, []);\n\n useEffect(() => {\n if (!isLoggedInFn()) {\n navigate(loginUrl);\n } else if (isBranchSelectedFn() && selectionMode !== \"C\") {\n navigate(dashboardUrl);\n }\n }, [isBranchSelectedFn, isLoggedInFn]);\n\n type MutationErrorType = {\n severity: string;\n error_msg: string;\n error_detail: string;\n };\n\n const mutation: any = useMutation(GetMenuDataApiFn, {\n onSuccess: (data, extreData: any) => {\n branchSelectFn({\n menulistdata: data,\n branchCode: extreData?.BRANCH_CD,\n branch: extreData?.BRANCH_NM,\n baseBranchCode: extreData?.BASE_BRANCH_CD,\n });\n },\n });\n const getError: any = mutation.error as MutationErrorType;\n const setCurrentAction = useCallback(\n async (data) => {\n if (data.name === \"proceed\") {\n if (data.rows?.length === 0) {\n enqueueSnackbar(\"Please Select Branch\", {\n variant: \"error\",\n });\n } else if (data.rows?.[0]?.data?.STATUS === \"C\") {\n await MessageBox({\n message: \"BranchDayEndMessage\",\n messageTitle: \"BranchDayEndTitle\",\n icon: \"ERROR\",\n defFocusBtnName: \"Ok\",\n });\n } else {\n mutation.mutate({\n BASE_COMP_CD: data.rows?.[0]?.data?.BASE_COMP_CD ?? \"\",\n BASE_BRANCH_CD: data.rows?.[0]?.data?.BASE_BRANCH_CD ?? \"\",\n COMP_CD: data.rows?.[0]?.data?.COMP_CD ?? \"\",\n BRANCH_CD: data.rows?.[0]?.data?.BRANCH_CD ?? \"\",\n GROUP_NAME: authState?.groupName ?? \"\",\n APP_TRAN_CD: appTranCd,\n COMP_NM: data.rows?.[0]?.data?.COMP_NM ?? \"\",\n BRANCH_NM: data.rows?.[0]?.data?.BRANCH_NM ?? \"\",\n DAYEND_STATUS: data.rows?.[0]?.data?.DAYEND_STATUS ?? \"\",\n EOD_RUNNING_STATUS: data.rows?.[0]?.data?.EOD_RUNNING_STATUS ?? \"\",\n IS_UPD_DEF_BRANCH: authState?.user?.isUpdDefBranch ?? \"\",\n COMP_BASE_BRANCH_CD:\n data.rows?.[0]?.data?.COMP_BASE_BRANCH_CD ?? \"\",\n selectionMode: selectionMode,\n authState,\n });\n }\n } else if (data.name === \"back\") {\n const res = await MessageBox({\n messageTitle: \"confirmation\",\n message: \"AreYouSureToExit\",\n icon: \"CONFIRM\",\n buttonNames: [\"Yes\", \"No\"],\n defFocusBtnName: \"Yes\",\n });\n\n if (res === \"Yes\") {\n if (selectionMode === \"C\") {\n navigate(dashboardUrl, {\n replace: true,\n });\n } else {\n logoutFn();\n }\n }\n }\n },\n [navigate, data, mutation],\n );\n\n useEffect(() => {\n var oneBranchOpen = data?.some((branch) => branch.STATUS === \"O\");\n if (oneBranchOpen === false) {\n enqueueSnackbar(\n \"Branch is in Day End Status.~rPlease contact system Vendor.\",\n {\n variant: \"error\",\n },\n );\n logoutFn();\n }\n if (data?.length === 1) {\n if (data?.[0]?.STATUS === \"O\") {\n setCurrentAction({ name: \"proceed\", rows: [{ data: { ...data[0] } }] });\n }\n }\n }, [JSON.stringify(data)]);\n\n const Greetings = (userId) => {\n let hours = new Date().getHours();\n let greet;\n\n if (hours < 12) greet = \"morning\";\n else if (hours >= 12 && hours <= 16) greet = \"afternoon\";\n else if (hours >= 16 && hours <= 24) greet = \"evening\";\n\n return (\n <span>\n Good {greet} {userId},\n </span>\n );\n };\n\n const LightTooltip = styled(({ className, ...props }: any) => (\n <Tooltip {...props} classes={{ popper: className }} />\n ))(({ theme }) => ({\n [`& .${tooltipClasses.tooltip}`]: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 13,\n },\n }));\n\n // const greet = Greetings();\n\n return (\n <>\n <Grid\n container\n style={{\n margin: \"0\",\n padding: \"0\",\n height: \"100vh\",\n // overflowY: \"hidden\",\n }}\n >\n {sideImage ? (\n <Grid item lg={1} md={1} xl={1} xs={1} sm={1}>\n <img className=\"sideImage\" src={sideImage} alt=\"side-Image\" />\n </Grid>\n ) : null}\n\n <Grid\n item\n lg={11}\n md={11}\n xl={11}\n xs={11}\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n <Grid\n container\n style={{\n minHeight: \"100vh\",\n padding: \"10px 0px 0px 0px\",\n }}\n lg={11}\n md={11}\n xl={11}\n xs={11}\n >\n <Grid\n container\n style={{\n margin: \"0\",\n padding: \"0\",\n // height: \"12vh\",\n }}\n lg={12}\n md={12}\n xl={12}\n xs={12}\n >\n <Grid\n xs={12}\n sm={1}\n md={1}\n lg={1}\n xl={1}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n visibility: Boolean(logos?.profile) ? \"visible\" : \"hidden\",\n // justifyContent: \"center\",\n }}\n >\n <Stack direction=\"row\" spacing={4} ml={1}>\n <Box\n className={classes.heading_user_img_border}\n sx={{ cursor: \"pointer\" }}\n >\n <LightTooltip\n title={\n <>\n <div>User ID : {authState?.user?.id ?? \"\"}</div>\n <div>Role : {authState?.roleName ?? \"\"}</div>\n <div>Last Unsuccessful Login : \"\"</div>\n </>\n }\n placement=\"bottom-start\"\n >\n <Avatar\n className={classes.heading_user_img}\n // onClick={handleNavigate}\n alt=\"Remy Sharp\"\n src={logos?.profile ?? \"\"}\n />\n </LightTooltip>\n </Box>\n </Stack>\n </Grid>\n <Grid\n xs={12}\n sm={5}\n md={5}\n lg={5}\n xl={5}\n sx={{\n justifyContent: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <h1\n className=\"name-heading\"\n style={{ fontSize: \"24px\", margin: \"4px 0px\" }}\n >\n Welcome <span>{`${authState?.user?.name ?? \"\"},`}</span>\n </h1>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <h3 style={{ margin: \"4px 0px\" }}>\n {Greetings(authState?.user?.id ?? \"\")}\n </h3>\n <img src={Waving_hand} alt=\"\" style={{ height: \"18px\" }} />\n </div>\n </Grid>\n <Grid\n xs={12}\n sm={1}\n md={1}\n lg={1}\n xl={1}\n sx={{\n display: \"flex\",\n // flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n visibility: Boolean(logos?.bank) ? \"visible\" : \"hidden\",\n }}\n >\n <Stack direction=\"row\" justifyContent=\"flex-start\" spacing={2}>\n <Box className={classes.heading_user_img_border}>\n <Avatar\n className={classes.heading_user_img}\n alt=\"Remy Sharp\"\n src={logos?.bank ?? \"\"}\n />\n </Box>\n </Stack>\n </Grid>\n <Grid\n xs={12}\n sm={3}\n md={3}\n lg={3}\n xl={3}\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n }}\n >\n <div\n className=\"bank-name-container\"\n style={{ fontSize: \"14px\" }}\n >\n <p className=\"bank-name\">\n {`Bank Name: ${authState?.companyName ?? \"\"}`}\n </p>\n </div>\n\n <p className=\"emp-id\">\n {`Emp. Id: ${authState?.user?.employeeID ?? \"\"}`}\n </p>\n </Grid>\n <Grid\n xs={12}\n sm={3}\n md={3}\n lg={2}\n xl={2}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"right\",\n visibility: Boolean(logo) ? \"visible\" : \"hidden\",\n }}\n >\n {\" \"}\n <div>\n <img\n src={logo ?? \"\"}\n alt=\"bank_logo\"\n className={classes.logo}\n />\n </div>\n </Grid>\n </Grid>\n\n {isError ? (\n <Fragment>\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\n <Alert\n severity={error?.severity ?? \"error\"}\n errorMsg={error?.error_msg ?? \"Error\"}\n errorDetail={error?.error_detail ?? \"\"}\n />\n </div>\n </Fragment>\n ) : mutation.isError && mutation.error ? (\n <Fragment>\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\n <Alert\n severity={getError.severity ?? \"error\"}\n errorMsg={getError.error_msg ?? \"Error\"}\n errorDetail={getError.error_detail ?? \"\"}\n />\n </div>\n </Fragment>\n ) : null}\n <GridWrapper\n key={`branchSelection`}\n finalMetaData={BranchSelectionGridMetaData as GridMetaDataType}\n data={data ?? []}\n setData={() => null}\n actions={actions}\n setAction={setCurrentAction}\n controlsAtBottom={true}\n actionContextAtBottom={true}\n headerToolbarStyle={{\n background: \"#fff !important\",\n padding: \"0\",\n \"& .MuiTypography-root\": {\n color: \"black\",\n },\n }}\n disableMultipleRowSelect={true}\n variant=\"outlined\"\n loading={isLoading || isFetching || mutation.isLoading}\n defaultSelectedRowId={authState?.user?.branchCode ?? null}\n />\n {isError || data?.length === 0 ? (\n <Button\n sx={{\n backgroundColor: \"var(--theme-color3)\",\n position: \"absolute\",\n right: \"113px\",\n bottom: \"20px\",\n width: \"7rem\",\n \"&:hover\": {\n backgroundColor: \"var(--theme-color3)\",\n },\n }}\n onClick={async () => {\n const res = await MessageBox({\n messageTitle: \"confirmation\",\n message: \"AreYouSureToExit\",\n icon: \"CONFIRM\",\n buttonNames: [\"Yes\", \"No\"],\n defFocusBtnName: \"Yes\",\n });\n if (res === \"Yes\") {\n if (selectionMode === \"C\") {\n navigate(dashboardUrl, {\n replace: true,\n });\n } else {\n logoutFn();\n }\n }\n }}\n >\n Back\n </Button>\n ) : null}\n </Grid>\n </Grid>\n </Grid>\n </>\n );\n};\n\nexport const BranchSelectionGridWrapper: React.FC<\n BranchSelectionWrapperProps\n> = (props) => {\n return (\n <ClearCacheProvider>\n <BranchSelectionGrid {...props} />\n </ClearCacheProvider>\n );\n};\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: \"80px\",\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 minHeight: \"80px\",\r\n paddingLeft: \"0px\",\r\n height: \"80px\",\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 { NavigateFunction } from \"react-router-dom\";\nimport clsx from \"clsx\";\nimport { useStyles } from \"./style\";\nimport Waving_hand from \"../../assets/images/waving-hand.png\";\nimport BecomePartnerImg from \"../../assets/images/BecomePartnerImg.svg\";\nimport IconButton from \"@mui/material/IconButton\";\nimport LogoutIcon from \"@mui/icons-material/Logout\";\nimport MenuOutlinedIcon from \"@mui/icons-material/MenuOutlined\";\nimport { styled } from \"@mui/material/styles\";\nimport {\n AppBar,\n Avatar,\n Box,\n Stack,\n Toolbar,\n Tooltip,\n Typography,\n tooltipClasses,\n} from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport { format } from \"date-fns\";\nimport { useEffect, useState } from \"react\";\n\ninterface AppbarWrapperProps {\n handleDrawerOpen: Function;\n handleDrawerClose: Function;\n open: boolean;\n authState: any;\n LanguageComponent?: React.ComponentType<any>;\n SearchComponent?: React.ComponentType<any>;\n dashboardUrl?: string;\n logos?: any;\n bankLogo?: any;\n profilePic?: string;\n handleLogout?: Function;\n handleProfile?: Function;\n navigate: NavigateFunction;\n hideGreetings?: boolean;\n menuIconConfig?: {\n menuIconPosition?: \"left\" | \"right\";\n OpenIconComponent?: React.ReactNode;\n CloseIconComponent?: React.ReactNode;\n };\n optionalComponents?: {\n Component: React.ComponentType<any>;\n props?: { [key: string]: any };\n }[];\n /**\n * Accepts useIdleTimer instance\n */\n idleTimer?: any;\n}\n\nexport const AppbarWrapper: React.FC<AppbarWrapperProps> = ({\n handleDrawerOpen,\n handleDrawerClose,\n open,\n authState,\n LanguageComponent,\n SearchComponent,\n dashboardUrl,\n logos,\n bankLogo,\n profilePic,\n handleLogout,\n handleProfile,\n navigate,\n hideGreetings,\n menuIconConfig = {},\n optionalComponents = [],\n idleTimer,\n // menuIconPosition = \"left\",\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [countdownMessage, setCountdownMessage] = useState(\"\");\n const [blinker, setBlinker] = useState(0);\n const {\n CloseIconComponent,\n OpenIconComponent,\n menuIconPosition = \"right\",\n } = menuIconConfig;\n\n const LightTooltip = styled(({ className, ...props }: any) => (\n <Tooltip {...props} classes={{ popper: className }} />\n ))(({ theme }) => ({\n [`& .${tooltipClasses.tooltip}`]: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 13,\n },\n }));\n const Greetings = () => {\n let hours = new Date().getHours();\n let greet;\n\n if (hours < 12) greet = \"morning\";\n else if (hours >= 12 && hours <= 16) greet = \"afternoon\";\n else if (hours >= 16 && hours <= 24) greet = \"evening\";\n\n return <span>Good {greet},</span>;\n };\n\n useEffect(() => {\n if (!idleTimer) return;\n const updateCountdown = () => {\n const remainingTime = idleTimer.getRemainingTime();\n const remainingSeconds = Math.floor(remainingTime / 1000); // Convert to seconds\n if (remainingSeconds <= 30 && remainingSeconds > 0) {\n setCountdownMessage(\n `Your session will time out in ${remainingSeconds} seconds`,\n );\n setBlinker((prev) => prev + 1);\n } else {\n setCountdownMessage(\"\"); // Clear the message if more than 30 seconds\n setBlinker(0);\n }\n };\n const interval = setInterval(updateCountdown, 1000);\n return () => clearInterval(interval);\n }, []);\n\n return (\n <AppBar\n position=\"fixed\"\n elevation={0}\n className={clsx(classes.appBar, open && classes.appBarShift)}\n >\n <Toolbar className={classes.toolbar}>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-evenly\",\n alignItems: \"center\",\n height: \"80px\",\n width: Boolean(bankLogo) ? \"227px\" : \"40px\",\n flexDirection: menuIconPosition === \"right\" ? \"row-reverse\" : \"row\",\n }}\n >\n {open ? (\n <IconButton\n disableRipple\n onClick={() => handleDrawerClose()}\n className={classes.DrawerClose_icon}\n >\n {OpenIconComponent ? (\n OpenIconComponent\n ) : (\n <MenuOutlinedIcon fontSize=\"large\" />\n )}\n </IconButton>\n ) : (\n <IconButton\n disableRipple\n aria-label=\"open drawer\"\n onClick={() => handleDrawerOpen()}\n className={classes.DrawerClose_icon}\n >\n {CloseIconComponent ? (\n CloseIconComponent\n ) : (\n <MenuOutlinedIcon fontSize=\"large\" />\n )}\n </IconButton>\n )}\n\n {Boolean(bankLogo) && (\n <div>\n <img\n src={bankLogo ?? \"\"}\n alt=\"bank_logo\"\n className={classes.logo}\n onClick={(e) => {\n e.preventDefault();\n navigate(dashboardUrl ?? \"./dashboard\");\n }}\n />\n <p className={classes.version01}>{logos?.version}</p>\n </div>\n )}\n </Box>\n <Stack direction=\"row\" spacing={4} mx={2}>\n <Box className={classes.heading_user_img_border}>\n <Avatar\n className={classes.heading_user_img}\n alt=\"Remy Sharp\"\n src={Boolean(logos?.bank) ? logos?.bank : BecomePartnerImg}\n />\n </Box>\n </Stack>\n <Typography\n component=\"h1\"\n variant=\"h6\"\n color=\"inherit\"\n noWrap\n className={classes.title}\n >\n <Box\n style={{\n marginBottom: \"8px\",\n fontSize: \"17px\",\n color: \"var(--theme-color1)\",\n width: \"555px\",\n }}\n className={clsx({\n [classes.marquee]: authState?.companyName.length > 55,\n })}\n >\n {authState?.companyName || \"\"}\n </Box>\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n <div style={{ color: \"var(--theme-color6)\" }}>\n <Typography\n variant=\"caption\"\n display=\"block\"\n lineHeight={0}\n fontSize={\"11px\"}\n >\n {t(\"appBar.Branch\")}:{authState?.user?.branchCode ?? \"001 \"}-\n {authState?.user?.branch ?? \"\"}\n </Typography>\n <Typography variant=\"caption\" display=\"inline\" fontSize={\"11px\"}>\n {t(\"appBar.WorkingDate\")}:{\" \"}\n {Boolean(authState?.workingDate)\n ? checkDateAndDisplay(\n format(new Date(authState?.workingDate), \"dd/MM/yyyy\"),\n // authState?.workingDate ?? \"\"\n )\n : \"not found\"}\n </Typography>\n <Typography\n marginLeft={1}\n variant=\"caption\"\n display=\"inline\"\n fontSize={\"11px\"}\n >\n {t(\"appBar.LastLoginDate\")} :{\" \"}\n {checkDateAndDisplay(authState?.user?.lastLogin ?? \"Vastrapur\")}\n </Typography>\n </div>\n </div>\n </Typography>\n <Box>\n {!hideGreetings ? (\n <Box sx={{ marginBottom: \"3px\", paddingRight: \"15px\" }}>\n <Stack\n direction=\"row\"\n spacing={2}\n justifyContent={\"flex-end\"}\n alignItems={\"center\"}\n >\n <Typography\n key={blinker}\n className={classes.blinkHard}\n fontSize={\"15px\"}\n color={\"#1C1C1C\"}\n >\n {countdownMessage}\n </Typography>\n <Typography fontSize={\"17px\"} color={\"#1C1C1C\"}>\n {Greetings()} {authState?.user?.id ?? \"\"}\n </Typography>\n <img src={Waving_hand} alt=\"\" style={{ height: \"18px\" }} />\n </Stack>\n </Box>\n ) : null}\n <Box\n display={\"flex\"}\n justifyContent={\"space-evenly\"}\n alignItems={\"center\"}\n >\n {SearchComponent ? <SearchComponent /> : null}\n {LanguageComponent ? <LanguageComponent /> : null}\n\n <Box\n display={\"flex\"}\n justifyContent={\"space-between\"}\n gap={\"0.8rem\"}\n padding={\"0 0.5rem\"}\n >\n {optionalComponents.map((component) => {\n let componentProps = { ...component.props };\n if (Array.isArray(componentProps)) componentProps = {};\n return <component.Component {...component.props} />;\n })}\n <Tooltip title=\"Logout\" placement=\"bottom\" arrow>\n <IconButton\n onClick={() =>\n typeof handleLogout === \"function\" ? handleLogout() : null\n }\n color=\"error\"\n sx={{\n backgroundColor: \"rgba(235, 237, 238, 0.45)\",\n\n borderRadius: \"10px\",\n height: \"30px\",\n width: \"30px\",\n \"&:hover\": {\n background: \"var(--white)\",\n borderRadius: \"10px\",\n transition: \"all 0.2s ease 0s\",\n boxShadow:\n \"rgba(0, 0, 0, 0.16) 0px 3px 6px, rgba(0, 0, 0, 0.23) 0px 3px 6px\",\n \"& .MuiSvgIcon-root\": {\n height: \"32px\",\n width: \"32px\",\n transition: \"all 0.2s ease 0s\",\n padding: \"4px\",\n },\n },\n }}\n aria-label=\"logout\"\n >\n <LogoutIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </Box>\n </Box>\n <Stack direction=\"row\" spacing={4} ml={1}>\n <Box\n className={classes.heading_user_img_border}\n sx={{ cursor: \"pointer\" }}\n >\n <LightTooltip\n title={\n <>\n <div>\n {\" \"}\n {t(\"appBar.UserID\")}: {authState?.user?.id}\n </div>\n <div>\n {t(\"appBar.Role\")} : {authState?.roleName}\n </div>\n <div>{t(\"appBar.LastUnsuccessfulLogin\")} : \"\"</div>\n </>\n }\n placement=\"bottom-start\"\n >\n <Avatar\n className={classes.heading_user_img}\n onClick={() =>\n typeof handleProfile === \"function\" ? handleProfile() : null\n }\n alt=\"Remy Sharp\"\n src={profilePic ?? \"\"}\n />\n </LightTooltip>\n </Box>\n </Stack>\n </Toolbar>\n </AppBar>\n );\n};\n\nexport const checkDateAndDisplay = (dateStr: string) => {\n // const dt = new Date(dateStr);\n // //@ts-ignore\n // if (dt instanceof Date && !isNaN(dt)) {\n // return dt.toDateString();\n // }\n if (Boolean(dateStr)) {\n return dateStr;\n }\n return \"N/A\";\n};\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: \"80px\",\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 },\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 } from \"react\";\nimport { useState } from \"react\";\nimport { NavigateFunction } from \"react-router-dom\";\nimport clsx from \"clsx\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { NavItemType, SideBarRendererType } from \"./types\";\nimport { useStylesSideBar } from \"./style\";\nimport ScrollBar from \"react-perfect-scrollbar\";\nimport {\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Tooltip,\n} from \"@mui/material\";\nimport { ExpandLess, ExpandMore } from \"@mui/icons-material\";\nimport { usePopupContext } from \"@acuteinfo/common-base\";\nlet localdrawerOpen = true;\n\ninterface SideBarNavProps extends SideBarRendererType {\n rootUrl: string;\n dashboardUrl?: string;\n navigate: NavigateFunction;\n authState?: any;\n}\n\nexport const SideBarNav: FC<SideBarNavProps> = ({\n metaData,\n handleDrawerOpen,\n drawerOpen,\n setView,\n slimSize,\n setNewFilterData,\n setNewFilterView,\n isFromSeparetView = false,\n rootUrl,\n dashboardUrl,\n navigate,\n authState,\n}) => {\n const { MessageBox } = usePopupContext();\n const classes = useStylesSideBar();\n let result: JSX.Element[] | null = null;\n localdrawerOpen = drawerOpen;\n if (Array.isArray(metaData.navItems)) {\n result = metaData.navItems.map((one) => {\n if (one?.seperateView === true) {\n return (\n <SeperateListView\n key={one.label}\n item={one}\n setView={setView}\n classes={classes}\n level={0}\n slimSize={slimSize}\n setNewFilterData={setNewFilterData}\n setNewFilterView={setNewFilterView}\n />\n );\n } else if (Array.isArray(one.children)) {\n return (\n <NestedListItem\n key={one.label}\n item={one}\n classes={classes}\n level={0}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={drawerOpen}\n slimSize={slimSize}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n MessageBox={MessageBox}\n authState={authState}\n />\n );\n } else {\n return (\n <SingleListItem\n key={one.label}\n item={one}\n classes={classes}\n level={0}\n slimSize={slimSize}\n drawerOpen={drawerOpen}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n MessageBox={MessageBox}\n authState={authState}\n />\n );\n }\n });\n }\n return (\n <List\n component=\"nav\"\n disablePadding\n className={\n isFromSeparetView ? classes.navLinksforseparateView : classes.navLinks\n }\n >\n <ScrollBar>{result}</ScrollBar>\n </List>\n );\n};\n\nconst SeperateListView: FC<{\n item: NavItemType;\n setView: any;\n classes: ReturnType<typeof useStylesSideBar>;\n level: number;\n slimSize?: boolean;\n setNewFilterData?: any;\n setNewFilterView?: any;\n}> = ({\n item,\n setView,\n level,\n classes,\n slimSize,\n setNewFilterData,\n setNewFilterView,\n}) => {\n let labelStart: any =\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\n // const icon = item.icon ? (\n // <ListItemIcon className={classes.listIcon}>\n // <FontAwesomeIcon icon={[\"fas\", labelStart]} />\n // </ListItemIcon>\n // ) : null;\n\n const icon =\n item.icon?.toLowerCase() !== \"process.gif\" && item.icon ? (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\n </ListItemIcon>\n ) : (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\n </ListItemIcon>\n );\n\n const levelClassName =\n level === 1\n ? classes.nestedMenuLevel1\n : level === 2\n ? classes.nestedMenuLevel2\n : \"\";\n\n return (\n <ListItem\n button\n disableGutters\n className={clsx({\n [classes.item]: true,\n [levelClassName]: Boolean(levelClassName),\n [classes.slimList]: Boolean(slimSize),\n [classes.drawerIconSize]: !localdrawerOpen,\n })}\n onClick={() => {\n if (item.viewName === \"newfilterview\" && Array.isArray(item.children)) {\n setNewFilterView({\n label: item.label,\n placeholder: \"Search \" + item.label + \" Screen...\",\n });\n let newChield = item.children.map((item1) => {\n return { ...item1, secondaryLabel: item1.user_code };\n });\n setNewFilterData(newChield);\n }\n setView(item.viewName);\n }}\n >\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <span>{icon}</span>\n </Tooltip>\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText>\n </Tooltip>\n ) : localdrawerOpen ? (\n <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText>\n ) : null}\n </ListItem>\n );\n};\n\nconst SingleListItem: FC<{\n item: NavItemType;\n classes: ReturnType<typeof useStylesSideBar>;\n level: number;\n slimSize?: boolean;\n drawerOpen?: any;\n rootUrl: string;\n dashboardUrl?: string;\n navigate: NavigateFunction;\n MessageBox?: any;\n authState?: any;\n}> = ({\n item,\n classes,\n level,\n slimSize,\n drawerOpen,\n rootUrl,\n dashboardUrl,\n navigate,\n MessageBox,\n authState,\n}) => {\n const isActiveMenu = isActiveMenuFromhref(\n window.location?.pathname ?? \"\",\n item?.href ?? \"\",\n item?.navigationProps,\n rootUrl,\n dashboardUrl,\n );\n if (isActiveMenu) {\n // GeneralAPI.setDocumentName(item.label);\n let titleText = document.title;\n document.title = titleText.split(\" - \")[0] + \" - \" + item.label;\n }\n let labelStart: any =\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\n\n const icon =\n item.icon.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\n </ListItemIcon>\n ) : (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\n </ListItemIcon>\n );\n const levelClassName =\n level === 1\n ? classes.nestedMenuLevel1\n : level === 2\n ? classes.nestedMenuLevel2\n : \"\";\n return (\n <ListItem\n button\n // disabled ={item?.allow_open !== \"Y\"}\n disableGutters\n className={clsx({\n [classes.item]: true,\n [levelClassName]: Boolean(levelClassName),\n [classes.slimList]: Boolean(slimSize),\n [classes.activeMenuItem]: isActiveMenu,\n [classes.drawerIconSize]: !localdrawerOpen,\n })}\n onClick={async (e) => {\n e.preventDefault();\n if (item?.allow_open && item?.allow_open !== \"Y\") {\n if (MessageBox) {\n await MessageBox({\n messageTitle: \"You are not authorized.\",\n message: `${item?.label} Screen is Restricted for ${authState?.role} user level.`,\n icon: \"ERROR\",\n });\n } else {\n console.error(\"MessageBox is not defined.\");\n }\n } else {\n if (item.isRouterLink) {\n let path = item.href;\n path =\n item.href?.substring(0, 1) === \"/\"\n ? item.href.substring(1)\n : item.href;\n if (item.passNavigationPropsAsURLParmas) {\n let urlParms = new URLSearchParams(item?.navigationProps);\n navigate(`${path}?${urlParms.toString()}`);\n } else {\n navigate(`${path}` as string, {\n state: { ...item?.navigationProps },\n });\n }\n } else if (Boolean(item.href)) {\n window.open(item.href, item.rel ?? \"_newtab\");\n }\n }\n }}\n >\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <span>{icon}</span>\n </Tooltip>\n {/* {console.log(localdrawerOpen, item.label.length)} */}\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText>\n </Tooltip>\n ) : localdrawerOpen ? (\n <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText>\n ) : null}\n {/* <ListItemText\n primary={item.label}\n className={classes.link}\n secondary={item.secondaryLabel ?? null}\n ></ListItemText> */}\n </ListItem>\n );\n};\n\nconst NestedListItem: FC<{\n item: NavItemType;\n classes: ReturnType<typeof useStylesSideBar>;\n level: number;\n handleDrawerOpen: Function;\n drawerOpen: boolean;\n slimSize?: boolean;\n rootUrl: string;\n dashboardUrl?: string;\n navigate: NavigateFunction;\n MessageBox?: any;\n authState?: any;\n}> = ({\n item,\n classes,\n level,\n handleDrawerOpen,\n drawerOpen,\n slimSize,\n rootUrl,\n navigate,\n MessageBox,\n authState,\n}) => {\n const [open, setOpen] = useState(false);\n const handleClick = () => {\n if (!drawerOpen) {\n // handleDrawerOpen();\n }\n setOpen(!open);\n };\n const childrens = item.children?.map((one) => {\n if (Array.isArray(one.children)) {\n return (\n <NestedListItem\n key={one.label}\n item={one}\n classes={classes}\n level={level + 1}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={drawerOpen}\n slimSize={slimSize}\n rootUrl={rootUrl}\n navigate={navigate}\n />\n );\n } else {\n return (\n <SingleListItem\n key={one.label}\n item={one}\n classes={classes}\n level={level + 1}\n slimSize={slimSize}\n rootUrl={rootUrl}\n navigate={navigate}\n MessageBox={MessageBox}\n authState={authState}\n />\n );\n }\n });\n let labelStart: any =\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\n\n const icon =\n item.icon?.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\n </ListItemIcon>\n ) : (\n <ListItemIcon className={classes.listIcon}>\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\n </ListItemIcon>\n );\n\n const levelClassName =\n level === 1\n ? classes.nestedMenuLevel1\n : level === 2\n ? classes.nestedMenuLevel2\n : \"\";\n return (\n <>\n <ListItem\n button\n onClick={handleClick}\n disableGutters\n className={\n open\n ? clsx({\n [classes.item]: true,\n [levelClassName]: Boolean(levelClassName),\n [classes.slimList]: Boolean(slimSize),\n [classes.openCurrent]: true,\n [classes.drawerIconSize]: !localdrawerOpen,\n })\n : clsx({\n [classes.item]: true,\n [levelClassName]: Boolean(levelClassName),\n [classes.slimList]: Boolean(slimSize),\n [classes.drawerIconSize]: !localdrawerOpen,\n })\n }\n >\n <Tooltip\n title={item.label}\n arrow={true}\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\n >\n <span>{icon}</span>\n </Tooltip>\n {/* {icon} */}\n {drawerOpen || !Boolean(icon) ? (\n <>\n <ListItemText\n primary={item.label}\n secondary={item.secondaryLabel ?? null}\n color=\"primary\"\n className={classes.link}\n ></ListItemText>\n {open ? <ExpandLess /> : <ExpandMore />}\n </>\n ) : null}\n </ListItem>\n\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List\n component=\"div\"\n disablePadding\n className={open ? classes.openList : \"\"}\n >\n {childrens}\n </List>\n </Collapse>\n </>\n );\n};\nconst isActiveMenuFromhref = (\n location,\n menuhref,\n navigationProps,\n rootUrl,\n dashboardUrl,\n) => {\n if (\n (location === `/${rootUrl}` || location === `/${rootUrl}/`) &&\n menuhref === dashboardUrl\n ) {\n return true;\n } else if (menuhref === \"report\") {\n try {\n let urlParms = new URLSearchParams(navigationProps);\n if (\"?\" + urlParms.toString() === window.location.search) {\n return true;\n }\n } catch (error) {\n console.log(error);\n }\n return false;\n } else if (\n location !== `/${rootUrl}` &&\n location !== \"/\" &&\n Boolean(menuhref) &&\n location.includes(menuhref)\n ) {\n return true;\n }\n return false;\n};\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, useMemo, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { SearchBar } from \"@acuteinfo/common-base\";\nimport ArrowBackIosNewIcon from \"@mui/icons-material/ArrowBackIosNew\";\nimport { useStylesSideBar } from \"./style\";\nimport { filterMetaDataByValue } from \"./filterMetaData\";\nimport { SideBarNav } from \"./sideBarNavigation\";\nimport { SideBarRendererType } from \"./types\";\nimport { ListItem, ListItemIcon, ListItemText } from \"@mui/material\";\nimport { NavigateFunction } from \"react-router-dom\";\n\ninterface NewSideBarNav extends SideBarRendererType {\n label: string;\n icon?: any;\n placeholder?: any;\n rootUrl: string;\n dashboardUrl?: string;\n navigate: NavigateFunction;\n MessageBox?: any;\n}\n\nexport const SearchViewNavigation: FC<NewSideBarNav> = ({\n metaData,\n handleDrawerOpen,\n drawerOpen,\n setView,\n label,\n icon,\n placeholder = \"Search Reports...\",\n rootUrl,\n dashboardUrl,\n navigate,\n MessageBox,\n}) => {\n const [search, setSearch] = useState(\"\");\n const filteredMetaData = useMemo(() => {\n return filterMetaDataByValue(search, metaData.navItems, [\n \"label\",\n \"secondaryLabel\",\n ]);\n }, [search, metaData.navItems]);\n const classes = useStylesSideBar();\n\n const myIcon = icon ? (\n <ListItemIcon className={classes.listIcon}>\n <ArrowBackIosNewIcon />\n </ListItemIcon>\n ) : null;\n const handleClick = () => {\n if (!drawerOpen) {\n handleDrawerOpen();\n }\n };\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <ListItem\n button\n className={clsx({\n [classes.item]: true,\n [classes.nestedMenuLevel1]: true,\n [classes.linktext]: true,\n })}\n onClick={() => setView(\"/\")}\n sx={{ width: !drawerOpen ? \"80% !important\" : \"auto\" }}\n >\n {myIcon}\n <ListItemText primary={label} className={classes.link} />\n </ListItem>\n {/* <div onClick={handleDrawerOpen}> */}\n <SearchBar\n sx={{ overflow: \"hidden\" }}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onClick={handleClick}\n placeholder={Boolean(placeholder) ? placeholder : \"Search Reports...\"}\n autoFocus={drawerOpen}\n />\n {/* </div> */}\n <SideBarNav\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={drawerOpen}\n setView={setView}\n metaData={{\n navItems: filteredMetaData,\n config: { rel: \"\", target: \"_blank\" },\n }}\n slimSize={true}\n isFromSeparetView={true}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n MessageBox={MessageBox}\n />\n </div>\n );\n};\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\";\nimport { reportMetaData } from \"./reportMetaData\";\nimport { SideBarNav } from \"./navigation\";\nimport { SearchViewNavigation } from \"./navigation/searchViewNavigation\";\nimport \"./icons\";\nimport { transformMetaDataAsPerRole } from \"./transformer\";\n\n/* eslint-disable react-hooks/exhaustive-deps */\nexport const SideBar = ({\n authState,\n handleDrawerOpen,\n open,\n rootUrl,\n dashboardUrl = \"dashboard\",\n navigate,\n}) => {\n const [view, setView] = useState(\"/\");\n const [NewFilterView, setNewFilterView] = useState<any>({});\n const [NewFilterData, setNewFilterData] = useState([]);\n\n const branches = useMemo(() => {\n let myBranches = authState?.access?.entities?.Branch ?? [];\n if (Array.isArray(myBranches) && myBranches.length >= 0) {\n return myBranches.map((one) => one.branchCode);\n } else {\n return [];\n }\n }, []);\n\n const products = useMemo(() => {\n let myProducts = authState?.access?.products ?? [];\n if (Array.isArray(myProducts) && myProducts.length >= 0) {\n return myProducts.map((one) => one.categoryCode);\n } else {\n return [];\n }\n }, []);\n let newMetaData = { navItems: authState.menulistdata };\n let filteredMetaDataSideBar = transformMetaDataAsPerRole(\n newMetaData,\n Number(authState.role),\n branches,\n authState.companyID,\n authState.access,\n products,\n );\n\n let filteredReportsMetaData = transformMetaDataAsPerRole(\n {\n config: { rel: \"\", target: \"_blank\" },\n navItems: reportMetaData,\n },\n Number(authState.role),\n branches,\n authState.companyID,\n authState.access,\n products,\n );\n return view === \"report\" ? (\n <SearchViewNavigation\n metaData={filteredReportsMetaData}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={open}\n setView={setView}\n label=\"Reports\"\n icon=\"table\"\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n />\n ) : view === \"newfilterview\" ? (\n <SearchViewNavigation\n metaData={{\n config: { rel: \"\", target: \"_blank\" },\n navItems: NewFilterData,\n }}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={open}\n setView={setView}\n label={NewFilterView?.label ?? \"Reports\"}\n icon=\"table\"\n placeholder={NewFilterView?.placeholder}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n />\n ) : (\n <>\n <SideBarNav\n metaData={filteredMetaDataSideBar}\n handleDrawerOpen={handleDrawerOpen}\n drawerOpen={open}\n setView={setView}\n slimSize={true}\n setNewFilterData={setNewFilterData}\n setNewFilterView={setNewFilterView}\n rootUrl={rootUrl}\n dashboardUrl={dashboardUrl}\n navigate={navigate}\n authState={authState}\n />\n </>\n );\n};\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}\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 <div className={classes.toolbarIcon}></div>\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","btnshow","setbtnshow","resendotpLoading","setResendotpLoading","enqueueSnackbar","useSnackbar","Boolean","authType","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","matchFinger","rows","captureFinger","Promise","resolve","reject","JSON","parse","forEach","element","i","MFS100Request","GalleryTemplate","encryptString","keyBytes","CryptoJS","PBKDF2","keySize","iterations","console","log","toString","lib","WordArray","init","words","iv","splice","dec","AES","decrypt","ciphertext","enc","Base64","Utf8","fromCharCode","join","decryptString","IMG_DATA","ProbTemplate","BioType","jsondata","stringify","fetch","method","headers","Accept","body","then","response","json","ErrorCode","errorCode","errorMessage","isError","sr_cd","SR_CD","ErrorMessage","catch","reason","err","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","oldpassword","confirmpassword","pwdReset","setPasswordReset","isLoading","isoldPwdError","oldpassworderror","isnewpwdError","newpassworderror","isconfirmnewpwdError","confirmnewpassworderror","paddingBottom","setPwdData","pwdData","ValidatePassword","validateStatus","validateData","USER_ID","PASSWORD","SCREEN_REF","O_STATUS","O_MESSAGE","inititalState","firstName","lastName","OtpuserMessage","currentFlow","transactionID","access_token","token_type","reducer","state","action","isOTPError","payload","errorPassword","errorUsername","otpmodelclose","auth_data","totpReg","secretTocken","secretTockenQR","AuthControllerWrapper","logoUrl","logoTitle","loginFn","veirfyUsernameandPassword","verifyOTP","LanguageComponent","onOtpVerifyFailFn","dispath","useReducer","openpwdreset","setOpenPwdReset","failureCount","dashboardLogoURL","setDashboardLogoURL","otpResendRef","MessageBox","usePopupContext","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","messageTitle","Error","OTPNumber","newRequestID","fingerResponse","Quality","TimeOut","rawResponse","API.capture","promise","IsoTemplate","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","resdata","USER_NAME","MESSAGE","COMP_CD","BRANCH_CD","trim","BranchSelectionGridMetaData","gridConfig","dense","gridLabel","rowIdColumn","defaultColumnConfig","allowColumnReordering","disableSorting","hideHeader","disableGroupBy","enablePagination","containerHeight","min","max","allowFilter","allowColumnHiding","allowRowSelection","isCusrsorFocused","hideFooter","columns","accessor","columnName","sequence","alignment","componentType","dateFormat","heading_user_img","heading_user_img_border","actions","actionName","actionLabel","multiple","rowDoubleClick","actionTextColor","actionBackground","startsIcon","onEnterSubmit","endsIcon","BranchSelectionGrid","selectionMode","authState","isBranchSelectedFn","isLoggedInFn","logoutFn","logos","BranchSelectionGridDataApiFn","GetMenuDataApiFn","sideImage","branchSelectFn","dashboardUrl","loginUrl","appTranCd","isFetching","refetch","useQuery","queryClient","removeQueries","mutation","useMutation","onSuccess","extreData","menulistdata","branchCode","branch","BRANCH_NM","baseBranchCode","getError","setCurrentAction","useCallback","icon","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","oneBranchOpen","LightTooltip","styled","props","popper","tooltipClasses","tooltip","backgroundColor","common","white","shadows","xl","visibility","profile","Stack","Box","roleName","placement","Avatar","userId","greet","hours","getHours","Greetings","Waving_hand","bank","companyName","employeeID","Alert","severity","errorMsg","error_msg","errorDetail","error_detail","GridWrapper","finalMetaData","setData","setAction","controlsAtBottom","actionContextAtBottom","headerToolbarStyle","disableMultipleRowSelect","defaultSelectedRowId","Button","right","bottom","BranchSelectionGridWrapper","ClearCacheProvider","appBar","transitions","create","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","AppbarWrapper","handleDrawerOpen","handleDrawerClose","SearchComponent","bankLogo","profilePic","handleLogout","handleProfile","hideGreetings","menuIconConfig","optionalComponents","idleTimer","countdownMessage","setCountdownMessage","blinker","setBlinker","CloseIconComponent","OpenIconComponent","menuIconPosition","interval","setInterval","getRemainingTime","remainingSeconds","Math","floor","prev","clearInterval","AppBar","elevation","Toolbar","disableRipple","MenuOutlinedIcon","version","mx","BecomePartnerImg","component","noWrap","workingDate","checkDateAndDisplay","format","lastLogin","paddingRight","map","Component","arrow","LogoutIcon","dateStr","drawerPaper","zIndex","drawerPaperClose","overflowX","up","toolbarIcon","mixins","hrCSS","buttonLink","reportMetaData","navBarCSS","headerDropdown","navLinkHeader","productLink","font13","loginDropdown","useStylesSideBar","root","drawer","drawerIconSize","justifyItems","btnRoot","navLinks","navLinksforseparateView","nestedMenuLevel1","nestedMenuLevel2","listIcon","link","textOverflow","fontweight","linktext","faSmall","openList","openCurrent","slimList","activeMenuItem","localdrawerOpen","SideBarNav","metaData","drawerOpen","setView","slimSize","setNewFilterData","setNewFilterView","isFromSeparetView","rootUrl","result","Array","isArray","navItems","one","seperateView","SeperateListView","level","NestedListItem","SingleListItem","List","disablePadding","ScrollBar","labelStart","substring","ListItemIcon","FontAwesomeIcon","levelClassName","ListItem","disableGutters","viewName","newChield","item1","secondaryLabel","user_code","ListItemText","isActiveMenu","isActiveMenuFromhref","window","location","pathname","navigationProps","titleText","document","allow_open","role","isRouterLink","path","passNavigationPropsAsURLParmas","urlParms","URLSearchParams","rel","childrens","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","menuhref","matchByValue","tags","navItem","toLocaleLowerCase","filterMetaDataByValue","searchString","tagsToSearch","newNavItems","newItem","newChildren","push","SearchViewNavigation","setSearch","filteredMetaData","myIcon","ArrowBackIosNewIcon","SearchBar","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","branches","company","access","products","newnavItem","filterMetaData","matchBranches","userBranches","accessBranches","indexOf","matchInvisibleRoles","userRole","accessRoles","matchProducts","userProducts","accessProducts","Number","visibleToRoles","userCompany","accessCompany","visibleToCompanies","visibleToBranches","invisibleToRoles","visibleToProducts","system_code","SideBar","view","NewFilterView","NewFilterData","myBranches","entities","Branch","myProducts","categoryCode","newMetaData","filteredMetaDataSideBar","companyID","filteredReportsMetaData","SidebarWrapper","Drawer","paper"],"mappings":"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"}
|