@acuteinfo/common-screens 1.0.64 → 1.0.66

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.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}) => {\r\n const [input, setInput] = useState({ userName: \"\", password: \"\" });\r\n const [showPasswordTime, setShowPasswordTime] = useState(0);\r\n const showPassword = Date.now() < showPasswordTime;\r\n const [, forceUpdate] = useState<any | null>();\r\n const timerRef = useRef<any>(null);\r\n const { 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 (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={input.password}\r\n onChange={handleChange}\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 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 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\"\r\n ? t(\"otp.EnterOTPsentToMobile\")\r\n : loginState?.authType === \"TOTP\"\r\n ? t(\"otp.PleaseEnterOTP\")\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?.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 style={{ flex: \"auto\" }}>\r\n <a href=\"forgot-totp\" style={{ color: \"var(--theme-color3)\" }}>\r\n Forgot TOTP\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 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 }\r\n }, [loginState.otpmodelClose]);\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 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.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};\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 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 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 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 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 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 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 };\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\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}) => {\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 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 },\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 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(data);\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 };\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 />\r\n ) : (\r\n <>\r\n {loginState.authType === \"OTP\" ? (\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 ) : loginState.authType === \"TOTP\" ? (\r\n <>\r\n {\" \"}\r\n <OTPModelForm\r\n key={\"OTPForm\"}\r\n OTPResendRequest={OTPResendRequest}\r\n classes={classes}\r\n // handleClose={() => {}}\r\n handleClose={changeUserName}\r\n loginState={loginState}\r\n VerifyOTP={VerifyOTP}\r\n OTPError={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={\"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 ) : (\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}) => {\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 (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 || \"\"}\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 || \"\"}\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 || \"\"}\r\n onChange={handleChange}\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 <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 || \"\"}\r\n onChange={handleChange}\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 auth_type: \"O\",\r\n transactionID: \"\",\r\n contactUser: \"\",\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 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 };\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 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 };\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 };\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 };\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 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}\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}) => {\r\n const classes = useStyles();\r\n const [loginState, dispath] = useReducer(reducer, inititalState);\r\n const [open, setOpen] = useState(false);\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\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 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 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 },\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 enqueueSnackbar(message, {\r\n variant: \"success\",\r\n });\r\n navigate(loginPageEndpoint);\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationComplate\",\r\n payload: { otpmodelclose: true },\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 ? \"Forgot TOTP\"\r\n : t(\"ForgotPassword\")}\r\n </h2>\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 />\r\n )}\r\n </Grid>\r\n </Container>\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n};\r\n","import { GridMetaDataType } from \"@acuteinfo/common-base\";\r\nexport const BranchSelectionGridMetaData: GridMetaDataType = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"Access Branch List\",\r\n rowIdColumn: \"BRANCH_CD\",\r\n // searchPlaceholder: \"Branches\",\r\n defaultColumnConfig: {\r\n width: 400,\r\n maxWidth: 450,\r\n minWidth: 300,\r\n },\r\n\r\n allowColumnReordering: false,\r\n disableSorting: false,\r\n hideHeader: false,\r\n disableGroupBy: true,\r\n enablePagination: false,\r\n containerHeight: {\r\n min: \"68vh\",\r\n max: \"68vh \",\r\n },\r\n allowFilter: false,\r\n allowColumnHiding: false,\r\n allowRowSelection: false,\r\n isCusrsorFocused: true,\r\n hideFooter: true,\r\n },\r\n columns: [\r\n {\r\n accessor: \"BRANCH_CD\",\r\n columnName: \"Branch Code\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 200,\r\n minWidth: 140,\r\n maxWidth: 220,\r\n },\r\n {\r\n accessor: \"BRANCH_NM\",\r\n columnName: \"Branch Name\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 280,\r\n minWidth: 280,\r\n maxWidth: 420,\r\n },\r\n {\r\n accessor: \"DISP_STATUS\",\r\n columnName: \"Status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 200,\r\n minWidth: 140,\r\n maxWidth: 220,\r\n },\r\n {\r\n accessor: \"BEGIN_DATETIME\",\r\n columnName: \"Begin Time\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n componentType: \"dateTime\",\r\n width: 222,\r\n minWidth: 140,\r\n maxWidth: 240,\r\n },\r\n {\r\n accessor: \"END_DATETIME\",\r\n columnName: \"End Time\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n componentType: \"dateTime\",\r\n width: 222,\r\n minWidth: 140,\r\n maxWidth: 240,\r\n },\r\n {\r\n accessor: \"DAYEND_STATUS\",\r\n columnName: \"Dayend Status\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"EOD_RUNNING_STATUS\",\r\n columnName: \"EOD Running Status\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"BASE_COMP_CD\",\r\n columnName: \"Base Comp Cd\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"BASE_BRANCH_CD\",\r\n columnName: \"Base Branch Cd\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"COMP_CD\",\r\n columnName: \"Comp Cd\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"COMP_NM\",\r\n columnName: \"Comp Name\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n ],\r\n};\r\n","import { 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 {\r\n GridWrapper,\r\n ActionTypes,\r\n GridMetaDataType,\r\n ClearCacheProvider,\r\n Alert,\r\n queryClient,\r\n} from \"@acuteinfo/common-base\";\r\n\r\nimport { Fragment, useCallback, useEffect } from \"react\";\r\nimport { BranchSelectionGridMetaData } from \"./gridMetadata\";\r\nimport \"./styles.css\";\r\nimport {\r\n Avatar,\r\n Box,\r\n Button,\r\n Grid,\r\n Stack,\r\n Tooltip,\r\n tooltipClasses,\r\n} from \"@mui/material\";\r\nimport { useMutation, useQuery } from \"react-query\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport bank_logo_default from \"../../assets/images/BecomePartnerImg.svg\";\r\nimport Waving_hand from \"../../assets/images/waving-hand.png\";\r\n\r\nimport { useStyles } from \"./style\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport USER_PROFILE_DEFAULT from \"../../assets/images/profile-default.png\";\r\nimport { BranchSelectionGridDataFnType, GetMenuDataFnType } from \"pages/types\";\r\nconst actions: ActionTypes[] = [\r\n {\r\n actionName: \"back\",\r\n actionLabel: \"Back\",\r\n multiple: false,\r\n rowDoubleClick: false,\r\n actionTextColor: \"var(--theme-color3)\",\r\n actionBackground: \"var(--white)\",\r\n startsIcon: \"West\",\r\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\r\n },\r\n {\r\n actionName: \"proceed\",\r\n actionLabel: \"Proceed\",\r\n multiple: false,\r\n rowDoubleClick: true,\r\n actionTextColor: \"var(--white)\",\r\n actionBackground: \"var(--theme-color3)\",\r\n onEnterSubmit: true,\r\n endsIcon: \"East\",\r\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\r\n },\r\n];\r\n\r\ninterface BranchSelectionWrapperProps {\r\n selectionMode: \"S\" | \"C\";\r\n authState: any;\r\n isBranchSelectedFn: () => boolean;\r\n isLoggedInFn: () => boolean;\r\n logoutFn: () => void;\r\n branchSelectFn: Function;\r\n BranchSelectionGridDataApiFn: BranchSelectionGridDataFnType;\r\n GetMenuDataApiFn: GetMenuDataFnType;\r\n sideImage?: string;\r\n logos: any;\r\n logo?: string;\r\n navigate: NavigateFunction;\r\n dashboardUrl: string;\r\n loginUrl: string;\r\n appTranCd: string;\r\n}\r\n\r\nconst BranchSelectionGrid: React.FC<BranchSelectionWrapperProps> = ({\r\n selectionMode,\r\n authState,\r\n isBranchSelectedFn,\r\n isLoggedInFn,\r\n logoutFn,\r\n logos,\r\n logo,\r\n navigate,\r\n BranchSelectionGridDataApiFn,\r\n GetMenuDataApiFn,\r\n sideImage,\r\n branchSelectFn,\r\n dashboardUrl,\r\n loginUrl,\r\n appTranCd,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { data, isLoading, isFetching, error, isError } = useQuery<any, any>(\r\n [\"BranchSelectionGridData\"],\r\n () => BranchSelectionGridDataApiFn(),\r\n );\r\n\r\n useEffect(() => {\r\n return () => {\r\n queryClient.removeQueries([\"BranchSelectionGridData\", {}]);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoggedInFn()) {\r\n navigate(loginUrl);\r\n } else if (isBranchSelectedFn() && selectionMode !== \"C\") {\r\n navigate(dashboardUrl);\r\n }\r\n }, [isBranchSelectedFn, isLoggedInFn]);\r\n\r\n type MutationErrorType = {\r\n severity: string;\r\n error_msg: string;\r\n error_detail: string;\r\n };\r\n\r\n const mutation: any = useMutation(GetMenuDataApiFn, {\r\n onSuccess: (data, extreData: any) => {\r\n branchSelectFn({\r\n menulistdata: data,\r\n branchCode: extreData?.BRANCH_CD,\r\n branch: extreData?.BRANCH_NM,\r\n baseBranchCode: extreData?.BASE_BRANCH_CD,\r\n });\r\n },\r\n });\r\n const getError: any = mutation.error as MutationErrorType;\r\n const setCurrentAction = useCallback(\r\n (data) => {\r\n if (data.name === \"proceed\") {\r\n if (data.rows?.length === 0) {\r\n enqueueSnackbar(\"Please Select Branch\", {\r\n variant: \"error\",\r\n });\r\n } else if (data.rows?.[0]?.data?.STATUS === \"C\") {\r\n enqueueSnackbar(\r\n \"Branch is in Day End Status.~rPlease contact system Vendor.\",\r\n {\r\n variant: \"error\",\r\n },\r\n );\r\n } else {\r\n mutation.mutate({\r\n BASE_COMP_CD: data.rows?.[0]?.data?.BASE_COMP_CD ?? \"\",\r\n BASE_BRANCH_CD: data.rows?.[0]?.data?.BASE_BRANCH_CD ?? \"\",\r\n COMP_CD: data.rows?.[0]?.data?.COMP_CD ?? \"\",\r\n BRANCH_CD: data.rows?.[0]?.data?.BRANCH_CD ?? \"\",\r\n GROUP_NAME: authState?.groupName ?? \"\",\r\n APP_TRAN_CD: appTranCd,\r\n COMP_NM: data.rows?.[0]?.data?.COMP_NM ?? \"\",\r\n BRANCH_NM: data.rows?.[0]?.data?.BRANCH_NM ?? \"\",\r\n DAYEND_STATUS: data.rows?.[0]?.data?.DAYEND_STATUS ?? \"\",\r\n EOD_RUNNING_STATUS: data.rows?.[0]?.data?.EOD_RUNNING_STATUS ?? \"\",\r\n IS_UPD_DEF_BRANCH: authState?.user?.isUpdDefBranch ?? \"\",\r\n COMP_BASE_BRANCH_CD:\r\n data.rows?.[0]?.data?.COMP_BASE_BRANCH_CD ?? \"\",\r\n selectionMode: selectionMode,\r\n });\r\n }\r\n } else if (data.name === \"back\") {\r\n if (selectionMode === \"C\") {\r\n navigate(dashboardUrl, {\r\n replace: true,\r\n });\r\n } else {\r\n logoutFn();\r\n }\r\n }\r\n },\r\n [navigate, data, mutation],\r\n );\r\n\r\n useEffect(() => {\r\n var oneBranchOpen = data?.some((branch) => branch.STATUS === \"O\");\r\n if (oneBranchOpen === false) {\r\n enqueueSnackbar(\r\n \"Branch is in Day End Status.~rPlease contact system Vendor.\",\r\n {\r\n variant: \"error\",\r\n },\r\n );\r\n logoutFn();\r\n }\r\n if (data?.length === 1) {\r\n if (data?.[0]?.STATUS === \"O\") {\r\n setCurrentAction({ name: \"proceed\", rows: [{ data: { ...data[0] } }] });\r\n }\r\n }\r\n }, [JSON.stringify(data)]);\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 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\r\n // const greet = Greetings();\r\n\r\n return (\r\n <>\r\n <Grid\r\n container\r\n style={{\r\n margin: \"0\",\r\n padding: \"0\",\r\n height: \"100vh\",\r\n // overflowY: \"hidden\",\r\n }}\r\n >\r\n {sideImage ? (\r\n <Grid item lg={1} md={1} xl={1} xs={1} sm={1}>\r\n <img className=\"sideImage\" src={sideImage} alt=\"side-Image\" />\r\n </Grid>\r\n ) : null}\r\n\r\n <Grid\r\n item\r\n lg={11}\r\n md={11}\r\n xl={11}\r\n xs={11}\r\n style={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Grid\r\n container\r\n style={{\r\n minHeight: \"100vh\",\r\n padding: \"10px 0px 0px 0px\",\r\n }}\r\n lg={11}\r\n md={11}\r\n xl={11}\r\n xs={11}\r\n >\r\n <Grid\r\n container\r\n style={{\r\n margin: \"0\",\r\n padding: \"0\",\r\n // height: \"12vh\",\r\n }}\r\n lg={12}\r\n md={12}\r\n xl={12}\r\n xs={12}\r\n >\r\n <Grid\r\n xs={12}\r\n sm={1}\r\n md={1}\r\n lg={1}\r\n xl={1}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n // justifyContent: \"center\",\r\n }}\r\n >\r\n <Stack direction=\"row\" spacing={4} ml={1}>\r\n <Box\r\n className={classes.heading_user_img_border}\r\n sx={{ cursor: \"pointer\" }}\r\n >\r\n <LightTooltip\r\n title={\r\n <>\r\n <div>User ID : {authState?.user?.id ?? \"\"}</div>\r\n <div>Role : {authState?.roleName ?? \"\"}</div>\r\n <div>Last Unsuccessful Login : \"\"</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={handleNavigate}\r\n alt=\"Remy Sharp\"\r\n src={\r\n Boolean(logos?.profile)\r\n ? logos?.profile\r\n : USER_PROFILE_DEFAULT\r\n }\r\n />\r\n </LightTooltip>\r\n </Box>\r\n </Stack>\r\n </Grid>\r\n <Grid\r\n xs={12}\r\n sm={5}\r\n md={5}\r\n lg={5}\r\n xl={5}\r\n sx={{\r\n justifyContent: \"center\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }}\r\n >\r\n <h1\r\n className=\"name-heading\"\r\n style={{ fontSize: \"24px\", margin: \"4px 0px\" }}\r\n >\r\n Welcome <span>{`${authState?.user?.name ?? \"\"},`}</span>\r\n </h1>\r\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\r\n <h3 style={{ margin: \"4px 0px\" }}>{Greetings()}</h3>\r\n <img src={Waving_hand} alt=\"\" style={{ height: \"18px\" }} />\r\n </div>\r\n </Grid>\r\n <Grid\r\n xs={12}\r\n sm={1}\r\n md={1}\r\n lg={1}\r\n xl={1}\r\n sx={{\r\n display: \"flex\",\r\n // flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <Stack direction=\"row\" justifyContent=\"flex-start\" spacing={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={\r\n Boolean(logos?.bank) ? logos?.bank : bank_logo_default\r\n }\r\n />\r\n </Box>\r\n </Stack>\r\n </Grid>\r\n <Grid\r\n xs={12}\r\n sm={3}\r\n md={3}\r\n lg={3}\r\n xl={3}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <div\r\n className=\"bank-name-container\"\r\n style={{ fontSize: \"14px\" }}\r\n >\r\n <p className=\"bank-name\">\r\n {`Bank Name: ${authState?.companyName ?? \"\"}`}\r\n </p>\r\n </div>\r\n\r\n <p className=\"emp-id\">\r\n {`Emp. Id: ${authState?.user?.employeeID ?? \"\"}`}\r\n </p>\r\n </Grid>\r\n <Grid\r\n xs={12}\r\n sm={3}\r\n md={3}\r\n lg={2}\r\n xl={2}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"right\",\r\n }}\r\n >\r\n {\" \"}\r\n <div>\r\n <img\r\n src={Boolean(logos?.logo) ? logos?.logo : logo}\r\n alt=\"bank_logo\"\r\n className={classes.logo}\r\n />\r\n </div>\r\n </Grid>\r\n </Grid>\r\n\r\n {isError ? (\r\n <Fragment>\r\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\r\n <Alert\r\n severity={error?.severity ?? \"error\"}\r\n errorMsg={error?.error_msg ?? \"Error\"}\r\n errorDetail={error?.error_detail ?? \"\"}\r\n />\r\n </div>\r\n </Fragment>\r\n ) : mutation.isError && mutation.error ? (\r\n <Fragment>\r\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\r\n <Alert\r\n severity={getError.severity ?? \"error\"}\r\n errorMsg={getError.error_msg ?? \"Error\"}\r\n errorDetail={getError.error_detail ?? \"\"}\r\n />\r\n </div>\r\n </Fragment>\r\n ) : null}\r\n <GridWrapper\r\n key={`branchSelection`}\r\n finalMetaData={BranchSelectionGridMetaData as GridMetaDataType}\r\n data={data ?? []}\r\n setData={() => null}\r\n actions={actions}\r\n setAction={setCurrentAction}\r\n controlsAtBottom={true}\r\n actionContextAtBottom={true}\r\n headerToolbarStyle={{\r\n background: \"#fff !important\",\r\n padding: \"0\",\r\n \"& .MuiTypography-root\": {\r\n color: \"black\",\r\n },\r\n }}\r\n disableMultipleRowSelect={true}\r\n variant=\"outlined\"\r\n loading={isLoading || isFetching || mutation.isLoading}\r\n defaultSelectedRowId={authState?.user?.branchCode ?? null}\r\n />\r\n {isError || data?.length === 0 ? (\r\n <Button\r\n sx={{\r\n backgroundColor: \"var(--theme-color3)\",\r\n position: \"absolute\",\r\n right: \"113px\",\r\n bottom: \"20px\",\r\n width: \"7rem\",\r\n \"&:hover\": {\r\n backgroundColor: \"var(--theme-color3)\",\r\n },\r\n }}\r\n onClick={() => {\r\n if (selectionMode === \"C\") {\r\n navigate(dashboardUrl, {\r\n replace: true,\r\n });\r\n } else {\r\n logoutFn();\r\n }\r\n }}\r\n >\r\n Back\r\n </Button>\r\n ) : null}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n};\r\n\r\nexport const BranchSelectionGridWrapper: React.FC<\r\n BranchSelectionWrapperProps\r\n> = (props) => {\r\n return (\r\n <ClearCacheProvider>\r\n <BranchSelectionGrid {...props} />\r\n </ClearCacheProvider>\r\n );\r\n};\r\n","import { alpha } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: any) => ({\r\n appBar: {\r\n // zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n color: \"#0063A3\",\r\n height: \"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}));\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\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 menuIconPosition?: \"left\" | \"right\";\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 menuIconPosition = \"left\",\r\n}) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\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 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: \"227px\",\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 <MenuOutlinedIcon fontSize=\"large\" />\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 <MenuOutlinedIcon fontSize=\"large\" />\r\n </IconButton>\r\n )}\r\n\r\n <div>\r\n <img\r\n src={Boolean(logos?.logo) ? logos?.logo : 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 </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 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 maxWidth={170} display={\"flex\"} justifyContent={\"end\"}>\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=\"show 4 new mails\"\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 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: \"90%\",\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 9px rgba(93, 95, 121, 0.26)\",\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.6s 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 //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-color6)\",\r\n },\r\n },\r\n}));\r\n","import { FC } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { NavItemType, SideBarRendererType } from \"./types\";\r\nimport { useStylesSideBar } from \"./style\";\r\nimport ScrollBar from \"react-perfect-scrollbar\";\r\nimport {\r\n Collapse,\r\n List,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n Tooltip,\r\n} from \"@mui/material\";\r\nimport { ExpandLess, ExpandMore } from \"@mui/icons-material\";\r\nlet localdrawerOpen = true;\r\n\r\ninterface SideBarNavProps extends SideBarRendererType {\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n}\r\n\r\nexport const SideBarNav: FC<SideBarNavProps> = ({\r\n metaData,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n setView,\r\n slimSize,\r\n setNewFilterData,\r\n setNewFilterView,\r\n isFromSeparetView = false,\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n}) => {\r\n const classes = useStylesSideBar();\r\n let result: JSX.Element[] | null = null;\r\n localdrawerOpen = drawerOpen;\r\n if (Array.isArray(metaData.navItems)) {\r\n result = metaData.navItems.map((one) => {\r\n if (one?.seperateView === true) {\r\n return (\r\n <SeperateListView\r\n key={one.label}\r\n item={one}\r\n setView={setView}\r\n classes={classes}\r\n level={0}\r\n slimSize={slimSize}\r\n setNewFilterData={setNewFilterData}\r\n setNewFilterView={setNewFilterView}\r\n />\r\n );\r\n } else if (Array.isArray(one.children)) {\r\n return (\r\n <NestedListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={0}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n );\r\n } else {\r\n return (\r\n <SingleListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={0}\r\n slimSize={slimSize}\r\n drawerOpen={drawerOpen}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n );\r\n }\r\n });\r\n }\r\n return (\r\n <List\r\n component=\"nav\"\r\n disablePadding\r\n className={\r\n isFromSeparetView ? classes.navLinksforseparateView : classes.navLinks\r\n }\r\n >\r\n <ScrollBar>{result}</ScrollBar>\r\n </List>\r\n );\r\n};\r\n\r\nconst SeperateListView: FC<{\r\n item: NavItemType;\r\n setView: any;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n slimSize?: boolean;\r\n setNewFilterData?: any;\r\n setNewFilterView?: any;\r\n}> = ({\r\n item,\r\n setView,\r\n level,\r\n classes,\r\n slimSize,\r\n setNewFilterData,\r\n setNewFilterView,\r\n}) => {\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n // const icon = item.icon ? (\r\n // <ListItemIcon className={classes.listIcon}>\r\n // <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n // </ListItemIcon>\r\n // ) : null;\r\n\r\n const icon =\r\n item.icon?.toLowerCase() !== \"process.gif\" && item.icon ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n );\r\n\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n\r\n return (\r\n <ListItem\r\n button\r\n disableGutters\r\n className={clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })}\r\n onClick={() => {\r\n if (item.viewName === \"newfilterview\" && Array.isArray(item.children)) {\r\n setNewFilterView({\r\n label: item.label,\r\n placeholder: \"Search \" + item.label + \" Screen...\",\r\n });\r\n let newChield = item.children.map((item1) => {\r\n return { ...item1, secondaryLabel: item1.user_code };\r\n });\r\n setNewFilterData(newChield);\r\n }\r\n setView(item.viewName);\r\n }}\r\n >\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n </Tooltip>\r\n ) : localdrawerOpen ? (\r\n <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n ) : null}\r\n </ListItem>\r\n );\r\n};\r\n\r\nconst SingleListItem: FC<{\r\n item: NavItemType;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n slimSize?: boolean;\r\n drawerOpen?: any;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n}> = ({\r\n item,\r\n classes,\r\n level,\r\n slimSize,\r\n drawerOpen,\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n}) => {\r\n const isActiveMenu = isActiveMenuFromhref(\r\n window.location?.pathname ?? \"\",\r\n item?.href ?? \"\",\r\n item?.navigationProps,\r\n rootUrl,\r\n dashboardUrl,\r\n );\r\n if (isActiveMenu) {\r\n // GeneralAPI.setDocumentName(item.label);\r\n let titleText = document.title;\r\n document.title = titleText.split(\" - \")[0] + \" - \" + item.label;\r\n }\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n\r\n const icon =\r\n item.icon.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n );\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n return (\r\n <ListItem\r\n button\r\n disableGutters\r\n className={clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.activeMenuItem]: isActiveMenu,\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n if (item.isRouterLink) {\r\n let path = item.href;\r\n path =\r\n item.href?.substring(0, 1) === \"/\"\r\n ? item.href.substring(1)\r\n : item.href;\r\n if (item.passNavigationPropsAsURLParmas) {\r\n let urlParms = new URLSearchParams(item?.navigationProps);\r\n navigate(`${path}?${urlParms.toString()}`);\r\n } else {\r\n navigate(`${path}` as string, {\r\n state: { ...item?.navigationProps },\r\n });\r\n }\r\n } else if (Boolean(item.href)) {\r\n window.open(item.href, item.rel ?? \"_newtab\");\r\n }\r\n }}\r\n >\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {/* {console.log(localdrawerOpen, item.label.length)} */}\r\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n </Tooltip>\r\n ) : localdrawerOpen ? (\r\n <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n ) : null}\r\n {/* <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText> */}\r\n </ListItem>\r\n );\r\n};\r\n\r\nconst NestedListItem: FC<{\r\n item: NavItemType;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n handleDrawerOpen: Function;\r\n drawerOpen: boolean;\r\n slimSize?: boolean;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n}> = ({\r\n item,\r\n classes,\r\n level,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n slimSize,\r\n rootUrl,\r\n navigate,\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const handleClick = () => {\r\n if (!drawerOpen) {\r\n // handleDrawerOpen();\r\n }\r\n setOpen(!open);\r\n };\r\n const childrens = item.children?.map((one) => {\r\n if (Array.isArray(one.children)) {\r\n return (\r\n <NestedListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={level + 1}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n navigate={navigate}\r\n />\r\n );\r\n } else {\r\n return (\r\n <SingleListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={level + 1}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n navigate={navigate}\r\n />\r\n );\r\n }\r\n });\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n\r\n const icon =\r\n item.icon?.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n );\r\n\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n return (\r\n <>\r\n <ListItem\r\n button\r\n onClick={handleClick}\r\n disableGutters\r\n className={\r\n open\r\n ? clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.openCurrent]: true,\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })\r\n : clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })\r\n }\r\n >\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {/* {icon} */}\r\n {drawerOpen || !Boolean(icon) ? (\r\n <>\r\n <ListItemText\r\n primary={item.label}\r\n secondary={item.secondaryLabel ?? null}\r\n color=\"primary\"\r\n className={classes.link}\r\n ></ListItemText>\r\n {open ? <ExpandLess /> : <ExpandMore />}\r\n </>\r\n ) : null}\r\n </ListItem>\r\n\r\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n <List\r\n component=\"div\"\r\n disablePadding\r\n className={open ? classes.openList : \"\"}\r\n >\r\n {childrens}\r\n </List>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\nconst isActiveMenuFromhref = (\r\n location,\r\n menuhref,\r\n navigationProps,\r\n rootUrl,\r\n dashboardUrl,\r\n) => {\r\n if (\r\n (location === `/${rootUrl}` || location === `/${rootUrl}/`) &&\r\n menuhref === dashboardUrl\r\n ) {\r\n return true;\r\n } else if (menuhref === \"report\") {\r\n try {\r\n let urlParms = new URLSearchParams(navigationProps);\r\n if (\"?\" + urlParms.toString() === window.location.search) {\r\n return true;\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return false;\r\n } else if (\r\n location !== `/${rootUrl}` &&\r\n location !== \"/\" &&\r\n Boolean(menuhref) &&\r\n location.includes(menuhref)\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n","import { NavItemType } from \"./types\";\r\n\r\nconst matchByValue = (search, tags, navItem) => {\r\n if (!Array.isArray(tags)) {\r\n tags = [tags];\r\n }\r\n return tags.some((one) =>\r\n navItem[one]\r\n ?.toLocaleLowerCase?.()\r\n ?.includes(search?.toLocaleLowerCase?.()),\r\n );\r\n};\r\n\r\nexport const filterMetaDataByValue = (\r\n searchString: string,\r\n navItems: NavItemType[],\r\n tagsToSearch?: string[],\r\n): NavItemType[] => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (matchByValue(searchString, tagsToSearch, navItems[i])) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaDataByValue(\r\n searchString,\r\n children,\r\n tagsToSearch,\r\n );\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n newNavItems.push({ ...newItem });\r\n }\r\n }\r\n }\r\n return newNavItems;\r\n};\r\n","import { FC, useMemo, useState } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { SearchBar } from \"@acuteinfo/common-base\";\r\nimport ArrowBackIosNewIcon from \"@mui/icons-material/ArrowBackIosNew\";\r\nimport { useStylesSideBar } from \"./style\";\r\nimport { filterMetaDataByValue } from \"./filterMetaData\";\r\nimport { SideBarNav } from \"./sideBarNavigation\";\r\nimport { SideBarRendererType } from \"./types\";\r\nimport { ListItem, ListItemIcon, ListItemText } from \"@mui/material\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\n\r\ninterface NewSideBarNav extends SideBarRendererType {\r\n label: string;\r\n icon?: any;\r\n placeholder?: any;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n}\r\n\r\nexport const SearchViewNavigation: FC<NewSideBarNav> = ({\r\n metaData,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n setView,\r\n label,\r\n icon,\r\n placeholder = \"Search Reports...\",\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n}) => {\r\n const [search, setSearch] = useState(\"\");\r\n const filteredMetaData = useMemo(() => {\r\n return filterMetaDataByValue(search, metaData.navItems, [\r\n \"label\",\r\n \"secondaryLabel\",\r\n ]);\r\n }, [search, metaData.navItems]);\r\n const classes = useStylesSideBar();\r\n\r\n const myIcon = icon ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <ArrowBackIosNewIcon />\r\n </ListItemIcon>\r\n ) : null;\r\n const handleClick = () => {\r\n if (!drawerOpen) {\r\n handleDrawerOpen();\r\n }\r\n };\r\n return (\r\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\r\n <ListItem\r\n button\r\n className={clsx({\r\n [classes.item]: true,\r\n [classes.nestedMenuLevel1]: true,\r\n [classes.linktext]: true,\r\n })}\r\n onClick={() => setView(\"/\")}\r\n >\r\n {myIcon}\r\n <ListItemText primary={label} className={classes.link} />\r\n </ListItem>\r\n {/* <div onClick={handleDrawerOpen}> */}\r\n <SearchBar\r\n sx={{ overflow: \"hidden\" }}\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n onClick={handleClick}\r\n placeholder={Boolean(placeholder) ? placeholder : \"Search Reports...\"}\r\n autoFocus={drawerOpen}\r\n />\r\n {/* </div> */}\r\n <SideBarNav\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n setView={setView}\r\n metaData={{\r\n navItems: filteredMetaData,\r\n config: { rel: \"\", target: \"_blank\" },\r\n }}\r\n slimSize={true}\r\n isFromSeparetView={true}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n </div>\r\n );\r\n};\r\n","import { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport {\r\n faHandsHelping,\r\n faUsers,\r\n faBars,\r\n faBalanceScale,\r\n faHandHoldingHeart,\r\n faTasks,\r\n faCog,\r\n faHome,\r\n faTh,\r\n faUsersCog,\r\n faCircle,\r\n faUserCircle,\r\n faHashtag,\r\n faThumbtack,\r\n faSquare,\r\n faLink,\r\n faQuestion,\r\n faPlus,\r\n faTable,\r\n faLocationArrow,\r\n faHeadset,\r\n faGears,\r\n faArrowDown,\r\n faArrowUp,\r\n faSpinner,\r\n faCircleExclamation,\r\n faRotateRight,\r\n faUserLock,\r\n faUserClock,\r\n faGripHorizontal,\r\n faBarsProgress,\r\n faFileExport,\r\n faFileLines,\r\n faGear,\r\n faHeadphones,\r\n faUsersGear,\r\n faMessage,\r\n faUnlock,\r\n faUserPlus,\r\n faUserCheck,\r\n faKey,\r\n faIdCard,\r\n faIdBadge,\r\n faCheck,\r\n faCheckDouble,\r\n faCircleCheck,\r\n faPenToSquare,\r\n faCircleXmark,\r\n faUserTag,\r\n faAddressCard,\r\n faChartColumn,\r\n faUserPen,\r\n faHandHolding,\r\n faHandHoldingMedical,\r\n faObjectGroup,\r\n faTowerCell,\r\n faTowerObservation,\r\n faBuilding,\r\n faMailBulk,\r\n faLandmarkFlag,\r\n faCreditCard,\r\n faHospitalSymbol,\r\n faPlugCircleBolt,\r\n faCodeBranch,\r\n faPersonCircleCheck,\r\n faBank,\r\n faServer,\r\n faNotesMedical,\r\n faA,\r\n faB,\r\n faC,\r\n faD,\r\n faE,\r\n faF,\r\n faG,\r\n faH,\r\n faI,\r\n faJ,\r\n faK,\r\n faL,\r\n faM,\r\n faN,\r\n faO,\r\n faP,\r\n faQ,\r\n faR,\r\n faS,\r\n faT,\r\n faU,\r\n faV,\r\n faW,\r\n faX,\r\n faY,\r\n faZ,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nlibrary.add(\r\n faHandsHelping,\r\n faUsers,\r\n faBars,\r\n faBalanceScale,\r\n faHandHoldingHeart,\r\n faTasks,\r\n faCog,\r\n faHome,\r\n faTh,\r\n faUsersCog,\r\n faCircle,\r\n faUserCircle,\r\n faHashtag,\r\n faThumbtack,\r\n faSquare,\r\n faLink,\r\n faQuestion,\r\n faPlus,\r\n faTable,\r\n faLocationArrow,\r\n faHeadset,\r\n faGears,\r\n faArrowDown,\r\n faArrowUp,\r\n faSpinner,\r\n faCircleExclamation,\r\n faRotateRight,\r\n faUserLock,\r\n faUserClock,\r\n faGripHorizontal,\r\n faFileLines,\r\n faGear,\r\n faHeadphones,\r\n faUsersGear,\r\n faMessage,\r\n faUnlock,\r\n faUserPlus,\r\n faUserCheck,\r\n faKey,\r\n faIdCard,\r\n faIdBadge,\r\n faCheck,\r\n faCheckDouble,\r\n faCircleCheck,\r\n faCircleXmark,\r\n faUserTag,\r\n faAddressCard,\r\n faChartColumn,\r\n faUserPen,\r\n faHandHolding,\r\n faHandHoldingMedical,\r\n faObjectGroup,\r\n faTowerCell,\r\n faTowerObservation,\r\n faBuilding,\r\n faMailBulk,\r\n faLandmarkFlag,\r\n faCreditCard,\r\n faHospitalSymbol,\r\n faPlugCircleBolt,\r\n faCodeBranch,\r\n faPersonCircleCheck,\r\n faBank,\r\n faServer,\r\n faNotesMedical,\r\n faPenToSquare,\r\n faBarsProgress,\r\n faFileExport,\r\n faA,\r\n faB,\r\n faC,\r\n faD,\r\n faE,\r\n faF,\r\n faG,\r\n faH,\r\n faI,\r\n faJ,\r\n faK,\r\n faL,\r\n faM,\r\n faN,\r\n faO,\r\n faP,\r\n faQ,\r\n faR,\r\n faS,\r\n faT,\r\n faU,\r\n faV,\r\n faW,\r\n faX,\r\n faY,\r\n faZ,\r\n);\r\n","import { NavBarMetaDataType, NavItemType } from \"./navigation\";\r\nimport { cloneDeep } from \"lodash\";\r\n\r\nexport const transformMetaDataAsPerRole = (\r\n metaData: NavBarMetaDataType,\r\n role: number,\r\n branches: string[],\r\n company: string,\r\n access: any,\r\n products: string[],\r\n) => {\r\n let navItems = filterMetaData(\r\n metaData.navItems,\r\n role,\r\n branches,\r\n company,\r\n access,\r\n products,\r\n );\r\n //console.log(navItems);\r\n let newnavItem = navItems.map((item) => {\r\n let { children, ...newItem } = item;\r\n if (Array.isArray(children) && children.length > 5) {\r\n if (!Boolean(newItem.seperateView)) {\r\n newItem.seperateView = true;\r\n newItem.viewName = \"newfilterview\";\r\n //console.log(newItem);\r\n }\r\n }\r\n return { ...newItem, children: children };\r\n });\r\n return {\r\n config: metaData.config,\r\n navItems: newnavItem,\r\n };\r\n};\r\nexport const transformMetaDataAsPerMenuRights = (\r\n metaData: NavBarMetaDataType,\r\n authState: any,\r\n) => {\r\n let newMetadata = cloneDeep(metaData) as NavBarMetaDataType;\r\n let NavItem = filterMetaDataAsperRights(newMetadata.navItems, authState);\r\n newMetadata.navItems = NavItem;\r\n return newMetadata;\r\n};\r\nconst filterMetaDataAsperRights = (navItems, accessgroup) => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaDataAsperRights(children, accessgroup);\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n //if(newItem?.doccd) ///condition\r\n ///newNavItems.push({ ...newItem });\r\n }\r\n }\r\n return newNavItems;\r\n};\r\nconst matchBranches = (userBranches, accessBranches) => {\r\n if (!Array.isArray(accessBranches) || !Array.isArray(userBranches)) {\r\n return true;\r\n }\r\n if (accessBranches.length <= 0 || userBranches.length <= 0) {\r\n return true;\r\n }\r\n for (const one of accessBranches) {\r\n if (userBranches.indexOf(one) >= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nconst matchComany = (userCompany, accessCompany) => {\r\n if (!Array.isArray(accessCompany) || !Boolean(userCompany)) {\r\n return true;\r\n }\r\n if (accessCompany.length <= 0) {\r\n return true;\r\n }\r\n if (accessCompany.indexOf(userCompany) >= 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst matchRoles = (userRole, accessRoles) => {\r\n if (!Array.isArray(accessRoles) || typeof userRole !== \"number\") {\r\n return true;\r\n }\r\n if (accessRoles.length <= 0) {\r\n return true;\r\n }\r\n if (accessRoles.indexOf(userRole) >= 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst matchInvisibleRoles = (userRole, accessRoles) => {\r\n if (!Array.isArray(accessRoles) || typeof userRole !== \"number\") {\r\n return true;\r\n }\r\n if (accessRoles.length <= 0) {\r\n return true;\r\n }\r\n if (accessRoles.indexOf(userRole) >= 0) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nconst matchProducts = (userProducts, accessProducts) => {\r\n if (!Array.isArray(accessProducts) || !Array.isArray(userProducts)) {\r\n return true;\r\n }\r\n if (accessProducts.length <= 0 || userProducts.length <= 0) {\r\n return true;\r\n }\r\n\r\n for (const one of accessProducts) {\r\n if (userProducts.indexOf(one) >= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\nconst ishrefisNotNull = (item) => {\r\n if (\r\n !(Array.isArray(item.children) && item.children.length > 0) &&\r\n !Boolean(item.href)\r\n ) {\r\n //console.log(item);\r\n return false;\r\n }\r\n return true;\r\n};\r\nconst filterMetaData = (\r\n navItems: NavItemType[],\r\n role: number,\r\n branches: string[],\r\n company: string,\r\n access: any,\r\n products: string[],\r\n): NavItemType[] => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (\r\n matchRoles(Number(role), navItems[i].visibleToRoles) &&\r\n matchComany(company, navItems[i].visibleToCompanies) &&\r\n matchBranches(branches, navItems[i].visibleToBranches) &&\r\n matchInvisibleRoles(Number(role), navItems[i].invisibleToRoles) &&\r\n matchProducts(products, navItems[i].visibleToProducts) &&\r\n ishrefisNotNull(navItems[i])\r\n ) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaData(\r\n children,\r\n role,\r\n branches,\r\n company,\r\n access,\r\n products,\r\n );\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n newNavItems.push({ ...newItem, secondaryLabel: newItem.system_code });\r\n }\r\n }\r\n }\r\n return newNavItems;\r\n};\r\n","import { FC, useMemo, useState } from \"react\";\r\nimport { reportMetaData } from \"./reportMetaData\";\r\nimport { SideBarNav } from \"./navigation\";\r\nimport { SearchViewNavigation } from \"./navigation/searchViewNavigation\";\r\nimport \"./icons\";\r\nimport { transformMetaDataAsPerRole } from \"./transformer\";\r\n\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nexport const SideBar = ({\r\n authState,\r\n handleDrawerOpen,\r\n open,\r\n rootUrl,\r\n dashboardUrl = \"dashboard\",\r\n navigate,\r\n}) => {\r\n const [view, setView] = useState(\"/\");\r\n const [NewFilterView, setNewFilterView] = useState<any>({});\r\n const [NewFilterData, setNewFilterData] = useState([]);\r\n\r\n const branches = useMemo(() => {\r\n let myBranches = authState?.access?.entities?.Branch ?? [];\r\n if (Array.isArray(myBranches) && myBranches.length >= 0) {\r\n return myBranches.map((one) => one.branchCode);\r\n } else {\r\n return [];\r\n }\r\n }, []);\r\n\r\n const products = useMemo(() => {\r\n let myProducts = authState?.access?.products ?? [];\r\n if (Array.isArray(myProducts) && myProducts.length >= 0) {\r\n return myProducts.map((one) => one.categoryCode);\r\n } else {\r\n return [];\r\n }\r\n }, []);\r\n let newMetaData = { navItems: authState.menulistdata };\r\n let filteredMetaDataSideBar = transformMetaDataAsPerRole(\r\n newMetaData,\r\n Number(authState.role),\r\n branches,\r\n authState.companyID,\r\n authState.access,\r\n products,\r\n );\r\n\r\n let filteredReportsMetaData = transformMetaDataAsPerRole(\r\n {\r\n config: { rel: \"\", target: \"_blank\" },\r\n navItems: reportMetaData,\r\n },\r\n Number(authState.role),\r\n branches,\r\n authState.companyID,\r\n authState.access,\r\n products,\r\n );\r\n return view === \"report\" ? (\r\n <SearchViewNavigation\r\n metaData={filteredReportsMetaData}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n label=\"Reports\"\r\n icon=\"table\"\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n ) : view === \"newfilterview\" ? (\r\n <SearchViewNavigation\r\n metaData={{\r\n config: { rel: \"\", target: \"_blank\" },\r\n navItems: NewFilterData,\r\n }}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n label={NewFilterView?.label ?? \"Reports\"}\r\n icon=\"table\"\r\n placeholder={NewFilterView?.placeholder}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n ) : (\r\n <>\r\n <SideBarNav\r\n metaData={filteredMetaDataSideBar}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n slimSize={true}\r\n setNewFilterData={setNewFilterData}\r\n setNewFilterView={setNewFilterView}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n </>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { useStyles } from \"./style\";\r\nimport { Drawer } from \"@mui/material\";\r\nimport { SideBar } from \"./sideBar\";\r\n\r\ninterface SidebarWrapperProps {\r\n authState: any;\r\n navigate: NavigateFunction;\r\n handleDrawerOpen: Function;\r\n handleDrawerClose?: Function;\r\n open: boolean;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n}\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 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","fonWeight","lineHeight","resendOTPalign","resendbtnLink","textDecoration","dialogTitleClass","lang_svg","dialogContent","whiteSpace","button","justifyContent","flexDirection","UsernamePasswordField","classes","loginState","verifyUsernamePassword","forgotPasswordEndpoint","input","setInput","useState","userName","password","showPasswordTime","setShowPasswordTime","showPassword","Date","now","forceUpdate","timerRef","useRef","t","useTranslation","useEffect","clearTimeout","current","handleChange","event","name","target","value","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","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","username","charAt","toUpperCase","slice","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","_Fragment","gap","textColor","sx","opacity","transform","transition","starticon","length","OTPModelForm","handleCloseEvent","auth_type","company_ID","branch_cd","VerifyFinger","verifyFinger","Typography","isBiometricError","eFingerUi","fingerUi","FingerprintSharpIcon","borderBottom","FingerIcon","isScanning","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","split","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","AuthControllerWrapper","logoUrl","logoTitle","loginFn","veirfyUsernameandPassword","verifyOTP","LanguageComponent","dispath","useReducer","openpwdreset","setOpenPwdReset","failureCount","dashboardLogoURL","setDashboardLogoURL","otpResendRef","MessageBox","usePopupContext","OTPNumber","changeUserName","container","overflow","sm","direction","ml","Tooltip","describeChild","title","flag","responseType","BASE_COMP_CD","BASE_BRANCH_CD","CONTACT2","REQUEST_CD","AUTH_TYPE","AUTH_DATA","OTP_VALID","STATUS","ALERT_MSG_LIST","messageTitle","Error","newRequestID","fingerResponse","Quality","TimeOut","rawResponse","API.capture","promise","IsoTemplate","ForgotPasswordFields","onSubmit","navigate","loginPageEndpoint","workingState","mobileno","showConfirmPasswordTime","setShowConfirmPasswordTime","showConfirmPassword","replace","isMobileError","userMessageforMobileno","userMessageforPassword","isConfirmPasswordError","userMessageforconfirmPassword","isApiError","apierrorMessage","requestCd","ForgotPasswordControllerWrapper","screenFlag","updatenewPassword","veirfyUsernameandMobileNo","verifyOTPForPWDReset","setOpen","verifyRequestData","validationData","isNaN","pwdverify","resdata","COMP_CD","BRANCH_CD","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","isVisible","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","useQuery","queryClient","removeQueries","mutation","useMutation","onSuccess","extreData","menulistdata","branchCode","branch","BRANCH_NM","baseBranchCode","getError","setCurrentAction","useCallback","mutate","GROUP_NAME","groupName","APP_TRAN_CD","COMP_NM","DAYEND_STATUS","EOD_RUNNING_STATUS","IS_UPD_DEF_BRANCH","user","isUpdDefBranch","COMP_BASE_BRANCH_CD","oneBranchOpen","some","LightTooltip","styled","props","popper","tooltipClasses","tooltip","backgroundColor","common","white","shadows","xl","Stack","Box","roleName","placement","Avatar","profile","USER_PROFILE_DEFAULT","greet","hours","getHours","Greetings","Waving_hand","bank","bank_logo_default","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","AppbarWrapper","handleDrawerOpen","handleDrawerClose","SearchComponent","bankLogo","profilePic","handleLogout","handleProfile","hideGreetings","menuIconPosition","AppBar","elevation","Toolbar","disableRipple","MenuOutlinedIcon","version","mx","BecomePartnerImg","component","noWrap","workingDate","checkDateAndDisplay","format","lastLogin","paddingRight","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","map","one","seperateView","SeperateListView","level","NestedListItem","SingleListItem","List","disablePadding","ScrollBar","labelStart","substring","icon","ListItemIcon","FontAwesomeIcon","levelClassName","ListItem","disableGutters","viewName","newChield","item1","secondaryLabel","user_code","ListItemText","isActiveMenu","isActiveMenuFromhref","window","location","pathname","navigationProps","titleText","document","isRouterLink","path","passNavigationPropsAsURLParmas","urlParms","URLSearchParams","rel","childrens","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","menuhref","includes","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","role","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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yF,EAAK,CACd,CAACvI,EAAQ2P,OAAO,EAChB,CAAC3P,EAAQ8lB,mBAAmB,EAC5B,CAAC9lB,EAAQomB,WAAW,IAEtBvhB,QAAS,IAAMiiB,EAAQ,eAEtBuE,EACDhpB,EAAC0mB,EAAY,CAAChrB,QAASkF,EAAOH,UAAW9C,EAAQimB,UAGnD5jB,EAACkpB,EACC,CAAAliB,GAAI,CAAEiL,SAAU,UAChB5S,MAAO+f,EACPle,SAAWW,GAAMinB,EAAUjnB,EAAEzC,OAAOC,OACpCmD,QAxBc,KACbgiB,GACHlE,GACD,EAsBGzf,YAAa+D,QAAQ/D,GAAeA,EAAc,oBAClDF,UAAW6jB,IAGbxkB,EAACskB,GAAU,CACThE,iBAAkBA,EAClBkE,WAAYA,EACZC,QAASA,EACTF,SAAU,CACRW,SAAU6D,EACVI,OAAQ,CAAE3B,IAAK,GAAIpoB,OAAQ,WAE7BslB,UAAU,EACVG,mBAAmB,EACnBC,QAASA,EACTjM,aAAcA,EACd9E,SAAUA,MAGd,ECQJqV,GAAQC,IACNC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IC7LK,MAAMC,GAA6B,CACxC7K,EACA8K,EACAC,EACAC,EACAC,EACAC,KAEA,IA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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\";\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 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={input.password.trimStart() || \"\"}\r\n onChange={handleChange}\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 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 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\"\r\n ? loginState?.otpSentText ?? \"\"\r\n : loginState?.authType === \"TOTP\"\r\n ? t(\"otp.PleaseEnterOTP\")\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?.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 style={{ flex: \"auto\" }}>\r\n <a href=\"forgot-totp\" style={{ color: \"var(--theme-color3)\" }}>\r\n Forgot TOTP\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 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.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};\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 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 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 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 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 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 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 };\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\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}) => {\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 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 },\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 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(data);\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 };\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 <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 ) : loginState.authType === \"TOTP\" ? (\r\n <>\r\n {\" \"}\r\n <OTPModelForm\r\n key={\"OTPForm\"}\r\n OTPResendRequest={OTPResendRequest}\r\n classes={classes}\r\n // handleClose={() => {}}\r\n handleClose={changeUserName}\r\n loginState={loginState}\r\n VerifyOTP={VerifyOTP}\r\n OTPError={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={\"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 ) : (\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 color=\"secondary\"\r\n variant=\"indeterminate\" size={24} thickness={4.6} />) : 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 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 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 };\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 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: 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 /**\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}) => {\r\n const classes = useStyles();\r\n const [loginState, dispath] = useReducer(reducer, inititalState);\r\n const [open, setOpen] = useState(false);\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\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 (\r\n data?.password.trim()?.length > 0 ||\r\n data?.confirmpassword.trim()?.length > 0\r\n ) {\r\n if (flag === \"P\") {\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 {\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\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 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 enqueueSnackbar(message, {\r\n variant: \"success\",\r\n });\r\n navigate(loginPageEndpoint);\r\n } else {\r\n dispath({\r\n type: \"OTPVerificationComplate\",\r\n payload: { otpmodelclose: true, newPasswordMessage: resdata?.MESSAGE },\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 ? \"Forgot TOTP\"\r\n : t(\"ForgotPassword\")}\r\n </h2>\r\n {loginState.workingState === 1 ?\r\n <>\r\n <div 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 style={{\r\n marginRight: \"12px\",\r\n color: \"#1C1C1C\",\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}</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 </Grid>\r\n </Grid>\r\n </>\r\n );\r\n};\r\n","import { GridMetaDataType } from \"@acuteinfo/common-base\";\r\nexport const BranchSelectionGridMetaData: GridMetaDataType = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"Access Branch List\",\r\n rowIdColumn: \"BRANCH_CD\",\r\n // searchPlaceholder: \"Branches\",\r\n defaultColumnConfig: {\r\n width: 400,\r\n maxWidth: 450,\r\n minWidth: 300,\r\n },\r\n\r\n allowColumnReordering: false,\r\n disableSorting: false,\r\n hideHeader: false,\r\n disableGroupBy: true,\r\n enablePagination: false,\r\n containerHeight: {\r\n min: \"68vh\",\r\n max: \"68vh \",\r\n },\r\n allowFilter: false,\r\n allowColumnHiding: false,\r\n allowRowSelection: false,\r\n isCusrsorFocused: true,\r\n hideFooter: true,\r\n },\r\n columns: [\r\n {\r\n accessor: \"BRANCH_CD\",\r\n columnName: \"Branch Code\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 200,\r\n minWidth: 140,\r\n maxWidth: 220,\r\n },\r\n {\r\n accessor: \"BRANCH_NM\",\r\n columnName: \"Branch Name\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 280,\r\n minWidth: 280,\r\n maxWidth: 420,\r\n },\r\n {\r\n accessor: \"DISP_STATUS\",\r\n columnName: \"Status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n componentType: \"default\",\r\n width: 200,\r\n minWidth: 140,\r\n maxWidth: 220,\r\n },\r\n {\r\n accessor: \"BEGIN_DATETIME\",\r\n columnName: \"Begin Time\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n componentType: \"dateTime\",\r\n width: 222,\r\n minWidth: 140,\r\n maxWidth: 240,\r\n },\r\n {\r\n accessor: \"END_DATETIME\",\r\n columnName: \"End Time\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n componentType: \"dateTime\",\r\n width: 222,\r\n minWidth: 140,\r\n maxWidth: 240,\r\n },\r\n {\r\n accessor: \"DAYEND_STATUS\",\r\n columnName: \"Dayend Status\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"EOD_RUNNING_STATUS\",\r\n columnName: \"EOD Running Status\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"BASE_COMP_CD\",\r\n columnName: \"Base Comp Cd\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"BASE_BRANCH_CD\",\r\n columnName: \"Base Branch Cd\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"COMP_CD\",\r\n columnName: \"Comp Cd\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n {\r\n accessor: \"COMP_NM\",\r\n columnName: \"Comp Name\",\r\n sequence: 6,\r\n componentType: \"default\",\r\n isVisible: false,\r\n },\r\n ],\r\n};\r\n","import { 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 {\r\n GridWrapper,\r\n ActionTypes,\r\n GridMetaDataType,\r\n ClearCacheProvider,\r\n Alert,\r\n queryClient,\r\n} from \"@acuteinfo/common-base\";\r\n\r\nimport { Fragment, useCallback, useEffect } from \"react\";\r\nimport { BranchSelectionGridMetaData } from \"./gridMetadata\";\r\nimport \"./styles.css\";\r\nimport {\r\n Avatar,\r\n Box,\r\n Button,\r\n Grid,\r\n Stack,\r\n Tooltip,\r\n tooltipClasses,\r\n} from \"@mui/material\";\r\nimport { useMutation, useQuery } from \"react-query\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport bank_logo_default from \"../../assets/images/BecomePartnerImg.svg\";\r\nimport Waving_hand from \"../../assets/images/waving-hand.png\";\r\n\r\nimport { useStyles } from \"./style\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport USER_PROFILE_DEFAULT from \"../../assets/images/profile-default.png\";\r\nimport { BranchSelectionGridDataFnType, GetMenuDataFnType } from \"pages/types\";\r\nconst actions: ActionTypes[] = [\r\n {\r\n actionName: \"back\",\r\n actionLabel: \"Back\",\r\n multiple: false,\r\n rowDoubleClick: false,\r\n actionTextColor: \"var(--theme-color3)\",\r\n actionBackground: \"var(--white)\",\r\n startsIcon: \"West\",\r\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\r\n },\r\n {\r\n actionName: \"proceed\",\r\n actionLabel: \"Proceed\",\r\n multiple: false,\r\n rowDoubleClick: true,\r\n actionTextColor: \"var(--white)\",\r\n actionBackground: \"var(--theme-color3)\",\r\n onEnterSubmit: true,\r\n endsIcon: \"East\",\r\n rotateIcon: \"scale(1.4) rotateX(-360deg)\",\r\n },\r\n];\r\n\r\ninterface BranchSelectionWrapperProps {\r\n selectionMode: \"S\" | \"C\";\r\n authState: any;\r\n isBranchSelectedFn: () => boolean;\r\n isLoggedInFn: () => boolean;\r\n logoutFn: () => void;\r\n branchSelectFn: Function;\r\n BranchSelectionGridDataApiFn: BranchSelectionGridDataFnType;\r\n GetMenuDataApiFn: GetMenuDataFnType;\r\n sideImage?: string;\r\n logos: any;\r\n logo?: string;\r\n navigate: NavigateFunction;\r\n dashboardUrl: string;\r\n loginUrl: string;\r\n appTranCd: string;\r\n}\r\n\r\nconst BranchSelectionGrid: React.FC<BranchSelectionWrapperProps> = ({\r\n selectionMode,\r\n authState,\r\n isBranchSelectedFn,\r\n isLoggedInFn,\r\n logoutFn,\r\n logos,\r\n logo,\r\n navigate,\r\n BranchSelectionGridDataApiFn,\r\n GetMenuDataApiFn,\r\n sideImage,\r\n branchSelectFn,\r\n dashboardUrl,\r\n loginUrl,\r\n appTranCd,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { data, isLoading, isFetching, error, isError } = useQuery<any, any>(\r\n [\"BranchSelectionGridData\"],\r\n () => BranchSelectionGridDataApiFn(),\r\n );\r\n\r\n useEffect(() => {\r\n return () => {\r\n queryClient.removeQueries([\"BranchSelectionGridData\", {}]);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoggedInFn()) {\r\n navigate(loginUrl);\r\n } else if (isBranchSelectedFn() && selectionMode !== \"C\") {\r\n navigate(dashboardUrl);\r\n }\r\n }, [isBranchSelectedFn, isLoggedInFn]);\r\n\r\n type MutationErrorType = {\r\n severity: string;\r\n error_msg: string;\r\n error_detail: string;\r\n };\r\n\r\n const mutation: any = useMutation(GetMenuDataApiFn, {\r\n onSuccess: (data, extreData: any) => {\r\n branchSelectFn({\r\n menulistdata: data,\r\n branchCode: extreData?.BRANCH_CD,\r\n branch: extreData?.BRANCH_NM,\r\n baseBranchCode: extreData?.BASE_BRANCH_CD,\r\n });\r\n },\r\n });\r\n const getError: any = mutation.error as MutationErrorType;\r\n const setCurrentAction = useCallback(\r\n (data) => {\r\n if (data.name === \"proceed\") {\r\n if (data.rows?.length === 0) {\r\n enqueueSnackbar(\"Please Select Branch\", {\r\n variant: \"error\",\r\n });\r\n } else if (data.rows?.[0]?.data?.STATUS === \"C\") {\r\n enqueueSnackbar(\r\n \"Branch is in Day End Status.~rPlease contact system Vendor.\",\r\n {\r\n variant: \"error\",\r\n },\r\n );\r\n } else {\r\n mutation.mutate({\r\n BASE_COMP_CD: data.rows?.[0]?.data?.BASE_COMP_CD ?? \"\",\r\n BASE_BRANCH_CD: data.rows?.[0]?.data?.BASE_BRANCH_CD ?? \"\",\r\n COMP_CD: data.rows?.[0]?.data?.COMP_CD ?? \"\",\r\n BRANCH_CD: data.rows?.[0]?.data?.BRANCH_CD ?? \"\",\r\n GROUP_NAME: authState?.groupName ?? \"\",\r\n APP_TRAN_CD: appTranCd,\r\n COMP_NM: data.rows?.[0]?.data?.COMP_NM ?? \"\",\r\n BRANCH_NM: data.rows?.[0]?.data?.BRANCH_NM ?? \"\",\r\n DAYEND_STATUS: data.rows?.[0]?.data?.DAYEND_STATUS ?? \"\",\r\n EOD_RUNNING_STATUS: data.rows?.[0]?.data?.EOD_RUNNING_STATUS ?? \"\",\r\n IS_UPD_DEF_BRANCH: authState?.user?.isUpdDefBranch ?? \"\",\r\n COMP_BASE_BRANCH_CD:\r\n data.rows?.[0]?.data?.COMP_BASE_BRANCH_CD ?? \"\",\r\n selectionMode: selectionMode,\r\n });\r\n }\r\n } else if (data.name === \"back\") {\r\n if (selectionMode === \"C\") {\r\n navigate(dashboardUrl, {\r\n replace: true,\r\n });\r\n } else {\r\n logoutFn();\r\n }\r\n }\r\n },\r\n [navigate, data, mutation],\r\n );\r\n\r\n useEffect(() => {\r\n var oneBranchOpen = data?.some((branch) => branch.STATUS === \"O\");\r\n if (oneBranchOpen === false) {\r\n enqueueSnackbar(\r\n \"Branch is in Day End Status.~rPlease contact system Vendor.\",\r\n {\r\n variant: \"error\",\r\n },\r\n );\r\n logoutFn();\r\n }\r\n if (data?.length === 1) {\r\n if (data?.[0]?.STATUS === \"O\") {\r\n setCurrentAction({ name: \"proceed\", rows: [{ data: { ...data[0] } }] });\r\n }\r\n }\r\n }, [JSON.stringify(data)]);\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 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\r\n // const greet = Greetings();\r\n\r\n return (\r\n <>\r\n <Grid\r\n container\r\n style={{\r\n margin: \"0\",\r\n padding: \"0\",\r\n height: \"100vh\",\r\n // overflowY: \"hidden\",\r\n }}\r\n >\r\n {sideImage ? (\r\n <Grid item lg={1} md={1} xl={1} xs={1} sm={1}>\r\n <img className=\"sideImage\" src={sideImage} alt=\"side-Image\" />\r\n </Grid>\r\n ) : null}\r\n\r\n <Grid\r\n item\r\n lg={11}\r\n md={11}\r\n xl={11}\r\n xs={11}\r\n style={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Grid\r\n container\r\n style={{\r\n minHeight: \"100vh\",\r\n padding: \"10px 0px 0px 0px\",\r\n }}\r\n lg={11}\r\n md={11}\r\n xl={11}\r\n xs={11}\r\n >\r\n <Grid\r\n container\r\n style={{\r\n margin: \"0\",\r\n padding: \"0\",\r\n // height: \"12vh\",\r\n }}\r\n lg={12}\r\n md={12}\r\n xl={12}\r\n xs={12}\r\n >\r\n <Grid\r\n xs={12}\r\n sm={1}\r\n md={1}\r\n lg={1}\r\n xl={1}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n // justifyContent: \"center\",\r\n }}\r\n >\r\n <Stack direction=\"row\" spacing={4} ml={1}>\r\n <Box\r\n className={classes.heading_user_img_border}\r\n sx={{ cursor: \"pointer\" }}\r\n >\r\n <LightTooltip\r\n title={\r\n <>\r\n <div>User ID : {authState?.user?.id ?? \"\"}</div>\r\n <div>Role : {authState?.roleName ?? \"\"}</div>\r\n <div>Last Unsuccessful Login : \"\"</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={handleNavigate}\r\n alt=\"Remy Sharp\"\r\n src={\r\n Boolean(logos?.profile)\r\n ? logos?.profile\r\n : USER_PROFILE_DEFAULT\r\n }\r\n />\r\n </LightTooltip>\r\n </Box>\r\n </Stack>\r\n </Grid>\r\n <Grid\r\n xs={12}\r\n sm={5}\r\n md={5}\r\n lg={5}\r\n xl={5}\r\n sx={{\r\n justifyContent: \"center\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }}\r\n >\r\n <h1\r\n className=\"name-heading\"\r\n style={{ fontSize: \"24px\", margin: \"4px 0px\" }}\r\n >\r\n Welcome <span>{`${authState?.user?.name ?? \"\"},`}</span>\r\n </h1>\r\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\r\n <h3 style={{ margin: \"4px 0px\" }}>{Greetings()}</h3>\r\n <img src={Waving_hand} alt=\"\" style={{ height: \"18px\" }} />\r\n </div>\r\n </Grid>\r\n <Grid\r\n xs={12}\r\n sm={1}\r\n md={1}\r\n lg={1}\r\n xl={1}\r\n sx={{\r\n display: \"flex\",\r\n // flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <Stack direction=\"row\" justifyContent=\"flex-start\" spacing={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={\r\n Boolean(logos?.bank) ? logos?.bank : bank_logo_default\r\n }\r\n />\r\n </Box>\r\n </Stack>\r\n </Grid>\r\n <Grid\r\n xs={12}\r\n sm={3}\r\n md={3}\r\n lg={3}\r\n xl={3}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <div\r\n className=\"bank-name-container\"\r\n style={{ fontSize: \"14px\" }}\r\n >\r\n <p className=\"bank-name\">\r\n {`Bank Name: ${authState?.companyName ?? \"\"}`}\r\n </p>\r\n </div>\r\n\r\n <p className=\"emp-id\">\r\n {`Emp. Id: ${authState?.user?.employeeID ?? \"\"}`}\r\n </p>\r\n </Grid>\r\n <Grid\r\n xs={12}\r\n sm={3}\r\n md={3}\r\n lg={2}\r\n xl={2}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"right\",\r\n }}\r\n >\r\n {\" \"}\r\n <div>\r\n <img\r\n src={Boolean(logos?.logo) ? logos?.logo : logo}\r\n alt=\"bank_logo\"\r\n className={classes.logo}\r\n />\r\n </div>\r\n </Grid>\r\n </Grid>\r\n\r\n {isError ? (\r\n <Fragment>\r\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\r\n <Alert\r\n severity={error?.severity ?? \"error\"}\r\n errorMsg={error?.error_msg ?? \"Error\"}\r\n errorDetail={error?.error_detail ?? \"\"}\r\n />\r\n </div>\r\n </Fragment>\r\n ) : mutation.isError && mutation.error ? (\r\n <Fragment>\r\n <div style={{ width: \"100%\", paddingTop: \"10px\" }}>\r\n <Alert\r\n severity={getError.severity ?? \"error\"}\r\n errorMsg={getError.error_msg ?? \"Error\"}\r\n errorDetail={getError.error_detail ?? \"\"}\r\n />\r\n </div>\r\n </Fragment>\r\n ) : null}\r\n <GridWrapper\r\n key={`branchSelection`}\r\n finalMetaData={BranchSelectionGridMetaData as GridMetaDataType}\r\n data={data ?? []}\r\n setData={() => null}\r\n actions={actions}\r\n setAction={setCurrentAction}\r\n controlsAtBottom={true}\r\n actionContextAtBottom={true}\r\n headerToolbarStyle={{\r\n background: \"#fff !important\",\r\n padding: \"0\",\r\n \"& .MuiTypography-root\": {\r\n color: \"black\",\r\n },\r\n }}\r\n disableMultipleRowSelect={true}\r\n variant=\"outlined\"\r\n loading={isLoading || isFetching || mutation.isLoading}\r\n defaultSelectedRowId={authState?.user?.branchCode ?? null}\r\n />\r\n {isError || data?.length === 0 ? (\r\n <Button\r\n sx={{\r\n backgroundColor: \"var(--theme-color3)\",\r\n position: \"absolute\",\r\n right: \"113px\",\r\n bottom: \"20px\",\r\n width: \"7rem\",\r\n \"&:hover\": {\r\n backgroundColor: \"var(--theme-color3)\",\r\n },\r\n }}\r\n onClick={() => {\r\n if (selectionMode === \"C\") {\r\n navigate(dashboardUrl, {\r\n replace: true,\r\n });\r\n } else {\r\n logoutFn();\r\n }\r\n }}\r\n >\r\n Back\r\n </Button>\r\n ) : null}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n};\r\n\r\nexport const BranchSelectionGridWrapper: React.FC<\r\n BranchSelectionWrapperProps\r\n> = (props) => {\r\n return (\r\n <ClearCacheProvider>\r\n <BranchSelectionGrid {...props} />\r\n </ClearCacheProvider>\r\n );\r\n};\r\n","import { alpha } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: any) => ({\r\n appBar: {\r\n // zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n color: \"#0063A3\",\r\n height: \"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}));\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\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\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}) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\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 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: \"227px\",\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 <div>\r\n <img\r\n src={Boolean(logos?.logo) ? logos?.logo : 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 </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 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={\"end\"}\r\n gap={\"0.5rem\"}\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=\"show 4 new mails\"\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\";\r\nimport { useState } from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { NavItemType, SideBarRendererType } from \"./types\";\r\nimport { useStylesSideBar } from \"./style\";\r\nimport ScrollBar from \"react-perfect-scrollbar\";\r\nimport {\r\n Collapse,\r\n List,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n Tooltip,\r\n} from \"@mui/material\";\r\nimport { ExpandLess, ExpandMore } from \"@mui/icons-material\";\r\nlet localdrawerOpen = true;\r\n\r\ninterface SideBarNavProps extends SideBarRendererType {\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n}\r\n\r\nexport const SideBarNav: FC<SideBarNavProps> = ({\r\n metaData,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n setView,\r\n slimSize,\r\n setNewFilterData,\r\n setNewFilterView,\r\n isFromSeparetView = false,\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n}) => {\r\n const classes = useStylesSideBar();\r\n let result: JSX.Element[] | null = null;\r\n localdrawerOpen = drawerOpen;\r\n if (Array.isArray(metaData.navItems)) {\r\n result = metaData.navItems.map((one) => {\r\n if (one?.seperateView === true) {\r\n return (\r\n <SeperateListView\r\n key={one.label}\r\n item={one}\r\n setView={setView}\r\n classes={classes}\r\n level={0}\r\n slimSize={slimSize}\r\n setNewFilterData={setNewFilterData}\r\n setNewFilterView={setNewFilterView}\r\n />\r\n );\r\n } else if (Array.isArray(one.children)) {\r\n return (\r\n <NestedListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={0}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n );\r\n } else {\r\n return (\r\n <SingleListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={0}\r\n slimSize={slimSize}\r\n drawerOpen={drawerOpen}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n );\r\n }\r\n });\r\n }\r\n return (\r\n <List\r\n component=\"nav\"\r\n disablePadding\r\n className={\r\n isFromSeparetView ? classes.navLinksforseparateView : classes.navLinks\r\n }\r\n >\r\n <ScrollBar>{result}</ScrollBar>\r\n </List>\r\n );\r\n};\r\n\r\nconst SeperateListView: FC<{\r\n item: NavItemType;\r\n setView: any;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n slimSize?: boolean;\r\n setNewFilterData?: any;\r\n setNewFilterView?: any;\r\n}> = ({\r\n item,\r\n setView,\r\n level,\r\n classes,\r\n slimSize,\r\n setNewFilterData,\r\n setNewFilterView,\r\n}) => {\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n // const icon = item.icon ? (\r\n // <ListItemIcon className={classes.listIcon}>\r\n // <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n // </ListItemIcon>\r\n // ) : null;\r\n\r\n const icon =\r\n item.icon?.toLowerCase() !== \"process.gif\" && item.icon ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n );\r\n\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n\r\n return (\r\n <ListItem\r\n button\r\n disableGutters\r\n className={clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })}\r\n onClick={() => {\r\n if (item.viewName === \"newfilterview\" && Array.isArray(item.children)) {\r\n setNewFilterView({\r\n label: item.label,\r\n placeholder: \"Search \" + item.label + \" Screen...\",\r\n });\r\n let newChield = item.children.map((item1) => {\r\n return { ...item1, secondaryLabel: item1.user_code };\r\n });\r\n setNewFilterData(newChield);\r\n }\r\n setView(item.viewName);\r\n }}\r\n >\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n </Tooltip>\r\n ) : localdrawerOpen ? (\r\n <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n ) : null}\r\n </ListItem>\r\n );\r\n};\r\n\r\nconst SingleListItem: FC<{\r\n item: NavItemType;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n slimSize?: boolean;\r\n drawerOpen?: any;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n}> = ({\r\n item,\r\n classes,\r\n level,\r\n slimSize,\r\n drawerOpen,\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n}) => {\r\n const isActiveMenu = isActiveMenuFromhref(\r\n window.location?.pathname ?? \"\",\r\n item?.href ?? \"\",\r\n item?.navigationProps,\r\n rootUrl,\r\n dashboardUrl,\r\n );\r\n if (isActiveMenu) {\r\n // GeneralAPI.setDocumentName(item.label);\r\n let titleText = document.title;\r\n document.title = titleText.split(\" - \")[0] + \" - \" + item.label;\r\n }\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n\r\n const icon =\r\n item.icon.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n );\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n return (\r\n <ListItem\r\n button\r\n disableGutters\r\n className={clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.activeMenuItem]: isActiveMenu,\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n if (item.isRouterLink) {\r\n let path = item.href;\r\n path =\r\n item.href?.substring(0, 1) === \"/\"\r\n ? item.href.substring(1)\r\n : item.href;\r\n if (item.passNavigationPropsAsURLParmas) {\r\n let urlParms = new URLSearchParams(item?.navigationProps);\r\n navigate(`${path}?${urlParms.toString()}`);\r\n } else {\r\n navigate(`${path}` as string, {\r\n state: { ...item?.navigationProps },\r\n });\r\n }\r\n } else if (Boolean(item.href)) {\r\n window.open(item.href, item.rel ?? \"_newtab\");\r\n }\r\n }}\r\n >\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {/* {console.log(localdrawerOpen, item.label.length)} */}\r\n {(localdrawerOpen && item.label.length > 27) || !Boolean(icon) ? (\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n </Tooltip>\r\n ) : localdrawerOpen ? (\r\n <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText>\r\n ) : null}\r\n {/* <ListItemText\r\n primary={item.label}\r\n className={classes.link}\r\n secondary={item.secondaryLabel ?? null}\r\n ></ListItemText> */}\r\n </ListItem>\r\n );\r\n};\r\n\r\nconst NestedListItem: FC<{\r\n item: NavItemType;\r\n classes: ReturnType<typeof useStylesSideBar>;\r\n level: number;\r\n handleDrawerOpen: Function;\r\n drawerOpen: boolean;\r\n slimSize?: boolean;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n}> = ({\r\n item,\r\n classes,\r\n level,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n slimSize,\r\n rootUrl,\r\n navigate,\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const handleClick = () => {\r\n if (!drawerOpen) {\r\n // handleDrawerOpen();\r\n }\r\n setOpen(!open);\r\n };\r\n const childrens = item.children?.map((one) => {\r\n if (Array.isArray(one.children)) {\r\n return (\r\n <NestedListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={level + 1}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n navigate={navigate}\r\n />\r\n );\r\n } else {\r\n return (\r\n <SingleListItem\r\n key={one.label}\r\n item={one}\r\n classes={classes}\r\n level={level + 1}\r\n slimSize={slimSize}\r\n rootUrl={rootUrl}\r\n navigate={navigate}\r\n />\r\n );\r\n }\r\n });\r\n let labelStart: any =\r\n (item.label || \"\").toLowerCase().substring(0, 1) || \"circle\";\r\n\r\n const icon =\r\n item.icon?.toLowerCase() === \"process.gif\" || !Boolean(item.icon) ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", labelStart]} />\r\n </ListItemIcon>\r\n ) : (\r\n <ListItemIcon className={classes.listIcon}>\r\n <FontAwesomeIcon icon={[\"fas\", item.icon]} />\r\n </ListItemIcon>\r\n );\r\n\r\n const levelClassName =\r\n level === 1\r\n ? classes.nestedMenuLevel1\r\n : level === 2\r\n ? classes.nestedMenuLevel2\r\n : \"\";\r\n return (\r\n <>\r\n <ListItem\r\n button\r\n onClick={handleClick}\r\n disableGutters\r\n className={\r\n open\r\n ? clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.openCurrent]: true,\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })\r\n : clsx({\r\n [classes.item]: true,\r\n [levelClassName]: Boolean(levelClassName),\r\n [classes.slimList]: Boolean(slimSize),\r\n [classes.drawerIconSize]: !localdrawerOpen,\r\n })\r\n }\r\n >\r\n <Tooltip\r\n title={item.label}\r\n arrow={true}\r\n placement={localdrawerOpen ? \"bottom-start\" : \"right\"}\r\n >\r\n <span>{icon}</span>\r\n </Tooltip>\r\n {/* {icon} */}\r\n {drawerOpen || !Boolean(icon) ? (\r\n <>\r\n <ListItemText\r\n primary={item.label}\r\n secondary={item.secondaryLabel ?? null}\r\n color=\"primary\"\r\n className={classes.link}\r\n ></ListItemText>\r\n {open ? <ExpandLess /> : <ExpandMore />}\r\n </>\r\n ) : null}\r\n </ListItem>\r\n\r\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n <List\r\n component=\"div\"\r\n disablePadding\r\n className={open ? classes.openList : \"\"}\r\n >\r\n {childrens}\r\n </List>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\nconst isActiveMenuFromhref = (\r\n location,\r\n menuhref,\r\n navigationProps,\r\n rootUrl,\r\n dashboardUrl,\r\n) => {\r\n if (\r\n (location === `/${rootUrl}` || location === `/${rootUrl}/`) &&\r\n menuhref === dashboardUrl\r\n ) {\r\n return true;\r\n } else if (menuhref === \"report\") {\r\n try {\r\n let urlParms = new URLSearchParams(navigationProps);\r\n if (\"?\" + urlParms.toString() === window.location.search) {\r\n return true;\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return false;\r\n } else if (\r\n location !== `/${rootUrl}` &&\r\n location !== \"/\" &&\r\n Boolean(menuhref) &&\r\n location.includes(menuhref)\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n","import { NavItemType } from \"./types\";\r\n\r\nconst matchByValue = (search, tags, navItem) => {\r\n if (!Array.isArray(tags)) {\r\n tags = [tags];\r\n }\r\n return tags.some((one) =>\r\n navItem[one]\r\n ?.toLocaleLowerCase?.()\r\n ?.includes(search?.toLocaleLowerCase?.()),\r\n );\r\n};\r\n\r\nexport const filterMetaDataByValue = (\r\n searchString: string,\r\n navItems: NavItemType[],\r\n tagsToSearch?: string[],\r\n): NavItemType[] => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (matchByValue(searchString, tagsToSearch, navItems[i])) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaDataByValue(\r\n searchString,\r\n children,\r\n tagsToSearch,\r\n );\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n newNavItems.push({ ...newItem });\r\n }\r\n }\r\n }\r\n return newNavItems;\r\n};\r\n","import { FC, useMemo, useState } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { SearchBar } from \"@acuteinfo/common-base\";\r\nimport ArrowBackIosNewIcon from \"@mui/icons-material/ArrowBackIosNew\";\r\nimport { useStylesSideBar } from \"./style\";\r\nimport { filterMetaDataByValue } from \"./filterMetaData\";\r\nimport { SideBarNav } from \"./sideBarNavigation\";\r\nimport { SideBarRendererType } from \"./types\";\r\nimport { ListItem, ListItemIcon, ListItemText } from \"@mui/material\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\n\r\ninterface NewSideBarNav extends SideBarRendererType {\r\n label: string;\r\n icon?: any;\r\n placeholder?: any;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n navigate: NavigateFunction;\r\n}\r\n\r\nexport const SearchViewNavigation: FC<NewSideBarNav> = ({\r\n metaData,\r\n handleDrawerOpen,\r\n drawerOpen,\r\n setView,\r\n label,\r\n icon,\r\n placeholder = \"Search Reports...\",\r\n rootUrl,\r\n dashboardUrl,\r\n navigate,\r\n}) => {\r\n const [search, setSearch] = useState(\"\");\r\n const filteredMetaData = useMemo(() => {\r\n return filterMetaDataByValue(search, metaData.navItems, [\r\n \"label\",\r\n \"secondaryLabel\",\r\n ]);\r\n }, [search, metaData.navItems]);\r\n const classes = useStylesSideBar();\r\n\r\n const myIcon = icon ? (\r\n <ListItemIcon className={classes.listIcon}>\r\n <ArrowBackIosNewIcon />\r\n </ListItemIcon>\r\n ) : null;\r\n const handleClick = () => {\r\n if (!drawerOpen) {\r\n handleDrawerOpen();\r\n }\r\n };\r\n return (\r\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\r\n <ListItem\r\n button\r\n className={clsx({\r\n [classes.item]: true,\r\n [classes.nestedMenuLevel1]: true,\r\n [classes.linktext]: true,\r\n })}\r\n onClick={() => setView(\"/\")}\r\n sx={{ width: !drawerOpen ? \"80% !important\" : \"auto\" }}\r\n >\r\n {myIcon}\r\n <ListItemText primary={label} className={classes.link} />\r\n </ListItem>\r\n {/* <div onClick={handleDrawerOpen}> */}\r\n <SearchBar\r\n sx={{ overflow: \"hidden\" }}\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n onClick={handleClick}\r\n placeholder={Boolean(placeholder) ? placeholder : \"Search Reports...\"}\r\n autoFocus={drawerOpen}\r\n />\r\n {/* </div> */}\r\n <SideBarNav\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={drawerOpen}\r\n setView={setView}\r\n metaData={{\r\n navItems: filteredMetaData,\r\n config: { rel: \"\", target: \"_blank\" },\r\n }}\r\n slimSize={true}\r\n isFromSeparetView={true}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n </div>\r\n );\r\n};\r\n","import { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport {\r\n faHandsHelping,\r\n faUsers,\r\n faBars,\r\n faBalanceScale,\r\n faHandHoldingHeart,\r\n faTasks,\r\n faCog,\r\n faHome,\r\n faTh,\r\n faUsersCog,\r\n faCircle,\r\n faUserCircle,\r\n faHashtag,\r\n faThumbtack,\r\n faSquare,\r\n faLink,\r\n faQuestion,\r\n faPlus,\r\n faTable,\r\n faLocationArrow,\r\n faHeadset,\r\n faGears,\r\n faArrowDown,\r\n faArrowUp,\r\n faSpinner,\r\n faCircleExclamation,\r\n faRotateRight,\r\n faUserLock,\r\n faUserClock,\r\n faGripHorizontal,\r\n faBarsProgress,\r\n faFileExport,\r\n faFileLines,\r\n faGear,\r\n faHeadphones,\r\n faUsersGear,\r\n faMessage,\r\n faUnlock,\r\n faUserPlus,\r\n faUserCheck,\r\n faKey,\r\n faIdCard,\r\n faIdBadge,\r\n faCheck,\r\n faCheckDouble,\r\n faCircleCheck,\r\n faPenToSquare,\r\n faCircleXmark,\r\n faUserTag,\r\n faAddressCard,\r\n faChartColumn,\r\n faUserPen,\r\n faHandHolding,\r\n faHandHoldingMedical,\r\n faObjectGroup,\r\n faTowerCell,\r\n faTowerObservation,\r\n faBuilding,\r\n faMailBulk,\r\n faLandmarkFlag,\r\n faCreditCard,\r\n faHospitalSymbol,\r\n faPlugCircleBolt,\r\n faCodeBranch,\r\n faPersonCircleCheck,\r\n faBank,\r\n faServer,\r\n faNotesMedical,\r\n faA,\r\n faB,\r\n faC,\r\n faD,\r\n faE,\r\n faF,\r\n faG,\r\n faH,\r\n faI,\r\n faJ,\r\n faK,\r\n faL,\r\n faM,\r\n faN,\r\n faO,\r\n faP,\r\n faQ,\r\n faR,\r\n faS,\r\n faT,\r\n faU,\r\n faV,\r\n faW,\r\n faX,\r\n faY,\r\n faZ,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nlibrary.add(\r\n faHandsHelping,\r\n faUsers,\r\n faBars,\r\n faBalanceScale,\r\n faHandHoldingHeart,\r\n faTasks,\r\n faCog,\r\n faHome,\r\n faTh,\r\n faUsersCog,\r\n faCircle,\r\n faUserCircle,\r\n faHashtag,\r\n faThumbtack,\r\n faSquare,\r\n faLink,\r\n faQuestion,\r\n faPlus,\r\n faTable,\r\n faLocationArrow,\r\n faHeadset,\r\n faGears,\r\n faArrowDown,\r\n faArrowUp,\r\n faSpinner,\r\n faCircleExclamation,\r\n faRotateRight,\r\n faUserLock,\r\n faUserClock,\r\n faGripHorizontal,\r\n faFileLines,\r\n faGear,\r\n faHeadphones,\r\n faUsersGear,\r\n faMessage,\r\n faUnlock,\r\n faUserPlus,\r\n faUserCheck,\r\n faKey,\r\n faIdCard,\r\n faIdBadge,\r\n faCheck,\r\n faCheckDouble,\r\n faCircleCheck,\r\n faCircleXmark,\r\n faUserTag,\r\n faAddressCard,\r\n faChartColumn,\r\n faUserPen,\r\n faHandHolding,\r\n faHandHoldingMedical,\r\n faObjectGroup,\r\n faTowerCell,\r\n faTowerObservation,\r\n faBuilding,\r\n faMailBulk,\r\n faLandmarkFlag,\r\n faCreditCard,\r\n faHospitalSymbol,\r\n faPlugCircleBolt,\r\n faCodeBranch,\r\n faPersonCircleCheck,\r\n faBank,\r\n faServer,\r\n faNotesMedical,\r\n faPenToSquare,\r\n faBarsProgress,\r\n faFileExport,\r\n faA,\r\n faB,\r\n faC,\r\n faD,\r\n faE,\r\n faF,\r\n faG,\r\n faH,\r\n faI,\r\n faJ,\r\n faK,\r\n faL,\r\n faM,\r\n faN,\r\n faO,\r\n faP,\r\n faQ,\r\n faR,\r\n faS,\r\n faT,\r\n faU,\r\n faV,\r\n faW,\r\n faX,\r\n faY,\r\n faZ,\r\n);\r\n","import { NavBarMetaDataType, NavItemType } from \"./navigation\";\r\nimport { cloneDeep } from \"lodash\";\r\n\r\nexport const transformMetaDataAsPerRole = (\r\n metaData: NavBarMetaDataType,\r\n role: number,\r\n branches: string[],\r\n company: string,\r\n access: any,\r\n products: string[],\r\n) => {\r\n let navItems = filterMetaData(\r\n metaData.navItems,\r\n role,\r\n branches,\r\n company,\r\n access,\r\n products,\r\n );\r\n //console.log(navItems);\r\n let newnavItem = navItems.map((item) => {\r\n let { children, ...newItem } = item;\r\n if (Array.isArray(children) && children.length > 5) {\r\n if (!Boolean(newItem.seperateView)) {\r\n newItem.seperateView = true;\r\n newItem.viewName = \"newfilterview\";\r\n //console.log(newItem);\r\n }\r\n }\r\n return { ...newItem, children: children };\r\n });\r\n return {\r\n config: metaData.config,\r\n navItems: newnavItem,\r\n };\r\n};\r\nexport const transformMetaDataAsPerMenuRights = (\r\n metaData: NavBarMetaDataType,\r\n authState: any,\r\n) => {\r\n let newMetadata = cloneDeep(metaData) as NavBarMetaDataType;\r\n let NavItem = filterMetaDataAsperRights(newMetadata.navItems, authState);\r\n newMetadata.navItems = NavItem;\r\n return newMetadata;\r\n};\r\nconst filterMetaDataAsperRights = (navItems, accessgroup) => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaDataAsperRights(children, accessgroup);\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n //if(newItem?.doccd) ///condition\r\n ///newNavItems.push({ ...newItem });\r\n }\r\n }\r\n return newNavItems;\r\n};\r\nconst matchBranches = (userBranches, accessBranches) => {\r\n if (!Array.isArray(accessBranches) || !Array.isArray(userBranches)) {\r\n return true;\r\n }\r\n if (accessBranches.length <= 0 || userBranches.length <= 0) {\r\n return true;\r\n }\r\n for (const one of accessBranches) {\r\n if (userBranches.indexOf(one) >= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nconst matchComany = (userCompany, accessCompany) => {\r\n if (!Array.isArray(accessCompany) || !Boolean(userCompany)) {\r\n return true;\r\n }\r\n if (accessCompany.length <= 0) {\r\n return true;\r\n }\r\n if (accessCompany.indexOf(userCompany) >= 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst matchRoles = (userRole, accessRoles) => {\r\n if (!Array.isArray(accessRoles) || typeof userRole !== \"number\") {\r\n return true;\r\n }\r\n if (accessRoles.length <= 0) {\r\n return true;\r\n }\r\n if (accessRoles.indexOf(userRole) >= 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst matchInvisibleRoles = (userRole, accessRoles) => {\r\n if (!Array.isArray(accessRoles) || typeof userRole !== \"number\") {\r\n return true;\r\n }\r\n if (accessRoles.length <= 0) {\r\n return true;\r\n }\r\n if (accessRoles.indexOf(userRole) >= 0) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nconst matchProducts = (userProducts, accessProducts) => {\r\n if (!Array.isArray(accessProducts) || !Array.isArray(userProducts)) {\r\n return true;\r\n }\r\n if (accessProducts.length <= 0 || userProducts.length <= 0) {\r\n return true;\r\n }\r\n\r\n for (const one of accessProducts) {\r\n if (userProducts.indexOf(one) >= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\nconst ishrefisNotNull = (item) => {\r\n if (\r\n !(Array.isArray(item.children) && item.children.length > 0) &&\r\n !Boolean(item.href)\r\n ) {\r\n //console.log(item);\r\n return false;\r\n }\r\n return true;\r\n};\r\nconst filterMetaData = (\r\n navItems: NavItemType[],\r\n role: number,\r\n branches: string[],\r\n company: string,\r\n access: any,\r\n products: string[],\r\n): NavItemType[] => {\r\n let newNavItems: NavItemType[] = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (\r\n matchRoles(Number(role), navItems[i].visibleToRoles) &&\r\n matchComany(company, navItems[i].visibleToCompanies) &&\r\n matchBranches(branches, navItems[i].visibleToBranches) &&\r\n matchInvisibleRoles(Number(role), navItems[i].invisibleToRoles) &&\r\n matchProducts(products, navItems[i].visibleToProducts) &&\r\n ishrefisNotNull(navItems[i])\r\n ) {\r\n let { children, ...newItem } = navItems[i];\r\n if (Array.isArray(children) && children.length > 0) {\r\n let newChildren = filterMetaData(\r\n children,\r\n role,\r\n branches,\r\n company,\r\n access,\r\n products,\r\n );\r\n if (newChildren.length > 0) {\r\n newNavItems.push({ ...newItem, children: newChildren });\r\n }\r\n } else {\r\n newNavItems.push({ ...newItem, secondaryLabel: newItem.system_code });\r\n }\r\n }\r\n }\r\n return newNavItems;\r\n};\r\n","import { FC, useMemo, useState } from \"react\";\r\nimport { reportMetaData } from \"./reportMetaData\";\r\nimport { SideBarNav } from \"./navigation\";\r\nimport { SearchViewNavigation } from \"./navigation/searchViewNavigation\";\r\nimport \"./icons\";\r\nimport { transformMetaDataAsPerRole } from \"./transformer\";\r\n\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nexport const SideBar = ({\r\n authState,\r\n handleDrawerOpen,\r\n open,\r\n rootUrl,\r\n dashboardUrl = \"dashboard\",\r\n navigate,\r\n}) => {\r\n const [view, setView] = useState(\"/\");\r\n const [NewFilterView, setNewFilterView] = useState<any>({});\r\n const [NewFilterData, setNewFilterData] = useState([]);\r\n\r\n const branches = useMemo(() => {\r\n let myBranches = authState?.access?.entities?.Branch ?? [];\r\n if (Array.isArray(myBranches) && myBranches.length >= 0) {\r\n return myBranches.map((one) => one.branchCode);\r\n } else {\r\n return [];\r\n }\r\n }, []);\r\n\r\n const products = useMemo(() => {\r\n let myProducts = authState?.access?.products ?? [];\r\n if (Array.isArray(myProducts) && myProducts.length >= 0) {\r\n return myProducts.map((one) => one.categoryCode);\r\n } else {\r\n return [];\r\n }\r\n }, []);\r\n let newMetaData = { navItems: authState.menulistdata };\r\n let filteredMetaDataSideBar = transformMetaDataAsPerRole(\r\n newMetaData,\r\n Number(authState.role),\r\n branches,\r\n authState.companyID,\r\n authState.access,\r\n products,\r\n );\r\n\r\n let filteredReportsMetaData = transformMetaDataAsPerRole(\r\n {\r\n config: { rel: \"\", target: \"_blank\" },\r\n navItems: reportMetaData,\r\n },\r\n Number(authState.role),\r\n branches,\r\n authState.companyID,\r\n authState.access,\r\n products,\r\n );\r\n return view === \"report\" ? (\r\n <SearchViewNavigation\r\n metaData={filteredReportsMetaData}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n label=\"Reports\"\r\n icon=\"table\"\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n ) : view === \"newfilterview\" ? (\r\n <SearchViewNavigation\r\n metaData={{\r\n config: { rel: \"\", target: \"_blank\" },\r\n navItems: NewFilterData,\r\n }}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n label={NewFilterView?.label ?? \"Reports\"}\r\n icon=\"table\"\r\n placeholder={NewFilterView?.placeholder}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n ) : (\r\n <>\r\n <SideBarNav\r\n metaData={filteredMetaDataSideBar}\r\n handleDrawerOpen={handleDrawerOpen}\r\n drawerOpen={open}\r\n setView={setView}\r\n slimSize={true}\r\n setNewFilterData={setNewFilterData}\r\n setNewFilterView={setNewFilterView}\r\n rootUrl={rootUrl}\r\n dashboardUrl={dashboardUrl}\r\n navigate={navigate}\r\n />\r\n </>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { useStyles } from \"./style\";\r\nimport { Drawer } from \"@mui/material\";\r\nimport { SideBar } from \"./sideBar\";\r\n\r\ninterface SidebarWrapperProps {\r\n authState: any;\r\n navigate: NavigateFunction;\r\n handleDrawerOpen: Function;\r\n handleDrawerClose?: Function;\r\n open: boolean;\r\n rootUrl: string;\r\n dashboardUrl?: string;\r\n}\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 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","fonWeight","lineHeight","resendOTPalign","resendbtnLink","textDecoration","dialogTitleClass","lang_svg","dialogContent","whiteSpace","button","justifyContent","flexDirection","UsernamePasswordField","classes","loginState","verifyUsernamePassword","forgotPasswordEndpoint","preventSpecialChars","input","setInput","useState","userName","password","showPasswordTime","setShowPasswordTime","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","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","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","_Fragment","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","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","AuthControllerWrapper","logoUrl","logoTitle","loginFn","veirfyUsernameandPassword","verifyOTP","LanguageComponent","dispath","useReducer","openpwdreset","setOpenPwdReset","failureCount","dashboardLogoURL","setDashboardLogoURL","otpResendRef","MessageBox","usePopupContext","OTPNumber","changeUserName","container","overflow","sm","direction","ml","Tooltip","describeChild","title","flag","responseType","BASE_COMP_CD","BASE_BRANCH_CD","CONTACT2","REQUEST_CD","AUTH_TYPE","AUTH_DATA","OTP_VALID","OTP_SENT_TEXT","STATUS","ALERT_MSG_LIST","messageTitle","Error","newRequestID","fingerResponse","Quality","TimeOut","rawResponse","API.capture","promise","IsoTemplate","ForgotPasswordFields","onSubmit","navigate","loginPageEndpoint","validatePassword","workingState","mobileno","showConfirmPasswordTime","setShowConfirmPasswordTime","showConfirmPassword","replace","isMobileError","userMessageforMobileno","onBlur","userMessageforPassword","passwordValidateloading","isConfirmPasswordError","userMessageforconfirmPassword","isApiError","apierrorMessage","requestCd","newPasswordMessage","confirmPasswordValidateloading","ForgotPasswordControllerWrapper","screenFlag","updatenewPassword","veirfyUsernameandMobileNo","verifyOTPForPWDReset","setOpen","verifyRequestData","validationData","isNaN","pwdverify","resdata","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","isVisible","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","useQuery","queryClient","removeQueries","mutation","useMutation","onSuccess","extreData","menulistdata","branchCode","branch","BRANCH_NM","baseBranchCode","getError","setCurrentAction","useCallback","mutate","GROUP_NAME","groupName","APP_TRAN_CD","COMP_NM","DAYEND_STATUS","EOD_RUNNING_STATUS","IS_UPD_DEF_BRANCH","user","isUpdDefBranch","COMP_BASE_BRANCH_CD","oneBranchOpen","LightTooltip","styled","props","popper","tooltipClasses","tooltip","backgroundColor","common","white","shadows","xl","Stack","Box","roleName","placement","Avatar","profile","USER_PROFILE_DEFAULT","greet","hours","getHours","Greetings","Waving_hand","bank","bank_logo_default","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","AppbarWrapper","handleDrawerOpen","handleDrawerClose","SearchComponent","bankLogo","profilePic","handleLogout","handleProfile","hideGreetings","menuIconConfig","optionalComponents","CloseIconComponent","OpenIconComponent","menuIconPosition","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","icon","ListItemIcon","FontAwesomeIcon","levelClassName","ListItem","disableGutters","viewName","newChield","item1","secondaryLabel","user_code","ListItemText","isActiveMenu","isActiveMenuFromhref","window","location","pathname","navigationProps","titleText","document","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","role","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":"+5GAEO,MAAMA,GAAYC,GAAYC,IAAgB,CACnDC,QAAS,CACPC,UAAW,QACXC,UAAW,6BAEXC,WAAY,gBAEdC,SAAU,CACRD,WAAY,OACZE,QAASN,EAAMO,QAAQ,EAAG,GAC1BC,QAAS,OACTC,SAAU,QACVC,OAAQ,OACRP,UAAW,4BACXQ,aAAc,MACd,CAACX,EAAMY,YAAYC,KAAK,OAAQ,CAC9BC,MAAO,SAGXC,SAAU,CACRC,UAAWhB,EAAMO,QAAQ,IAE3BU,SAAU,CACRC,SAAU,kBACVR,OAAQV,EAAMO,QAAQ,EAAG,GACzBY,SAAU,OACVb,QAAS,cACTF,WAAY,eACZgB,OAAQ,EACRC,MAAO,kBACPC,WAAY,IACZC,cAAe,YACfpB,UAAW,OACXqB,cAAe,aACfC,UAAW,WACX,UAAW,CACTrB,WAAY,UACZD,UAAW,SAGfuB,SAAU,CACRV,UAAW,OACXK,MAAOrB,EAAM2B,QAAQC,QAAQC,KAC7BP,WAAY,KAEdQ,WAAY,CACVd,UAAW,OACXe,OAAQ,UACRV,MAAOrB,EAAM2B,QAAQK,UAAUH,KAC/BP,WAAY,IACZH,SAAU,aAEZc,KAAM,CACJC,aAAclC,EAAMO,QAAQ,IAG9B4B,UAAW,CACT,CAACnC,EAAMY,YAAYC,KAAK,OAAQ,CAC9BL,QAAS,SAGb4B,WAAY,CACVhC,WAAY,OACZE,QAASN,EAAMO,QAAQ,EAAG,GAC1BC,QAAS,OACTC,SAAU,QACVC,OAAQ,OACRP,UAAW,4BACXQ,aAAc,MACd,CAACX,EAAMY,YAAYC,KAAK,OAAQ,CAC9BC,MAAO,QAET,QAAS,CACPW,UAAW,WAIfY,SAAU,CAAE,EAEZC,aAAc,CACZb,UAAW,SAGXnB,QAAS,OAEXiC,WAAY,CAEX,EAEDC,QAAS,CACPhC,QAAS,QAEXiC,gBAAiB,CACf,UAAW,CACTC,YAAa,kBACbtB,OAAQ,sCACRT,aAAc,OACdG,MAAO,kBACP6B,OAAQ,kBACRT,aAAc,OACd/B,UAAW,oDAGfyC,YAAa,CAGXV,aAAc,QAEhBW,cAAe,CACbrC,QAAS,QAEXsC,aAAc,CACZtC,QAAS,OACTuC,WAAY,SAEZb,aAAc,OACdb,MAAO,UACP2B,UAAW,MACX7B,SAAU,OACV8B,WAAY,QAEdC,eAAgB,CACd7B,MAAO,sBACP2B,UAAW,MACX7B,SAAU,OACV8B,WAAY,OACZvC,OAAQ,UAIVyC,cAAe,CACbC,eAAgB,YAChB/B,MAAO,sBACPU,OAAQ,UACR,UAAW,CACTqB,eAAgB,YAChB/B,MAAO,wBAGXgC,iBAAkB,CAChBjD,WAAY,oBACZE,QAAS,sBACTI,OAAQ,OACRW,MAAO,eACPV,aAAc,MACd,OAAQ,CACNW,WAAY,mBAGhBgC,SAAU,CACRZ,YAAa,OACb5B,MAAO,OACP6B,OAAQ,QAEVY,cAAe,CACbjD,QAAS,WACT,MAAO,CACLkD,WAAY,WACZnC,MAAO,QACPL,UAAW,MACXkB,aAAc,QAGlBuB,OAAQ,CACNjD,QAAS,OACTuC,WAAY,SACZW,eAAgB,SAChBC,cAAe,SACfjD,OAAQ,MACRN,WAAY,sBACZ,UAAW,CACTA,WAAY,uCCrKLwD,GAAwB,EACnCC,UACAC,aACAC,yBACAC,yBACAC,0BAEA,MAAOC,EAAOC,GAAYC,EAAS,CAAEC,SAAU,GAAIC,SAAU,MACtDC,EAAkBC,GAAuBJ,EAAS,GACnDK,EAAeC,KAAKC,MAAQJ,GACzB,CAAAK,GAAeR,IAClBS,EAAWC,EAAY,OACvBC,EAAEA,GAAMC,IACdC,GAAU,IACD,IAAMC,aAAaL,EAASM,UAClC,IACH,MAAMC,EAAgBC,IACpB,MAAMC,EAAOD,EAAME,OAAOD,KACpBE,EAAQH,EAAME,OAAOC,MAEhB,aAATF,GACArB,GACAuB,GACAvB,EAAoBwB,MAAM,IAAIC,MAAMC,GAASH,EAAMI,SAASD,OAIjD,aAATL,GAAuBE,IACzB1B,EAAW+B,iBAAkB,GAElB,aAATP,GAAuBE,IACzB1B,EAAWgC,iBAAkB,GAG/B3B,GAAU4B,IAAM,IAAWA,EAAQT,CAACA,GAAOE,MAAS,EAEhDQ,EAAWlB,EAAY,MACvBmB,EAAenB,EAAY,MAC3BoB,EAAiBpB,EAAY,MAkCnC,OAhCAG,GAAU,KACR,IAAIkB,EAUJ,OATIrC,EAAW+B,gBACbM,EAAYC,YAAW,KACrBJ,GAAUb,SAASkB,SAAS,GAC3B,KACMvC,EAAWgC,kBACpBK,EAAYC,YAAW,KACrBH,GAAcd,SAASkB,SAAS,GAC/B,MAEE,KACDF,GACFjB,aAAaiB,EACd,CACF,GACA,CAACrC,EAAW+B,gBAAiB/B,EAAWgC,kBAC3Cb,GAAU,KACR,IAAIkB,EAOJ,OANIrC,GAAYwC,gBACdnC,GAAU4B,QAAiBA,EAAQzB,SAAU,OAC7C6B,EAAYC,YAAW,KACrBH,GAAcd,SAASkB,SAAS,GAC/B,OAEE,KACDF,GACFjB,aAAaiB,EACd,CACF,GACA,CAACrC,EAAWwC,gBAGbC,EAACC,EAAQ,CAAAC,SACPF,EAACG,EAAU,CAAAjG,SAAS,KAClBgG,SAAAE,EAACC,EAAI,CAAC7D,WAAW,SAAS8D,MAAO,CAAEC,WAAY,QAAQL,SAAA,CACrDF,EACE,MAAA,CAAAM,MAAO,CACLxF,MAAO,qBACPF,SAAU,OACVG,WAAY,MAEZyB,WAAY,SACZgE,UAAW,SACX9D,WAAY,QACbwD,SAEDF,EAAK,KAAA,CAAAE,SAAA1B,EAAE,cAETwB,EAAA,MAAA,CACES,UAAU,GACVH,MAAO,CACLxF,MAAO,UACPF,SAAU,OACVG,WAAY,MAEZyB,WAAY,SACZgE,UAAW,SAEXjG,MAAO,SACR2F,SAEA1B,EAAE,iCAEL4B,EAAA,MAAA,CAAKK,UAAWnD,EAAQ9C,SAAQ0F,SAAA,CAC9BF,EAACU,GAGCC,WAAW,EACXC,MAAOpC,EAAE,UAETqC,YAAaC,OAAOtC,EAAE,WACtB8B,MAAO,CACL7F,UAAW,OACXkB,aAAc,QAEhBoF,WAAS,EACTC,KAAM,OACNjC,KAAK,WACLE,MAAOtB,EAAMG,SAASmD,aAAe,GACrCC,SAAUrC,EACVsC,MAAO5D,EAAW+B,gBAClB8B,WACE7D,EAAW+B,gBACPd,EAAEjB,EAAW8D,wBACb,GAENC,gBAAiB,CAAEC,QAAQ,GAC3BC,SAAUjE,EAAWkE,QACrBC,aAAa,MACbC,IAAKlC,EACLmC,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHC,WAAY,CACVC,UAAW,QAIfjC,EACE,MAAA,CAAAM,MAAO,CACLrG,QAAS,OACTmD,cAAe,cACf3C,UAAW,OAGbyF,SAAAF,EAACU,EAEC,CAAAE,MAAOpC,EAAE,YAITqC,YAAaC,OAAOtC,EAAE,kBACtB8C,gBAAiB,CACfC,QAAQ,GAEVR,WACA,EAAAC,KAAM9C,EAAe,OAAS,WAC9Ba,KAAK,WACLE,MAAOtB,EAAMI,SAASkD,aAAe,GACrCC,SAAUrC,EACVsC,MAAO5D,EAAWgC,gBAClB6B,WACE7D,EAAWgC,gBACPf,EAAEjB,EAAW2E,wBACb,GAENV,SAAUjE,EAAWkE,QACrBE,IAAKjC,EACLkC,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHI,WAAY,CACVC,aACEpC,EAACqC,EAAc,CAACC,SAAS,MACvBpC,SAAAF,EAACuC,EACY,CAAA,aAAA,6BACXC,QAAS,KACFtE,EAMMA,GAAcD,EAAoB,IAL3CA,EAAoBE,KAAKC,MAAQ,KACjCE,EAASM,QAAUiB,YACjB,IAAMxB,EAAYF,KAAKC,QACvB,KAE2C,EAEjDqE,YAAcZ,GAAMA,EAAEa,iBACtBlB,SAAUjE,EAAWkE,QAAOvB,SAEZF,EAAf9B,EAAgByE,EAAiBC,EAAP,CAAA,QAKnCZ,WAAY,CAAEC,UAAW,OAjDrB,cAoDRjC,EAAA,MAAA,CAAKM,MAAO,CAAE7F,UAAW,OAAQR,QAAS,QAAQiG,SAChDF,SAAKM,MAAO,CAAEuC,KAAM,OAAQC,UAAW,OAAO5C,SAC5CF,EACE,IAAA,CAAA+C,KAAMtF,GAA0B,GAChC6C,MAAO,CAAExF,MAAO,uBAAuBoF,SAEtC1B,EAAE,wBAITwB,EAAK,MAAA,CAAAM,MAAO,CAAE7F,UAAW,OAAQR,QAAS,QACxCiG,SAAAF,EAAA,MAAA,CACEM,MAAO,CACLuC,KAAM,OACNC,UAAW,SACXrI,UAAW,MACXkB,aAAc,QACfuE,SAEDF,EAACgD,EACC,CAAA1C,MAAO,CACLlG,aAAcmD,EAAWkE,QAAU,MAAQ,OAC3CrF,OAAQmB,EAAWkE,QAAU,OAAS,OACtClH,MAAOgD,EAAWkE,QAAU,MAAQ,OACpC9G,SAAU4C,EAAWkE,QAAU,OAAS,QAE1CV,WACA,EAAAS,SAAUjE,EAAWkE,QACrBe,QAAS,IACPhF,GACGG,EAAMG,UAAY,IAAImF,cACvBtF,EAAMI,UAGV4D,IAAKhC,EACLuD,QAAS3F,EAAWkE,aAAU0B,EAAY,OAC1CC,WAAW,sCAEV7F,EAAWkE,QACVzB,EAACqD,EAAiB,CAAAC,KAAM,GAAIC,UAAW,MAEvC/E,EAAE,uBASlB,ECtPSgF,GAAW,EACtBlG,UACAmG,mBACAC,OACAC,cACApG,aACAqG,YACAC,WACAC,cACAC,eACAC,kBAAkB,CAACC,IAAD,GAClBC,iBAAiB,EACjBC,iBAEA,MAAOC,EAAKC,GAAUxG,EAAS,KACxBG,EAAkBC,GAAuBJ,EAAS,GACnDK,EAAeC,KAAKC,MAAQJ,GACzB,CAAAK,GAAeR,IAClBS,EAAWC,EAAY,MAC7BG,GAAU,IACD,IAAMC,aAAaL,EAASM,UAClC,IACH,MAAO0F,EAASC,GAAc1G,GAAS,GACjC8B,EAAiBpB,EAAY,OAC5BiG,EAAkBC,GAAuB5G,GAAS,IACnD6G,gBAAEA,GAAoBC,KACtBnG,EAAEA,GAAMC,IAuGd,OAPAC,GAAU,KACJnB,GAAYwC,eAnBhB+D,EAAY,IACZO,EAAO,IACPV,EAAY,KAmBDiB,QAAQf,IACjBQ,EAAO,GACR,GACA,CAAC9G,EAAWwC,cAAe8D,IAE5B7D,EAACC,EAAQ,CAAAC,SACPF,EAACG,EAAS,CAACjG,SAAS,cAClB8F,EAACK,GAAK7D,WAAW,SAAS/B,UAAW,MACnCyF,SAAAE,EAAA,MAAA,CAEEE,MACE,CAMC,EAGHJ,SAAA,CAAAF,EAAA,MAAA,CACEM,MAAO,CACLxF,MAAO,UACPF,SAAU,OACVG,WAAY,MAEZyB,WAAY,SACZgE,UAAW,SACX9D,WAAY,OACZf,aAAc,QACfuE,SAEyB,QAAzB3C,GAAYsH,SACTrG,EAAE,yBACuB,SAAzBjB,GAAYsH,SACVrG,EAAE,0BACF,OAERwB,EAAA,MAAA,CACEM,MAAO,CACLxF,MAAO,UACPF,SAAU,OACVG,WAAY,MACZyB,WAAY,SACZgE,UAAW,SACX9D,WAAY,QACbwD,SAEyB,QAAzB3C,GAAYsH,SACTtH,GAAYuH,aAAe,GACF,SAAzBvH,GAAYsH,SACVrG,EAAE,sBACF,OAeR4B,SAAKK,UAAWnD,EAAQf,uBACrBiC,EAAE,aAAc,IAChBjB,GAAYwH,SACTxH,EAAWwH,SAASC,OAAO,GAAGC,cAC9B1H,EAAWwH,SAASG,MAAM,GAC1B,KACsB,QAAzB3H,GAAYsH,UACX7E,EAACmF,GAECC,cA3HUC,UACxBZ,GAAoB,GACpB,MAAMa,OAAEA,EAAMC,KAAEA,EAAIC,QAAEA,SAAkB/B,EAItClG,GAAYkI,WACZlI,GAAYmI,SACZnI,GAAYoI,YACZxB,EACA5G,GAAYqI,YACZrI,GAAYwH,UAKdN,GAAoB,GACL,MAAXa,GACFtB,EAAgBuB,GAAMM,SACtBtB,GAAW,GACXG,EAAgBc,EAAS,CAAEM,QAAS,aAEpCpB,EAAgBc,EAAS,CAAEM,QAAS,SACrC,EAsGaC,aAjKMC,IACpB,IAAIC,cAAEA,KAAkBC,GAAUF,EAClC,OAAOxB,EACLpE,OACEK,UAAW0F,EACT7I,EAAQV,eACP0H,GAAWhH,EAAQhB,eAEtBgE,MAAO,CAAE9E,OAAQ,QAGhB0E,SAAA,CAAA1B,EAAE,qBAAmBwB,EAACqD,GAAiBC,KAAM,GAAIxI,MAAM,iBAG1DkF,OACEoG,cAAeH,KACXC,EACJzF,UAAW0F,EACT7I,EAAQV,eACP0H,GAAWhH,EAAQhB,wBAIrBkC,EAAE,kBAEN,EAyIa6H,WAhGID,IACc,IAA5BE,SAASF,IACXvG,YAAW,KACT0E,GAAW,EAAK,GACf,KAGHnE,EAAM,OAAA,CAAAK,UAAW0F,EAAK7B,GAAWhH,EAAQhB,eAAc4D,SAAA,CACpD1B,EAAE,kBAAiB,IAAG4H,EAAa,IAAG5H,EAAE,kBAyF/B+H,QAAShJ,GAAYqI,aAAe,GACpCnF,UAAWnD,EAAQX,oBAIzByD,EAAA,MAAA,CACEK,UAAWnD,EAAQrB,QACnB2F,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EACF7B,SAAA,CAEDF,EAACwG,EACC,CAAAvH,MAAOmF,EACPlD,SAAUmD,EACV1D,WACA,EAAA8F,UAAW,EACXC,QAAQ,SACRlF,SAAUjE,EAAWoJ,YAAcpJ,EAAWkE,QAC9CmF,QAAS1I,EACTuC,UAAWnD,EAAQpB,kBAErB8D,EAACuC,EAAU,CAAA,aACE,6BACXC,QAAS,KACFtE,EAMMA,GAAcD,EAAoB,IAL3CA,EAAoBE,KAAKC,MAAQ,KACjCE,EAASM,QAAUiB,YACjB,IAAMxB,EAAYF,KAAKC,QACvB,KAE2C,EAEjDqE,YAAcZ,GAAMA,EAAEa,iBACtBlB,SAAUjE,EAAWoJ,WACrBlG,UAAWnD,EAAQjB,YAElB6D,SAAeF,EAAf9B,EAAgByE,EAAiBC,EAAJ,CAAA,QAGjCgC,QAAQf,GACP7D,EAAC6G,EAAe,CAAAvG,MAAO,CAAExF,MAAO,OAAOoF,SACpC2D,IAED,KACsB,SAAzBtG,GAAYsH,SACX7E,EAAK,MAAA,CAAAM,MAAO,CAAEuC,KAAM,QAAQ3C,SAC1BF,EAAG,IAAA,CAAA+C,KAAK,cAAczC,MAAO,CAAExF,MAAO,uBAElCoF,SAAA,kBAGNF,EAAA8G,EAAA,CAAA,GAEF1G,EACE,MAAA,CAAAE,MAAO,CACLrG,QAAS,OACT8M,IAAK,OACL5M,OAAQ,gBACRI,MAAO,OACR2F,SAAA,CAEDF,EAACgD,GAECxB,SAAUjE,EAAWoJ,YAAcpJ,EAAWkE,QAC9Ce,QAAS,KACPuB,GAAa,EAAO,GAAG,EAEzBtD,UAAWnD,EAAQtB,WACnBgL,UAAW,sBACXC,GAAI,CACFpM,OAAQ,gCACRF,SAAU,MACVd,WAAY,eACZO,aAAc,OACd,aAAc,CACZU,MAAO,iCACPoM,QAAS,IAEX,UAAW,CACTrN,WAAY,0BACZ,qBAAsB,CACpBsN,UAAW,6BACXC,WAAY,8BAKlBC,UAAW,OAEVnH,SAAA1B,EAAE,cAELwB,EAACgD,EAAc,CACb1C,MAAO,CACLlG,aAAcmD,EAAWkE,QAAU,MAAQ,OAC3CrF,OAAQmB,EAAWkE,QAAU,OAAS,OACtClH,MAAOgD,EAAWkE,QAAU,MAAQ,OACpC9G,SAAU4C,EAAWkE,QAAU,OAAS,QAE1CV,WAAS,EACTS,SAAUjE,EAAWkE,QACrBe,QA7OY,MACnBoC,QAAQR,IAAQA,EAAIkD,OAAS,EAChCxD,EAAY,sBAEZA,EAAY,IACZF,EAAUQ,GACX,EAwOWzC,IAAKhC,EACLc,UAAWnD,EAAQtB,WACnBkH,QAAS3F,EAAWkE,aAAU0B,EAAY,UAC1CC,WAAW,sBAEV7F,EAAWkE,QACVzB,EAACqD,GAAiBC,KAAM,GAAIC,UAAW,MAEvC/E,EAAE,8BAQhB,EAGS+I,GAAe,EAC1BjK,UACAmG,mBACAE,cACApG,aACAqG,YACAC,WACAC,cACAK,aACAH,kBAAkB,CAACC,IAAD,GAClBC,iBAAiB,MAEjB,MAAOE,EAAKC,GAAUxG,EAAS,KACxBG,EAAkBC,GAAuBJ,EAAS,GACnDK,EAAeC,KAAKC,MAAQJ,GACzB,CAAAK,GAAeR,IAClBS,EAAWC,EAAY,MAC7BG,GAAU,IACD,IAAMC,aAAaL,EAASM,UAClC,IACH,MAAO0F,EAASC,GAAc1G,GAAS,IAChC2G,EAAkBC,GAAuB5G,GAAS,GACnD8B,EAAiBpB,EAAY,OAC7BmG,gBAAEA,GAAoBC,KACtBnG,EAAEA,GAAMC,IA2DR+I,EAAmB,KACvB1D,EAAY,IACZO,EAAO,IACPV,GAAa,EAsBf,OARAjF,GAAU,KACJnB,GAAYwC,cACdyH,IACS5C,QAAQf,IACjBQ,EAAO,GACR,GACA,CAAC9G,EAAWwC,cAAe8D,IAG5B7D,EAACC,EAAQ,CAAAC,SACPF,EAACK,EAAI,CAAC7D,WAAW,SAAQ0D,SACvBE,EACE,MAAA,CAAAF,SAAA,CAAAF,EAAA,MAAA,CACEM,MAAO,CACLxF,MAAO,UACPF,SAAU,OACVG,WAAY,MAEZyB,WAAY,SACZgE,UAAW,SACX9D,WAAY,OACZf,aAAc,QAGfuE,SAAA1B,EAAE,2BAaLwB,EAAA,MAAA,CACEM,MAAO,CACLxF,MAAO,UACPF,SAAU,OACVG,WAAY,MACZyB,WAAY,SACZgE,UAAW,SACX9D,WAAY,QAGbwD,SAAA3C,GAAYkK,mBAAqB,KAEpCrH,EAAK,MAAA,CAAAK,UAAWnD,EAAQf,aAAY2D,SAAA,CACjC1B,EAAE,aAAc,IAChBjB,GAAYwH,SACTxH,EAAWwH,SAASC,OAAO,GAAGC,cAC9B1H,EAAWwH,SAASG,MAAM,GAC1B,KACH3H,EAAWoJ,YACZzC,GAAkB,GACQ,SAA1B3G,GAAYmK,UAAuB,KACjC1H,EAACmF,EACC,CAAAC,cAnGYC,UACxBZ,GAAoB,GACpB,MAAMa,OAAEA,EAAMC,KAAEA,EAAIC,QAAEA,SAAkB/B,EAKtClG,GAAYoK,WACZpK,GAAYqK,UACZrK,GAAYoI,YACZxB,EACA5G,GAAYqI,YACZrI,GAAYwH,UAEdN,GAAoB,GACL,MAAXa,GACFtB,EAAgBuB,GAAMM,SACtBtB,GAAW,GACXG,EAAgBc,EAAS,CAAEM,QAAS,aAEpCpB,EAAgBc,EAAS,CAAEM,QAAS,SACrC,EAgFWC,aAxIQC,IACpB,IAAIC,cAAEA,KAAkBC,GAAUF,EAClC,OAAOxB,EACLpE,OACEK,UAAW0F,EACT7I,EAAQV,eACP0H,GAAWhH,EAAQhB,eAEtBgE,MAAO,CAAE9E,OAAQ,QAGhB0E,SAAA,CAAA1B,EAAE,qBAAmBwB,EAACqD,GAAiBC,KAAM,GAAIxI,MAAM,iBAG1DkF,OACEoG,cAAeH,KACXC,EACJzF,UAAW0F,EACT7I,EAAQV,eACP0H,GAAWhH,EAAQhB,wBAIrBkC,EAAE,kBAEN,EAgHW6H,WA1EMD,IACc,IAA5BE,SAASF,IACXvG,YAAW,KACT0E,GAAW,EAAK,GACf,KAGHnE,UAAMK,UAAW0F,EAAK7B,GAAWhH,EAAQhB,eAAc4D,SAAA,CACpD1B,EAAE,kBAAoB,IAAA4H,MAmEfG,QAAShJ,GAAYqI,aAAe,GACpCnF,UAAWnD,EAAQX,oBAIzByD,EAAA,MAAA,CACEK,UAAWnD,EAAQrB,QACnB2F,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EACF7B,SAAA,CAEDF,EAACwG,EACC,CAAAvH,MAAOmF,EACPlD,SAAUmD,EACV1D,WACA,EAAA8F,UAAW,EACXC,QAAQ,SACRlF,SAAUjE,EAAWoJ,YAAcpJ,EAAWkE,QAC9CmF,QAAS1I,EACTuC,UAAWnD,EAAQpB,kBAoBrB8D,EAACuC,EAAU,CAAA,aACE,6BACXC,QAAS,KACFtE,EAMMA,GAAcD,EAAoB,IAL3CA,EAAoBE,KAAKC,MAAQ,KACjCE,EAASM,QAAUiB,YACjB,IAAMxB,EAAYF,KAAKC,QACvB,KAE2C,EAEjDqE,YAAcZ,GAAMA,EAAEa,iBACtBlB,SAAUjE,EAAWoJ,WACrBlG,UAAWnD,EAAQjB,YAAW6D,SAEdF,EAAf9B,EAAgByE,EAAiBC,EAAP,CAAA,QAG9BgC,QAAQf,GACP7D,EAAC6G,EAAe,CAAAvG,MAAO,CAAExF,MAAO,gBAAU+I,IACxC,KAEJzD,EAAA,MAAA,CACEE,MAAO,CACLrG,QAAS,OACT8M,IAAK,OACL5M,OAAQ,gBACRI,MAAO,OACR2F,SAAA,CAEDF,EAACgD,EACC,CAAAjC,aACAS,SAAUjE,EAAWoJ,YAAcpJ,EAAWkE,QAC9Ce,QAASgF,EACT/G,UAAWnD,EAAQtB,WACnBqL,UAAW,OACXL,UAAW,0BACXC,GAAI,CACF,aAAc,CACZnM,MAAO,kCAGXsI,WAAW,6BACX9C,MAAO,CAILlG,aAAc,OACdO,SAAU,OAGXuF,SAAA1B,EAAE,cAELwB,EAACgD,EACC,CAAA1C,MAAO,CACLlG,aAAcmD,EAAWoJ,WAAa,MAAQ,OAC9CvK,OAAQmB,EAAWoJ,WAAa,OAAS,OACzCpM,MAAOgD,EAAWoJ,WAAa,MAAQ,OACvChM,SAAU4C,EAAWoJ,WAAa,OAAS,QAG7CnF,SAAUjE,EAAWkE,QACrBe,QAtNc,MACnBoC,QAAQR,IAAQA,EAAIkD,OAAS,EAChCxD,EAAY,sBAEZA,EAAY,IACZF,EAAUQ,GACX,EAiNSzC,IAAKhC,EACLc,UAAWnD,EAAQtB,WAAUkE,SAE5B3C,EAAWoJ,WACV3G,EAACqD,EAAgB,CAACC,KAAM,GAAIC,UAAW,MAEvC/E,EAAE,4BAOd,ECrmBSqJ,GAAe,EAC1BvK,UACAC,aACAuK,eACA/D,mBAEA,MAAMvF,EAAEA,GAAMC,IACd,OACEuB,EAACC,EAAQ,CAAAC,SACPF,EAACG,EAAS,CAACjG,SAAS,cAClBkG,EAACC,GAAK7D,WAAW,SACf0D,SAAA,CAAAE,EAAA,MAAA,CACEE,MAAO,CACLnE,YAAa,OACb5B,MAAO,QAER2F,SAAA,CAEDF,EAAM,KAAA,CAAA,GACNA,EACE,MAAA,CAAAM,MAAO,CACLxF,MAAO,UACPF,SAAU,OACVG,WAAY,MAEZyB,WAAY,SACZgE,UAAW,SACX9D,WAAY,OACZf,aAAc,QAGfuE,SAAA1B,EAAE,uCAELwB,EAAA,MAAA,CACEM,MAAO,CACLxF,MAAO,UACPF,SAAU,OACVG,WAAY,MAEZyB,WAAY,SACZgE,UAAW,SACX9D,WAAY,QAEbwD,SAEA1B,EAAE,oCAELwB,EAAA,KAAA,CAAA,GACAI,EAAC2H,EAAU,CAACjC,QAAQ,KAAKxF,MAAO,CAAExF,MAAO,qBACtC0D,EAAE,iBAAe,GACjB,IACCjB,GAAYwH,SACRxH,EAAWwH,SAASC,OAAO,GAAGC,cAC9B1H,EAAWwH,SAASG,MAAM,GAC1B,UAGRlF,EAAA,KAAA,IACAA,EAAA,MAAA,CACES,UACElD,GAAYyK,iBACR1K,EAAQ2K,UACR3K,EAAQ4K,kBAGd9H,EAAK,MAAA,CAAAK,UAAU,eACbP,SAAA,CAAAF,EAACmI,EAAoB,CACnBlB,GAAI,CACFrM,SAAU,OACVsM,QAAS,MACT9M,aAAc,MACdH,QAAS,OACTE,OAAQ,SACR,UAAW,CACTiO,aAAc,sBAGlB3H,UACElD,GAAYyK,iBAAmB1K,EAAQ+K,WAAa,KAEtDvN,MAAOyC,GAAYyK,iBAAmB,QAAU,YAEjDzK,GAAY+K,WACXlI,EACE0G,EAAA,CAAA5G,SAAA,CAAAF,EAAA,MAAA,CACES,UAAU,eACVH,MAAO,CACLzF,OAAQ0C,GAAY+K,WAChB,oBACA,oBAGRtI,EACE,MAAA,CAAAS,UAAU,+BACVH,MAAO,CACLzF,OAAQ0C,GAAY+K,WAChB,oBACA,mBAGRtI,EACE,MAAA,CAAAS,UAAU,+BACVH,MAAO,CACLzF,OAAQ0C,GAAY+K,WAChB,oBACA,sBAIR,UAIRtI,EAAA,MAAA,CAAKS,UAAWnD,EAAQiL,UACtBrI,SAAAE,EAAA,MAAA,CAAKE,MAAO,CAAE7F,UAAW,QACvByF,SAAA,CAAAF,EAAA,MAAA,CAAKS,UAAWlD,EAAW+K,WAAa,WAAa,gBACnDtI,EACE,MAAA,CAAAS,UAAU,MACVH,MAAO,CAAE/F,MAAOgD,EAAW+K,WAAa,MAAQ,UAGpDtI,EAAA,KAAA,CACEM,MAAO,CACLrG,QAAS,OACTQ,UAAW,OACX0C,eAAgB,eAChBrC,MAAOyC,GAAYyK,iBACf,qBACA,WAGL9H,SAAA3C,GAAYyK,iBACTzK,GAAYiL,YACZjL,GAAYkE,QACVjD,EAAE,qBACFjB,GAAY+K,WACV9J,EAAE,sBACF,eAKhB4B,EACE,MAAA,CAAAE,MAAO,CACLrG,QAAS,OACTkD,eAAgB,SAChBhD,OAAQ,gBAER4M,IAAK,QACN7G,SAAA,CAEDF,EAACgD,EACC,CAAAjC,aACAS,SAAUjE,EAAWkE,QACrBe,QAAS,KACPuB,GAAa,EAAO,GAAG,EAEzBtD,UAAWnD,EAAQtB,WACnBqL,UAAW,OACXjE,WAAW,6BACX4D,UAAW,iCACX1G,MAAO,CACLzF,OAAQ,+BACRC,MAAO,sBACPjB,WAAY,eACZO,aAAc,OACdO,SAAU,OAGXuF,SAAA1B,EAAE,cAELwB,EAACgD,EACC,CAAA1C,MAAO,CACLlG,aAAcmD,EAAWkE,QAAU,MAAQ,OAC3CrF,OAAQmB,EAAWkE,QAAU,OAAS,OACtClH,MAAOgD,EAAWkE,QAAU,MAAQ,OACpC9G,SAAU4C,EAAWkE,QAAU,OAAS,QAI1CD,SAAUjE,EAAWkE,QACrBG,UAAYC,GAAoB,KAAdA,EAAE4G,SAAkBX,EACtCtF,QAASsF,EACTrH,UAAWnD,EAAQtB,WAAUkE,SAE5B3C,EAAWkE,QACVzB,EAACqD,EACC,CAAAC,KAAM,GACNC,UAAW,IACXjD,MAAO,CAAExF,MAAO,UAGlB0D,EAAE,+BAOd,EC3KSkK,GAAcrD,MAAOsD,EAAWC,IAC7B,IAAIC,SAAQ,CAACC,EAASC,KAEd,iBAATJ,IACTA,EAAOK,KAAKC,MAAMN,IAEpBA,EAAKO,SAAQ7D,MAAO8D,EAAcC,KAChC,IACE,IACIC,EAAgB,CAClBC,gBA3CY,CAACC,IACrB,IACIC,EAAWC,EAASC,OADR,iBAC0B,gBAAiB,CACzDC,QAAS,GACTC,WAAY,MAEdC,QAAQC,IAAIN,EAASO,YAGrB,IAAIjI,EAAM,IAAI2H,EAASO,IAAIC,UAAUC,KAAKV,EAASW,MAAO,IAGtDC,EAAK,IAAIX,EAASO,IAAIC,UAAUC,KAAKV,EAASW,MAAME,OAAO,GAAS,IAKpEC,EAAMb,EAASc,IAAIC,QACrB,CACEC,WAAYhB,EAASiB,IAAIC,OAAO1B,MAC9BQ,EAASiB,IAAIC,OAAO1B,MAAMM,GAAeQ,SAASN,EAASiB,IAAIE,QAGnE9I,EACA,CACEsI,GAAIA,IAIR,OADAP,QAAQC,IAAI,uBAAwBQ,GAC7BA,EAAIP,SAASN,EAASiB,IAAIE,MAAM1L,MAAM4B,OAAO+J,aAAa,IAAIC,KAAK,GAAG,EAYjDC,CAAc5B,EAAQ6B,UAG1CC,aAAcrC,EACdsC,QAAS,OAEPC,EAAWnC,KAAKoC,UAAU/B,SACxBgC,MAAM,sCAAuC,CACjDC,OAAQ,OACRC,QAAS,CACPC,OAAQ,mBACR,eAAgB,oBAElBC,KAAMN,IAELO,MAAMC,GAAkBA,EAASC,SACjCF,MAAMC,IACuB,MAAxBA,GAAUE,WAAqBF,EAAiB,OAClD7C,EAAQ,CACNxD,QAAQ,EACRwG,UAAW,IACXC,aAAc,GACdC,SAAS,EACTC,MAAO9C,EAAQ+C,QAKfvD,EAAKrB,SAAW8B,EAAI,GACtBN,EAAQ,CACNxD,QAAQ,EACRwG,UAAWH,EAASE,UACpBE,aAAcJ,EAASQ,aACvBH,SAAS,GAGZ,IAEFI,OAAOC,IACNvD,EAAQ,CACNxD,QAAQ,EACRwG,UAAW,MACXC,aAAcM,EACdL,SAAS,GACT,GAEP,CAAC,MAAOM,GACPzC,QAAQC,IAAIwC,GACZxD,EAAQ,CACNxD,QAAQ,EACRwG,UAAW,MACXC,aAAc,wBACdC,SAAS,GAEZ,IACD,IClGOO,GAAW,CAACC,EAAM,MAC7B,GAAmB,iBAARA,EACT,OAAO,EAKT,MAFE,mEAEiBC,KAAKD,EAAI,ECAjBE,GAAc,EAAGC,oBAC5B,MAAOC,EAAeC,GAAoBhP,EAAqB,MACzDiP,EAASvO,EAAY,MACrBjB,EAAU/D,KAEVwT,EAASC,GAAQ,IAAML,GAAe,IAgB5C,OAdAjO,GAAU,KACR,GAAIkG,QAAQmI,GAAQE,WAClB,GAAIV,GAASQ,GAAQE,WAAY,CAC/B,IAAIC,EAAOC,EAAaC,aAAaL,GAAQE,WAC7CH,EAAOlO,QACW,iBAATsO,GAAqBtI,QAAQsI,GAChCG,IAAIC,gBAAgBJ,GACpB,GACNL,EAAiBC,EAAOlO,QACzB,MACCiO,EAAiBE,GAAQE,UAE5B,GACA,CAACF,IAEF/M,EAEE8G,EAAA,CAAA5G,SAAAE,EAACC,EAAI,CAACkN,MAAI,EAACC,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGjN,UAAWnD,EAAQ1B,UACjDsE,SAAA,CAAAF,EAACK,EAAI,CAACkN,MAAK,EAAAC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIpN,MAAO,CAAElE,OAAQ,QAAQ8D,SAC1DF,EACE,MAAA,CAAA2N,IAAI,GACJrN,MAAO,CACL/F,MAAO,OACP6B,OAAQ,OACRwR,UAAW,QACXC,eAAgB,UAElBC,IAAKlJ,QAAQgI,GAAiBA,EAAgB,OAGlD5M,EAACK,GACCkN,MAAI,EACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJpN,MAAO,CACLlE,OAAQ,OACRvC,WAAY,qBACbqG,SAEDE,EAACD,EAAU,CAAAjG,SAAS,KAClBgG,SAAA,CAAAE,EAAA,MAAA,CACEK,UAAU,OACVH,MAAO,CACLxF,MAAO,QACP0F,UAAW,SACX5F,SAAU,OACV2F,WAAY,QAGbL,SAAA,CAAA6M,GAAQgB,aAAe,GACxB/N,EAAA,OAAA,CAAMM,MAAO,CAAE0N,WAAY,MAAOjT,WAAY,YAIhDiF,EACE,MAAA,CAAAM,MAAO,CACL5D,WAAY,OACZ9B,SAAU,OACVG,WAAY,QACZC,cAAe,SACfF,MAAO,UACPZ,SAAU,SAGXgG,SAAA6M,GAAQkB,YAAc,cAOjC,ECrESC,GAAmB,EAC9B5Q,UACA6Q,gBACAzK,OACAqB,WACAqJ,cACAC,YACA1K,cACA2K,yBAEA,MAAM3O,EAAiBpB,EAAY,OAC7BmG,gBAAEA,GAAoBC,KACtBnG,EAAEA,GAAMC,KACPd,EAAOC,GAAYC,EAAS,CACjCC,SAAUiH,EACVwJ,YAAa,GACbxQ,SAAU,GACVyQ,gBAAiB,MAEZC,EAAUC,GAAoB7Q,EAAS,CAC5CmO,SAAS,EACTD,aAAc,GACd4C,WAAW,EACXC,eAAe,EACfC,iBAAkB,GAClBC,eAAe,EACfC,iBAAkB,GAClBC,sBAAsB,EACtBC,wBAAyB,KAwGrBpQ,EAAgBC,IACpB,MAAMC,EAAOD,EAAME,OAAOD,KAC1B,IAAIE,EAAQH,EAAME,OAAOC,MACZ,gBAATF,GAA0B6F,QAAQ3F,GACpCyP,GAAkBlP,QAAiBA,EAAQoP,eAAe,MACxC,aAAT7P,GAAuB6F,QAAQ3F,GACxCyP,GAAkBlP,QAAiBA,EAAQsP,eAAe,MACxC,oBAAT/P,GAA8B6F,QAAQ3F,IAC/CyP,GAAkBlP,IAAY,IACzBA,EACHwP,sBAAsB,MAG1BpR,GAAU4B,IAAM,IAAWA,EAAQT,CAACA,GAAOE,KAAS,EAGtD,OACEe,EAACC,EAAQ,CAAAC,SACPF,EAACG,EAAS,CAACjG,SAAS,cAClBkG,EAACC,GAAK7D,WAAW,SACf0D,SAAA,CAAAF,EAAA,MAAA,CACEM,MAAO,CACLxF,MAAO,qBACPF,SAAU,OACVG,WAAY,MACZyB,WAAY,SACZgE,UAAW,UAGbN,SAAAF,EAAA,KAAA,CAAAE,SAAA,wBAEFF,EAAA,MAAA,CACES,UAAU,GACVH,MAAO,CACLxF,MAAO,UACPF,SAAU,OACVG,WAAY,MACZyB,WAAY,SACZgE,UAAW,SACXjG,MAAO,SACR2F,SAAA,sBAIHE,EAAK,MAAA,CAAAK,UAAWnD,EAAQ9C,SAAQ0F,SAAA,CAC9BF,EAACU,GACCE,MAAO,UACPC,YAAY,gBACZE,aACAC,KAAM,OACNjC,KAAK,WACLE,MAAOtB,EAAMG,UAAY,GACzBoD,SAAUrC,EACVyC,gBAAiB,CAAEC,QAAQ,GAC3BC,UAAU,EACVE,aAAa,MACbM,WAAY,CAAEC,UAAW,IACzB3B,MAAO,CAAE4O,cAAe,SAE1BlP,EAACU,GACCC,WAAW,EACXC,MAAO,mBACPC,YAAY,yBACZE,WAAS,EACTC,KAAM,WACNjC,KAAK,cACLE,MAAOtB,EAAM4Q,aAAe,GAC5BrN,SAAUrC,EACVsC,MAAOsN,EAASG,cAChBxN,WACEqN,EAASG,cAAgBpQ,EAAEiQ,EAASI,kBAAoB,GAE1DvN,gBAAiB,CAAEC,QAAQ,GAC3BC,SAAUiN,EAASE,UACnBjN,aAAa,MACbE,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHC,WAAY,CAAEC,UAAW,IACzB3B,MAAO,CAAE4O,cAAe,SAE1BlP,EAACU,EAAS,CACRE,MAAO,eACPC,YAAY,qBACZE,WACA,EAAAC,KAAM,WACNjC,KAAK,WACLE,MAAOtB,EAAMI,UAAY,GACzBmD,SAAUrC,EACVsC,MAAOsN,EAASK,cAChB1N,WACEqN,EAASK,cAAgBtQ,EAAEiQ,EAASM,kBAAoB,GAE1DzN,gBAAiB,CAAEC,QAAQ,GAC3BC,SAAUiN,EAASE,UACnBjN,aAAa,MACbE,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHC,WAAY,CAAEC,UAAW,IACzB3B,MAAO,CAAE4O,cAAe,SAE1BlP,EAACU,EACC,CAAAE,MAAO,uBACPC,YAAY,6BACZE,WACA,EAAAC,KAAM,WACNjC,KAAK,kBACLE,MAAOtB,EAAM6Q,iBAAmB,GAChCtN,SAAUrC,EACVsC,MAAOsN,EAASO,qBAChB5N,WACEqN,EAASO,qBACLxQ,EAAEiQ,EAASQ,yBACX,GAEN3N,gBAAiB,CAAEC,QAAQ,GAC3BC,SAAUiN,EAASE,UACnBjN,aAAa,MACbE,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHC,WAAY,CAAEC,UAAW,IACzB3B,MAAO,CAAE4O,cAAe,SAEzBT,EAASzC,QACRhM,EAAC6G,GAAevG,MAAO,CAAExF,MAAO,OAC7BoF,SAAAuO,EAAS1C,eAEV,QAEN3L,EACE,MAAA,CAAAE,MAAO,CACLrG,QAAS,OACT8M,IAAK,OACL5M,OAAQ,gBACRI,MAAO,OAGT2F,SAAA,CAAAF,EAACgD,EACC,CAAAjC,aACAS,SAAUiN,EAASE,UACnBnM,QAzPa,KACvBmB,EAAY,GAAG,EAyPLlD,UAAWnD,EAAQtB,WACnBsE,MAAO,CACLzF,OAAQ,+BACRC,MAAO,sBAEPV,aAAc,QACf8F,SAAA,SAIHF,EAACgD,EAAc,CACb1C,MAAO,CACLlG,aAAcqU,EAASE,UAAY,MAAQ,OAC3CvS,OAAQqS,EAASE,UAAY,OAAS,OACtCpU,MAAOkU,EAASE,UAAY,MAAQ,OACpChU,SAAU8T,EAASE,UAAY,OAAS,QAE1C5N,WACA,EAAAS,SAAUiN,EAASE,UACnBnM,QA1Qc6C,UACxB,IAAI2G,GAAU,EACVmD,EAAa,CACfnD,SAAS,EACTD,aAAc,GACd4C,WAAW,EACXC,eAAe,EACfC,iBAAkB,GAClBC,eAAe,EACfC,iBAAkB,GAClBC,sBAAsB,EACtBC,wBAAyB,IAItBrK,QAAQjH,EAAM4Q,eACjBY,EAAWP,eAAgB,EAC3BO,EAAWN,iBAAmB,gCAC9B7C,GAAU,GAGZ,IAAIoD,EAAUjC,EAAakC,iBAAiB1R,EAAMI,UA6BlD,GA5BI6G,QAAQwK,KACVD,EAAWL,eAAgB,EAC3BK,EAAWJ,iBAAmBK,EAC9BpD,GAAU,GAGVpH,QAAQjH,EAAM4Q,cACd3J,QAAQjH,EAAMI,WACdJ,EAAM4Q,cAAgB5Q,EAAMI,WAE5BoR,EAAWL,eAAgB,EAC3BK,EAAWJ,iBACT,0DACF/C,GAAU,GAEPpH,QAAQjH,EAAM6Q,iBAKjB5J,QAAQjH,EAAMI,WACdJ,EAAMI,WAAaJ,EAAM6Q,kBAEzBW,EAAWH,sBAAuB,EAClCG,EAAWF,wBACT,kDACFjD,GAAU,IAVVmD,EAAWH,sBAAuB,EAClCG,EAAWF,wBAA0B,oCACrCjD,GAAU,GAURA,EAEF,YADA0C,EAAiBS,GAKnBT,GAAkBlP,QAAiBA,EAAQmP,WAAW,MACtD,MAAMW,eAAEA,EAAcC,aAAEA,SAAuBjB,EAAmB,CAChEkB,QAAS7R,EAAMG,SACf2R,SAAU9R,EAAMI,SAChB2R,WAAY,UAId,GAFAhB,GAAkBlP,QAAiBA,EAAQmP,WAAW,MAE/B,MAAnBW,EACF,OAAQC,GAAcI,UACpB,IAAK,MAIH,OAHAR,EAAWL,eAAgB,EAC3BK,EAAWJ,iBAAmBQ,GAAcK,eAC5ClB,EAAiBS,GAEnB,IAAK,IACH,IAAIxD,QAAiBwC,EACnBxQ,EAAMG,SACNH,EAAM4Q,YACN5Q,EAAMI,SACNqQ,EACAC,GAEFK,GAAkBlP,QAAiBA,EAAQmP,WAAW,MAC9B,MAApBhD,EAASrG,QACXZ,EAAgB,iCAAkC,CAChDoB,QAAS,YAEXnC,EAAY,KACZ+K,GAAkBlP,QAAiBA,EAAQmP,WAAW,OAEtDD,GAAkBlP,IAAY,IACzBA,EACHwM,SAAS,EACTD,aAAcJ,EAASnG,YAKhC,EA4KS7D,IAAKhC,EACLc,UAAWnD,EAAQtB,WAAUkE,SAE5BuO,EAASE,UACR3O,EAACqD,EAAiB,CAAAC,KAAM,GAAIC,UAAW,MAAO,oBAS1D,ECrTEsM,GAAgB,CACpB9K,SAAU,GACV+K,UAAW,GACXC,SAAU,GACVtO,SAAS,EACTkF,YAAY,EACZqF,SAAS,EACT1M,iBAAiB,EACjBC,iBAAiB,EACjBiJ,YAAa,GACbwH,eAAgB,GAChB9N,uBAAwB,GACxBb,uBAAwB,GACxB4O,YAAa,WACbC,cAAe,GACfzK,WAAY,GACZC,SAAU,GACVC,YAAa,GACbwK,aAAc,GACdC,WAAY,GACZrQ,eAAe,EACf8E,SAAU,GACVyD,YAAY,EACZZ,UAAW,IACX9B,YAAa,GACbd,YAAa,IAGTuL,GAAU,CAACC,EAAOC,KACtB,OAAQA,EAAOvP,MACb,IAAK,kCACL,IAAK,2BACH,MAAO,IACFsP,EACH7O,SAAS,EACTuK,SAAS,EACT1M,iBAAiB,EACjBC,iBAAiB,EACjBiR,YAAY,EACZxI,kBAAkB,EAClBQ,YAAa,IAGjB,IAAK,6BACH,MAAO,IAAK8H,EAAOhI,YAAY,EAAMN,kBAAkB,GAEzD,IAAK,8BACH,MAAO,IACFsI,EACH7O,SAAS,EACTuK,SAAS,EACT1M,iBAAiB,EACjBC,iBAAiB,EACjBoH,YAAY,EACZ6B,YAAa+H,GAAQE,SAAStP,MAC9Be,uBAAwBqO,GAAQE,SAASC,cACzCrP,uBAAwBkP,GAAQE,SAASE,cACzC5L,SAAU,GACVmL,cAAe,GACfzK,WAAY,GACZC,SAAU,GACVC,YAAa,IAGjB,IAAK,8BACH,MAAO,IACF2K,EACH7O,SAAS,EACTuK,SAAS,EACT1M,iBAAiB,EACjBC,iBAAiB,EACjBoH,YAAY,EACZ6B,YAAa+H,GAAQE,SAAStP,MAC9Be,uBAAwBqO,GAAQE,SAASC,cACzC3L,SAAU,GACVmL,cAAe,GACfzK,WAAY,GACZC,SAAU,IAEd,IAAK,8BACH,MAAO,IACF4K,EACH7O,SAAS,EACTuK,SAAS,EACT1M,iBAAiB,EACjBC,iBAAiB,EACjBoH,YAAY,EACZ6B,YAAa+H,GAAQE,SAAStP,MAC9BE,uBAAwBkP,GAAQE,SAASE,cACzC5L,SAAU,GACVmL,cAAe,GACfzK,WAAY,GACZC,SAAU,GACVC,YAAa,IAGjB,IAAK,gCACH,MAAO,IACF2K,EACH7O,SAAS,EACTuK,SAAS,EACT1M,iBAAiB,EACjBC,iBAAiB,EACjBoH,YAAY,EACZ6B,YAAa,GACbnH,uBAAwB,GACxBa,uBAAwB,GACxB6C,SAAU,GACVmL,cAAe,GACfC,aAAc,GACd1K,WAAY,GACZC,SAAU,GACVC,YAAa,IAGjB,IAAK,mBACH,MAAO,IACF2K,EACH7O,SAAS,EACTsD,SAAUwL,GAAQE,SAAS1L,SAC3BoL,aAAcI,GAAQE,SAASN,aAC/BC,WAAYG,GAAQE,SAASL,YAGjC,IAAK,0BACH,MAAO,IACFE,EACH7O,SAAS,EACT1B,cAAe6E,QAAQ2L,GAAQE,SAASG,gBAG5C,IAAK,iCACH,MAAO,IACFN,EACH7O,SAAS,EACTkF,YAAY,EACZuJ,cAAeK,GAAQE,SAASP,cAChCzK,WAAY8K,GAAQE,SAAShL,WAC7BC,SAAU6K,GAAQE,SAAS/K,SAC3BC,YAAa4K,GAAQE,SAAS9K,YAC9BZ,SAAUwL,GAAQE,SAAS1L,SAC3B2C,UAAW6I,GAAQE,SAAS/I,UAC5BsI,eAAgB,GAChBG,aAAcI,GAAQE,SAASN,aAC/BC,WAAYG,GAAQE,SAASL,WAC7BrQ,eAAe,EACfkQ,YAAa,MACbpL,SAAU0L,GAAQE,SAAS5L,SAC3BgM,UAAWN,GAAQE,SAASI,UAC5BjL,YAAa2K,GAAQE,SAAS7K,YAC9Bd,YAAayL,GAAQE,SAAS3L,aAGlC,IAAK,iCACH,MAAO,IACFwL,EACH7O,SAAS,EACTkF,YAAY,EACZqJ,eAAgB,GAChBjQ,eAAe,GAGnB,IAAK,+BACH,MAAO,IACFuQ,EACH7O,SAAS,EACTuK,SAAS,EACThE,kBAAkB,EAClBQ,YAAa+H,GAAQE,SAAStP,MAC9BmH,YAAY,GAEhB,IAAK,kCACH,MAAO,IACFgI,EACH7O,SAAS,EACTuK,SAAS,EACThE,kBAAkB,EAClBsI,MAAOC,EAAOE,QACdnI,YAAY,GAEhB,IAAK,0BACH,MAAO,IACFgI,EACH7O,SAAS,EACTkF,YAAY,EACZqJ,eAAgB,IAGpB,IAAK,wBACH,MAAO,IACFM,EACH7O,SAAS,EACTkF,YAAY,EACZqJ,eAAgBO,GAAQE,SAAStP,MACjCpB,cAAe6E,QAAQ2L,GAAQE,SAASG,gBAG5C,IAAK,mBACH,MAAO,IACFN,EACHJ,cAAeK,GAAQE,SAASP,eAGpC,IAAK,6BACH,MAAO,IACFL,GACHtQ,gBAAiBgR,GAAQE,SAASzE,QAClC9J,uBAAwBqO,GAAQE,SAAS1E,cAI7C,QACE,OAAOuE,EAEV,EA2BUQ,GAAuD,EAClEnE,gBACAoE,UACAC,YACAC,UACAC,4BACA5C,qBACA6C,YACA1N,mBACA0K,gBACAiD,oBACA3T,yBACAC,0BAEA,MAAMJ,EAAU/D,MACTgE,EAAY8T,GAAWC,EAAWjB,GAASR,KAC3C0B,EAAcC,GAAmB3T,GAAS,GAC3C4T,EAAelT,EAAO,IACrBmT,EAAkBC,GAAuB9T,EAAqB,MAC/DiP,EAASvO,EAAY,OACrBC,EAAEA,GAAMC,IACRmT,EAAerT,EAAO,IACtBsT,WAAEA,GAAeC,IAEvBpT,GAAU,KACR,GAAIkG,QAAQmM,GACV,GAAIxE,GAASwE,GAAU,CACrB,IAAI7D,EAAOC,EAAaC,aAAa2D,GACrCjE,EAAOlO,QACW,iBAATsO,GAAqBtI,QAAQsI,GAChCG,IAAIC,gBAAgBJ,GACpB,GACNyE,EAAoB7E,EAAOlO,QAC5B,MACC+S,EAAoBZ,EAEvB,GACA,CAACA,IAEJ,MAsFMnN,EAAYyB,MAAO0M,IACvB,GAAInN,QAAQmN,IAA8C,IAAhCA,EAAUhI,WAAWzC,OAAc,CAC3D+J,EAAQ,CAAErQ,KAAM,6BAChB,MAAMsE,OAAEA,EAAMC,KAAEA,EAAIC,QAAEA,SAAkB2L,EACtC5T,EAAW2S,cAEX3S,EAAWwH,SACXgN,EACAxU,EAAW4S,aACX5S,EAAW6S,WACX7S,EAAWsH,UAEE,MAAXS,GAMF+L,EAAQ,CAAErQ,KAAM,4BAChBiQ,EAAQ1L,IAER8L,EADoB,QAAX/L,EACD,CACNtE,KAAM,wBACNyP,QAAS,CAAEtP,MAAOqE,EAASoL,eAAe,IAIpC,CACN5P,KAAM,wBACNyP,QAAS,CAAEtP,MAAOqE,EAASoL,eAAe,IAG/C,MACCS,EAAQ,CACNrQ,KAAM,wBACNyP,QAAS,CAAEtP,MAAO,sCAErB,EAYG6Q,EAAiB,CAAChG,GAAU,EAAOD,EAAe,MACtDsF,EAAQ,CACNrQ,KAAM,6BACNyP,QAAS,CACPzE,QAASA,EACTD,aAAcA,IAEhB,EAuFJ,OACE/L,EAAA8G,EAAA,CAAA5G,SACEE,EAACC,GAAK4R,WAAS,EAAC3R,MAAO,CAAElE,OAAQ,QAAS8V,SAAU,UAAUhS,SAAA,CAC5DF,EAAC0M,GAAW,CAACC,cAAeA,IAC5BvM,EAACC,GAAKkN,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGyE,GAAI,EAACjS,SAAA,CACnC6Q,EACC/Q,EAACK,EAAI,CACH4R,WAAS,EACTG,UAAU,MACVjV,eAAe,WACfX,WAAW,SACXzC,QAAS,OACTG,SAAU,QACVmY,GAAI,OAAMnS,SAEVF,EAACsS,EAAO,CAACC,eAAa,EAACC,MAAOxB,GAAa,YACzChR,EACE,MAAA,CAAA8N,IAAKlJ,QAAQ8M,GAAoBA,EAAmB,GACpD/D,IAAI,OACJpT,MAAO,aAIX,KAEH6W,EACCpR,EAACK,EACC,CAAA4R,WACA,EAAAG,UAAU,MACVjV,eAAe,WACfX,WAAW,SACXzC,QAAS,aACTG,SAAU,QACVmY,GAAI,OAEJnS,SAAAF,EAACoR,EAAoB,CAAA,KAErB,KAEHG,EACCvR,EAACkO,GACC,CAAA5Q,QAASA,EACT6Q,cAAeA,EACfzK,KAAM6N,EACNxM,SAAUxH,EAAWwH,SACrBqJ,YAAa7Q,EAAW4S,aACxB9B,UAAW9Q,EAAW6S,WACtBzM,YAtJyB8O,IACtB,MAATA,GACFpB,EAAQ,CACNrQ,KAAM,0BACNyP,QAAS,CAAEG,eAAe,KAG9BY,GAAgB,EAAM,EAgJZlD,mBAAoBA,IAGtBtO,EACG8G,EAAA,CAAA5G,SAA2B,aAA3B3C,EAAW0S,YACVjQ,EAAC3C,GAEC,CAAAC,QAASA,EACTC,WAAYA,EACZC,uBA9Re6H,MAAON,EAAUhH,KAC9C,GAAI6G,QAAQG,IAAaH,QAAQ7G,GAAW,CAC1CsT,EAAQ,CAAErQ,KAAM,kCAChB,IACE,MAAMsE,OACJA,EAAS,GAAEC,KACXA,EAAO,KAAIC,QACXA,EAAU,GAAEkN,aACZA,EAAe,GAAEvC,aACjBA,EAAe,YACPe,EAA0BnM,EAAUhH,GAE9C,GAAe,MAAXuH,GAAmC,MAAjBoN,EACpBrB,EAAQ,CACNrQ,KAAM,mBACNyP,QAAS,CACP1L,SAAUA,EACVoL,aAAcA,GAAcA,cAAgB,GAC5CC,WAAYD,GAAcC,YAAc,MAG5CoB,GAAgB,QACX,GAAe,MAAXlM,GAiBT,GAhBA+L,EAAQ,CACNrQ,KAAM,iCACNyP,QAAS,CACPhL,WAAYF,GAAMoN,aAClBjN,SAAUH,GAAMqN,eAChBjN,YAAaJ,GAAMsN,SACnB3C,cAAe3K,GAAMuN,WACrB/N,SAAUA,EACVoL,aAAcA,GAAcA,aAC5BC,WAAYD,GAAcC,WAC1BvL,SAAUU,GAAMwN,UAChBlC,UAAWtL,GAAMyN,UACjBpN,YAAaL,GAAM0N,UACnBnO,YAAaS,GAAM2N,iBAGF,MAAjB3N,GAAM4N,OACR,IAAK,IAAI/J,EAAI,EAAGA,EAAI7D,GAAM6N,eAAe9L,OAAQ8B,UACzCyI,EAAW,CACfwB,aAAc,iBACd7N,QAASD,GAAM6N,eAAehK,UAKpCiI,EAAQ,CACNrQ,KAAM,8BACNyP,QAAS,CAAEtP,MAAOqE,EAASkL,cAAelL,IAG/C,CAAC,MAAO8G,GACP,MAAM,IAAIgH,MACR,yDAA2DhH,EAE9D,CACF,MAAW1H,QAAQG,IAAcH,QAAQ7G,GAS9B6G,QAAQG,GASlBsM,EAAQ,CACNrQ,KAAM,8BACNyP,QAAS,CACPtP,MAAO,qBACPuP,cAAe,wBAZnBW,EAAQ,CACNrQ,KAAM,8BACNyP,QAAS,CACPtP,MAAO,qBACPwP,cAAe,wBAbnBU,EAAQ,CACNrQ,KAAM,8BACNyP,QAAS,CACPtP,MAAO,iCACPwP,cAAe,qBACfD,cAAe,uBAmBpB,EA4MajT,uBAAwBA,EACxBC,oBAAqBA,GALjB,YAQNsC,EAAA8G,EAAA,CAAA5G,SAC2B,QAAxB3C,EAAWsH,SACV7E,EAACwD,GAAQ,CAEPC,iBAAkBA,EAClBnG,QAASA,EACTC,WAAYA,EACZqG,UAAWA,EACXG,aAAciO,EACdnO,SAAUrF,EAAEjB,GAAYyS,gBAAkB,IAC1ClM,YAAc3C,IACZkQ,EAAQ,CACNrQ,KAAM,wBACNyP,QAAS,CAAEtP,MAAOA,IAClB,EAEJuC,MAAM,EACNC,YAAaqO,EACb7N,WAAY,QACZH,gBAAkBuP,IAChBlC,EAAQ,CACNrQ,KAAM,mBACNyP,QAAS,CAAEP,cAAeqD,KAE5B3B,EAAahT,QAAUgT,EAAahT,QAAU,CAAC,EAEjDsF,eAAgB0N,EAAahT,SAvBzB,OAyBoB,SAAxBrB,EAAWsH,SACbzE,EAAA0G,EAAA,CAAA5G,SAAA,CACG,IACDF,EAACuH,GAAY,CAEX9D,iBAAkBA,EAClBnG,QAASA,EAETqG,YAAaqO,EACbzU,WAAYA,EACZqG,UAAWA,EACXC,SAAUtG,GAAYyS,gBAAkB,GACxClM,YAAc3C,IACZkQ,EAAQ,CACNrQ,KAAM,wBACNyP,QAAS,CAAEtP,MAAOA,IAClB,EAEJgD,WAAY,QACZH,gBAAkBuP,IAChBlC,EAAQ,CACNrQ,KAAM,mBACNyP,QAAS,CAAEP,cAAeqD,KAE5B3B,EAAahT,QAAUgT,EAAahT,QAAU,CAAC,EAEjDsF,eAAgB0N,EAAahT,SAtBxB,cA0BToB,EAAC6H,GAEC,CAAAvK,QAASA,EACTC,WAAYA,EACZuK,aAjNCzC,UACnB,IACEgM,EAAQ,CAAErQ,KAAM,+BAChB,MAAMwS,OCjcWnO,WACrB,IAII8F,EAAWnC,KAAKoC,UAJA,CAClBqI,QAAS,GACTC,QAAS,KAGX,MAAMC,QAAoBtI,MAAM,uCAAwC,CACtEC,OAAQ,OACRC,QAAS,CACPC,OAAQ,mBACR,eAAgB,oBAElBC,KAAMN,IAGR,aADsBwI,EAAY/H,MACpB,EDkbmBgI,GAC7B,GAAkC,MAA9BJ,GAAgB3H,UAAmB,CACrCwF,EAAQ,CAAErQ,KAAM,oCAChB,MAAM6S,QAAqBnL,GACzBnL,EAAWsT,UACX2C,EAAeM,aAEjB,GAAID,EAAQ7H,QACVqF,EAAQ,CACNrQ,KAAM,+BACNyP,QAAS,CACPtP,MAAO0S,GAAS9H,cAAgB,+BAG/B,CACL,MAAMzG,OAAEA,EAAMC,KAAEA,EAAIC,QAAEA,SAAkB2L,EACtC5T,EAAW2S,cACX3S,EAAWwH,SACXjE,OAAO+S,GAAS5H,OAAS,KACzB1O,EAAW4S,aACX5S,EAAW6S,WACX7S,EAAWsH,SACXgP,EAAQvO,OAAS,IAAM,KAEV,MAAXA,GAAkBuO,EAAQvO,QAC5B+L,EAAQ,CAAErQ,KAAM,oCAChBiQ,EAAQ1L,IACY,MAAXD,GAAmBuO,EAAQvO,OAUhB,OAAXA,EACT+L,EAAQ,CACNrQ,KAAM,+BACNyP,QAAS,CACPtP,MAAOqE,GAAW,uCAGF,QAAXF,GACT+L,EAAQ,CACNrQ,KAAM,+BACNyP,QAAS,CACPtP,MAAOqE,GAAW,uCAGtBwM,GACE,EACAxM,GAAW,sCAGb6L,EAAQ,CACNrQ,KAAM,+BACNyP,QAAS,CACPtP,MAAOqE,GAAW,wCA/BtBiM,EAAa7S,QAAU6S,EAAa7S,QAAU,EAC9CyS,EAAQ,CACNrQ,KAAM,+BACNyP,QAAS,CACPtP,MAAO,uCAGPsQ,EAAa7S,SAAW,GAC1BoT,GAAe,EAAM,qCA2B1B,CACF,MACCX,EAAQ,CACNrQ,KAAM,+BACNyP,QAAS,CACPtP,MACEqS,GAAgBrH,cAAgB3N,EAAE,8BAI3C,CAAC,MAAOqD,GACPwP,EAAQ,CACNrQ,KAAM,+BACNyP,QAAS,CACPtP,MAAOU,GAAG2D,SAAWhH,EAAE,mCAG5B,GA+HiBuF,aAAciO,GAJV,wBActB,EE7oBS+B,GAAuB,EAClCzW,UACAC,aACAyW,WACAC,WACAC,oBACAxW,sBACAyW,uBAEA,MAAOxW,EAAOC,GAAYC,EAAS,CACjCC,SAAsC,IAA5BP,EAAW6W,aAAqB7W,GAAYwH,SAAW,GACjEsP,SAAU,GACVtW,SAAU,GACVyQ,gBAAiB,KAEb/O,EAAWlB,EAAY,MACvBmB,EAAenB,EAAY,MAC3BoB,EAAiBpB,EAAY,OAC5BP,EAAkBC,GAAuBJ,EAAS,IAClDyW,EAAyBC,GAA8B1W,EAAS,GACjEK,EAAeC,KAAKC,MAAQJ,EAC5BwW,EAAsBrW,KAAKC,MAAQkW,GAChC,CAAAjW,GAAeR,IAClBS,EAAWC,EAAY,MAE7BG,GAAU,IACD,IAAMC,aAAaL,EAASM,UAClC,IAEH,MAAMJ,EAAEA,GAAMC,IACRI,EAAgBC,IACpB,MAAMC,EAAOD,EAAME,OAAOD,KAC1B,IAAIE,EAAQH,EAAME,OAAOC,MAEd,aAATF,GACArB,GACAuB,GACAvB,EAAoBwB,MAAM,IAAIC,MAAMC,GAASH,EAAMI,SAASD,OAIjD,aAATL,GAAuBE,IACzB1B,EAAW+B,iBAAkB,GAElB,aAATP,GAAuBE,IACzBA,EAAQA,EAAMwV,QAAQ,MAAO,IACzB7P,QAAQ3F,KACV1B,EAAWmX,eAAgB,IAG/B9W,GAAU4B,IAAM,IAAWA,EAAQT,CAACA,GAAOE,MAAS,EAStD,OAPAP,GAAU,KACwB,IAA5BnB,EAAW6W,cACbvU,YAAW,KACTH,GAAcd,SAASkB,SAAS,GAC/B,IACJ,GACA,CAACvC,EAAW6W,eAEbpU,EAACC,EAAQ,CAAAC,SACPE,SAAKK,UAAWnD,EAAQ9C,SAAQ0F,SAAA,CAC9BF,EAACU,GACCC,WAAW,EACXC,MAAOpC,EAAE,UACTqC,YAAaC,OAAOtC,EAAE,WACtBuC,WAAS,EACTC,KAAM,OACNjC,KAAK,WACLE,MAAOtB,EAAMG,SAASmD,aAAe,GACrCC,SAAUrC,EACVsC,MAAO5D,EAAW+B,gBAClB8B,WACE7D,EAAW+B,gBACPd,EAAEjB,EAAW8D,wBACb,GAENC,gBAAiB,CAAEC,QAAQ,GAC3BC,WACEjE,EAAWkE,SAEqB,IAA5BlE,EAAW6W,aAIjB1S,aAAa,MACbC,IAAKlC,EACLuC,WAAY,CAAEC,UAAW,IACzBL,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHzB,MAAO,CAAE4O,cAAe,SAEG,IAA5B3R,EAAW6W,aACVpU,EAACU,GACCE,MAAOpC,EAAE,YACTqC,YAAY,mBAEZE,WACA,EAAAC,KAAM,OACNjC,KAAK,WACLE,MAAOtB,EAAM0W,SAASpT,aAAe,GACrCC,SAAUrC,EACVsC,MAAO5D,EAAWmX,cAClBtT,WACE7D,EAAWmX,cACPlW,EAAEjB,EAAWoX,wBACb,GAENrT,gBAAiB,CAAEC,QAAQ,GAC3BC,WACEjE,EAAWkE,SAEqB,IAA5BlE,EAAW6W,aAIjB1S,aAAa,MACbE,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHC,WAAY,CAAEC,UAAW,IACzB3B,MAAO,CAAE4O,cAAe,SAExB,KACyB,IAA5B3R,EAAW6W,aACVhU,EAAA0G,EAAA,CAAA5G,SAAA,CACEF,EAACU,EAAS,CACRC,WAAW,EACXC,MAAOpC,EAAE,YACTqC,YAAY,iBACZE,WACA,EAAAC,KAAM9C,EAAe,OAAS,WAC9Ba,KAAK,WACLE,MAAOtB,EAAMI,SAASkD,aAAe,GACrCC,SAAUrC,EACV+V,OAAQvP,eAAkB8O,EAAiBxW,EAAO,KAClDwD,MAAO5D,EAAWgC,gBAClB6B,WACE7D,EAAWgC,gBACPf,EAAEjB,EAAWsX,wBACb,GAENvT,gBAAiB,CAAEC,QAAQ,GAC3BC,SAAUjE,EAAWkE,QACrBC,aAAa,MACbC,IAAKjC,EACLkC,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHI,WAAY,CACVC,aACEhC,EAACiC,GAAeC,SAAS,MAAKpC,SAAA,CAC3B3C,EAAWuX,wBACV9U,EAACqD,EAAiB,CAAAvI,MAAM,YACtBgL,QAAQ,gBAAgBxC,KAAM,GAAIC,UAAW,MAAW,KAC5DvD,EAACuC,EAAU,CAAA,aACE,6BACXC,QAAS,KACFtE,EAMMA,GAAcD,EAAoB,IAL3CA,EAAoBE,KAAKC,MAAQ,KACjCE,EAASM,QAAUiB,YACjB,IAAMxB,EAAYF,KAAKC,QACvB,KAE2C,EAEjDqE,YAAcZ,GAAMA,EAAEa,iBACtBlB,SAAUjE,EAAWkE,QAAOvB,SAEZF,EAAf9B,EAAgByE,EAAiBC,EAAP,CAAA,SAKnCZ,WAAY,CAAEC,UAAW,IACzB3B,MAAO,CAAE4O,cAAe,SAE1BlP,EAACU,GACCE,MAAOpC,EAAE,mBACTqC,YAAaC,OAAOtC,EAAE,yBACtBuC,WACA,EAAAC,KAAMwT,EAAsB,OAAS,WACrCzV,KAAK,kBACLE,MAAOtB,EAAM6Q,gBAAgBvN,aAAe,GAC5CC,SAAUrC,EACV+V,OAAQvP,eAAkB8O,EAAiBxW,EAAO,KAClDwD,MAAO5D,EAAWwX,uBAClB3T,WACE7D,EAAWwX,uBACPvW,EAAEjB,EAAWyX,+BACb,GAEN1T,gBAAiB,CAAEC,QAAQ,GAC3BC,SAAUjE,EAAWkE,QACrBC,aAAa,MACbE,UAAYC,IACI,UAAVA,EAAEC,KACJnC,GAAgBf,SAASmD,SAC1B,EAEHI,WAAY,CACVC,aACEpC,EAACqC,EAAc,CAACC,SAAS,MACvBpC,SAAAF,EAACuC,EACY,CAAA,aAAA,6BACXC,QAAS,KACFgS,EAMMA,GACTD,EAA2B,IAN3BA,EAA2BpW,KAAKC,MAAQ,KACxCE,EAASM,QAAUiB,YACjB,IAAMxB,EAAYF,KAAKC,QACvB,KAG2B,EAEjCqE,YAAcZ,GAAMA,EAAEa,iBACtBlB,SAAUjE,EAAWkE,QAAOvB,SAELF,EAAtBwU,EAAuB7R,EAAiBC,EAAP,CAAA,QAK1CZ,WAAY,CAAEC,UAAW,IACzB3B,MAAO,CAAE4O,cAAe,YAG1B,KACH3R,EAAW0X,WACVjV,EAAC6G,EAAc,CAACvG,MAAO,CAAExF,MAAO,gBAC7ByC,EAAW2X,kBAEZ,KACJlV,EACE,MAAA,CAAAM,MAAO,CACL7F,UAAW,OACXR,QAAS,OACTmD,cAAe,eAGjB8C,SAAAF,EAAA,MAAA,CACEM,MAAO,CACLuC,KAAM,OACNC,UAAW,SACXrI,UAAW,MACXkB,aAAc,QACfuE,SAEDE,EACE,MAAA,CAAAF,SAAA,CAAAF,EAACgD,EAAc,CACb1C,MAAO,CAAElG,aAAc,OAAQ+B,YAAa,OAG5CqF,SAAUjE,EAAWkE,QACrBe,QAAS,KACPyR,EAASC,EAAkB,EAE7B7M,UAAW,OACXjE,WAAW,6BAA4BlD,SAEtC1B,EAAE,iBAGLwB,EAACgD,EACC,CAAA1C,MAAO,CAAElG,aAAc,QACvBoH,SAAUjE,EAAWkE,QACrBe,QAAS,KACPwR,EAASrW,EAAOJ,EAAW6W,aAAa,EAE1CzS,IAAKhC,EACLuD,QAAS3F,EAAWkE,aAAU0B,EAAY,OAC1CC,WAAW,6BAA4BlD,SAEtC3C,EAAWkE,QACVzB,EAACqD,EAAiB,CAAAC,KAAM,GAAIC,UAAW,MAEvC/E,EAAE,qBAQhB,EC7REqR,GAAgB,CACpBvQ,iBAAiB,EACjB+B,uBAAwB,GACxBI,SAAS,EACTiT,eAAe,EACfC,uBAAwB,GACxBpV,iBAAiB,EACjBsV,uBAAwB,GACxBE,wBAAwB,EACxBC,8BAA+B,GAC/BZ,aAAc,EACda,YAAY,EACZC,gBAAiB,GACjBvO,YAAY,EACZqJ,eAAgB,GAChBjQ,eAAe,EACfoV,UAAW,GACXpQ,SAAU,GACV2C,UAAW,IACXwI,cAAe,GACfvK,YAAa,GACb8B,kBAAmB,GACnB2N,mBAAoB,GACpBN,yBAAyB,EACzBO,gCAAgC,GAE5BhF,GAAU,CAACC,EAAOC,KACtB,OAAQA,EAAOvP,MACb,IAAK,kCACH,MAAO,IACFsP,EACH7O,SAAS,EACTnC,gBAAiBiR,GAAQE,SAASnR,kBAAmB,EACrDoV,cAAenE,GAAQE,SAASiE,gBAAiB,EACjDrT,uBAAwBkP,GAAQE,SAASpP,wBAA0B,GACnEsT,uBAAwBpE,GAAQE,SAASkE,wBAA0B,GACnEM,WAAY1E,GAAQE,SAASwE,aAAc,EAC3CC,gBAAiB3E,GAAQE,SAASyE,iBAAmB,GACrDC,UAAW,GACXpQ,SAAU,GACVY,YAAa,IAGjB,IAAK,gCACH,MAAO,IACF2K,EACH7O,SAAS,EACTnC,iBAAiB,EACjBoV,eAAe,EACfS,UAAW,GACXpQ,SAAU,IAGd,IAAK,mCACH,MAAO,IACFuL,EACH7O,SAAS,EACTnC,iBAAiB,EACjBoV,eAAe,EACfN,aAAc,EACda,YAAY,EACZC,gBAAiB,GACjBC,UAAW5E,GAAQE,SAAS0E,WAAa,GACzCpQ,SAAUwL,GAAQE,SAAS1L,UAAY,GACvC2C,UAAW6I,GAAQE,SAAS/I,UAC5BC,WAAY4I,GAAQE,SAAS9I,WAC7BC,UAAW2I,GAAQE,SAAS7I,UAC5BhC,YAAa2K,GAAQE,SAAS7K,YAC9BD,YAAa4K,GAAQE,SAAS9K,YAC9B8B,kBAAmB8I,GAAQE,SAAShJ,mBAGxC,IAAK,2BACH,MAAO,IACF6I,EACH7O,SAAS,EACTkF,YAAY,EACZqJ,eAAgB,GAChBjQ,eAAe,GAGnB,IAAK,0BACH,MAAO,IACFuQ,EACH7O,SAAS,EACTkF,YAAY,EACZqJ,eAAgB,GAChBoE,aAAc,EACdrU,cAAe6E,QAAQ2L,GAAQE,SAASG,eACxCwE,mBAAoB7E,GAAQE,SAAS2E,oBAGzC,IAAK,wBACH,MAAO,IACF9E,EACH3J,YAAY,EACZqJ,eAAgBO,GAAQE,SAAStP,MACjCpB,cAAe6E,QAAQ2L,GAAQE,SAASG,gBAG5C,IAAK,uBACH,MAAO,IACFN,EACH7O,SAAS,EACTlC,gBAAiBgR,GAAQE,SAASlR,kBAAmB,EACrDwV,uBACExE,GAAQE,SAASsE,yBAA0B,EAC7CF,uBAAwBtE,GAAQE,SAASoE,wBAA0B,GACnEG,8BACEzE,GAAQE,SAASuE,+BAAiC,GACpDC,YAAY,EACZC,gBAAiB,GACjBJ,yBAAyB,EACzBO,gCAAgC,GAGpC,IAAK,2BACH,MAAO,IACF/E,EACH7O,SAAS,EACTlC,iBAAiB,EACjBwV,wBAAwB,GAG5B,IAAK,4BACH,MAAO,IACFzE,EACH7O,SAAS,EACTlC,iBAAiB,EACjBwV,wBAAwB,GAG5B,IAAK,mBACH,MAAO,IACFzE,EACH6E,UAAW5E,GAAQE,SAAS0E,WAGhC,IAAK,uBACH,MAAO,IACF7E,EACHwE,wBAAyBvE,GAAQE,SAASqE,wBAC1CO,+BAAgC9E,GAAQE,SAAS4E,+BACjD9V,iBAAiB,EACjBwV,wBAAwB,GAG5B,IAAK,0BACH,MAAO,IACFzE,EACHwE,yBAAyB,EACzBO,gCAAgC,EAChC9V,iBAAiB,EACjBwV,wBAAwB,GAG5B,QACE,OAAOzE,EAEV,EA4BUgF,GAET,EACFC,aACAC,oBACAlH,qBACAmH,4BACAC,uBACAjS,mBACAsN,UACAC,YACAI,oBACAzE,gBACAsH,WACAC,oBACAxW,0BAEA,MAAMJ,EAAU/D,MACTgE,EAAY8T,GAAWC,EAAWjB,GAASR,KAC3CnM,EAAMiS,GAAW9X,GAAS,IAC3B6G,gBAAEA,GAAoBC,IACtBiN,EAAerT,EAAO,IACtBC,EAAEA,GAAMC,KACPiT,EAAkBC,GAAuB9T,EAAqB,MAC/DiP,EAASvO,EAAY,MAE3BG,GAAU,KACR,GAAIkG,QAAQmM,GACV,GAAIxE,GAASwE,GAAU,CACrB,IAAI7D,EAAOC,EAAaC,aAAa2D,GACrCjE,EAAOlO,QACW,iBAATsO,GAAqBtI,QAAQsI,GAChCG,IAAIC,gBAAgBJ,GACpB,GACNyE,EAAoB7E,EAAOlO,QAC5B,MACC+S,EAAoBZ,EAEvB,GACA,CAACA,IAEJ,MAsKM6E,EAAoB,CAACrQ,EAAMkN,KAC/B,GAAa,IAATA,EAAY,CACd,IAAIoD,EAAiB,CACnBvW,iBAAiB,EACjBoV,eAAe,EACfrT,uBAAwB,GACxBsT,uBAAwB,IAoB1B,OAlBK/P,QAAQW,EAAKzH,YAChB+X,EAAevW,iBAAkB,EACjCuW,EAAexU,uBAAyB,sBAErCuD,QAAQW,EAAK8O,WAIhByB,MAAMvQ,EAAK8O,WACe,KAAzB9O,EAAK8O,SAAS/M,QAA0C,KAAzB/B,EAAK8O,SAAS/M,UAE9CuO,EAAenB,eAAgB,EAC/BmB,EAAelB,uBAAyB,kCAPxCkB,EAAenB,eAAgB,EAC/BmB,EAAelB,uBAAyB,sBAQ1CtD,EAAQ,CACNrQ,KAAM,kCACNyP,QAASoF,MAEFA,EAAenB,eAAiBmB,EAAevW,gBACzD,CAAM,GAAa,IAATmT,EAAY,CACrB,IAAIoD,EAAiB,CACnBtW,iBAAiB,EACjBsV,uBAAwB,GACxBE,wBAAwB,EACxBC,8BAA+B,IAE7Be,EAAY5I,EAAakC,iBAAiB9J,EAAKxH,UAqBnD,OApBI6G,QAAQmR,KACVF,EAAetW,iBAAkB,EACjCsW,EAAehB,uBAAyBkB,GAErCnR,QAAQW,EAAKiJ,iBAKhB5J,QAAQW,EAAKxH,WACbwH,EAAKxH,WAAawH,EAAKiJ,kBAEvBqH,EAAed,wBAAyB,EACxCc,EAAeb,8BACb,sDATFa,EAAed,wBAAyB,EACxCc,EAAeb,8BACb,6BASJ3D,EAAQ,CACNrQ,KAAM,uBACNyP,QAASoF,MAGTA,EAAed,wBAA0Bc,EAAetW,gBAE3D,CACD,OAAO,CAAI,EAuDb,OACES,cACEI,EAACC,GAAK4R,WAAS,EAAC3R,MAAO,CAAElE,OAAQ,QAAS8V,SAAU,UAClDhS,SAAA,CAAAF,EAAC0M,GAAW,CAACC,cAAeA,IAC5BvM,EAACC,EAAI,CAACkN,MAAK,EAAAC,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGyE,GAAI,EAACjS,SAAA,CAClC6Q,EACC/Q,EAACK,EAAI,CACH4R,WACA,EAAAG,UAAU,MACVjV,eAAe,WACfX,WAAW,SACXzC,QAAS,OACTG,SAAU,QACVmY,GAAI,OAAMnS,SAEVF,EAACsS,EAAO,CAACC,eAAa,EAACC,MAAOxB,GAAa,YACzChR,EACE,MAAA,CAAA8N,IAAKlJ,QAAQ8M,GAAoBA,EAAmB,GACpD/D,IAAI,OACJpT,MAAO,aAIX,KACH6W,EACCpR,EAACK,EACC,CAAA4R,aACAG,UAAU,MACVjV,eAAe,WACfX,WAAW,SACXzC,QAAS,aACTG,SAAU,QACVmY,GAAI,OAEJnS,SAAAF,EAACoR,EAAoB,CAAA,KAErB,KACJpR,EAACG,EAAU,CAAAjG,SAAS,KAAIgG,SACtBE,EAACC,EAAK,CAAA7D,WAAW,SAAS8D,MAAO,CAAEC,WAAY,QAAQL,SAAA,CACrDF,EAAI,KAAA,CAAAM,MAAO,CAAEnG,OAAQ,mBACU,IAA5BoD,EAAW6W,aACR5V,EAAE,kBACa,SAAf+W,EACE,cACA/W,EAAE,oBAEmB,IAA5BjB,EAAW6W,aACVpU,EACE8G,EAAA,CAAA5G,SAAAE,EAAA,MAAA,CAAKE,MAAO,CACVxF,MAAO,UACPF,SAAU,OACVG,WAAY,MACZyB,WAAY,SACZgE,UAAW,SACX9D,WAAY,QAGZwD,SAAA,CAAAE,EAAA,OAAA,CAAME,MAAO,CACXnE,YAAa,OACbrB,MAAO,WACJoF,SAAA,CAAA,IAAA1B,EAAE,aAAc,IAClBjB,GAAYwH,SACTxH,EAAWwH,SAASC,OAAO,GAAGC,cAChC1H,EAAWwH,SAASG,MAAM,GACxB,QACL3H,GAAY6X,oBAAsB,QAGrC,KACH1R,EACC1D,EAACuH,GACC,CAAAjK,QAASA,EACTqG,YA7HI,KAClBgS,GAAQ,EAAM,EA6HApY,WAAYA,EACZqG,UAtHEyB,MAAO0M,IACvB,GAAInN,QAAQmN,IAA8C,IAAhCA,EAAUhI,WAAWzC,OAAc,CAC3D+J,EAAQ,CAAErQ,KAAM,6BAChB,MAAMsE,OACJA,EACAC,KAAMyQ,EAAOxQ,QACbA,SACQkQ,EACRnY,GAAY4X,UACZ5X,GAAYwH,SACZgN,EACAxU,GAAYmK,UACZ6N,GAEa,MAAXjQ,EACiB,SAAfiQ,GACF7Q,EAAgBc,EAAS,CACvBM,QAAS,YAEXmO,EAASC,IAET7C,EAAQ,CACNrQ,KAAM,0BACNyP,QAAS,CAAEG,eAAe,EAAMwE,mBAAoBY,GAASC,WAG7C,OAAX3Q,EACT+L,EAAQ,CACNrQ,KAAM,wBACNyP,QAAS,CAAEtP,MAAOqE,MAGpBd,EAAgBc,EAAS,CACvBM,QAAS,UAEXmO,EAASC,GAEZ,MACC7C,EAAQ,CACNrQ,KAAM,wBACNyP,QAAS,CAAEtP,MAAO,sCAErB,EA6Ea0C,SAAUrF,EAAEjB,GAAYyS,gBAAkB,IAC1ClM,YAAc3C,IACZkQ,EAAQ,CACNrQ,KAAM,wBACNyP,QAAS,CAAEtP,MAAOA,IAClB,EAEJgD,WAAY,YACZH,gBAAkBuP,IAChBlC,EAAQ,CACNrQ,KAAM,mBACNyP,QAAS,CAAE0E,UAAW5B,KAExB3B,EAAahT,QAAUgT,EAAahT,QAAU,CAAC,EAEjDsF,eAAgB0N,EAAahT,QAC7B6E,iBAAkBA,IAGpBzD,EAAC+T,GAAoB,CACnBzW,QAASA,EACTC,WAAYA,EACZyW,SAxTO3O,MAAOE,EAAMkN,KAClC,GAAImD,EAAkBrQ,EAAMkN,GAC1B,GAAa,IAATA,EAAY,CACdpB,EAAQ,CAAErQ,KAAM,kCAChB,MAAMsE,OACJA,EACAC,KAAMyQ,EAAOxQ,QACbA,SACQiQ,EACRlQ,GAAMzH,SAASmF,cACfsC,GAAM8O,SACNkB,GAGa,MAAXjQ,GACF+L,EAAQ,CACNrQ,KAAM,mCACNyP,QAAS,CACP0E,UAAWrU,OAAOkV,GAASnQ,SAAW,IACtCd,SAAUQ,GAAMzH,SAChB4J,UAAWsO,GAASjD,UACpBpL,WAAYqO,GAASE,QACrBtO,UAAWoO,GAASG,UACpBvQ,YAAaoQ,GAAS/C,UACtBtN,YAAaqQ,GAASnD,SACtBpL,kBAAmBuO,GAAS9C,iBAGhCyC,GAAQ,IAERtE,EAAQ,CACNrQ,KAAM,kCACNyP,QAAS,CACPwE,YAAY,EACZC,gBAAiB1P,IAIxB,MAAM,GAAa,IAATiN,EAAY,CACrBpB,EAAQ,CAAErQ,KAAM,6BAChB,MAAMsO,eAAEA,EAAcC,aAAEA,SAAuBjB,EAAmB,CAChEkB,QAASjK,GAAMzH,SACf2R,SAAUlK,GAAMxH,SAChB2R,WAAY,cAGd,GAAuB,MAAnBJ,EACF,OAAQC,GAAcI,UACpB,IAAK,MACH0B,EAAQ,CACNrQ,KAAM,uBACNyP,QAAS,CACPlR,iBAAiB,EACjBsV,uBAAwBtF,GAAcK,UACtCsF,gBAAiB3F,GAAcK,aAGnC,MACF,IAAK,IACH,MAAMtK,OACJA,EACAC,KAAMyQ,EAAOxQ,QACbA,SACQgQ,EACRjY,GAAY4X,UACZ5X,GAAYwH,SACZQ,GAAMxH,UAEO,MAAXuH,GACF+L,EAAQ,CAAErQ,KAAM,8BAChB0D,EAAgB,8BAA+B,CAC7CoB,QAAS,YAEXmO,EAASC,IACW,OAAX5O,EACT+L,EAAQ,CACNrQ,KAAM,uBACNyP,QAAS,CACPwE,YAAY,EACZC,gBAAiB1P,MAIrBd,EAAgBc,EAAS,CACvBM,QAAS,UAEXmO,EAASC,SAIf7C,EAAQ,CACNrQ,KAAM,uBACNyP,QAAS,CACPwE,YAAY,EACZC,gBAAiB3F,GAAcK,YAItC,CACF,EAsNaqE,SAAUA,EACVC,kBAAmBA,EACnBxW,oBAAqBA,EACnByW,iBA7XO9O,MAAOE,EAAMkN,KACpC,GACElN,GAAMxH,SAASqY,QAAQ9O,OAAS,GAChC/B,GAAMiJ,gBAAgB4H,QAAQ9O,OAAS,EAEvC,GAAa,MAATmL,EAAc,CAChBpB,EAAQ,CACNrQ,KAAM,uBACNyP,QAAS,CACPqE,wBAAkC,MAATrC,KAG7B,MAAMnD,eAAEA,EAAcC,aAAEA,SAAuBjB,EAAmB,CAChEkB,QAASjK,EAAKzH,SACd2R,SAAmB,MAATgD,EAAelN,GAAMxH,SAAWwH,GAAMiJ,gBAChDkB,WAAY,cAEd,GAAuB,MAAnBJ,EACF,OAAQC,GAAcI,UACpB,IAAK,MACH0B,EAAQ,CACNrQ,KAAM,uBACNyP,QAAS,CACPlR,gBAA0B,MAATkT,EACjBsC,uBAAiC,MAATtC,EACxBoC,uBACW,MAATpC,EAAelD,GAAcK,UAAY,GAC3CoF,8BACW,MAATvC,EAAe,GAAKlD,GAAcK,WAAa,GACjDsF,gBAAiB3F,GAAcK,aAGnC,MACF,IAAK,IACHyB,EAAQ,CAAErQ,KAAM,4BAIvB,KAAM,CACL,IAAI6U,EAAiB,CACnBtW,iBAAiB,EACjBsV,uBAAwB,GACxBE,wBAAwB,EACxBC,8BAA+B,IAE5BpQ,QAAQW,EAAKiJ,iBAKhB5J,QAAQW,EAAKxH,WACbwH,EAAKxH,WAAawH,EAAKiJ,kBAEvBqH,EAAed,wBAAyB,EACxCc,EAAeb,8BACb,sDATFa,EAAed,wBAAyB,EACxCc,EAAeb,8BACb,6BASJ3D,EAAQ,CACNrQ,KAAM,uBACNyP,QAASoF,GAEZ,CACF,gBAuUD,EC3nBSQ,GAAgD,CAC3DC,WAAY,CACVC,OAAO,EACPC,UAAW,qBACXC,YAAa,YAEbC,oBAAqB,CACnBnc,MAAO,IACPL,SAAU,IACVS,SAAU,KAGZgc,uBAAuB,EACvBC,gBAAgB,EAChBC,YAAY,EACZC,gBAAgB,EAChBC,kBAAkB,EAClBC,gBAAiB,CACfC,IAAK,OACLC,IAAK,SAEPC,aAAa,EACbC,mBAAmB,EACnBC,mBAAmB,EACnBC,kBAAkB,EAClBC,YAAY,GAEdC,QAAS,CACP,CACEC,SAAU,YACVC,WAAY,cACZC,SAAU,EACVC,UAAW,OACXC,cAAe,UACftd,MAAO,IACPI,SAAU,IACVT,SAAU,KAEZ,CACEud,SAAU,YACVC,WAAY,cACZC,SAAU,EACVC,UAAW,OACXC,cAAe,UACftd,MAAO,IACPI,SAAU,IACVT,SAAU,KAEZ,CACEud,SAAU,cACVC,WAAY,SACZC,SAAU,EACVC,UAAW,OACXC,cAAe,UACftd,MAAO,IACPI,SAAU,IACVT,SAAU,KAEZ,CACEud,SAAU,iBACVC,WAAY,aACZC,SAAU,EACVC,UAAW,OACXC,cAAe,WACftd,MAAO,IACPI,SAAU,IACVT,SAAU,KAEZ,CACEud,SAAU,eACVC,WAAY,WACZC,SAAU,EACVC,UAAW,OACXC,cAAe,WACftd,MAAO,IACPI,SAAU,IACVT,SAAU,KAEZ,CACEud,SAAU,gBACVC,WAAY,gBACZC,SAAU,EACVE,cAAe,UACfC,WAAW,GAEb,CACEL,SAAU,qBACVC,WAAY,qBACZC,SAAU,EACVE,cAAe,UACfC,WAAW,GAEb,CACEL,SAAU,eACVC,WAAY,eACZC,SAAU,EACVE,cAAe,UACfC,WAAW,GAEb,CACEL,SAAU,iBACVC,WAAY,iBACZC,SAAU,EACVE,cAAe,UACfC,WAAW,GAEb,CACEL,SAAU,UACVC,WAAY,UACZC,SAAU,EACVE,cAAe,UACfC,WAAW,GAEb,CACEL,SAAU,UACVC,WAAY,YACZC,SAAU,EACVE,cAAe,UACfC,WAAW,KCrHJve,GAAYC,GAAYC,IAAgB,CACnDse,iBAAkB,CAChBxd,MAAO,OACP6B,OAAQ,QAGV4b,wBAAyB,CACvBnd,OAAQ,iCACRT,aAAc,MACdL,QAAS,OAEX2B,KAAM,CACJU,OAAQ,YCiBN6b,GAAyB,CAC7B,CACEC,WAAY,OACZC,YAAa,OACbC,UAAU,EACVC,gBAAgB,EAChBC,gBAAiB,sBACjBC,iBAAkB,eAClBC,WAAY,OACZpV,WAAY,+BAEd,CACE8U,WAAY,UACZC,YAAa,UACbC,UAAU,EACVC,gBAAgB,EAChBC,gBAAiB,eACjBC,iBAAkB,sBAClBE,eAAe,EACfC,SAAU,OACVtV,WAAY,gCAsBVuV,GAA6D,EACjEC,gBACAC,YACAC,qBACAC,eACAC,WACAC,QACAvd,OACAuY,WACAiF,+BACAC,mBACAC,YACAC,iBACAC,eACAC,WACAC,gBAEA,MAAMlc,EAAU/D,MAEVmL,gBAAEA,GAAoBC,KACtBY,KAAEA,EAAIoJ,UAAEA,EAAS8K,WAAEA,EAAUtY,MAAEA,EAAK6K,QAAEA,GAAY0N,EACtD,CAAC,4BACD,IAAMR,MAGRxa,GAAU,IACD,KACLib,EAAYC,cAAc,CAAC,0BAA2B,CAAA,GAAI,GAE3D,IAEHlb,GAAU,KACHqa,IAEMD,KAA0C,MAAlBF,GACjC3E,EAASqF,GAFTrF,EAASsF,EAGV,GACA,CAACT,EAAoBC,IAQxB,MAAMc,EAAgBC,EAAYX,EAAkB,CAClDY,UAAW,CAACxU,EAAMyU,KAChBX,EAAe,CACbY,aAAc1U,EACd2U,WAAYF,GAAW7D,UACvBgE,OAAQH,GAAWI,UACnBC,eAAgBL,GAAWpH,gBAC3B,IAGA0H,EAAgBT,EAAS1Y,MACzBoZ,EAAmBC,GACtBjV,IACmB,YAAdA,EAAKxG,KACmB,IAAtBwG,EAAKoD,MAAMrB,OACb5C,EAAgB,uBAAwB,CACtCoB,QAAS,UAE+B,MAAjCP,EAAKoD,OAAO,IAAIpD,MAAM4N,OAC/BzO,EACE,8DACA,CACEoB,QAAS,UAIb+T,EAASY,OAAO,CACd9H,aAAcpN,EAAKoD,OAAO,IAAIpD,MAAMoN,cAAgB,GACpDC,eAAgBrN,EAAKoD,OAAO,IAAIpD,MAAMqN,gBAAkB,GACxDsD,QAAS3Q,EAAKoD,OAAO,IAAIpD,MAAM2Q,SAAW,GAC1CC,UAAW5Q,EAAKoD,OAAO,IAAIpD,MAAM4Q,WAAa,GAC9CuE,WAAY7B,GAAW8B,WAAa,GACpCC,YAAapB,EACbqB,QAAStV,EAAKoD,OAAO,IAAIpD,MAAMsV,SAAW,GAC1CT,UAAW7U,EAAKoD,OAAO,IAAIpD,MAAM6U,WAAa,GAC9CU,cAAevV,EAAKoD,OAAO,IAAIpD,MAAMuV,eAAiB,GACtDC,mBAAoBxV,EAAKoD,OAAO,IAAIpD,MAAMwV,oBAAsB,GAChEC,kBAAmBnC,GAAWoC,MAAMC,gBAAkB,GACtDC,oBACE5V,EAAKoD,OAAO,IAAIpD,MAAM4V,qBAAuB,GAC/CvC,cAAeA,IAGI,SAAdrT,EAAKxG,OACQ,MAAlB6Z,EACF3E,EAASqF,EAAc,CACrB7E,SAAS,IAGXuE,IAEH,GAEH,CAAC/E,EAAU1O,EAAMsU,IAGnBnb,GAAU,KACR,IAAI0c,EAAgB7V,GAAMpG,MAAMgb,GAA6B,MAAlBA,EAAOhH,UAC5B,IAAlBiI,IACF1W,EACE,8DACA,CACEoB,QAAS,UAGbkT,KAEmB,IAAjBzT,GAAM+B,QACkB,MAAtB/B,IAAO,IAAI4N,QACboH,EAAiB,CAAExb,KAAM,UAAW4J,KAAM,CAAC,CAAEpD,KAAM,IAAKA,EAAK,OAEhE,GACA,CAACyD,KAAKoC,UAAU7F,KAEnB,MAWM8V,EAAeC,IAAO,EAAG7a,eAAc8a,KAC3Cvb,EAACsS,EAAY,IAAAiJ,EAAOje,QAAS,CAAEke,OAAQ/a,MADpB6a,EAElB,EAAG7hB,YAAa,CACjB,CAAC,MAAMgiB,EAAeC,WAAY,CAChCC,gBAAiBliB,EAAM2B,QAAQwgB,OAAOC,MACtC/gB,MAAO,sBACPlB,UAAWH,EAAMqiB,QAAQ,GACzBlhB,SAAU,QAMd,OACEoF,cACEI,EAACC,GACC4R,WAAS,EACT3R,MAAO,CACLnG,OAAQ,IACRJ,QAAS,IACTqC,OAAQ,SAET8D,SAAA,CAEAkZ,EACCpZ,EAACK,EAAK,CAAAkN,QAAKG,GAAI,EAAGD,GAAI,EAAGsO,GAAI,EAAGvO,GAAI,EAAG2E,GAAI,EACzCjS,SAAAF,EAAA,MAAA,CAAKS,UAAU,YAAYqN,IAAKsL,EAAWzL,IAAI,iBAE/C,KAEJ3N,EAACK,GACCkN,MAAI,EACJG,GAAI,GACJD,GAAI,GACJsO,GAAI,GACJvO,GAAI,GACJlN,MAAO,CACLrG,QAAS,OACTkD,eAAgB,UACjB+C,SAEDE,EAACC,EAAI,CACH4R,WAAS,EACT3R,MAAO,CACL3G,UAAW,QACXI,QAAS,oBAEX2T,GAAI,GACJD,GAAI,GACJsO,GAAI,GACJvO,GAAI,GAEJtN,SAAA,CAAAE,EAACC,EACC,CAAA4R,WACA,EAAA3R,MAAO,CACLnG,OAAQ,IACRJ,QAAS,KAGX2T,GAAI,GACJD,GAAI,GACJsO,GAAI,GACJvO,GAAI,GAEJtN,SAAA,CAAAF,EAACK,EACC,CAAAmN,GAAI,GACJ2E,GAAI,EACJ1E,GAAI,EACJC,GAAI,EACJqO,GAAI,EACJ9U,GAAI,CACFhN,QAAS,OACTuC,WAAY,UAEb0D,SAEDF,EAACgc,EAAM,CAAA5J,UAAU,MAAMpY,QAAS,EAAGqY,GAAI,EACrCnS,SAAAF,EAACic,EAAG,CACFxb,UAAWnD,EAAQ0a,wBACnB/Q,GAAI,CAAEzL,OAAQ,WAAW0E,SAEzBF,EAACqb,EAAY,CACX7I,MACEpS,EACE0G,EAAA,CAAA5G,SAAA,CAAAE,EAAA,MAAA,CAAAF,SAAA,CAAA,aAAgB2Y,GAAWoC,MAAMhX,IAAM,MACvC7D,EAAa,MAAA,CAAAF,SAAA,CAAA,UAAA2Y,GAAWqD,UAAY,MACpClc,EAAA,MAAA,CAAAE,SAAA,oCAGJic,UAAU,eAEVjc,SAAAF,EAACoc,EACC,CAAA3b,UAAWnD,EAAQya,iBAEnBpK,IAAI,aACJG,IACElJ,QAAQqU,GAAOoD,SACXpD,GAAOoD,QACPC,aAOhBlc,EAACC,EAAI,CACHmN,GAAI,GACJ2E,GAAI,EACJ1E,GAAI,EACJC,GAAI,EACJqO,GAAI,EACJ9U,GAAI,CACF9J,eAAgB,SAChBlD,QAAS,OACTmD,cAAe,UAGjB8C,SAAA,CAAAE,EAAA,KAAA,CACEK,UAAU,eACVH,MAAO,CAAE1F,SAAU,OAAQT,OAAQ,WAE3B+F,SAAA,CAAA,WAAAF,EAAA,OAAA,CAAAE,SAAO,GAAG2Y,GAAWoC,MAAMlc,MAAQ,WAE7CqB,EAAA,MAAA,CAAKE,MAAO,CAAErG,QAAS,OAAQuC,WAAY,SAAUuK,IAAK,IACxD7G,SAAA,CAAAF,EAAA,KAAA,CAAIM,MAAO,CAAEnG,OAAQ,oBAvInB,MAChB,IACIoiB,EADAC,GAAQ,IAAIre,MAAOse,WAOvB,OAJID,EAAQ,GAAID,EAAQ,UACfC,GAAS,IAAMA,GAAS,GAAID,EAAQ,YACpCC,GAAS,IAAMA,GAAS,KAAID,EAAQ,WAEtCnc,EAAA,OAAA,CAAAF,SAAA,CAAA,QAAYqc,EAAK,MAAS,EA+HgBG,KACnC1c,EAAA,MAAA,CAAK8N,IAAK6O,GAAahP,IAAI,GAAGrN,MAAO,CAAElE,OAAQ,gBAGnD4D,EAACK,GACCmN,GAAI,GACJ2E,GAAI,EACJ1E,GAAI,EACJC,GAAI,EACJqO,GAAI,EACJ9U,GAAI,CACFhN,QAAS,OAETkD,eAAgB,SAChBX,WAAY,UACb0D,SAEDF,EAACgc,EAAK,CAAC5J,UAAU,MAAMjV,eAAe,aAAanD,QAAS,WAC1DgG,EAACic,GAAIxb,UAAWnD,EAAQ0a,wBACtB9X,SAAAF,EAACoc,EACC,CAAA3b,UAAWnD,EAAQya,iBACnBpK,IAAI,aACJG,IACElJ,QAAQqU,GAAO2D,MAAQ3D,GAAO2D,KAAOC,WAM/Czc,EAACC,EACC,CAAAmN,GAAI,GACJ2E,GAAI,EACJ1E,GAAI,EACJC,GAAI,EACJqO,GAAI,EACJ9U,GAAI,CACFhN,QAAS,OACTmD,cAAe,SACfD,eAAgB,UACjB+C,SAAA,CAEDF,EACE,MAAA,CAAAS,UAAU,sBACVH,MAAO,CAAE1F,SAAU,QAAQsF,SAE3BF,OAAGS,UAAU,YAAWP,SACrB,cAAc2Y,GAAWiE,aAAe,SAI7C9c,EAAA,IAAA,CAAGS,UAAU,SACVP,SAAA,YAAY2Y,GAAWoC,MAAM8B,YAAc,UAGhD3c,EAACC,EACC,CAAAmN,GAAI,GACJ2E,GAAI,EACJ1E,GAAI,EACJC,GAAI,EACJqO,GAAI,EACJ9U,GAAI,CACFhN,QAAS,OACTuC,WAAY,SACZW,eAAgB,SAGjB+C,SAAA,CAAA,IACDF,EACE,MAAA,CAAAE,SAAAF,EAAA,MAAA,CACE8N,IAAKlJ,QAAQqU,GAAOvd,MAAQud,GAAOvd,KAAOA,EAC1CiS,IAAI,YACJlN,UAAWnD,EAAQ5B,eAM1BsQ,EACChM,EAACC,EACC,CAAAC,SAAAF,EAAA,MAAA,CAAKM,MAAO,CAAE/F,MAAO,OAAQgG,WAAY,QAAQL,SAC/CF,EAACgd,EAAK,CACJC,SAAU9b,GAAO8b,UAAY,QAC7BC,SAAU/b,GAAOgc,WAAa,QAC9BC,YAAajc,GAAOkc,cAAgB,SAIxCxD,EAAS7N,SAAW6N,EAAS1Y,MAC/BnB,EAACC,YACCD,EAAK,MAAA,CAAAM,MAAO,CAAE/F,MAAO,OAAQgG,WAAY,QACvCL,SAAAF,EAACgd,EACC,CAAAC,SAAU3C,EAAS2C,UAAY,QAC/BC,SAAU5C,EAAS6C,WAAa,QAChCC,YAAa9C,EAAS+C,cAAgB,SAI1C,KACJrd,EAACsd,GAECC,cAAelH,GACf9Q,KAAMA,GAAQ,GACdiY,QAAS,IAAM,KACfvF,QAASA,GACTwF,UAAWlD,EACXmD,kBAAkB,EAClBC,uBAAuB,EACvBC,mBAAoB,CAClB/jB,WAAY,kBACZE,QAAS,IACT,wBAAyB,CACvBe,MAAO,UAGX+iB,0BAA0B,EAC1B/X,QAAQ,WACRrE,QAASkN,GAAa8K,GAAcI,EAASlL,UAC7CmP,qBAAsBjF,GAAWoC,MAAMf,YAAc,MAlBhD,mBAoBNlO,GAA4B,IAAjBzG,GAAM+B,OAChBtH,EAAC+d,EACC,CAAA9W,GAAI,CACF0U,gBAAiB,sBACjBrZ,SAAU,WACV0b,MAAO,QACPC,OAAQ,OACR1jB,MAAO,OACP,UAAW,CACTohB,gBAAiB,wBAGrBnZ,QAAS,KACe,MAAlBoW,EACF3E,EAASqF,EAAc,CACrB7E,SAAS,IAGXuE,GACD,EACF9Y,SAAA,SAID,cAKZ,EAGSge,GAER3C,GAEDvb,EAACme,EACC,CAAAje,SAAAF,EAAC2Y,GAAmB,IAAK4C,MChelBhiB,GAAYC,GAAYC,IAAgB,CACnD2kB,OAAQ,CAENhX,WAAY3N,EAAM4kB,YAAYC,OAAO,CAAC,QAAS,UAAW,CACxDC,OAAQ9kB,EAAM4kB,YAAYE,OAAOC,MACjCC,SAAUhlB,EAAM4kB,YAAYI,SAASC,gBAEvC5jB,MAAO,UACPsB,OAAQ,OACRvC,WAAY,eACZD,UAAW,8BAEb+kB,UAAW,CACTpkB,MAAO,IACPM,OAAQ,OACRC,MAAO,iCACP6gB,gBAAiB,mCAEjB,UAAW,CACTphB,MAAO,oBAGXqkB,WAAY,CACVtc,SAAU,WACVzI,WAAY,OACZU,MAAO,OACPH,aAAc,MACdR,UAAW,6BACXilB,IAAK,OACLziB,OAAQ,OACR0iB,UAAW,QACXC,UAAW,OAEX,gBAAiB,CACfllB,WAAY,OACZgB,OAAQ,OACRmkB,QAAS,OACTxjB,OAAQ,UACRqB,eAAgB,OAChB9C,QAAS,cACTa,SAAU,UACVkI,UAAW,OACXsF,aAAc,iBACdtN,MAAO,kBACPC,WAAY,IACZ,oBAAqB,CACnB4gB,gBAAiB,aAIvBsD,YAAa,CACXC,YAAa,MAEb9X,WAAY3N,EAAM4kB,YAAYC,OAAO,CAAC,QAAS,UAAW,CACxDC,OAAQ9kB,EAAM4kB,YAAYE,OAAOC,MACjCC,SAAUhlB,EAAM4kB,YAAYI,SAASU,eACrCtlB,WAAY,8BAGhBulB,iBAAkB,CAChB7kB,MAAO,QACP6B,OAAQ,OACRijB,KAAM,OACNR,IAAK,sBAEP9G,iBAAkB,CAChBxd,MAAO,OACP6B,OAAQ,QAGV4b,wBAAyB,CACvBnd,OAAQ,iCACRT,aAAc,MACdL,QAAS,OAEXulB,QAAS,CACP3lB,UAAW,OACXulB,YAAa,MACb9iB,OAAQ,QAEVoW,MAAO,CACL+M,SAAU,EACVxlB,QAASN,EAAMO,QAAQ,GAAK,GAC5Bc,MAAO,uBAET0kB,WAAY,CACVC,WAAYhmB,EAAMimB,WAAWD,WAC7Bnd,SAAU,WACV1I,UACE,wGACFuC,YAAa1C,EAAMO,QAAQ,GAC3BgU,WAAYvU,EAAMO,QAAQ,GAC1B2B,aAAclC,EAAMO,QAAQ,KAC5BS,UAAWhB,EAAMO,QAAQ,KACzBI,aAAc,GACduhB,gBAAiBgE,EAAMlmB,EAAM2B,QAAQwgB,OAAOC,MAAO,KACnD,UAAW,CACTF,gBAAiBgE,EAAMlmB,EAAM2B,QAAQwgB,OAAOC,MAAO,MAErD,gBAAiB,CACfzU,WAAY3N,EAAM4kB,YAAYC,OAAO,SACrC/jB,MAAO,IACP,UAAW,CACTA,MAAO,OAIbqlB,OAAQ,CACNrlB,MAAOd,EAAMO,QAAQ,GACrBoC,OAAQ,OACRkG,SAAU,WACVud,cAAe,OACf5lB,QAAS,OACTuC,WAAY,SACZW,eAAgB,UAElB2iB,UAAW,CACThlB,MAAO,UACPL,UAAW,EACXL,aAAc,QAEhB2lB,WAAY,CACVhmB,QAASN,EAAMO,QAAQ,EAAG,EAAG,EAAG,IAGlCgmB,aAAc,CACZhS,WAAYvU,EAAMO,QAAQ,IAE5BimB,UAAW,CACTnlB,MAAO,UACPC,WAAY,IACZE,cAAe,aACfyB,WAAY,MACZoG,UAAW,QAEbod,SAAU,CACRtlB,SAAU,QAEZulB,KAAM,CACJC,cAAe,MACflB,YAAa,MACbpkB,MAAO,uBAETulB,gBAAiB,CACflmB,OAAQ,MACRY,WAAY,IACZH,SAAU,WACV8B,WAAY,KACZ5B,MAAO,uBAETgD,SAAU,CACR3D,OAAQ,MACRY,WAAY,IACZH,SAAU,WACV8B,WAAY,KACZ5B,MAAO,uBAETwlB,iBAAkB,CAChB,UAAW,CACT3E,gBAAiB,iBAGrB5e,SAAU,CACRZ,YAAa,OACb5B,MAAO,OACP6B,OAAQ,QAEVV,KAAM,CACJU,OAAQ,QAEVmkB,UAAW,CACTpmB,OAAQ,IACR2I,UAAW,SACXhI,MAAO,sBACPF,SAAU,OAEZ4lB,iBAAkB,CAChB1lB,MAAO,sBACPwH,SAAU,SACVzI,WAAY,cACZ,UAAW,CACTA,WAAY,uBAEdU,MAAO,OACP6B,OAAQ,QAEVqkB,QAAS,CACPC,UAAW,+BACXC,eAAgB,MAElB,qBAAsB,CACpB,KAAM,CAAExZ,UAAW,oBACnB,OAAQ,CAAEA,UAAW,sBAEvByZ,QAAS,CACPA,QAAS,CACP1mB,SAAU,OACVK,MAAO,cACP,sBAAuB,CACrBL,SAAU,cC1JL2mB,GAA8C,EACzDC,mBACAC,oBACArd,OACAmV,YACAzH,oBACA4P,kBACA1H,eACAL,QACAgI,WACAC,aACAC,eACAC,gBACAnN,WACAoN,gBACAC,iBAAiB,CAAE,EACnBC,qBAAqB,OAErB,MAAMjkB,EAAU/D,MACViF,EAAEA,GAAMC,KAER+iB,mBACJA,EAAkBC,kBAClBA,EAAiBC,iBACjBA,EAAmB,SACjBJ,EAEEjG,EAAeC,IAAO,EAAG7a,eAAc8a,KAC3Cvb,EAACsS,EAAY,IAAAiJ,EAAOje,QAAS,CAAEke,OAAQ/a,MADpB6a,EAElB,EAAG7hB,YAAa,CACjB,CAAC,MAAMgiB,EAAeC,WAAY,CAChCC,gBAAiBliB,EAAM2B,QAAQwgB,OAAOC,MACtC/gB,MAAO,sBACPlB,UAAWH,EAAMqiB,QAAQ,GACzBlhB,SAAU,QAcd,OACEoF,EAAC2hB,GACCrf,SAAS,QACTsf,UAAW,EACXnhB,UAAW0F,EAAK7I,EAAQ8gB,OAAQ1a,GAAQpG,EAAQ2hB,aAEhD/e,SAAAE,EAACyhB,EAAQ,CAAAphB,UAAWnD,EAAQgiB,QAAOpf,SAAA,CACjCE,EAAC6b,EAAG,CACFhV,GAAI,CACFhN,QAAS,OACTkD,eAAgB,eAChBX,WAAY,SACZJ,OAAQ,OACR7B,MAAO,QACP6C,cAAoC,UAArBskB,EAA+B,cAAgB,OAC/DxhB,SAAA,CAGCF,EAACuC,EADFmB,EACY,CACToe,eAAa,EACbtf,QAAS,IAAMue,IACftgB,UAAWnD,EAAQkjB,iBAAgBtgB,SAElCuhB,GAGCzhB,EAAC+hB,GAAiB,CAAAnnB,SAAS,WAK7B,CAAAknB,eACW,EAAA,aAAA,cACXtf,QAAS,IAAMse,IACfrgB,UAAWnD,EAAQkjB,iBAAgBtgB,SAElCshB,GAGCxhB,EAAC+hB,GAAgB,CAACnnB,SAAS,YAKjCwF,EACE,MAAA,CAAAF,SAAA,CAAAF,EAAA,MAAA,CACE8N,IAAKlJ,QAAQqU,GAAOvd,MAAQud,GAAOvd,KAAOulB,EAC1CtT,IAAI,YACJlN,UAAWnD,EAAQ5B,KACnB8G,QAAUX,IACRA,EAAEa,iBACFuR,EAASqF,GAAgB,cAAc,IAG3CtZ,EAAG,IAAA,CAAAS,UAAWnD,EAAQijB,UAASrgB,SAAG+Y,GAAO+I,gBAG7ChiB,EAACgc,EAAM,CAAA5J,UAAU,MAAMpY,QAAS,EAAGioB,GAAI,WACrCjiB,EAACic,EAAI,CAAAxb,UAAWnD,EAAQ0a,wBAAuB9X,SAC7CF,EAACoc,EACC,CAAA3b,UAAWnD,EAAQya,iBACnBpK,IAAI,aACJG,IAAKlJ,QAAQqU,GAAO2D,MAAQ3D,GAAO2D,KAAOsF,SAIhD9hB,EAAC2H,GACCoa,UAAU,KACVrc,QAAQ,KACRhL,MAAM,UACNsnB,QACA,EAAA3hB,UAAWnD,EAAQkV,gBAEnBxS,EAACic,EACC,CAAA3b,MAAO,CACL3E,aAAc,MACdf,SAAU,OACVE,MAAO,sBACPP,MAAO,SAETkG,UAAW0F,EAAK,CACd,CAAC7I,EAAQmjB,SAAU5H,GAAWiE,YAAYxV,OAAS,KACnDpH,SAED2Y,GAAWiE,aAAe,KAE7B9c,EAAK,MAAA,CAAAM,MAAO,CAAErG,QAAS,OAAQ8M,IAAK,OAAO7G,SACzCE,EAAK,MAAA,CAAAE,MAAO,CAAExF,MAAO,iCACnBsF,EAAC2H,EACC,CAAAjC,QAAQ,UACR7L,QAAQ,QACRyC,WAAY,EACZ9B,SAAU,OAAMsF,SAAA,CAEf1B,EAAE,iBAAmB,IAAAqa,GAAWoC,MAAMf,YAAc,WACpDrB,GAAWoC,MAAMd,QAAU,MAE9B/Z,EAAC2H,EAAU,CAACjC,QAAQ,UAAU7L,QAAQ,SAASW,SAAU,OACtDsF,SAAA,CAAA1B,EAAE,0BAAwB,IAC1BoG,QAAQiU,GAAWwJ,aAChBC,GACEC,GAAO,IAAIpkB,KAAK0a,GAAWwJ,aAAc,eAG3C,eAENjiB,EAAC2H,EAAU,CACTiG,WAAY,EACZlI,QAAQ,UACR7L,QAAQ,SACRW,SAAU,OAETsF,SAAA,CAAA1B,EAAE,6BAA2B,IAC7B8jB,GAAoBzJ,GAAWoC,MAAMuH,WAAa,wBAK3DpiB,EAAC6b,EAAG,CAAA/b,SAAA,CACAmhB,EAcE,KAbFrhB,EAACic,GAAIhV,GAAI,CAAEtL,aAAc,MAAO8mB,aAAc,QAAQviB,SACpDE,EAAC4b,EAAK,CACJ5J,UAAU,MACVpY,QAAS,EACTmD,eAAgB,WAChBX,WAAY,SAEZ0D,SAAA,CAAAE,EAAC2H,EAAW,CAAAnN,SAAU,OAAQE,MAAO,UAClCoF,SAAA,CA3IC,MAChB,IACIqc,EADAC,GAAQ,IAAIre,MAAOse,WAOvB,OAJID,EAAQ,GAAID,EAAQ,UACfC,GAAS,IAAMA,GAAS,GAAID,EAAQ,YACpCC,GAAS,IAAMA,GAAS,KAAID,EAAQ,WAEtCnc,EAAA,OAAA,CAAAF,SAAA,CAAA,QAAYqc,EAAK,MAAS,EAmIlBG,GAAW,IAAG7D,GAAWoC,MAAMhX,IAAM,MAExCjE,EAAK,MAAA,CAAA8N,IAAK6O,GAAahP,IAAI,GAAGrN,MAAO,CAAElE,OAAQ,eAIrDgE,EAAC6b,EAAG,CACFhiB,QAAS,OACTkD,eAAgB,eAChBX,WAAY,SAEX0D,SAAA,CAAA8gB,EAAkBhhB,EAACghB,MAAqB,KACxC5P,EAAoBpR,EAACoR,EAAiB,CAAA,GAAM,KAE7ChR,EAAC6b,EAAG,CACF/hB,SAAU,IACVD,QAAS,OACTkD,eAAgB,MAChB4J,IAAK,SACLhN,QAAS,WAAUmG,SAAA,CAElBqhB,EAAmBmB,KAAKP,IACGA,EAAU5G,MAE7Bvb,EAACmiB,EAAUQ,cAAcR,EAAU5G,WAE5Cvb,EAACsS,EAAQ,CAAAE,MAAM,SAAS2J,UAAU,SAASyG,OAAK,EAAA1iB,SAC9CF,EAACuC,EAAU,CACTC,QAAS,IACiB,mBAAjB2e,EAA8BA,IAAiB,KAExDrmB,MAAM,QACNmM,GAAI,CACF0U,gBAAiB,4BAEjBvhB,aAAc,OACdgC,OAAQ,OACR7B,MAAO,OACP,UAAW,CACTV,WAAY,eACZO,aAAc,OACdgN,WAAY,mBACZxN,UACE,mEACF,qBAAsB,CACpBwC,OAAQ,OACR7B,MAAO,OACP6M,WAAY,mBACZrN,QAAS,SAGd,aACU,mBAAkBmG,SAE7BF,EAAC6iB,GAAa,CAAA,gBAMxB7iB,EAACgc,EAAK,CAAC5J,UAAU,MAAMpY,QAAS,EAAGqY,GAAI,EAACnS,SACtCF,EAACic,GACCxb,UAAWnD,EAAQ0a,wBACnB/Q,GAAI,CAAEzL,OAAQ,WAAW0E,SAEzBF,EAACqb,GACC7I,MACEpS,EACE0G,EAAA,CAAA5G,SAAA,CAAAE,EAAA,MAAA,CAAAF,SAAA,CACG,IACA1B,EAAE,iBAAoB,KAAAqa,GAAWoC,MAAMhX,MAE1C7D,EAAA,MAAA,CAAAF,SAAA,CACG1B,EAAE,eAAmB,MAAAqa,GAAWqD,YAEnC9b,EAAM,MAAA,CAAAF,SAAA,CAAA1B,EAAE,gCAA2C,cAGvD2d,UAAU,eAEVjc,SAAAF,EAACoc,EAAM,CACL3b,UAAWnD,EAAQya,iBACnBvV,QAAS,IACkB,mBAAlB4e,EAA+BA,IAAkB,KAE1DzT,IAAI,aACJG,IAAKoT,GAAc,eAO/B,EAGSoB,GAAuBQ,GAM9Ble,QAAQke,GACHA,EAEF,MCpUIvpB,GAAYC,GAAYC,IAC5B,CACLspB,YAAa,CACXnpB,UAAW,8BACX0I,SAAU,WACVrF,WAAY,SACZ1C,MARc,IASd6M,WAAY3N,EAAM4kB,YAAYC,OAAO,QAAS,CAC5CC,OAAQ9kB,EAAM4kB,YAAYE,OAAOC,MACjCC,SAAUhlB,EAAM4kB,YAAYI,SAASU,iBAEvCtkB,OAAQ,OACRqX,SAAU,SACV8Q,OAAQ,KAEVC,iBAAkB,CAChBC,UAAW,SACX9b,WAAY3N,EAAM4kB,YAAYC,OAAO,QAAS,CAC5CC,OAAQ9kB,EAAM4kB,YAAYE,OAAOC,MACjCC,SAAUhlB,EAAM4kB,YAAYI,SAASC,gBAEvCnkB,MAAOd,EAAMO,QAAQ,GACrB,CAACP,EAAMY,YAAY8oB,GAAG,OAAQ,CAC5B5oB,MAAOd,EAAMO,QAAQ,KAGzBopB,YAAa,CACXnpB,QAAS,OACTuC,WAAY,SACZwmB,OAAQ,QACLvpB,EAAM4pB,OAAO/D,QAChBzlB,WAAY,eACZsD,eAAgB,SAChBf,OAAQ,QAGVknB,MAAO,CACLN,OAAQ,MAEVO,WAAY,CACV5H,gBAAiB,cACjB9gB,OAAQ,OACRW,OAAQ,UACRqB,eAAgB,YAChB5C,QAAS,SACTE,OAAQ,EACRJ,QAAS,EACT,UAAW,CACT8C,eAAgB,QAElB,UAAW,CACTA,eAAgB,aCtDX2mB,GAAgC,GCERhqB,GAAYC,IAAgB,CAC/DgqB,UAAW,CACT1pB,QAAS,YACT4hB,gBAAiB,kBACjBhiB,UAAW,OACXC,UAAW,6BACXO,OAAQ,QAEVupB,eAAgB,CACd/H,gBAAiB,OACjBhhB,SAAU,QACVf,UAAW,6BACXiD,eAAgB,OAChBuL,aAAc,sBAEhBub,cAAe,CACb7oB,MAAO,OACPF,SAAU,OACV8B,WAAY,MACZ6D,WAAY,MACZ2O,cAAe,MACfuT,aAAc,QACdvD,YAAa,QACbnkB,WAAY,IACZE,cAAe,aACfhB,QAAS,OACTuC,WAAY,SACZhB,OAAQ,UAER,UAAW,CACTV,MAAO,YAGX8oB,YAAa,CACX9oB,MAAO,OACPf,QAAS,kBACTE,QAAS,eACTmmB,cAAe,SACf5kB,OAAQ,UACRP,cAAe,cAEjB4oB,OAAQ,CACNjpB,SAAU,QAEZkpB,cAAe,CACbvpB,MAAO,aAIJ,MAAMwpB,GAAmBvqB,GAAYC,IAAgB,CAC1DuqB,KAAM,CACJ7mB,eAAgB,UAElB8mB,OAAQ,CACN9pB,OAAQ,OAEVoT,KAAM,CACJtT,QAAS,OAETG,aAAc,MACd4T,WAAY,MACZvT,UAAW,QACXF,MAAO,MACP6B,OAAQ,OACR8iB,YAAazlB,EAAMO,QAAQ,GAC3ByoB,aAAchpB,EAAMO,QAAQ,GAC5BH,WAAY,eACZD,UAAW,qCACX,QAAS,CAEPkB,MAAO,uBAET,UAAW,CACTlB,UACE,uGACFC,WAAY,sBACZuN,WAAY,cAGhB8c,eAAgB,CACd3pB,MAAO,OACP6B,OAAQ,OACRrC,QAAS,OACToqB,aAAc,UAEhBjnB,OAAQ,CACNpC,MAAO,UACPf,QAAS,WAETkB,cAAe,OACfD,cAAe,EACfT,MAAO,OACPuI,UAAW,OACX,UAAW,CACT6Y,gBAAiB,wBAIrByI,QAAS,CACPlF,YAAa,OACb/hB,eAAgB,SAElBknB,SAAU,CAERtF,UAAW,OACXmE,UAAW,SAOX9oB,aAAc,OACdmG,WAAY,MACZ,yBAA0B,CACxB2O,cAAe,SAInBoV,wBAAyB,CACvBvF,UAAW,OACXmE,UAAW,SACX9mB,OAAQ,sBAERmE,WAAY,QAEdgkB,iBAAkB,CAChBrF,YAAa,OACbzkB,UAAW,OACXgoB,aAAchpB,EAAMO,QAAQ,GAC5BoC,OAAQ,OACRxB,SAAU,OACV,cAAe,CACbA,SAAU,SAGd4pB,iBAAkB,CAChBtF,YAAa,OACbzkB,UAAW,OACXG,SAAU,OACV,cAAe,CACbA,SAAU,QAGd6pB,SAAU,CACR9pB,SAAU,kBACVwpB,aAAc,SACdrpB,MAAO,sBACPC,WAAY,IACZH,SAAU,QAEZ8pB,KAAM,CACJ9pB,SAAU,QACVH,UAAW,MACXkB,aAAc,MACdgpB,aAAc,WACd7pB,MAAO,sBACPkT,WAAY,OACZ/Q,WAAY,eACZ,SAAU,CACRlC,WAAY,IACZkC,WAAY,gBAEd,MAAO,CACLnC,MAAO,sBACP8pB,WAAY,MAGhBC,SAAU,CACRlJ,gBAAiB,eACjB,UAAW,CACT9hB,WAAY,sBACZ,QAAS,CACPiB,MAAO,2BAET,cAAe,CACbA,MAAO,6BAIbgqB,QAAS,CACPlqB,SAAU,SAEZmqB,SAAU,CACR,uBAAwB,CACtB,UAAW,CACTpJ,gBAAiB,uBAEnB,OAAQ,CACN7gB,MAAO,kBAIbkqB,YAAa,CACXrJ,gBAAiB,sBACjB,OAAQ,CACN7gB,MAAO,gBAET,UAAW,CACT6gB,gBAAiB,wBAGrBsJ,SAAU,CACR1kB,WAAY,OACZ2O,cAAe,OACf9S,OAAQ,OACR8iB,YAAa,OACbiF,aAAc,UAEhBe,eAAgB,CACdvJ,gBAAiB,iCAEjB,UAAW,CACT7gB,MAAO,0BAET,QAAS,CACPA,MAAO,uBAET,UAAW,CACT,UAAW,CACTA,MAAO,wBAGX,MAAO,CACLA,MAAO,4BCnNb,IAAIqqB,IAAkB,EAQf,MAAMC,GAAkC,EAC7CC,WACAvE,mBACAwE,aACAC,UACAC,WACAC,mBACAC,mBACAC,qBAAoB,EACpBC,UACAtM,eACArF,eAEA,MAAM3W,EAAUymB,KAChB,IAAI8B,EAA+B,KAiDnC,OAhDAV,GAAkBG,EACdQ,MAAMC,QAAQV,EAASW,YACzBH,EAASR,EAASW,SAAStD,KAAKuD,IACJ,IAAtBA,GAAKC,aAELlmB,EAACmmB,GAEC,CAAA5Y,KAAM0Y,EACNV,QAASA,EACTjoB,QAASA,EACT8oB,MAAO,EACPZ,SAAUA,EACVC,iBAAkBA,EAClBC,iBAAkBA,GAPbO,EAAIrlB,OAUJklB,MAAMC,QAAQE,EAAI/lB,UAEzBF,EAACqmB,GAAc,CAEb9Y,KAAM0Y,EACN3oB,QAASA,EACT8oB,MAAO,EACPtF,iBAAkBA,EAClBwE,WAAYA,EACZE,SAAUA,EACVI,QAASA,EACTtM,aAAcA,EACdrF,SAAUA,GATLgS,EAAIrlB,OAcXZ,EAACsmB,IAEC/Y,KAAM0Y,EACN3oB,QAASA,EACT8oB,MAAO,EACPZ,SAAUA,EACVF,WAAYA,EACZM,QAASA,EACTtM,aAAcA,EACdrF,SAAUA,GARLgS,EAAIrlB,UAejBZ,EAACumB,EAAI,CACHpE,UAAU,MACVqE,gBACA,EAAA/lB,UACEklB,EAAoBroB,EAAQgnB,wBAA0BhnB,EAAQ+mB,SAGhEnkB,SAAAF,EAACymB,GAAW,CAAAvmB,SAAA2lB,KAEd,EAGEM,GAQD,EACH5Y,OACAgY,UACAa,QACA9oB,UACAkoB,WACAC,mBACAC,uBAEA,IAAIgB,GACDnZ,EAAK3M,OAAS,IAAIqC,cAAc0jB,UAAU,EAAG,IAAM,SAOtD,MAAMC,EACyB,gBAA7BrZ,EAAKqZ,MAAM3jB,eAAmCsK,EAAKqZ,KACjD5mB,EAAC6mB,EAAa,CAAApmB,UAAWnD,EAAQmnB,SAAQvkB,SACvCF,EAAC8mB,GAAgB,CAAAF,KAAM,CAAC,MAAOrZ,EAAKqZ,UAGtC5mB,EAAC6mB,EAAY,CAACpmB,UAAWnD,EAAQmnB,SAC/BvkB,SAAAF,EAAC8mB,GAAe,CAACF,KAAM,CAAC,MAAOF,OAI/BK,EACM,IAAVX,EACI9oB,EAAQinB,iBACE,IAAV6B,EACE9oB,EAAQknB,iBACR,GAER,OACEpkB,EAAC4mB,EACC,CAAA9pB,QACA,EAAA+pB,gBACA,EAAAxmB,UAAW0F,EAAK,CACd,CAAC7I,EAAQiQ,OAAO,EAChBwZ,CAACA,GAAiBniB,QAAQmiB,GAC1B,CAACzpB,EAAQ2nB,UAAWrgB,QAAQ4gB,GAC5B,CAACloB,EAAQ4mB,iBAAkBiB,KAE7B3iB,QAAS,KACP,GAAsB,kBAAlB+K,EAAK2Z,UAAgCpB,MAAMC,QAAQxY,EAAKrN,UAAW,CACrEwlB,EAAiB,CACf9kB,MAAO2M,EAAK3M,MACZC,YAAa,UAAY0M,EAAK3M,MAAQ,eAExC,IAAIumB,EAAY5Z,EAAKrN,SAASwiB,KAAK0E,IAC1B,IAAKA,EAAOC,eAAgBD,EAAME,cAE3C7B,EAAiB0B,EAClB,CACD5B,EAAQhY,EAAK2Z,SAAS,EAGxBhnB,SAAA,CAAAF,EAACsS,EAAO,CACNE,MAAOjF,EAAK3M,MACZgiB,OAAO,EACPzG,UAAWgJ,GAAkB,eAAiB,QAE9CjlB,SAAAF,EAAA,OAAA,CAAAE,SAAO0mB,MAEPzB,IAAmB5X,EAAK3M,MAAM0G,OAAS,KAAQ1C,QAAQgiB,GACvD5mB,EAACsS,EACC,CAAAE,MAAOjF,EAAK3M,MACZgiB,OAAO,EACPzG,UAAWgJ,GAAkB,eAAiB,iBAE9CnlB,EAACunB,EACC,CAAAlsB,QAASkS,EAAK3M,MACdH,UAAWnD,EAAQonB,KACnBjpB,UAAW8R,EAAK8Z,gBAAkB,SAGpClC,GACFnlB,EAACunB,GACClsB,QAASkS,EAAK3M,MACdH,UAAWnD,EAAQonB,KACnBjpB,UAAW8R,EAAK8Z,gBAAkB,OAElC,OAEN,EAGEf,GASD,EACH/Y,OACAjQ,UACA8oB,QACAZ,WACAF,aACAM,UACAtM,eACArF,eAEA,MAAMuT,EAAeC,GACnBC,OAAOC,UAAUC,UAAY,GAC7Bra,GAAMxK,MAAQ,GACdwK,GAAMsa,gBACNjC,EACAtM,GAEF,GAAIkO,EAAc,CAEhB,IAAIM,EAAYC,SAASvV,MACzBuV,SAASvV,MAAQsV,EAAU5oB,MAAM,OAAO,GAAK,MAAQqO,EAAK3M,KAC3D,CACD,IAAI8lB,GACDnZ,EAAK3M,OAAS,IAAIqC,cAAc0jB,UAAU,EAAG,IAAM,SAEtD,MAAMC,EACwB,gBAA5BrZ,EAAKqZ,KAAK3jB,eAAoC2B,QAAQ2I,EAAKqZ,MAKzD5mB,EAAC6mB,EAAa,CAAApmB,UAAWnD,EAAQmnB,SAAQvkB,SACvCF,EAAC8mB,GAAgB,CAAAF,KAAM,CAAC,MAAOrZ,EAAKqZ,UALtC5mB,EAAC6mB,EAAa,CAAApmB,UAAWnD,EAAQmnB,SAAQvkB,SACvCF,EAAC8mB,IAAgBF,KAAM,CAAC,MAAOF,OAO/BK,EACM,IAAVX,EACI9oB,EAAQinB,iBACE,IAAV6B,EACE9oB,EAAQknB,iBACR,GACR,OACEpkB,EAAC4mB,EACC,CAAA9pB,QACA,EAAA+pB,gBACA,EAAAxmB,UAAW0F,EAAK,CACd,CAAC7I,EAAQiQ,OAAO,EAChBwZ,CAACA,GAAiBniB,QAAQmiB,GAC1B,CAACzpB,EAAQ2nB,UAAWrgB,QAAQ4gB,GAC5B,CAACloB,EAAQ4nB,gBAAiBsC,EAC1B,CAAClqB,EAAQ4mB,iBAAkBiB,KAE7B3iB,QAAUX,IAER,GADAA,EAAEa,iBACE6K,EAAKya,aAAc,CACrB,IAAIC,EAAO1a,EAAKxK,KAKhB,GAJAklB,EACiC,MAA/B1a,EAAKxK,MAAM4jB,UAAU,EAAG,GACpBpZ,EAAKxK,KAAK4jB,UAAU,GACpBpZ,EAAKxK,KACPwK,EAAK2a,+BAAgC,CACvC,IAAIC,EAAW,IAAIC,gBAAgB7a,GAAMsa,iBACzC5T,EAAS,GAAGgU,KAAQE,EAASpe,aAC9B,MACCkK,EAAS,GAAGgU,IAAkB,CAC5B3X,MAAO,IAAK/C,GAAMsa,kBAGvB,MAAUjjB,QAAQ2I,EAAKxK,OACtB2kB,OAAOhkB,KAAK6J,EAAKxK,KAAMwK,EAAK8a,KAAO,UACpC,EAGHnoB,SAAA,CAAAF,EAACsS,EAAO,CACNE,MAAOjF,EAAK3M,MACZgiB,OAAO,EACPzG,UAAWgJ,GAAkB,eAAiB,QAE9CjlB,SAAAF,EAAA,OAAA,CAAAE,SAAO0mB,MAGPzB,IAAmB5X,EAAK3M,MAAM0G,OAAS,KAAQ1C,QAAQgiB,GACvD5mB,EAACsS,EACC,CAAAE,MAAOjF,EAAK3M,MACZgiB,OAAO,EACPzG,UAAWgJ,GAAkB,eAAiB,iBAE9CnlB,EAACunB,EACC,CAAAlsB,QAASkS,EAAK3M,MACdH,UAAWnD,EAAQonB,KACnBjpB,UAAW8R,EAAK8Z,gBAAkB,SAGpClC,GACFnlB,EAACunB,GACClsB,QAASkS,EAAK3M,MACdH,UAAWnD,EAAQonB,KACnBjpB,UAAW8R,EAAK8Z,gBAAkB,OAElC,OAON,EAGEhB,GAUD,EACH9Y,OACAjQ,UACA8oB,QACAtF,mBACAwE,aACAE,WACAI,UACA3R,eAEA,MAAOvQ,EAAMiS,GAAW9X,GAAS,GAO3ByqB,EAAY/a,EAAKrN,UAAUwiB,KAAKuD,GAChCH,MAAMC,QAAQE,EAAI/lB,UAElBF,EAACqmB,IAEC9Y,KAAM0Y,EACN3oB,QAASA,EACT8oB,MAAOA,EAAQ,EACftF,iBAAkBA,EAClBwE,WAAYA,EACZE,SAAUA,EACVI,QAASA,EACT3R,SAAUA,GARLgS,EAAIrlB,OAaXZ,EAACsmB,GAAc,CAEb/Y,KAAM0Y,EACN3oB,QAASA,EACT8oB,MAAOA,EAAQ,EACfZ,SAAUA,EACVI,QAASA,EACT3R,SAAUA,GANLgS,EAAIrlB,SAWjB,IAAI8lB,GACDnZ,EAAK3M,OAAS,IAAIqC,cAAc0jB,UAAU,EAAG,IAAM,SAEtD,MAAMC,EACyB,gBAA7BrZ,EAAKqZ,MAAM3jB,eAAoC2B,QAAQ2I,EAAKqZ,MAK1D5mB,EAAC6mB,EAAa,CAAApmB,UAAWnD,EAAQmnB,SAAQvkB,SACvCF,EAAC8mB,GAAgB,CAAAF,KAAM,CAAC,MAAOrZ,EAAKqZ,UALtC5mB,EAAC6mB,EAAa,CAAApmB,UAAWnD,EAAQmnB,SAAQvkB,SACvCF,EAAC8mB,IAAgBF,KAAM,CAAC,MAAOF,OAQ/BK,EACM,IAAVX,EACI9oB,EAAQinB,iBACE,IAAV6B,EACE9oB,EAAQknB,iBACR,GACR,OACEpkB,EAAA0G,EAAA,CAAA5G,SAAA,CACEE,EAAC4mB,GACC9pB,QAAM,EACNsF,QA3Dc,KAIlBmT,GAASjS,EAAK,EAwDVujB,gBACA,EAAAxmB,UAEM0F,EADJzC,EACS,CACH,CAACpG,EAAQiQ,OAAO,EAChBwZ,CAACA,GAAiBniB,QAAQmiB,GAC1B,CAACzpB,EAAQ2nB,UAAWrgB,QAAQ4gB,GAC5B,CAACloB,EAAQ0nB,cAAc,EACvB,CAAC1nB,EAAQ4mB,iBAAkBiB,IAExB,CACH,CAAC7nB,EAAQiQ,OAAO,EAChBwZ,CAACA,GAAiBniB,QAAQmiB,GAC1B,CAACzpB,EAAQ2nB,UAAWrgB,QAAQ4gB,GAC5B,CAACloB,EAAQ4mB,iBAAkBiB,KAInCjlB,SAAA,CAAAF,EAACsS,EAAO,CACNE,MAAOjF,EAAK3M,MACZgiB,OAAO,EACPzG,UAAWgJ,GAAkB,eAAiB,QAE9CjlB,SAAAF,EAAA,OAAA,CAAAE,SAAO0mB,MAGRtB,IAAe1gB,QAAQgiB,GACtBxmB,EACE0G,EAAA,CAAA5G,SAAA,CAAAF,EAACunB,EAAY,CACXlsB,QAASkS,EAAK3M,MACdnF,UAAW8R,EAAK8Z,gBAAkB,KAClCvsB,MAAM,UACN2F,UAAWnD,EAAQonB,OAEb1kB,EAAP0D,EAAQ6kB,GAAiBC,GAAP,CAAA,MAEnB,QAGNxoB,EAACyoB,EAAQ,CAACC,GAAIhlB,EAAMilB,QAAQ,OAAOC,eACjC,EAAA1oB,SAAAF,EAACumB,EAAI,CACHpE,UAAU,MACVqE,gBAAc,EACd/lB,UAAWiD,EAAOpG,EAAQynB,SAAW,GAAE7kB,SAEtCooB,QAIP,EAEEb,GAAuB,CAC3BE,EACAkB,EACAhB,EACAjC,EACAtM,KAEA,IACGqO,IAAa,IAAI/B,KAAa+B,IAAa,IAAI/B,OAChDiD,IAAavP,EAEb,OAAO,EACF,GAAiB,WAAbuP,EAAuB,CAChC,IAEE,GAAI,IADW,IAAIT,gBAAgBP,GAChB9d,aAAe2d,OAAOC,SAAS/H,OAChD,OAAO,CAEV,CAAC,MAAOze,GACP0I,QAAQC,IAAI3I,EACb,CACD,OAAO,CACR,CAAM,QACLwmB,IAAa,IAAI/B,KACJ,MAAb+B,IACA/iB,QAAQikB,KACRlB,EAAStoB,SAASwpB,GAIR,EC5dRC,GAAe,CAAClJ,EAAQmJ,EAAMC,KAC7BlD,MAAMC,QAAQgD,KACjBA,EAAO,CAACA,IAEHA,EAAK5pB,MAAM8mB,GAChB+C,EAAQ/C,IACJgD,uBACA5pB,SAASugB,GAAQqJ,0BAIZC,GAAwB,CACnCC,EACAnD,EACAoD,KAEA,IAAIC,EAA6B,GACjC,IAAK,IAAIjgB,EAAI,EAAGA,EAAI4c,EAAS1e,OAAQ8B,IACnC,GAAI0f,GAAaK,EAAcC,EAAcpD,EAAS5c,IAAK,CACzD,IAAIlJ,SAAEA,KAAaopB,GAAYtD,EAAS5c,GACxC,GAAI0c,MAAMC,QAAQ7lB,IAAaA,EAASoH,OAAS,EAAG,CAClD,IAAIiiB,EAAcL,GAChBC,EACAjpB,EACAkpB,GAEEG,EAAYjiB,OAAS,GACvB+hB,EAAYG,KAAK,IAAKF,EAASppB,SAAUqpB,GAE5C,MACCF,EAAYG,KAAK,IAAKF,GAEzB,CAEH,OAAOD,CAAW,EChBPI,GAA0C,EACrDpE,WACAvE,mBACAwE,aACAC,UACA3kB,QACAgmB,OACA/lB,cAAc,oBACd+kB,UACAtM,eACArF,eAEA,MAAO2L,EAAQ8J,GAAa7rB,EAAS,IAC/B8rB,EAAmB3c,GAAQ,IACxBkc,GAAsBtJ,EAAQyF,EAASW,SAAU,CACtD,QACA,oBAED,CAACpG,EAAQyF,EAASW,WACf1oB,EAAUymB,KAEV6F,EAAShD,EACb5mB,EAAC6mB,EAAY,CAACpmB,UAAWnD,EAAQmnB,SAC/BvkB,SAAAF,EAAC6pB,GAAmB,CAAA,KAEpB,KAMJ,OACEzpB,SAAKE,MAAO,CAAErG,QAAS,OAAQmD,cAAe,UAAU8C,SAAA,CACtDE,EAAC4mB,EAAQ,CACP9pB,QACA,EAAAuD,UAAW0F,EAAK,CACd,CAAC7I,EAAQiQ,OAAO,EAChB,CAACjQ,EAAQinB,mBAAmB,EAC5B,CAACjnB,EAAQunB,WAAW,IAEtBriB,QAAS,IAAM+iB,EAAQ,KACvBte,GAAI,CAAE1M,MAAQ+qB,EAAgC,OAAnB,kBAA2BplB,SAAA,CAErD0pB,EACD5pB,EAACunB,EAAY,CAAClsB,QAASuF,EAAOH,UAAWnD,EAAQonB,UAGnD1kB,EAAC8pB,EAAS,CACR7iB,GAAI,CAAEiL,SAAU,UAChBjT,MAAO2gB,EACP1e,SAAWW,GAAM6nB,EAAU7nB,EAAE7C,OAAOC,OACpCuD,QAzBc,KACb8iB,GACHxE,GACD,EAuBGjgB,YAAa+D,QAAQ/D,GAAeA,EAAc,oBAClDF,UAAW2kB,IAGbtlB,EAAColB,GAAU,CACTtE,iBAAkBA,EAClBwE,WAAYA,EACZC,QAASA,EACTF,SAAU,CACRW,SAAU2D,EACVI,OAAQ,CAAE1B,IAAK,GAAIrpB,OAAQ,WAE7BwmB,UAAU,EACVG,mBAAmB,EACnBC,QAASA,EACTtM,aAAcA,EACdrF,SAAUA,MAGd,ECOJ+V,GAAQC,IACNC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IC7LK,MAAMC,GAA6B,CACxC3K,EACA4K,EACAC,EACAC,EACAC,EACAC,KAEA,IASIC,EATWC,GACblL,EAASW,SACTiK,EACAC,EACAC,EACAC,EACAC,GAGwB3N,KAAKnV,IAC7B,IAAIrN,SAAEA,KAAaopB,GAAY/b,EAQ/B,OAPIuY,MAAMC,QAAQ7lB,IAAaA,EAASoH,OAAS,IAC1C1C,QAAQ0kB,EAAQpD,gBACnBoD,EAAQpD,cAAe,EACvBoD,EAAQpC,SAAW,kBAIhB,IAAKoC,EAASppB,SAAUA,EAAU,IAE3C,MAAO,CACL6pB,OAAQ1E,EAAS0E,OACjB/D,SAAUsK,EACX,EA2BGE,GAAgB,CAACC,EAAcC,KACnC,IAAK5K,MAAMC,QAAQ2K,KAAoB5K,MAAMC,QAAQ0K,GACnD,OAAO,EAET,GAAIC,EAAeppB,QAAU,GAAKmpB,EAAanpB,QAAU,EACvD,OAAO,EAET,IAAK,MAAM2e,KAAOyK,EAChB,GAAID,EAAaE,QAAQ1K,IAAQ,EAC/B,OAAO,EAGX,OAAO,CAAK,EA6BR2K,GAAsB,CAACC,EAAUC,KAChChL,MAAMC,QAAQ+K,IAAoC,iBAAbD,IAGtCC,EAAYxpB,QAAU,KAGtBwpB,EAAYH,QAAQE,IAAa,IAMjCE,GAAgB,CAACC,EAAcC,KACnC,IAAKnL,MAAMC,QAAQkL,KAAoBnL,MAAMC,QAAQiL,GACnD,OAAO,EAET,GAAIC,EAAe3pB,QAAU,GAAK0pB,EAAa1pB,QAAU,EACvD,OAAO,EAGT,IAAK,MAAM2e,KAAOgL,EAChB,GAAID,EAAaL,QAAQ1K,IAAQ,EAC/B,OAAO,EAGX,OAAO,CAAK,EAYRsK,GAAiB,CACrBvK,EACAiK,EACAC,EACAC,EACAC,EACAC,KAEA,IAAIhH,EAA6B,GACjC,IAAK,IAAIjgB,EAAI,EAAGA,EAAI4c,EAAS1e,OAAQ8B,IACnC,GA7DgBynB,EA8DHK,OAAOjB,GA9DMa,EA8DC9K,EAAS5c,GAAG+nB,iBA7DpCrL,MAAMC,QAAQ+K,IAAoC,iBAAbD,GAGtCC,EAAYxpB,QAAU,GAGtBwpB,EAAYH,QAAQE,IAAa,KApBlBO,EA4EHjB,EA5EgBkB,EA4EPrL,EAAS5c,GAAGkoB,oBA3EhCxL,MAAMC,QAAQsL,KAAmBzsB,QAAQwsB,IAG1CC,EAAc/pB,QAAU,GAGxB+pB,EAAcV,QAAQS,IAAgB,IAsEtCZ,GAAcN,EAAUlK,EAAS5c,GAAGmoB,oBACpCX,GAAoBM,OAAOjB,GAAOjK,EAAS5c,GAAGooB,mBAC9CT,GAAcV,EAAUrK,EAAS5c,GAAGqoB,qBAzBjBlkB,EA0BHyY,EAAS5c,GAxBzB0c,MAAMC,QAAQxY,EAAKrN,WAAaqN,EAAKrN,SAASoH,OAAS,GACxD1C,QAAQ2I,EAAKxK,OAwBZ,CACA,IAAI7C,SAAEA,KAAaopB,GAAYtD,EAAS5c,GACxC,GAAI0c,MAAMC,QAAQ7lB,IAAaA,EAASoH,OAAS,EAAG,CAClD,IAAIiiB,EAAcgH,GAChBrwB,EACA+vB,EACAC,EACAC,EACAC,EACAC,GAEE9G,EAAYjiB,OAAS,GACvB+hB,EAAYG,KAAK,IAAKF,EAASppB,SAAUqpB,GAE5C,MACCF,EAAYG,KAAK,IAAKF,EAASjC,eAAgBiC,EAAQoI,aAE1D,CA5CmB,IAACnkB,EAtDJ6jB,EAAaC,EAadR,EAAUC,EAuF5B,OAAOzH,CAAW,ECxKPsI,GAAU,EACrB9Y,YACAiI,mBACApd,OACAkiB,UACAtM,eAAe,YACfrF,eAEA,MAAO2d,EAAMrM,GAAW1nB,EAAS,MAC1Bg0B,EAAenM,GAAoB7nB,EAAc,CAAE,IACnDi0B,EAAerM,GAAoB5nB,EAAS,IAE7CqyB,EAAWljB,GAAQ,KACvB,IAAI+kB,EAAalZ,GAAWuX,QAAQ4B,UAAUC,QAAU,GACxD,OAAInM,MAAMC,QAAQgM,IAAeA,EAAWzqB,QAAU,EAC7CyqB,EAAWrP,KAAKuD,GAAQA,EAAI/L,aAE5B,EACR,GACA,IAEGmW,EAAWrjB,GAAQ,KACvB,IAAIklB,EAAarZ,GAAWuX,QAAQC,UAAY,GAChD,OAAIvK,MAAMC,QAAQmM,IAAeA,EAAW5qB,QAAU,EAC7C4qB,EAAWxP,KAAKuD,GAAQA,EAAIkM,eAE5B,EACR,GACA,IACH,IAAIC,EAAc,CAAEpM,SAAUnN,EAAUoB,cACpCoY,EAA0BrC,GAC5BoC,EACAlB,OAAOrY,EAAUoX,MACjBC,EACArX,EAAUyZ,UACVzZ,EAAUuX,OACVC,GAGEkC,EAA0BvC,GAC5B,CACEjG,OAAQ,CAAE1B,IAAK,GAAIrpB,OAAQ,UAC3BgnB,SAAUxC,IAEZ0N,OAAOrY,EAAUoX,MACjBC,EACArX,EAAUyZ,UACVzZ,EAAUuX,OACVC,GAEF,MAAgB,WAATuB,EACL5xB,EAACypB,GAAoB,CACnBpE,SAAUkN,EACVzR,iBAAkBA,EAClBwE,WAAY5hB,EACZ6hB,QAASA,EACT3kB,MAAM,UACNgmB,KAAK,QACLhB,QAASA,EACTtM,aAAcA,EACdrF,SAAUA,IAED,kBAAT2d,EACF5xB,EAACypB,GAAoB,CACnBpE,SAAU,CACR0E,OAAQ,CAAE1B,IAAK,GAAIrpB,OAAQ,UAC3BgnB,SAAU8L,GAEZhR,iBAAkBA,EAClBwE,WAAY5hB,EACZ6hB,QAASA,EACT3kB,MAAOixB,GAAejxB,OAAS,UAC/BgmB,KAAK,QACL/lB,YAAagxB,GAAehxB,YAC5B+kB,QAASA,EACTtM,aAAcA,EACdrF,SAAUA,IAGZjU,EACE8G,EAAA,CAAA5G,SAAAF,EAAColB,GACC,CAAAC,SAAUgN,EACVvR,iBAAkBA,EAClBwE,WAAY5hB,EACZ6hB,QAASA,EACTC,UAAU,EACVC,iBAAkBA,EAClBC,iBAAkBA,EAClBE,QAASA,EACTtM,aAAcA,EACdrF,SAAUA,KAGf,ECpFUue,GAAiDjX,IAC5D,MAAMje,EAAU/D,KAChB,OACE6G,EAACqyB,EAAM,CACL3sB,QAAQ,YACRxI,QAAS,CACPo1B,MAAOvsB,EACL7I,EAAQylB,aACPxH,EAAM7X,MAAQpG,EAAQ2lB,mBAG3Bvf,KAAM6X,EAAM7X,KAEZxD,SAAA,CAAAF,EAAA,MAAA,CAAKS,UAAWnD,EAAQ8lB,cACxBpjB,EAAC2xB,OAAYpW,MAEf"}