@erpsquad/common 1.10.8-test → 1.10.9-test
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/chunks/{ai-summary-D9QajB4_.js → ai-summary-4NVNEHfi.js} +2 -2
- package/dist/chunks/{ai-summary-D9QajB4_.js.map → ai-summary-4NVNEHfi.js.map} +1 -1
- package/dist/chunks/{ai-summary-FqAUpafL.esm.js → ai-summary-f8clWLbW.esm.js} +65 -44
- package/dist/chunks/{ai-summary-FqAUpafL.esm.js.map → ai-summary-f8clWLbW.esm.js.map} +1 -1
- package/dist/chunks/{android-12-switch-BVabRCje.esm.js → android-12-switch-BUbQYnRQ.esm.js} +53 -35
- package/dist/chunks/{android-12-switch-BVabRCje.esm.js.map → android-12-switch-BUbQYnRQ.esm.js.map} +1 -1
- package/dist/chunks/android-12-switch-CphTHRb8.js +2 -0
- package/dist/chunks/{android-12-switch-DMaoWQwq.js.map → android-12-switch-CphTHRb8.js.map} +1 -1
- package/dist/chunks/{appbar-6Ucw59ku.js → appbar-C6Es9HGk.js} +2 -2
- package/dist/chunks/{appbar-6Ucw59ku.js.map → appbar-C6Es9HGk.js.map} +1 -1
- package/dist/chunks/{appbar-mDf1LZ0u.esm.js → appbar-CKrHdx9n.esm.js} +2 -2
- package/dist/chunks/{appbar-mDf1LZ0u.esm.js.map → appbar-CKrHdx9n.esm.js.map} +1 -1
- package/dist/chunks/{default-data-CwLgBvlI.esm.js → default-data-BsZWgQGR.esm.js} +3 -3
- package/dist/chunks/{default-data-CwLgBvlI.esm.js.map → default-data-BsZWgQGR.esm.js.map} +1 -1
- package/dist/chunks/{default-data-D2cqOmp4.js → default-data-Dsjlvwev.js} +2 -2
- package/dist/chunks/{default-data-D2cqOmp4.js.map → default-data-Dsjlvwev.js.map} +1 -1
- package/dist/chunks/{fullScreen-VlXxoepU.js → fullScreen-BBpaDn-A.js} +2 -2
- package/dist/chunks/{fullScreen-VlXxoepU.js.map → fullScreen-BBpaDn-A.js.map} +1 -1
- package/dist/chunks/{fullScreen-B9d2_kak.esm.js → fullScreen-Dn-3Tkwm.esm.js} +2 -2
- package/dist/chunks/{fullScreen-B9d2_kak.esm.js.map → fullScreen-Dn-3Tkwm.esm.js.map} +1 -1
- package/dist/chunks/index-B9CFxEZ9.js +2 -0
- package/dist/chunks/index-B9CFxEZ9.js.map +1 -0
- package/dist/chunks/{index-iPYNYnNP.esm.js → index-wf5q5BST.esm.js} +73 -66
- package/dist/chunks/{index-iPYNYnNP.esm.js.map → index-wf5q5BST.esm.js.map} +1 -1
- package/dist/chunks/{migration-utils-TYitNMC7.js → migration-utils-9IXhe_fj.js} +2 -2
- package/dist/chunks/{migration-utils-TYitNMC7.js.map → migration-utils-9IXhe_fj.js.map} +1 -1
- package/dist/chunks/{migration-utils-BRjncD-b.esm.js → migration-utils-DGoEzQUj.esm.js} +2 -2
- package/dist/chunks/{migration-utils-BRjncD-b.esm.js.map → migration-utils-DGoEzQUj.esm.js.map} +1 -1
- package/dist/chunks/{sidebar-DJREtRnK.js → sidebar-B3SExDRU.js} +2 -2
- package/dist/chunks/{sidebar-DJREtRnK.js.map → sidebar-B3SExDRU.js.map} +1 -1
- package/dist/chunks/{sidebar-D_3INLNa.esm.js → sidebar-n9Y25HU-.esm.js} +2 -2
- package/dist/chunks/{sidebar-D_3INLNa.esm.js.map → sidebar-n9Y25HU-.esm.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-CUf5Onkp.js → sidebarScreen-Dxb_e58p.js} +2 -2
- package/dist/chunks/{sidebarScreen-CUf5Onkp.js.map → sidebarScreen-Dxb_e58p.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-CLjYZOzQ.esm.js → sidebarScreen-_Zt2pSOx.esm.js} +3 -3
- package/dist/chunks/{sidebarScreen-CLjYZOzQ.esm.js.map → sidebarScreen-_Zt2pSOx.esm.js.map} +1 -1
- package/dist/components/index.esm.js +121 -103
- package/dist/components/index.js +1 -1
- package/dist/index.esm.js +218 -200
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/index.esm.js +2 -2
- package/dist/layout/index.js +1 -1
- package/dist/src/components/index.d.ts +18 -1
- package/dist/utils/index.esm.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/views/index.esm.js +5 -5
- package/dist/views/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/android-12-switch-DMaoWQwq.js +0 -2
- package/dist/chunks/index-BQ2NBHDS.js +0 -2
- package/dist/chunks/index-BQ2NBHDS.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appbar-mDf1LZ0u.esm.js","sources":["../../src/components/button/button.tsx","../../src/components/modal/modal.tsx","../../src/components/select/select-search.tsx","../../src/components/select/select.tsx","../../src/components/search-bar/search-bar.tsx","../../src/components/text-field/text-field.tsx","../../src/components/form-control/form-builder/form-builder-element/text.tsx","../../node_modules/@hookform/resolvers/yup/dist/yup.mjs","../../src/components/tooltip/Tooltip.tsx","../../src/components/confirm-modal/confirm-modal.tsx","../../src/components/toast/toast.tsx","../../src/components/avatar/avatar.tsx","../../src/components/activityArea/activityArea.tsx","../../src/components/reset-password-modal/reset-password-modal.tsx","../../src/components/header/components/notification-menu/notification-menu.tsx","../../src/components/header/header.tsx","../../src/components/appbar/appbar.tsx"],"sourcesContent":["import { Button as MUIButton, ButtonProps, styled } from '@mui/material';\r\n\r\nconst StyledButton = styled(MUIButton)(\r\n\t({ theme: { palette, } /* , variant */ }) => ({\r\n\t\tfontSize: '.875rem',\r\n\t\ttextTransform: 'none',\r\n\t\tminHeight: '0rem',\r\n\t\tminWidth: '0rem',\r\n\t\tpadding: '0.25rem .75rem',\r\n\t\tfontWeight: '500',\r\n\t\tlineHeight: '1.25rem',\r\n\t\tletterSpacing: '-0.01875rem',\r\n\r\n\t\t'&.MuiButton-startIcon': {\r\n\t\t\tbackgroundColor: 'red'\r\n\t\t},\r\n\r\n\t\t'&.MuiButton-contained': {\r\n\t\t\tbackgroundColor: palette.theme?.primary[700],\r\n\t\t\t// boxShadow: '0px 0px 2px 0px #E0E0E0, 0px 1px 4px -2px rgba(24, 39, 75, 0.02), 0px 4px 4px -2px rgba(24, 39, 75, 0.06)',\r\n\t\t\t'&:hover': {\r\n\t\t\t\tbackgroundColor: palette.theme?.primary[800]\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'&.MuiButton-outlined': {\r\n\t\t\tborder: 'none',\r\n\t\t\tboxShadow: '0px 0px 2px 0px #E0E0E0, 0px 1px 4px -2px rgba(24, 39, 75, 0.02), 0px 4px 4px -2px rgba(24, 39, 75, 0.06)',\r\n\t\t\tcolor: palette.theme?.primary[700]\r\n\t\t},\r\n\r\n\t\t'&.MuiButton-text': {\r\n\t\t\tcolor: palette.theme?.secondary[1000],\r\n\t\t\tbackgroundColor: 'white',\r\n\t\t\t'&:hover': {\r\n\t\t\t\tcolor: palette.theme?.primary[700]\r\n\t\t\t},\r\n\t\t\t'& .MuiButton-startIcon': {\r\n\t\t\t\t// background: palette.theme?.primary[400],\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'&.MuiButton-containedError': {\r\n\t\t\tbackgroundColor: palette.theme?.error[500],\r\n\t\t\t'&:hover': {\r\n\t\t\t\tbackgroundColor: palette.theme?.error[600]\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'&.Mui-disabled': {\r\n\t\t\topacity: 0.5\r\n\t\t}\r\n\t})\r\n);\r\n\r\nconst Button = (props: ButtonProps) => {\r\n\tconst { children, variant = 'contained', ...rest } = props;\r\n\r\n\treturn (\r\n\t\t<StyledButton variant={variant} {...rest}>\r\n\t\t\t{children}\r\n\t\t</StyledButton>\r\n\t);\r\n};\r\n\r\nexport { Button };\r\nexport default Button;\r\n","import { Dialog, DialogProps, styled } from \"@mui/material\";\r\n\r\nconst StyledDialog = styled(Dialog)(() => ({\r\n \".MuiDialog-paper\": {\r\n borderRadius: \"1rem\",\r\n },\r\n\r\n \".MuiDialogTitle-root\": {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n padding: \"0.5rem 1.5rem\",\r\n },\r\n\r\n \".MuiDialogContent-root\": {\r\n padding: \"1.5rem\",\r\n },\r\n\r\n \".MuiDialogActions-root\": {\r\n padding: \"0.5rem 1rem\",\r\n },\r\n}));\r\n\r\nconst Modal = ({ children, open, onClose, ...rest }: DialogProps) => {\r\n return (\r\n <StyledDialog open={open} onClose={onClose} {...rest}>\r\n {children}\r\n </StyledDialog>\r\n );\r\n};\r\n\r\nexport { Modal };\r\nexport default Modal;\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-imports */\r\nimport { InputAdornment, TextField, styled } from \"@mui/material\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport React, { forwardRef } from 'react';\r\n\r\nconst StyledSearch = styled(TextField)(({ theme: { palette } }) => ({\r\n padding: \"0rem 0.75rem 0.5rem 0.75rem\",\r\n borderBottom: `1px solid ${palette.theme?.secondary[200]}`,\r\n input: {\r\n padding: \"0.5rem 0rem\",\r\n },\r\n \".MuiOutlinedInput-notchedOutline\": {\r\n border: 0,\r\n },\r\n \"& .MuiOutlinedInput-root\": {\r\n fontSize: \"0.8125rem\",\r\n paddingLeft: \"0.5rem\",\r\n color: palette.theme?.secondary[800],\r\n // backgroundColor: palette.theme?.secondary[200],\r\n border: \"1px solid #F5F6F5\",\r\n borderRadius: \"0.5rem\",\r\n \":hover .MuiOutlinedInput-notchedOutline\": {\r\n border: 1,\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n border: 0,\r\n },\r\n },\r\n}));\r\n\r\nconst SelectSearch = forwardRef<HTMLInputElement, any>(\r\n ({ searchPlaceholder, handleSearch, value, ...rest }, ref) => (\r\n <StyledSearch\r\n inputRef={ref} // Attach the ref here for focusing\r\n placeholder={searchPlaceholder}\r\n onChange={handleSearch}\r\n value={value}\r\n fullWidth\r\n variant=\"outlined\"\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <SearchIcon fontSize=\"small\" />\r\n </InputAdornment>\r\n ),\r\n }}\r\n {...rest}\r\n />\r\n )\r\n);\r\n\r\nexport { SelectSearch };\r\nexport default SelectSearch;\r\n","/* eslint-disable no-mixed-spaces-and-tabs */\r\n\r\nimport {\r\n Box,\r\n\tCircularProgress,\r\n\tFormHelperText,\r\n\tSelect as MUISelect,\r\n\tstyled\r\n} from '@mui/material';\r\nimport Typography from '../typography/typography';\r\nimport SelectSearch from './select-search';\r\nimport { memo, useRef } from 'react';\r\nimport './controller/controller-select.scss'\r\nimport { ArrowDown } from '../icons';\r\nconst StyledSelect = styled(MUISelect)(({ theme: { palette } }) => ({\r\n\tcolor: palette.theme?.secondary[800],\r\n\tfontSize: ' 0.875rem',\r\n\t'.MuiOutlinedInput-notchedOutline': {\r\n\t\tborderColor: palette.theme?.secondary[300]\r\n\t},\r\n\t'&.Mui-focused .MuiOutlinedInput-notchedOutline': {\r\n\t\tborderWidth: '0.0625rem',\r\n\t\tborderColor: palette.theme?.primary[700]\r\n\t},\r\n\t'&.Mui-focused.Mui-error .MuiOutlinedInput-notchedOutline': {\r\n\t\tborderWidth: '0.0625rem',\r\n\t\tborderColor: palette.theme?.error[600]\r\n\t},\r\n\t'&:hover .MuiOutlinedInput-notchedOutline': {\r\n\t\tborderColor: palette.theme?.secondary[400]\r\n\t},\r\n\t'&.Mui-error:hover .MuiOutlinedInput-notchedOutline': {\r\n\t\tborderColor: palette.theme?.error[600]\r\n\t},\r\n\t'&.Mui-disabled': {\r\n\t\tbackground: palette.theme?.secondary[200],\r\n\t\tcolor: palette.theme?.secondary[800]\r\n\t},\r\n\r\n\t'.MuiMenuItem-root': {\r\n\t\tfontSize: '10px'\r\n\t},\r\n\t'&.Mui-error': {\r\n\t\tcolor: palette.theme?.error[600],\r\n\t\t'&fieldset': {\r\n\t\t\tborderColor: 'grey'\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nconst Select = memo((props: any) => {\r\n\tconst searchInputRef = useRef<HTMLInputElement>(null);\r\n\tconst {\r\n\t\tchildren,\r\n\t\tlabel,\r\n\t\thandleSearch,\r\n\t\tdataPosition,\r\n\t\tdataName,\r\n\t\tplaceholder,\r\n\t\tsearchPlaceholder,\r\n\t\trequired,\r\n\t\tsearchValue,\r\n\t\tfullWidth = false,\r\n\t\tonChange,\r\n\t\trenderValue,\r\n\t\terror,\r\n\t\thelperText,\r\n\t\tloading = false,\r\n\t\tCustomDropdownIcon = ArrowDown,\r\n\t\t...rest\r\n\t} = props;\r\n\r\n\t\r\n\tconst handleOpen = () => {\r\n setTimeout(() => {\r\n if (searchInputRef.current) {\r\n searchInputRef.current.focus(); // Focus the search input\r\n }\r\n }, 0);\r\n };\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{label && (\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tweight='medium'\r\n\t\t\t\t\tdata-position={dataPosition}\r\n\t\t\t\t\tdata-name={dataName}\r\n\t\t\t\t\tmb={0.5}\r\n\t\t\t\t\tcolor={error ? 'theme.error.600' : 'theme.secondary.800'}>\r\n\t\t\t\t\t{label} {required && <span style={{ color: '#c64d4d' }}>*</span>}\r\n\t\t\t\t</Typography>\r\n\t\t\t)}\r\n<StyledSelect\r\n IconComponent={(iconProps) => <CustomDropdownIcon {...iconProps} fontSize='small' />}\r\n MenuProps={{\r\n PaperProps: {\r\n sx: {\r\n maxHeight: 300, // Scrollable area for dropdown\r\n overflowY: 'auto',\r\n },\r\n },\r\n anchorOrigin: {\r\n vertical: 'bottom',\r\n horizontal: 'center',\r\n },\r\n }}\r\n displayEmpty\r\n fullWidth={fullWidth}\r\n renderValue={\r\n renderValue ??\r\n ((value: any) =>\r\n value !== '' ? (\r\n (value as any)\r\n ) : (\r\n <Typography color='inherit' type='s3'>\r\n {placeholder}\r\n </Typography>\r\n ))\r\n }\r\n onChange={onChange}\r\n error={error}\r\n\tonOpen={handleOpen} \r\n {...rest}\r\n>\r\n {handleSearch && (\r\n <Box\r\n sx={{\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1, // Ensure it's above the dropdown items\r\n backgroundColor: '#fff',\r\n // padding: '0.5rem',\r\n\t\t\t\tmargin: '-4px -4px 0 -4px',\r\n\t\t\t\tmb: 0.5\r\n }}\r\n >\r\n <SelectSearch\r\n\t\t\t\tref={searchInputRef}\r\n searchPlaceholder={searchPlaceholder}\r\n handleSearch={(e: any) => handleSearch(e.target.value)}\r\n value={searchValue}\r\n onClick={(e) => e.stopPropagation()}\r\n onKeyDown={(e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tif (props?.value) {\r\n\t\t\t\t\t\tsetTimeout(() => searchInputRef.current?.focus(), 0); \r\n\t\t\t\t\t}\r\n\t\t \t}}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tp: 1,\r\n\t\t\t\t}}\r\n />\r\n </Box>\r\n )}\r\n {loading ? (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n width: '100%',\r\n p: 2,\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <CircularProgress size={30} color='inherit' />\r\n </Box>\r\n ) : (\r\n children\r\n )}\r\n</StyledSelect>\r\n\r\n\t\t\t{helperText && <FormHelperText error={error}>{helperText}</FormHelperText>}\r\n\t\t</>\r\n\t);\r\n});\r\n\r\nexport { Select };\r\nexport default Select;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { debounce } from \"lodash\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport { SxProps, TextField, styled, Theme } from \"@mui/material\";\r\n// import images from \"../../assets/images\";\r\n\r\nimport \"./search-bar.scss\";\r\nimport { Search, SearchStatus } from \"../icons\";\r\n\r\nconst StyledSearch = styled(TextField)(({ theme: { palette } }) => ({\r\n \"&.MuiTextField-root\": {\r\n backgroundColor: palette.theme?.secondary[200],\r\n borderRadius: \"0.5rem\",\r\n padding: \"0.375rem 0.75rem\",\r\n },\r\n \"& .MuiOutlinedInput-input\": {\r\n fontSize: \"0.875rem\",\r\n padding: \"0rem\",\r\n paddingLeft: \"1.375rem\",\r\n },\r\n \".MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n}));\r\n\r\ninterface ISearchBar {\r\n placeholder?: string;\r\n handleSearch: (key: string) => void;\r\n debounceTime?: number;\r\n className?: string;\r\n InputProps?: any;\r\n sx?: SxProps<Theme>;\r\n isDrivePage?: boolean;\r\n searchText?:string\r\n}\r\n\r\nconst SearchBar = ({\r\n handleSearch,\r\n debounceTime = 300,\r\n className,\r\n InputProps,\r\n isDrivePage,\r\n searchText,\r\n value = '',\r\n ...rest\r\n}: ISearchBar) => {\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n\r\n const debouncedSearchRef = useRef<(value: string) => void>();\r\n\r\n // Set `searchTerm` from localStorage on mount and clear `localStorage` if needed\r\n useEffect(() => {\r\n const initialSearchTerm = isDrivePage ? localStorage.getItem(\"searchTerm\") || \"\" : \"\";\r\n setSearchTerm(initialSearchTerm);\r\n\r\n // Set `localStorage` to an empty string on the first render\r\n if (isDrivePage) {\r\n localStorage.setItem(\"searchTerm\", \"\");\r\n }\r\n }, [isDrivePage]);\r\n\r\n useEffect(() => {\r\n setSearchTerm((typeof searchText=='string' && searchText) || '')\r\n }, [searchText])\r\n\r\n // Initialize the debounced function only once\r\n useEffect(() => {\r\n debouncedSearchRef.current = debounce((value: string) => handleSearch(value), debounceTime);\r\n \r\n // Cleanup function to cancel debounced call on component unmount\r\n return () => {\r\n debouncedSearchRef.current?.cancel();\r\n };\r\n }, [handleSearch, debounceTime]);\r\n\r\n useEffect(() => {\r\n setSearchTerm(value || '')\r\n }, [])\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value;\r\n setSearchTerm(value);\r\n if (isDrivePage) {\r\n localStorage.setItem(\"searchTerm\", value);\r\n }\r\n\r\n // Call the debounced search function\r\n if (debouncedSearchRef.current) {\r\n debouncedSearchRef.current(value);\r\n }\r\n };\r\n\r\n const handleKeyDown = (event: any) => {\r\n event.stopPropagation();\r\n };\r\n\r\n const handleClick = (event: any) => {\r\n event.stopPropagation();\r\n };\r\n\r\n return (\r\n <div className={`${className} search-wrapper`}>\r\n <StyledSearch\r\n fullWidth\r\n className=\"s3\"\r\n value={searchTerm}\r\n onChange={handleChange}\r\n onKeyDown={handleKeyDown}\r\n onClick={handleClick}\r\n autoComplete=\"off\"\r\n InputProps={InputProps}\r\n {...rest}\r\n />\r\n <span className=\"search-icon\">\r\n {\r\n searchTerm ?\r\n <SearchStatus fontSize=\"small\" sx={{ color: searchTerm ? \"grey.900\": \"grey.700\" }}/> : \r\n <Search fontSize=\"small\" sx={{ color: searchTerm ? \"grey.900\": \"grey.700\" }}/>\r\n }\r\n </span>\r\n {/* <img src={images.search} alt=\"search icon\" /> */}\r\n </div>\r\n );\r\n};\r\n\r\nexport { SearchBar };\r\nexport default SearchBar;\r\n","import {\r\n TextField as MUITextField,\r\n // TextFieldProps,\r\n styled,\r\n} from \"@mui/material\";\r\nimport \"./text-field.scss\";\r\nimport Typography from \"../typography/typography\";\r\nimport { memo } from \"react\";\r\n\r\nconst StyledTextField = styled(MUITextField)(({ theme: { palette } }) => ({\r\n \"& .MuiOutlinedInput-root\": {\r\n padding: \"0\",\r\n color: palette.theme?.secondary[800],\r\n \"& fieldset\": {\r\n borderColor: palette.theme?.secondary[400],\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: palette.theme?.secondary[500],\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderWidth: \"0.0625rem\",\r\n borderStyle: \"solid\",\r\n borderColor: palette.theme?.primary[700],\r\n },\r\n \"&.Mui-error fieldset\": {\r\n borderColor: palette.theme?.error[600],\r\n },\r\n \"&.Mui-error .MuiInputBase-input::placeholder\": {\r\n color: palette.theme?.error[600],\r\n },\r\n \"&.Mui-disabled\": {\r\n background: palette.theme?.secondary[200],\r\n color: palette.theme?.secondary[800],\r\n },\r\n \"& .MuiInputBase-input::placeholder\": {\r\n color: palette.theme?.secondary[800],\r\n opacity: 1,\r\n },\r\n },\r\n \"& .MuiFormHelperText-root\": {\r\n marginLeft: 0,\r\n color: palette.theme?.secondary[800],\r\n \"&.Mui-error\": {\r\n color: palette.theme?.error[600],\r\n },\r\n },\r\n \"& .MuiIconButton-root\": {\r\n marginRight: 0,\r\n },\r\n}));\r\n\r\nconst TextField = memo((props: any) => {\r\n const {\r\n required,\r\n placeholder,\r\n label,\r\n error = false,\r\n dataPosition,\r\n dataName,\r\n hidden,\r\n ...rest\r\n } = props;\r\n return (\r\n <>\r\n {label && !hidden && (\r\n <Typography\r\n type=\"s5\"\r\n weight={\"medium\"}\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n data-position={dataPosition}\r\n data-name={dataName}\r\n >\r\n {label} {required && <span className=\"requiredStar\">*</span>}\r\n </Typography>\r\n )}\r\n <StyledTextField\r\n error={error}\r\n placeholder={placeholder}\r\n className=\"textfield\"\r\n hidden={hidden}\r\n {...rest}\r\n />\r\n </>\r\n );\r\n});\r\n\r\nexport { TextField };\r\nexport default TextField;\r\n","import { Controller } from \"react-hook-form\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport TextField from \"../../../text-field/text-field\";\r\n\r\nimport \"./element.scss\";\r\nimport { IconButton, InputAdornment } from \"@mui/material\";\r\nimport React from \"react\";\r\n\r\nconst DynamicInput = React.memo((props: any) => {\r\n\r\n return (\r\n <Controller\r\n control={props.formControl}\r\n name={`${props.fieldArrayName}.${props.name}`}\r\n // defaultValue={props.defaultValue || \"\"}\r\n render={({ field, fieldState }) => (\r\n <TextField\r\n {...field}\r\n dataPosition={props.position}\r\n dataName={`${props.fieldArrayName}.${props.name}`}\r\n fullWidth\r\n label={props.label}\r\n defaultValue={\r\n props.type === \"number\" ||\r\n props.type === \"currency\" ||\r\n props.type === \"geoLocation\"\r\n ? typeof props.defaultValue === 'string' ? props.defaultValue.replace(/[^0-9]/g, \"\") : props.defaultValue\r\n : props.defaultValue || \"\"\r\n }\r\n // value={props.formType === \"builder\" ? props.defaultValue : \"\"}\r\n placeholder={props.placeholder}\r\n // onChange={(e) => {\r\n // field.onChange(e);\r\n // props.formControl.fieldArrayDirty[props.fieldArrayName] = true;\r\n // }}\r\n type={\r\n props.type === \"currency\" ||\r\n props.type === \"geoLocation\" ||\r\n props.type === \"relation\"\r\n ? \"text\"\r\n : props.type || \"text\"\r\n }\r\n // value={\r\n // props.type === \"number\" && typeof field.value === 'number'\r\n // ? (props?.shouldApplyPrecission === false || ['exchange_rate'].includes(props.name)) ? field.value : field.value.toFixed(2)\r\n // : field.value || \"\"\r\n // }\r\n value={\r\n props.type === \"number\" && typeof field.value === 'number'\r\n ? (props?.shouldApplyPrecission === false || ['exchange_rate'].includes(props.name)) \r\n ? field.value \r\n : (() => {\r\n const step = props?.float_step\r\n const decimalPlaces = step && step !== 'any' \r\n ? (String(step).split('.')[1]?.length ?? 2)\r\n : 2\r\n console.log(\"+++++++\", field.value, decimalPlaces)\r\n return Number(field.value.toFixed(decimalPlaces)).toString()\r\n })()\r\n : field.value || \"\"\r\n }\r\n multiline={props.is_multiline || false}\r\n minRows={4}\r\n required={props.formType === \"builder\" ? false : props.required}\r\n // onChange={(e) => {\r\n // return;\r\n // }}\r\n InputProps={{\r\n // inputMode: 'numeric',\r\n // pattern: '[0-9]*',\r\n minLength: props.min || 1,\r\n // maxLength: props.max || 255,\r\n // step: props?.float_step || \"0\",\r\n endAdornment: props.endIcon ? (\r\n <InputAdornment position=\"end\">\r\n <IconButton edge=\"end\" onClick={props?.onIconClick}>\r\n {props.endIcon}\r\n </IconButton>\r\n </InputAdornment>\r\n ) : undefined,\r\n ...props.InputProps,\r\n }}\r\n inputProps={{\r\n step: props?.float_step || 'any',\r\n min: props.min_length || undefined,\r\n // max: props.max_length,\r\n }}\r\n disabled={props.disabled}\r\n hidden={props.hidden}\r\n error={Boolean(fieldState.error?.message)}\r\n helperText={fieldState.error?.message || \"\"}\r\n onBlur={(e: any) => {\r\n field.onBlur(e)\r\n if (props.onBlur && typeof props.onBlur === 'function') {\r\n props.onBlur(e)\r\n }\r\n }}\r\n />\r\n )}\r\n />\r\n );\r\n});\r\n\r\nDynamicInput.propTypes = {\r\n formControl: PropTypes.shape({\r\n register: PropTypes.func.isRequired,\r\n setValue: PropTypes.func,\r\n _formState: PropTypes.object.isRequired,\r\n }).isRequired,\r\n name: PropTypes.string.isRequired,\r\n placeholder: PropTypes.string.isRequired,\r\n label: PropTypes.node.isRequired,\r\n fieldArrayName: PropTypes.string,\r\n defaultValue: PropTypes.string,\r\n type: PropTypes.string,\r\n required: PropTypes.bool,\r\n is_multiline: PropTypes.bool,\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n min_length: PropTypes.number,\r\n max_length: PropTypes.number,\r\n float_step: PropTypes.string,\r\n position: PropTypes.number,\r\n formType: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n typeOfField: PropTypes.string,\r\n endIcon: PropTypes.node,\r\n onIconClick: PropTypes.func,\r\n onBlur: PropTypes.func, // This should be optional\r\n hidden: PropTypes.bool,\r\n InputProps: PropTypes.object,\r\n shouldApplyPrecission: PropTypes.bool\r\n};\r\nDynamicInput.defaultProps = {\r\n onBlur: () => { }\r\n};\r\n\r\n\r\n\r\n\r\nexport { DynamicInput };\r\nexport default DynamicInput;","import{validateFieldsNatively as e,toNestErrors as t}from\"@hookform/resolvers\";import{appendErrors as r}from\"react-hook-form\";function o(o,n,a){return void 0===n&&(n={}),void 0===a&&(a={}),function(s,i,c){try{return Promise.resolve(function(t,r){try{var u=(n.context&&\"development\"===process.env.NODE_ENV&&console.warn(\"You should not used the yup options context. Please, use the 'useForm' context object instead\"),Promise.resolve(o[\"sync\"===a.mode?\"validateSync\":\"validate\"](s,Object.assign({abortEarly:!1},n,{context:i}))).then(function(t){return c.shouldUseNativeValidation&&e({},c),{values:a.raw?s:t,errors:{}}}))}catch(e){return r(e)}return u&&u.then?u.then(void 0,r):u}(0,function(e){if(!e.inner)throw e;return{values:{},errors:t((o=e,n=!c.shouldUseNativeValidation&&\"all\"===c.criteriaMode,(o.inner||[]).reduce(function(e,t){if(e[t.path]||(e[t.path]={message:t.message,type:t.type}),n){var o=e[t.path].types,a=o&&o[t.type];e[t.path]=r(t.path,n,e,t.type,a?[].concat(a,t.message):t.message)}return e},{})),c)};var o,n}))}catch(e){return Promise.reject(e)}}}export{o as yupResolver};\n//# sourceMappingURL=yup.module.js.map\n","import { Tooltip as MUITooltip, TooltipProps } from \"@mui/material\";\n\nconst Tooltip = ({ title, children, sx, ...rest }: TooltipProps) => {\n return (\n <MUITooltip\n componentsProps={{\n tooltip: {\n sx: {\n padding: \"0.5rem 0.75rem\",\n backgroundColor: \"#393B3E\",\n maxWidth: \"12rem\",\n '& .MuiTooltip-arrow': {\n color: \"#393B3E\"\n },\n ...sx\n },\n },\n }}\n title={title}\n {...rest}\n >\n {children}\n </MUITooltip>\n );\n};\n\nexport { Tooltip };\nexport default Tooltip;\n","import {\n\tBox,\n\tCircularProgress,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogProps,\n\tDialogTitle,\n\tDivider,\n\tIconButton\n} from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Typography from '../typography/typography';\nimport Button from '../button/button';\nimport './confirm-modal.scss';\nimport images from '../../assets/images';\nimport { useLanguage } from '../../hooks/useLangauge';\nimport { useTranslation } from 'react-i18next';\n\ninterface ConfirmPopUpProps extends DialogProps {\n\ttitle: string;\n\tdescription: string | JSX.Element;\n\tonClose: () => void;\n\tonConfirm: () => void;\n\tbuttonTexts?: {\n\t\tconfirm: string;\n\t\tcancel: string;\n\t};\n\tbuttonColors?: {\n\t\tconfirm: string;\n\t\tcancel?: string;\n\t};\n\tmodalType?: 'alert' | 'info';\n\tloading?: boolean;\n\tshowAction?: boolean;\n}\n\nexport const ConfirmPopUp = (props: ConfirmPopUpProps) => {\n\tconst { t } = useTranslation();\n\tconst {\n\t\topen,\n\t\ttitle,\n\t\tdescription,\n\t\tonClose,\n\t\tonConfirm,\n\t\tmodalType = 'alert',\n\t\tbuttonTexts = { confirm: t('common.delete'), cancel: t('common.cancel') },\n\t\tbuttonColors = { confirm: 'error' },\n\t\tloading = false,\n\t\tshowAction=true,\n\t\t...rest\n\t} = props;\n\n\tconst icon = modalType === 'info' ? images.info : images.alert;\n const {isRtl}=useLanguage();\n\treturn (\n\t\t<>\n\t\t\t<Dialog open={open} onClose={onClose} className='confirm' {...rest}>\n\t\t\t\t<DialogTitle className='confirm--head'>\n\t\t\t\t\t<Box className='confirm--title'>\n\t\t\t\t\t\t<img src={icon} alt='alert icon' />{' '}\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\tml={1}\n\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\tcolor='theme.secondary.1000'>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t\t<IconButton disableRipple onClick={onClose} disabled={loading}>\n\t\t\t\t\t\t<CloseIcon />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</DialogTitle>\n\t\t\t\t<Divider />\n\t\t\t\t<DialogContent className='confirm--content'>\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Typography>\n\t\t\t\t</DialogContent>\n\t\t\t\t<Divider />\n\t\t\t\t{showAction &&<DialogActions\n\t\t\t\t\tclassName='confirm--actions'\n\t\t\t\t\tsx={{ backgroundColor: 'theme.secondary.200' }}>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant='text'\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\tcolor={buttonColors?.cancel}\n\t\t\t\t\t\tdisabled={loading}>\n\t\t\t\t\t\t{buttonTexts.cancel}\n\t\t\t\t\t</Button>\n\t\t\t\t{buttonTexts.confirm &&<Button\n\t\t\t\t\t\tcolor={buttonColors.confirm}\n\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\tsx={isRtl?{mr: 1}:{}}\n\t\t\t\t\t\tendIcon={loading && <CircularProgress size={18} color='inherit' />}\n\t\t\t\t\t\tdisabled={loading}>\n\t\t\t\t\t\t{buttonTexts.confirm}\n\t\t\t\t\t</Button>}\n\t\t\t\t</DialogActions>}\n\t\t\t</Dialog>\n\t\t</>\n\t);\n};\n\nexport default ConfirmPopUp;\n","import Close from \"@mui/icons-material/Close\";\r\nimport {\r\n Alert as MUIAlert,\r\n IconButton,\r\n Snackbar,\r\n SnackbarProps,\r\n styled,\r\n} from \"@mui/material\";\r\nimport WarningAmberIcon from \"@mui/icons-material/WarningAmber\";\r\nimport CheckCircleOutlineIcon from \"@mui/icons-material/CheckCircleOutline\";\r\nimport \"./toast.scss\";\r\nimport Typography from \"../typography/typography\";\r\n\r\ninterface IToast extends SnackbarProps {\r\n handleClose: () => void;\r\n type?: \"normal\" | \"alert\";\r\n handleUndo?: () => void;\r\n}\r\n\r\nconst StyledAlert = styled(MUIAlert)(({ theme: { palette } }) => ({\r\n color: \"white\",\r\n height: \"2.5rem\",\r\n padding: \"0rem 1rem\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n\r\n \"&.MuiAlert-standardWarning\": {\r\n backgroundColor: palette.theme?.error[600],\r\n },\r\n\r\n \"&.MuiAlert-standardInfo\": {\r\n backgroundColor: palette.theme?.secondary[900],\r\n },\r\n\r\n \".MuiAlert-action\": {\r\n padding: \"0rem\",\r\n marginLeft: \"0.5rem\",\r\n },\r\n\r\n \".MuiAlert-icon\": {\r\n marginRight: \"0.5rem\",\r\n },\r\n}));\r\n\r\nconst Toast = (props: IToast) => {\r\n const {\r\n open,\r\n message,\r\n type = \"alert\",\r\n handleUndo,\r\n handleClose,\r\n ...rest\r\n } = props;\r\n\r\n const action = (\r\n <>\r\n {handleUndo ? (\r\n <Typography\r\n className=\"toast-undo\"\r\n type=\"s4\"\r\n color={type === \"normal\" ? \"theme.primary.600\" : \"white\"}\r\n onClick={handleUndo}\r\n >\r\n Undo\r\n </Typography>\r\n ) : (\r\n <IconButton color=\"inherit\" className=\"icon\" onClick={handleClose}>\r\n <Close fontSize=\"inherit\" />\r\n </IconButton>\r\n )}\r\n </>\r\n );\r\n\r\n return (\r\n <>\r\n <Snackbar\r\n open={open}\r\n autoHideDuration={300000}\r\n onClose={handleClose}\r\n {...rest}\r\n >\r\n <StyledAlert\r\n action={action}\r\n onClose={handleClose}\r\n severity={type === \"normal\" ? \"info\" : \"warning\"}\r\n icon={\r\n type === \"normal\" ? (\r\n <CheckCircleOutlineIcon htmlColor=\"white\" className=\"icon\" />\r\n ) : (\r\n <WarningAmberIcon htmlColor=\"white\" className=\"icon\" />\r\n )\r\n }\r\n >\r\n <Typography color=\"inherit\" type=\"s4\">\r\n {message}\r\n </Typography>\r\n </StyledAlert>\r\n </Snackbar>\r\n </>\r\n );\r\n};\r\n\r\nexport { Toast };\r\nexport default Toast;\r\n","import { Avatar as AvatarMUI, SvgIcon } from \"@mui/material\";\nimport Person2OutlinedIcon from \"@mui/icons-material/Person2Outlined\";\nimport \"./avatar.scss\";\n\nexport const Avatar = (props: any) => {\n const { icon, badge, src, alt, size, altIcon, ...rest } = props;\n const avatarStyle = {\n height: size,\n width: size,\n };\n\n const fontSize = size * (alt && alt.split(\" \").length > 1 ? 0.025 : 0.035);\n const badgeSize = size * 0.0225;\n const badgeBorder = size * 0.004;\n let altFirstChar = \"\";\n\n if (alt && alt.length > 0) {\n const words = alt.split(\" \");\n altFirstChar = words.map((word: string) => word.charAt(0)).join(\"\");\n }\n\n return (\n <div className=\"Avatar\">\n <AvatarMUI\n alt={alt}\n src={src ? src : undefined}\n style={avatarStyle}\n {...rest}\n >\n {icon && (!src || (alt && alt.length === 0)) && (\n <>\n {altIcon ? (\n <SvgIcon>{altIcon}</SvgIcon>\n ) : (\n <Person2OutlinedIcon\n style={{ fontSize: `${fontSize + 0.8}rem` }}\n />\n )}\n </>\n )}\n {!icon && !src && (\n <span\n className=\"Avatar--FirstChar\"\n style={{ fontSize: `${fontSize}rem` }}\n >\n {altFirstChar}\n </span>\n )}\n </AvatarMUI>\n\n {badge && (\n <div\n className=\"Avatar--Badge\"\n style={{\n width: `${badgeSize}rem`,\n height: `${badgeSize}rem`,\n border: `${badgeBorder}rem solid #ffffff`,\n }}\n />\n )}\n </div>\n );\n};\n\nexport default Avatar;\n","import Box from \"@mui/material/Box\";\r\nimport \"./activityArea.scss\";\r\n\r\nexport const ActivityArea = (props: any) => {\r\n return (\r\n <Box\r\n className=\"main-wrapper\"\r\n component=\"main\"\r\n width={\"100%\"}\r\n // sx={{ flexGrow: 1, p: 3, flexWrap: \"wrap\" }}\r\n marginTop=\"4.6875rem\"\r\n >\r\n {props.children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ActivityArea;\r\n","import { useState } from \"react\";\r\nimport Modal from \"../modal/modal\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { LoginFormValues } from \"../../contexts/AuthContext\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport * as Yup from \"yup\";\r\nimport { useAuth } from \"../../hooks/useAuth\";\r\nimport { styled } from '@mui/material/styles';\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"../typography/typography\";\r\nimport DynamicInput from \"../form-control/form-builder/form-builder-element/text\";\r\nimport { Eye, EyeOff } from \"../icons\";\r\nimport Button from \"../button/button\";\r\nimport Toast from \"../toast/toast\";\r\n\r\n\r\nconst validationSchema = Yup.object({\r\n login: Yup.object({\r\n current_password: Yup.string().required(\"Please enter current password\"),\r\n password: Yup.string()\r\n .required(\"Please enter password\")\r\n .min(8, \"Password must be at least 8 characters\")\r\n .matches(/[A-Z]/, \"Password must contain at least one uppercase letter\")\r\n .matches(/[!@#$%^&*(),.?\":{}|<>]/, \"Password must contain at least one special character\"),\r\n confirm_password: Yup.string().required(\"Please enter confirm password\").oneOf([Yup.ref('password')], \"Passwords must match\"),\r\n }),\r\n});\r\n\r\n\r\n\r\nconst ResetPasswordModal = ({showModal, setShowModal}) => {\r\n const { changeUserPassword } = useAuth();\r\n\r\n // const [showModal, setShowModal] = useState(false);\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n interface FormValeus {\r\n login: LoginFormValues;\r\n }\r\n\r\n const { control, handleSubmit, trigger } = useForm<FormValeus>({\r\n resolver: yupResolver(validationSchema),\r\n mode: \"all\",\r\n });\r\n\r\n const onSubmit = async (values: FormValeus) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await changeUserPassword(values.login, (message, type) => {\r\n if (type) {\r\n setToast({ message: message, type: \"normal\" });\r\n setShowModal(false);\r\n } else {\r\n setToast({ message: message, type: \"alert\" });\r\n }\r\n // make logout\r\n });\r\n return values; \r\n };\r\n\r\n const [showPassword, setShowPassword] = useState<boolean>(false);\r\n const handleShowPassword = () => setShowPassword(!showPassword);\r\n\r\n const [showCurrentPassword, setShowCurrentPassword] = useState<boolean>(false);\r\n const handleShowCurrentPassword = () => setShowCurrentPassword(!showCurrentPassword);\r\n\r\n const [showConfirmPassword, setShowConfirmPassword] = useState<boolean>(false);\r\n const handleShowConfirmPassword = () => setShowConfirmPassword(!showConfirmPassword);\r\n\r\n const FlexBox = styled(Box)(() => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }));\r\n\r\n return (\r\n <>\r\n <Modal \r\n open={showModal}\r\n onClose={() => setShowModal(false)} \r\n children={\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <FlexBox gap={4} className=\"popup-change-pass\">\r\n <FlexBox gap={2}>\r\n <Box>\r\n <Typography\r\n align=\"center\"\r\n type=\"h1\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n Change Password\r\n </Typography>\r\n <Typography\r\n align=\"center\"\r\n type=\"h5\"\r\n weight=\"normal\"\r\n color=\"theme.secondary81000\"\r\n >\r\n Enter Details below\r\n </Typography>\r\n </Box>\r\n <FlexBox gap={2}>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Current Password\"\r\n name=\"current_password\"\r\n type={showCurrentPassword ? \"text\" : \"password\"}\r\n placeholder=\"Enter Current Password\"\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showCurrentPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowCurrentPassword}\r\n />\r\n </Box>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Password\"\r\n name=\"password\"\r\n type={showPassword ? \"text\" : \"password\"}\r\n placeholder=\"Enter Password\"\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowPassword}\r\n />\r\n </Box>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Confirm Password\"\r\n name=\"confirm_password\"\r\n type={showConfirmPassword ? \"text\" : \"password\"}\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showConfirmPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowConfirmPassword} \r\n placeholder=\"Enter confirm password\"\r\n />\r\n </Box>\r\n </FlexBox>\r\n </FlexBox>\r\n <FlexBox gap={2}>\r\n <Button type=\"button\" onClick={handleSubmit(onSubmit)} size=\"large\" variant=\"contained\">\r\n Change Password\r\n </Button>\r\n </FlexBox>\r\n </FlexBox>\r\n </form> \r\n </>\r\n }\r\n />\r\n <Toast\r\n open={Boolean(toast)}\r\n message={toast?.message}\r\n type={toast?.type}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n autoHideDuration={3000}\r\n />\r\n </>\r\n );\r\n}\r\n\r\nexport { ResetPasswordModal };\r\nexport default ResetPasswordModal;","import React, { useState, useCallback, useRef, useEffect } from 'react'\r\nimport {\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tBadge,\r\n\tBox,\r\n\tCircularProgress,\r\n\tAvatar,\r\n\tListItemText,\r\n\tListItemAvatar,\r\n\tAlert,\r\n\tSkeleton,\r\n} from '@mui/material'\r\nimport {\r\n\tPerson as PersonIcon,\r\n\tEmail as EmailIcon,\r\n\tWarning as WarningIcon,\r\n\tCheckCircle as CheckCircleIcon,\r\n\tAssignment as AssignmentIcon,\r\n\tAccountBalance as AccountBalanceIcon,\r\n\tHourglassEmpty as HourglassEmptyIcon,\r\n\tCancel as CancelIcon,\r\n} from '@mui/icons-material'\r\nimport {\r\n\tgetV1Notification,\r\n\tgetV1NotificationMarkAllAsRead,\r\n\tpatchV1NotificationMarkAsReadId,\r\n} from '../../../../api-client/api.system-feature/api'\r\nimport { getErrorMessage, getToken } from '../../../../utils/common'\r\nimport formatText, { convertToUnderscore, formatLabel } from '../../../../utils/format-text'\r\nimport Typography from '../../../typography/typography'\r\nimport images from '../../../../assets/images'\r\nimport { generateRouteWithId } from '../../../../utils/route-utils'\r\nimport { PathnameGenerator, PathnameAccounting } from '../../../../constants/pathnames/pathname.accounting'\r\nimport { ROUTES as RENTALROUTES } from '../../../../constants/pathnames/pathname.rental'\r\n\r\nimport { PathnameInventory, PathnameGenerator as PathnameGeneratorInventory } from '../../../../constants/pathnames/pathname.inventory'\r\n\r\nimport {\r\n\tPathnameManufacturing,\r\n\tPathnameGenerator as PathnameGeneratorManufacuring,\r\n} from '../../../../constants/pathnames/pathname.manufacturing.ts'\r\n\r\nimport {\r\n\tPathnamePurchase,\r\n\tPathnameGenerator as PathnameGeneratorPurchase,\r\n} from '../../../../constants/pathnames/pathname.procurement.ts'\r\n\r\nimport { PathnameCrm, PathnameGenerator as PathnameGeneratorCrm } from '../../../../constants/pathnames/pathname.crm.ts'\r\n\r\nimport { PathnameRental, PathnameGenerator as PathnameGeneratorRental } from '../../../../constants/pathnames/pathname.rental.ts'\r\n\r\nimport { useNavigate } from 'react-router-dom'\r\nimport { Notification, Tick } from '../../../icons'\r\nimport Button from '../../../button/button'\r\nimport { enqueueSnackbar } from 'notistack'\r\n\r\nconst getNotificationUrl = (data: any) => {\r\n\tconst { moduleName = '', moduleId = '', notificationData = {} } = data\r\n\tconst key = convertToUnderscore(moduleName)\r\n\r\n\tconst routeMap: Record<string, () => string> = {\r\n\t\tsales_invoice: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_SALES_INVOICES), moduleId.toString()),\r\n\r\n\t\tasset_transfers: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_ASSET_TRANSFER), moduleId.toString()),\r\n\r\n\t\tbudgets: () => generateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_BUDGET), moduleId.toString()),\r\n\r\n\t\tcash_expense: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_CASH_EXPENSE), moduleId.toString()),\r\n\r\n\t\tcredit_notes: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_CREDIT_NOTE), moduleId.toString()),\r\n\r\n\t\tdebit_notes: () => generateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_DEBIT_NOTE), moduleId.toString()),\r\n\r\n\t\texpense_reimbursement: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_EXPENSE_REIMBURSEMENT), moduleId.toString()),\r\n\r\n\t\tjournal_entries: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_JOURNAL_ENTRY), moduleId.toString()),\r\n\r\n\t\tpayment_entries: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_PAYMENT_ENTRY), moduleId.toString()),\r\n\r\n\t\tpurchase_invoice: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_PURCHASE_INVOICE), moduleId.toString()),\r\n\r\n\t\tstock_transfer: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorInventory(PathnameInventory.VIEW_STOCK_TRANSFER), moduleId.toString()),\r\n\r\n\t\tbills_of_materials: () =>\r\n\t\t\tgenerateRouteWithId(\r\n\t\t\t\tPathnameGeneratorManufacuring(PathnameManufacturing.VIEW_BILL_OF_MATERIAL),\r\n\t\t\t\tmoduleId.toString()\r\n\t\t\t),\r\n\r\n\t\tpurchase_agreement: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_AGREEMENT), moduleId.toString()),\r\n\r\n\t\tpurchase_orders: () =>\r\n\t\t\tgenerateRouteWithId(\r\n\t\t\t\tnotificationData?.data?.is_rental == 1\r\n\t\t\t\t\t? RENTALROUTES.VIEW\r\n\t\t\t\t\t: PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_ORDER),\r\n\t\t\t\tmoduleId.toString()\r\n\t\t\t),\r\n\r\n\t\tpurchase_request: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_ORDER), moduleId.toString()),\r\n\r\n\t\tvra: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_VENDOR_RETURNS), moduleId.toString()),\r\n\r\n\t\tsales_customer_returns: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorCrm(PathnameCrm.VIEW_CUSTOMER_RETURNS), moduleId.toString()),\r\n\r\n\t\tsales_order: () => generateRouteWithId(PathnameGeneratorCrm(PathnameCrm.VIEW_SALES_ORDER), moduleId.toString()),\r\n\r\n\t\trental_order: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_RENTAL_ORDER), moduleId.toString()),\r\n\r\n\t\treplacement_order: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_RENTAL_ORDER), moduleId.toString()),\r\n\r\n\t\trental_agreement: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_AGREEMENT), moduleId.toString()),\r\n\r\n\t\tcross_hire_order: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_CROSS_HIRE_ORDER), moduleId.toString()),\r\n\r\n\t\tcross_hire_request: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_CROSS_HIRE_REQUEST), moduleId.toString()),\r\n\t}\r\n\r\n\treturn routeMap[key]?.() || '/dashboard'\r\n}\r\n\r\nconst mainModuleIcons = {\r\n\trbac: images.user,\r\n\tdocument: images.document,\r\n\t'accounts-and-finance': images.accounting,\r\n\tinventory: images.inventory,\r\n\tmanufacturing: images.manufacturing,\r\n\tsales: images.crm,\r\n\trental: images.rental,\r\n\tuser: images.user,\r\n\tpurchase: images.procurement,\r\n\thrms: images.hrms,\r\n}\r\nconst mainModuleBgColors = {\r\n\trbac: '#F3E5F5',\r\n\tdocument: '#FFF8E1',\r\n\t'accounts-and-finance': '#E8F5E8',\r\n\tinventory: '#E3F2FD',\r\n\tmanufacturing: '#FFF3E0',\r\n\tsales: '#F3E5F5',\r\n\trental: '#E8F5E8',\r\n\tuser: '#F3E5F5',\r\n\tpurchase: '#FCE4EC',\r\n\thrms: '#fcfcfc',\r\n}\r\n\r\nconst NotificationMenu = () => {\r\n\tconst [anchorEl, setAnchorEl] = useState(null)\r\n\tconst [notifications, setNotifications] = useState([])\r\n\tconst [loading, setLoading] = useState(false)\r\n\tconst [loadingMore, setLoadingMore] = useState(false)\r\n\tconst [error, setError] = useState(null)\r\n\tconst [unreadCount, setUnreadCount] = useState(0)\r\n\tconst [markingAllAsRead, setMarkingAllAsRead] = useState(false)\r\n\tconst [pagination, setPagination] = useState({\r\n\t\tskip: 0,\r\n\t\tlimit: 10,\r\n\t\ttotalCount: 0,\r\n\t\thasMore: true,\r\n\t})\r\n\r\n\tconst navigate = useNavigate()\r\n\r\n\tconst menuRef = useRef(null)\r\n\tconst isLoadingMoreRef = useRef(false)\r\n\tconst open = Boolean(anchorEl)\r\n\r\n\t// Transform API notification to display format\r\n\tconst transformNotification = (apiNotification) => {\r\n\t\tconst moduleIcons = {\r\n\t\t\t'accounts-and-finance': <AccountBalanceIcon color=\"primary\" />,\r\n\t\t\tuser: <PersonIcon color=\"action\" />,\r\n\t\t\tapproval: <AssignmentIcon color=\"warning\" />,\r\n\t\t}\r\n\r\n\t\tconst getInitials = (performedUser) => {\r\n\t\t\tif (!performedUser) return null\r\n\t\t\tconst firstName = performedUser.first_name || ''\r\n\t\t\tconst lastName = performedUser.last_name || ''\r\n\t\t\tif (!firstName && !lastName) return null\r\n\t\t\treturn (firstName.charAt(0) + lastName.charAt(0)).toUpperCase()\r\n\t\t}\r\n\r\n\t\tconst getFullName = (performedUser) => {\r\n\t\t\tif (!performedUser) return null\r\n\t\t\tconst firstName = performedUser.first_name || ''\r\n\t\t\tconst lastName = performedUser.last_name || ''\r\n\t\t\treturn `${firstName} ${lastName}`.trim() || null\r\n\t\t}\r\n\r\n\t\tconst formatTimestamp = (dateString) => {\r\n\t\t\tconst date = new Date(dateString)\r\n\t\t\tconst now = new Date()\r\n\t\t\tconst diffMs = now - date\r\n\t\t\tconst diffMins = Math.floor(diffMs / 60000)\r\n\t\t\tconst diffHours = Math.floor(diffMs / 3600000)\r\n\t\t\tconst diffDays = Math.floor(diffMs / 86400000)\r\n\r\n\t\t\tif (diffMins < 1) return 'Just now'\r\n\t\t\tif (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? 's' : ''} ago`\r\n\t\t\tif (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`\r\n\t\t\tif (diffDays < 7) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`\r\n\t\t\treturn date.toLocaleDateString()\r\n\t\t}\r\n\r\n\t\tconst subData = apiNotification.sub_module_data || {}\r\n\r\n\t\treturn {\r\n\t\t\tid: apiNotification.id,\r\n\t\t\ttype: apiNotification.action || apiNotification.notification_type || 'info',\r\n\t\t\ttitle: formatText(apiNotification.title),\r\n\t\t\tmessage: apiNotification.message,\r\n\t\t\ttimestamp: formatTimestamp(apiNotification.created_at),\r\n\t\t\tread: apiNotification.status === 'read',\r\n\t\t\tavatar: getInitials(apiNotification.performed_user),\r\n\t\t\tperformedByName: getFullName(apiNotification.performed_user),\r\n\t\t\tmodule: apiNotification.module,\r\n\t\t\tsubModule: apiNotification.sub_module,\r\n\t\t\tsubModuleId: apiNotification.sub_module_id,\r\n\t\t\tstatus: apiNotification.status,\r\n\t\t\tseriesNumber: subData.series_number || null,\r\n\t\t\tdocumentStatus: subData.status || null,\r\n\t\t\tcustomerName: subData.customer_name || null,\r\n\t\t\ticon: moduleIcons[apiNotification.module] || moduleIcons[apiNotification.action] || <PersonIcon color=\"action\" />,\r\n\t\t}\r\n\t}\r\n\r\n\t// Fetch notifications with pagination\r\n\tconst fetchNotifications = useCallback(async (isLoadMore = false) => {\r\n\t\t// Prevent multiple simultaneous load more requests\r\n\t\tif (isLoadMore && isLoadingMoreRef.current) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (isLoadMore) {\r\n\t\t\tisLoadingMoreRef.current = true\r\n\t\t\tsetLoadingMore(true)\r\n\t\t} else {\r\n\t\t\tsetLoading(true)\r\n\t\t\t// Reset pagination when loading fresh data\r\n\t\t\tsetPagination((prev) => ({\r\n\t\t\t\t...prev,\r\n\t\t\t\tskip: 0,\r\n\t\t\t\thasMore: true,\r\n\t\t\t}))\r\n\t\t}\r\n\t\tsetError(null)\r\n\r\n\t\ttry {\r\n\t\t\tconst currentSkip = isLoadMore ? pagination.skip : 0\r\n\t\t\tconst response = await getV1Notification({\r\n\t\t\t\tskip: currentSkip,\r\n\t\t\t\tlimit: pagination.limit,\r\n\t\t\t\t...getToken(),\r\n\t\t\t})\r\n\r\n\t\t\tif (response.success && response.data) {\r\n\t\t\t\tconst transformedNotifications = response.data.notifications.map(transformNotification)\r\n\r\n\t\t\t\tif (isLoadMore) {\r\n\t\t\t\t\tsetNotifications((prev) => [...prev, ...transformedNotifications])\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetNotifications(transformedNotifications)\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Update pagination\r\n\t\t\t\tconst newSkip = currentSkip + response.data.notifications.length\r\n\t\t\t\tconst hasMore = newSkip < response.data.pagination.totalCount\r\n\r\n\t\t\t\tsetPagination((prev) => ({\r\n\t\t\t\t\t...prev,\r\n\t\t\t\t\tskip: newSkip,\r\n\t\t\t\t\ttotalCount: response.data.pagination.totalCount,\r\n\t\t\t\t\thasMore,\r\n\t\t\t\t}))\r\n\r\n\t\t\t\t// Calculate unread count (assuming 'pending' status means unread)\r\n\t\t\t\tif (!isLoadMore) {\r\n\t\t\t\t\tconst unread = response.data.pagination.unreadCount\r\n\t\t\t\t\tsetUnreadCount(unread)\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tsetUnreadCount(0)\r\n\t\t\t\tthrow new Error(response.message || 'Failed to load notifications')\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\tsetError('Failed to load notifications')\r\n\t\t} finally {\r\n\t\t\tsetLoading(false)\r\n\t\t\tsetLoadingMore(false)\r\n\t\t\tif (isLoadMore) {\r\n\t\t\t\tisLoadingMoreRef.current = false\r\n\t\t\t}\r\n\t\t}\r\n\t}, [pagination.limit, pagination.skip])\r\n\r\n\t// Handle scroll for infinite loading\r\n\tconst handleScroll = useCallback(\r\n\t\t(event) => {\r\n\t\t\tconst { scrollTop, scrollHeight, clientHeight } = event.target\r\n\t\t\tconst isNearBottom = scrollTop + clientHeight >= scrollHeight - 50 // Increased threshold\r\n\r\n\t\t\tif (isNearBottom && !isLoadingMoreRef.current && !loading && pagination.hasMore) {\r\n\t\t\t\tfetchNotifications(true)\r\n\t\t\t}\r\n\t\t},\r\n\t\t[fetchNotifications, loading, pagination.hasMore]\r\n\t)\r\n\r\n\tconst handleClick = (event) => {\r\n\t\tsetAnchorEl(event.currentTarget)\r\n\t\tif (notifications.length === 0) {\r\n\t\t\tfetchNotifications()\r\n\t\t}\r\n\t}\r\n\r\n\tconst handleClose = () => {\r\n\t\tsetAnchorEl(null)\r\n\r\n\t\t// Don't clear notifications immediately to avoid flickering\r\n\t\t// They will be refreshed when menu is opened again\r\n\t}\r\n\r\n\tconst handleNotificationClick = async (notificationId) => {\r\n\t\t// Mark notification as read\r\n\t\tconst n = notifications.find((n) => {\r\n\t\t\treturn n.id === notificationId\r\n\t\t})\r\n\t\tif (!n) return\r\n\r\n\t\thandleClose()\r\n\r\n\t\tif (n.status === 'pending') {\r\n\t\t\tawait patchV1NotificationMarkAsReadId({\r\n\t\t\t\tid: notificationId,\r\n\t\t\t\t...getToken(),\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tsetNotifications((prev) => prev.map((n) => (n.id === notificationId ? { ...n, read: true } : n)))\r\n\t\tsetUnreadCount((prev) => Math.max(0, prev - 1))\r\n\t\tconst url = getNotificationUrl({\r\n\t\t\tmoduleName: n.subModule,\r\n\t\t\tmoduleId: n.subModuleId,\r\n\t\t\tnotificationData: n,\r\n\t\t})\r\n setTimeout(() => {\r\n navigate(url)\r\n }, 300)\r\n\t}\r\n\r\n\tconst getNotificationIcon = (notification) => {\r\n\t\tif (notification.icon) {\r\n\t\t\treturn notification.icon\r\n\t\t}\r\n\r\n\t\tswitch (notification.type) {\r\n\t\t\tcase 'approval':\r\n\t\t\t\treturn <AssignmentIcon color=\"warning\" />\r\n\t\t\tcase 'user':\r\n\t\t\t\treturn <PersonIcon color=\"action\" />\r\n\t\t\tcase 'message':\r\n\t\t\t\treturn <EmailIcon color=\"primary\" />\r\n\t\t\tcase 'warning':\r\n\t\t\t\treturn <WarningIcon color=\"warning\" />\r\n\t\t\tcase 'success':\r\n\t\t\t\treturn <CheckCircleIcon color=\"success\" />\r\n\t\t\tdefault:\r\n\t\t\t\treturn <PersonIcon color=\"action\" />\r\n\t\t}\r\n\t}\r\n\r\n\tconst handleMarkAllAsRead = useCallback(async () => {\r\n\t\tif (markingAllAsRead) return // Prevent multiple calls\r\n\r\n\t\tsetMarkingAllAsRead(true)\r\n\r\n\t\tif (!unreadCount) {\r\n\t\t\tenqueueSnackbar('No unread notifications!')\r\n\t\t\tsetMarkingAllAsRead(false)\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tawait getV1NotificationMarkAllAsRead({ ...getToken() })\r\n\t\t\t// Update local state immediately for better UX\r\n\t\t\tsetNotifications((prev) => prev.map((n) => ({ ...n, read: true, status: 'read' })))\r\n\t\t\tsetUnreadCount(0)\r\n\t\t} catch (error) {\r\n\t\t\tconst m = getErrorMessage(error.message)\r\n\t\t\tenqueueSnackbar(m, { variant: 'error' })\r\n\t\t} finally {\r\n\t\t\tsetMarkingAllAsRead(false)\r\n\t\t}\r\n\t}, [markingAllAsRead, unreadCount])\r\n\r\n\t// Remove the problematic useEffect that was causing extra API calls\r\n\r\n useEffect(() => {\r\n if(!open) {\r\n setTimeout(() => {\r\n setNotifications([])\r\n }, 500)\r\n }\r\n }, [open])\r\n\r\n\tconst getPerformerLabel = (action: string) => {\r\n\t\tswitch (action?.toLowerCase()) {\r\n\t\t\tcase 'approved':\r\n\t\t\t\treturn 'Approved by'\r\n\t\t\tcase 'rejected':\r\n\t\t\tcase 'reject':\r\n\t\t\t\treturn 'Rejected by'\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'Request to'\r\n\t\t}\r\n\t}\r\n\r\n\tconst getStatusIcon = (action: string) => {\r\n\t\tswitch (action?.toLowerCase()) {\r\n\t\t\tcase 'approved':\r\n\t\t\t\treturn <CheckCircleIcon sx={{ fontSize: '0.9rem', color: 'success.main' }} />\r\n\t\t\tcase 'rejected':\r\n\t\t\tcase 'reject':\r\n\t\t\t\treturn <CancelIcon sx={{ fontSize: '0.9rem', color: 'error.main' }} />\r\n\t\t\tdefault:\r\n\t\t\t\treturn <HourglassEmptyIcon sx={{ fontSize: '0.9rem', color: 'warning.main' }} />\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Box>\r\n\t\t\t<IconButton\r\n\t\t\t\t// size=\"small\"\r\n\t\t\t\taria-label=\"notifications\"\r\n\t\t\t\taria-controls={open ? 'notification-menu' : undefined}\r\n\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\taria-expanded={open ? 'true' : undefined}\r\n\t\t\t\tonClick={handleClick}\r\n\t\t\t>\r\n\t\t\t\t<Badge badgeContent={unreadCount} color=\"error\">\r\n\t\t\t\t\t<Notification fontSize=\"medium\" />\r\n\t\t\t\t</Badge>\r\n\t\t\t</IconButton>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tid=\"notification-menu\"\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={open}\r\n\t\t\t\tonClose={handleClose}\r\n\t\t\t\tref={menuRef}\r\n\t\t\t\tslotProps={{\r\n\t\t\t\t\tpaper: {\r\n\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\toverflow: 'visible',\r\n\t\t\t\t\t\t\tminWidth: 400,\r\n\t\t\t\t\t\t\tmaxWidth: 450,\r\n\t\t\t\t\t\t\tmaxHeight: 520,\r\n\t\t\t\t\t\t\t'&:before': {\r\n\t\t\t\t\t\t\t\tcontent: '\"\"',\r\n\t\t\t\t\t\t\t\tdisplay: 'block',\r\n\t\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\tright: '50%',\r\n\t\t\t\t\t\t\t\twidth: 10,\r\n\t\t\t\t\t\t\t\theight: 10,\r\n\t\t\t\t\t\t\t\tbgcolor: 'background.paper',\r\n\t\t\t\t\t\t\t\ttransform: 'translateY(-50%) translateX(50%) rotate(45deg)',\r\n\t\t\t\t\t\t\t\tzIndex: 0,\r\n\t\t\t\t\t\t\t\tborder: '1px solid',\r\n\t\t\t\t\t\t\t\tborderColor: ({ palette }) => palette.grey[300],\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t}}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\t'& .MuiList-root': {\r\n\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\tmaxHeight: 520,\r\n\t\t\t\t\t\toverflowY: 'auto',\r\n\t\t\t\t\t\tpadding: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t}}\r\n\t\t\t\ttransformOrigin={{ horizontal: 'center', vertical: 'top' }}\r\n\t\t\t\tanchorOrigin={{ horizontal: 'center', vertical: 'bottom' }}\r\n\t\t\t\tonScroll={handleScroll}\r\n\t\t\t>\r\n\t\t\t\t{/* Header */}\r\n\t\t\t\t<Box sx={{ px: 2, py: 1, borderBottom: '1px solid #e0e0e0', backgroundColor: '#fafafa' }}>\r\n\t\t\t\t\t<Typography type=\"h5\" weight=\"bold\" color=\"grey.1000\">\r\n\t\t\t\t\t\tNotifications\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t{unreadCount > 0 && (\r\n\t\t\t\t\t\t<Box sx={{ display: 'flex', justifyContent: 'space-between', width: '100%', alignItems: 'center' }}>\r\n\t\t\t\t\t\t\t<Typography type=\"s4\" color=\"grey.800\">\r\n\t\t\t\t\t\t\t\tYou have {unreadCount} unread notification{unreadCount > 1 ? 's' : ''}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant=\"text\"\r\n\t\t\t\t\t\t\t\tstartIcon={\r\n\t\t\t\t\t\t\t\t\tmarkingAllAsRead ? (\r\n\t\t\t\t\t\t\t\t\t\t<CircularProgress size={15} color=\"inherit\" />\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Tick sx={{ fontSize: '0.75rem !important' }} color=\"grey.900\" />\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tsx={{ p: 0 }}\r\n\t\t\t\t\t\t\t\tonClick={handleMarkAllAsRead}\r\n\t\t\t\t\t\t\t\tdisabled={unreadCount <= 0 || markingAllAsRead}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Typography type=\"s4\" color=\"grey.900\">\r\n\t\t\t\t\t\t\t\t\tMark all as read\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{/* Loading State */}\r\n\t\t\t\t{loading && notifications.length === 0 && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\tflexDirection: 'column',\r\n\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\tjustifyContent: 'center',\r\n\t\t\t\t\t\t\t\tminWidth: 400,\r\n\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\tm: 1,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'grey.200',\r\n\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\r\n\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={40} height={40} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={25} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={150} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\tflexDirection: 'column',\r\n\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\tjustifyContent: 'center',\r\n\t\t\t\t\t\t\t\tminWidth: 400,\r\n\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\tm: 1,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'grey.200',\r\n\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\r\n\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={40} height={40} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={25} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={150} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\tflexDirection: 'column',\r\n\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\tjustifyContent: 'center',\r\n\t\t\t\t\t\t\t\tminWidth: 400,\r\n\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\tm: 1,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'grey.200',\r\n\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\r\n\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={40} height={40} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={25} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={150} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{/* Error State */}\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<Box sx={{ p: 2 }}>\r\n\t\t\t\t\t\t<Alert severity=\"error\">{error}</Alert>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{/* Notifications List */}\r\n\t\t\t\t{!loading && !error && notifications.length > 0 && (\r\n\t\t\t\t\t<Box sx={{ maxHeight: 420, overflowY: 'auto', p: 1 }} onScroll={handleScroll}>\r\n\t\t\t\t\t\t{notifications.map((notification) => (\r\n\t\t\t\t\t\t\t<div key={notification.id}>\r\n\t\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\t\tonClick={() => handleNotificationClick(notification.id)}\r\n\t\t\t\t\t\t\t\t\tsx={({ palette }) => ({\r\n\t\t\t\t\t\t\t\t\t\tpy: 1,\r\n\t\t\t\t\t\t\t\t\t\tpx: 1,\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: !notification.read ? palette.theme.grey[200] : 'transparent',\r\n\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${palette.grey[200]}`,\r\n\t\t\t\t\t\t\t\t\t\tmarginBottom: '4px !important',\r\n\t\t\t\t\t\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: palette.theme.grey[200],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\talignItems: 'flex-start',\r\n\t\t\t\t\t\t\t\t\t\tminHeight: 'auto',\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<ListItemAvatar sx={{ minWidth: 48, mt: 0 }}>\r\n\t\t\t\t\t\t\t\t\t\t{mainModuleIcons?.[notification.module] ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 40,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: 40,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: '0.875rem',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: mainModuleBgColors[notification.module] || 'primary.main',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'white',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t'& img': {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: '28px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: '28px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tobjectFit: 'contain',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={mainModuleIcons?.[notification.module]}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{notification.avatar ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 40,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 40,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: '0.875rem',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'primary.main',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'white',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.avatar}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Avatar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 36,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 36,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'grey.600',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getNotificationIcon(notification)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Avatar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</ListItemAvatar>\r\n\t\t\t\t\t\t\t\t\t<ListItemText\r\n\t\t\t\t\t\t\t\t\t\tsx={{ margin: 0, pr: 1 }}\r\n\t\t\t\t\t\t\t\t\t\tprimary={\r\n\t\t\t\t\t\t\t\t\t\t\t// Line 1: title seriesNumber statusIcon\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap', mb: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s3\" weight=\"bold\" color=\"grey.1000\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.title}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{notification.seriesNumber && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s4\" sx={{ color: 'text.secondary', fontWeight: 500 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.seriesNumber}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{getStatusIcon(notification.type)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tsecondary={\r\n\t\t\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Line 2: Customer / Vendor label + name */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{notification.customerName && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s4\" color=\"grey.800\" sx={{ display: 'block', mb: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography component=\"span\" type=\"s5\" sx={{ fontSize: '0.7rem !important', color: 'text.secondary', mr: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.module === 'purchase' ? 'Vendor:' : 'Customer:'}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.customerName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Line 3: Approved by {name} · timestamp */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.performedByName && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s5\" sx={{ fontSize: '0.7rem !important', color: 'text.secondary' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getPerformerLabel(notification.type)} {notification.performedByName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.performedByName && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ height: 4, width: 4, borderRadius: '100%', backgroundColor: 'grey.400', flexShrink: 0 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s5\" color=\"primary\" sx={{ fontSize: '0.65rem !important' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.timestamp}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t{!notification.read && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: 10,\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: 10,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '50%',\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'primary.main',\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmt: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t))}\r\n\r\n\t\t\t\t\t\t{/* Loading More Indicator */}\r\n\t\t\t\t\t\t{loadingMore && (\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', justifyContent: 'center', py: 2.5, px: 3 }}>\r\n\t\t\t\t\t\t\t\t<CircularProgress size={20} />\r\n\t\t\t\t\t\t\t\t<Typography variant=\"body2\" sx={{ ml: 1.5, color: 'text.secondary' }}>\r\n\t\t\t\t\t\t\t\t\tLoading more...\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{/* End of List Indicator */}\r\n\t\t\t\t\t\t{!pagination.hasMore && notifications.length > 0 && (\r\n\t\t\t\t\t\t\t<Box sx={{ textAlign: 'center', py: 1.5, px: 2 }}>\r\n\t\t\t\t\t\t\t\t<Typography type=\"s3\" color=\"grey.800\" textAlign=\"center\">\r\n\t\t\t\t\t\t\t\t\tNo more notifications\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{/* Empty State */}\r\n\t\t\t\t{!loading && !error && notifications.length === 0 && (\r\n\t\t\t\t\t<Box sx={{ p: 4, textAlign: 'center' }}>\r\n\t\t\t\t\t\t<Notification sx={{ fontSize: 56, color: 'text.secondary', mb: 2 }} />\r\n\t\t\t\t\t\t<Typography type=\"s1\" color=\"grey.800\" sx={{ mb: 1 }} textAlign=\"center\">\r\n\t\t\t\t\t\t\tNo notifications yet\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\t\t</Box>\r\n\t)\r\n}\r\n\r\nexport { NotificationMenu };\r\nexport default NotificationMenu\r\n","// components/header/Header.tsx - Complete updated version with English fallback\r\nimport React, { useState, useCallback, useMemo } from \"react\";\r\nimport { Link, matchRoutes, useLocation, useNavigate } from \"react-router-dom\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport LockIcon from \"@mui/icons-material/Lock\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport Menu from \"@mui/material/Menu\";\r\nimport KeyboardBackspaceIcon from \"@mui/icons-material/KeyboardBackspace\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\r\n\r\n\r\nimport { Pathname } from \"../../constants/pathnames/pathname\"; // Removed - should be passed as props\r\nimport Typography from \"../typography/typography\";\r\nimport logo, { images } from \"../../assets/images\";\r\nimport Select from \"../select/select\";\r\nimport modules from \"../../constants/modules\"; // Removed - should be passed as props\r\nimport Avatar from \"../avatar/avatar\";\r\nimport { useAuth } from \"../../hooks/useAuth\";\r\nimport ConfirmPopUp from \"../confirm-modal/confirm-modal\";\r\nimport formatText from \"../../utils/format-text\";\r\nimport \"./header.scss\";\r\nimport { useLanguage } from \"../../hooks/useLangauge\";\r\nimport { Eye } from \"../icons\";\r\nimport ResetPasswordModal from \"../reset-password-modal/reset-password-modal\";\r\nimport NotificationMenu from \"./components/notification-menu/notification-menu\";\r\nimport { getApiConfig } from \"@/utils\";\r\n\r\ninterface ILanguage {\r\n label: string;\r\n code: string;\r\n direction: string;\r\n}\r\n\r\ninterface IModule {\r\n label: any;\r\n link: string;\r\n sidebar: string;\r\n icon: string;\r\n permission: string;\r\n bg: string;\r\n connectedRoutes: string[];\r\n translationModule: string;\r\n}\r\n\r\n\r\nexport function Header(props: any): React.ReactElement {\r\n const navigate = useNavigate();\r\n const { t } = useTranslation();\r\n const location = useLocation();\r\n const { logout, user } = useAuth();\r\n const config = getApiConfig();\r\n\r\n const {\r\n languages,\r\n currentLanguage,\r\n changeLanguage,\r\n isLoading: languagesLoading,\r\n error: languageContextError,\r\n isFallbackActive,\r\n fetchLanguages,\r\n isRtl\r\n } = useLanguage();\r\n\r\n const { pathname } = location;\r\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\r\n const [logoutConfirmation, setLogoutConfirmation] = useState<boolean>(false);\r\n const [localLanguageError, setLocalLanguageError] = useState<string | null>(null);\r\n const [showModal, setShowModal] = useState(false);\r\n\r\n const u_data = localStorage.getItem(\"_u_data\") || undefined;\r\n const userData = u_data ? JSON.parse(u_data) : \"\";\r\n const isMenuOpen = Boolean(anchorEl);\r\n\r\n const handleLogoutConfirmation = () =>\r\n setLogoutConfirmation(!logoutConfirmation);\r\n\r\n const checkMatchedRoutes = useCallback(\r\n (paths: string[] | string) => {\r\n const shouldMatch: { path: string }[] = Array.isArray(paths)\r\n ? paths.map((path: string) => ({ path }))\r\n : [{ path: paths }];\r\n\r\n return Boolean(matchRoutes(shouldMatch, location));\r\n },\r\n [location],\r\n );\r\n\r\n const erp_modules = useMemo<IModule[]>(() => modules(t), [t]);\r\n\r\n const selectedModule = useMemo<IModule | null>(() => {\r\n return (\r\n erp_modules.find(\r\n (module: IModule) =>\r\n module?.link?.toLowerCase() === pathname.toLowerCase() ||\r\n checkMatchedRoutes(module.connectedRoutes),\r\n ) || null\r\n );\r\n }, [erp_modules, pathname, checkMatchedRoutes]);\r\n\r\n const handleChangePasswordView = () => {\r\n setShowModal(true);\r\n }\r\n\r\n // Enhanced language change handler with validation and error handling\r\n const onChangeLang = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const lang_code = e.target.value;\r\n\r\n // Clear any previous errors\r\n setLocalLanguageError(null);\r\n\r\n // Validate the language exists before changing\r\n if (!languages || languages.length === 0) {\r\n const errorMsg = t('header.language_not_available') || 'Languages not available';\r\n setLocalLanguageError(errorMsg);\r\n return;\r\n }\r\n\r\n const languageExists = languages.some((lang: ILanguage) => lang.code === lang_code);\r\n\r\n if (languageExists) {\r\n try {\r\n changeLanguage(lang_code);\r\n } catch (error) {\r\n const errorMsg = error instanceof Error ? error.message : 'Failed to change language';\r\n setLocalLanguageError(errorMsg);\r\n }\r\n } else {\r\n const errorMsg = t('header.language_not_found', { language: lang_code }) ||\r\n `Selected language \"${lang_code}\" is not available`;\r\n setLocalLanguageError(errorMsg);\r\n }\r\n };\r\n\r\n // Retry language loading\r\n const handleRetryLanguages = async () => {\r\n setLocalLanguageError(null);\r\n try {\r\n await fetchLanguages();\r\n } catch (error) {\r\n const errorMsg = 'Failed to reload languages';\r\n setLocalLanguageError(errorMsg);\r\n }\r\n };\r\n\r\n\r\n const handleProfileMenuOpen = (event: React.MouseEvent<HTMLElement>) =>\r\n setAnchorEl(event.currentTarget);\r\n\r\n const handleMenuClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleChange = (event: any) => {\r\n const selectedLink = event.target.value;\r\n setTimeout(() => {\r\n navigate(selectedLink);\r\n }, 300);\r\n };\r\n\r\n const handleBackButton = () => {\r\n window.history.back();\r\n };\r\n\r\n // Get current language display value with fallback indication\r\n const getCurrentLanguageDisplay = (): string => {\r\n if (!currentLanguage) return t('header.select_language') || 'Select Language';\r\n\r\n // Show fallback indicator for better UX\r\n if (isFallbackActive || languageContextError) {\r\n return `${currentLanguage.label}`;\r\n }\r\n\r\n return currentLanguage.label;\r\n };\r\n\r\n // Create English fallback for consistent display\r\n const createEnglishFallback = (): ILanguage => ({\r\n code: 'en',\r\n label: 'English',\r\n direction: 'ltr'\r\n });\r\n\r\n // Get languages for dropdown - ensure English is always available\r\n const getLanguagesForDropdown = (): ILanguage[] => {\r\n if (!languages || languages.length === 0) {\r\n // If no languages available, show only English\r\n return [createEnglishFallback()];\r\n }\r\n\r\n // Ensure English is in the list\r\n const hasEnglish = languages.some(lang => lang.code === 'en');\r\n if (!hasEnglish) {\r\n return [createEnglishFallback(), ...languages];\r\n }\r\n\r\n return languages;\r\n };\r\n\r\n // Render language selector based on different states\r\n const renderLanguageSelector = () => {\r\n const availableLanguages = getLanguagesForDropdown();\r\n const displayValue = currentLanguage?.code || 'en'; // Default to English\r\n\r\n // Loading state\r\n if (languagesLoading) {\r\n return (\r\n <Box className=\"language-loading\">\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n {'Loading...'}\r\n </Typography>\r\n </Box>\r\n );\r\n }\r\n\r\n // Always show dropdown with at least English available\r\n return (\r\n <Select\r\n onChange={onChangeLang}\r\n size=\"small\"\r\n value={displayValue}\r\n renderValue={() => getCurrentLanguageDisplay()}\r\n error={!!localLanguageError}\r\n className={`language-select ${isFallbackActive || languageContextError ? 'language-fallback-active' : ''}`}\r\n\r\n >\r\n {availableLanguages.map(({ code, label }: ILanguage) => (\r\n <MenuItem key={code} value={code}>\r\n <Typography\r\n type=\"s4\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n\r\n >\r\n {label}\r\n {/* Show fallback indicator in dropdown */}\r\n {/* {(isFallbackActive || languageContextError) && code === 'en' && \r\n ` (${t('header.fallback') || 'Fallback'})`\r\n } */}\r\n </Typography>\r\n </MenuItem>\r\n ))}\r\n\r\n {/* Show retry option if there's an error */}\r\n {languageContextError && (\r\n <MenuItem onClick={handleRetryLanguages} style={{ fontStyle: 'italic' }}>\r\n <Typography\r\n type=\"s4\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.500\"\r\n >\r\n 🔄 {t('header.retry_languages') || 'Retry loading languages'}\r\n </Typography>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n );\r\n };\r\n\r\n const menuId = \"primary-search-account-menu\";\r\n const renderMenu = (\r\n <Menu\r\n className=\"main-profile-menu\"\r\n anchorEl={anchorEl}\r\n id={menuId}\r\n keepMounted\r\n open={isMenuOpen}\r\n onClose={handleMenuClose}\r\n >\r\n <MenuItem className=\"user-assigned\">\r\n <span>{t('common.assigned_roles') || 'Assigned roles'}</span>\r\n </MenuItem>\r\n <MenuItem className=\"user-data-wrap\" value={userData.role_id}>\r\n <ListItemIcon>\r\n <Avatar size={27} alt={userData.role_name} />\r\n </ListItemIcon>\r\n <ListItemText className=\"size15\">\r\n {userData.role_name}\r\n </ListItemText>\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n <img src={images.tickicon} alt=\"Active\" />\r\n </Typography>\r\n </MenuItem>\r\n <Divider />\r\n <MenuItem\r\n className=\"user-assigned\"\r\n onClick={() => {\r\n handleChangePasswordView();\r\n setAnchorEl(null);\r\n }}\r\n >\r\n <ListItemIcon>\r\n <Eye fontSize=\"medium\" width={20} height={20} htmlColor=\"#292D32\" />\r\n </ListItemIcon>\r\n <ListItemText className=\"size15\">{t(\"common.change_password\")}</ListItemText>\r\n </MenuItem>\r\n <Divider />\r\n <MenuItem\r\n className=\"menu-item-color\"\r\n onClick={() => {\r\n handleLogoutConfirmation();\r\n setAnchorEl(null);\r\n }}\r\n >\r\n <ListItemIcon>\r\n <img src={images.logout} alt=\"logout\" />\r\n </ListItemIcon>\r\n <ListItemText className=\"size15\">{t(\"common.logout\")}</ListItemText>\r\n </MenuItem>\r\n </Menu>\r\n );\r\n\r\n const appLogo = getApiConfig().appLogo || images.logo\r\n\r\n return (\r\n <>\r\n <Box className=\"main-box\">\r\n {!props.isDropdownShow && (\r\n <Link to={user ? Pathname.DASHBOARD : Pathname.LOGIN}>\r\n <img src={appLogo} alt=\"logo\" height={55}/>\r\n </Link>\r\n )}\r\n <Box className=\"second-box\">\r\n {props.isDropdownShow && (\r\n <>\r\n <IconButton onClick={handleBackButton}>\r\n <KeyboardBackspaceIcon\r\n className={isRtl ? \"arrow-pointer_rtl\" : \"arrow-pointer\"}\r\n />\r\n </IconButton>\r\n <Box width={250}>\r\n <Select\r\n fullWidth\r\n placeholder=\"Placeholder\"\r\n size={\"small\"}\r\n value={selectedModule?.link || \"\"}\r\n onChange={handleChange}\r\n className=\"select-box\"\r\n variant=\"outlined\"\r\n renderValue={(value: string) => (\r\n <>\r\n {selectedModule ? (\r\n <Box className=\"selected-menu-box\">\r\n <img\r\n src={selectedModule.icon}\r\n alt={selectedModule.label}\r\n />\r\n {selectedModule.label}\r\n </Box>\r\n ) : (\r\n value\r\n )}\r\n </>\r\n )}\r\n >\r\n {erp_modules.map((module: any, index: number) => (\r\n <MenuItem\r\n className=\"select-box-menu-item\"\r\n value={module.link}\r\n key={index}\r\n >\r\n <img src={module.icon} alt={module.label} />\r\n {module.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Box>\r\n </>\r\n )}\r\n </Box>\r\n <Box className=\"header-right-wrap\">\r\n {/* Language Selector with Enhanced Fallback Support */}\r\n <Box className=\"language-selector-wrapper\">\r\n {renderLanguageSelector()}\r\n </Box>\r\n\r\n {/* <IconButton\r\n size=\"small\"\r\n aria-label=\"notification bell\"\r\n className=\"p-0\"\r\n >\r\n <img src={logo.notification} alt=\"notification icon\" />\r\n </IconButton> */}\r\n <NotificationMenu />\r\n <IconButton\r\n size=\"small\"\r\n aria-label=\"help\"\r\n className=\"p-0\"\r\n >\r\n <img src={logo.question} alt=\"question icon\" />\r\n </IconButton>\r\n <img src={logo.vdivider} alt=\"divider icon\" />\r\n {localStorage.getItem(\"_tid\") ? (\r\n <Box className=\"user-profile-box\" onClick={handleProfileMenuOpen}>\r\n <Avatar\r\n size={32}\r\n src={user?.profile_image ? `${config?.s3BucketUrl}${user?.profile_image}` : undefined}\r\n alt={formatText(user?.full_name)}\r\n className=\"avatar-class\"\r\n />\r\n <div>\r\n <Typography className=\"profile-name\">\r\n {user?.full_name}\r\n </Typography>\r\n <Typography className=\"user-auth\">\r\n {user?.role_name}\r\n </Typography>\r\n </div>\r\n </Box>\r\n ) : (\r\n <IconButton\r\n size=\"large\"\r\n edge=\"end\"\r\n aria-label=\"account of current user\"\r\n aria-controls={menuId}\r\n aria-haspopup=\"true\"\r\n component={Link}\r\n to={Pathname.LOGIN}\r\n color=\"inherit\"\r\n >\r\n <LockIcon className=\"icon-btn\" />\r\n </IconButton>\r\n )}\r\n </Box>\r\n {renderMenu}\r\n </Box>\r\n\r\n {/* Logout Confirmation Dialog */}\r\n <ConfirmPopUp\r\n open={logoutConfirmation}\r\n title={t(\"common.logout\")}\r\n description={t('common.logout_confirmation') || \"Are you sure, you want to logout?\"}\r\n onConfirm={() => logout()}\r\n onClose={handleLogoutConfirmation}\r\n fullWidth\r\n maxWidth=\"xs\"\r\n buttonTexts={{\r\n confirm: t(\"common.logout\"),\r\n cancel: t(\"common.cancel\"),\r\n }}\r\n />\r\n\r\n <ResetPasswordModal showModal={showModal} setShowModal={setShowModal} />\r\n\r\n </>\r\n );\r\n}\r\n\r\nexport default Header;","import { styled } from \"@mui/material/styles\";\nimport MuiAppBar, { AppBarProps as MuiAppBarProps } from \"@mui/material/AppBar\";\nimport Toolbar from \"@mui/material/Toolbar\";\n// import MenuIcon from \"@mui/icons-material/Menu\";\nimport IconButton from \"@mui/material/IconButton\";\n\n// import { Box, FormControl, FormControlLabel, FormLabel, Radio, RadioGroup, ThemeProvider } from '@mui/material';\n\nimport Header from \"../header/header\";\n// import ThemeSelector from \"../../utils/themeSelector\";\n\nimport \"./appbar.scss\";\nimport images from \"../../assets/images\";\n// import { Box } from \"@mui/material\";\n\nlet drawerWidth: any;\n\ninterface AppBarProps extends MuiAppBarProps {\n open?: boolean;\n}\n\n// const getTheme = (selectedTheme: any) => {\n// switch (selectedTheme) {\n// case ThemeSelector.PRIMARY:\n// return themes.redStone;\n// case ThemeSelector.SECONDARY:\n// return themes.blueNavy;\n// case ThemeSelector.TERTIARY:\n// return themes.oliveGreen;\n// default:\n// return themes.redStone;\n// }\n// };\n\nconst AppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => prop !== \"open\",\n})<AppBarProps>(({ theme, open }) => ({\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n ...(open && {\n marginLeft: document.body.dir === \"ltr\" ? drawerWidth : 0,\n marginRight: document.body.dir === \"rtl\" ? drawerWidth : 0,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n boxShadow: \"none\",\n}));\n\nexport const AppBarWrapper = (props: any) => {\n drawerWidth = props.width;\n\n // const handleThemeChange = (e: any) => setSelectedTheme(e.target.value);\n\n return (\n <AppBar\n position=\"fixed\"\n open={props?.open}\n sx={(theme) => ({\n borderBottom: \"1px solid\",\n borderColor: theme.palette.theme?.secondary[200],\n backgroundColor: theme.palette.theme?.secondary[100],\n })}\n >\n {/* <FormControl>\n <FormLabel id=\"theme-radio-buttons-group-label\">Theme</FormLabel>\n <RadioGroup\n row\n value={selectedTheme}\n onChange={handleThemeChange}\n aria-labelledby=\"theme-radio-buttons-group-label\"\n name=\"row-radio-buttons-group\"\n >\n {Object.keys(ThemeSelector)?.map((variant: any, index: any) => (\n <FormControlLabel\n key={index}\n value={ThemeSelector[variant]}\n control={<Radio />}\n label={ThemeSelector[variant]}\n sx={{\n '.MuiFormControlLabel-label': {\n color: 'theme.text',\n },\n }}\n />\n ))}\n </RadioGroup>\n </FormControl> */}\n <Toolbar sx={{ backgroundColor: 'grey.100'}}>\n {props?.handleDrawerOpen ? (\n <>\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n // onClick={props.handleDrawerOpen}\n edge=\"start\"\n sx={{\n marginRight: 5,\n ...(props.open && { display: \"none\" }),\n }}\n >\n {/* <MenuIcon sx={{ color: \"theme.secondary.1000\" }} /> */}\n <img src={images.favicon} height={30} width={30}></img>\n </IconButton>\n {/* {!props.open && ( \n <Box marginRight={5}>\n <img src={images.favicon} height={30} width={30}></img>\n </Box>\n )} */}\n <Header isDropdownShow={true} />\n </>\n ) : (\n <>\n <Header isDropdownShow={false} />\n </>\n )}\n </Toolbar>\n {/* <Header /> */}\n </AppBar>\n );\n};\n\nexport default AppBarWrapper;\n"],"names":["MUIButton","StyledSearch","TextField","MUISelect","value","MUITextField","React","_a","o","t","e","n","a","r","MUITooltip","CloseIcon","MUIAlert","AvatarMUI","Box","yupResolver","styled","PathnameGenerator","PathnameGeneratorInventory","PathnameGeneratorManufacuring","PathnameGeneratorPurchase","RENTALROUTES","PathnameGeneratorCrm","PathnameGeneratorRental","AccountBalanceIcon","PersonIcon","AssignmentIcon","EmailIcon","WarningIcon","CheckCircleIcon","error","CancelIcon","HourglassEmptyIcon","Avatar","MenuItem","Menu","ListItemText","Divider","IconButton","logo"],"mappings":"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","x_google_ignoreList":[7]}
|
|
1
|
+
{"version":3,"file":"appbar-CKrHdx9n.esm.js","sources":["../../src/components/button/button.tsx","../../src/components/modal/modal.tsx","../../src/components/select/select-search.tsx","../../src/components/select/select.tsx","../../src/components/search-bar/search-bar.tsx","../../src/components/text-field/text-field.tsx","../../src/components/form-control/form-builder/form-builder-element/text.tsx","../../node_modules/@hookform/resolvers/yup/dist/yup.mjs","../../src/components/tooltip/Tooltip.tsx","../../src/components/confirm-modal/confirm-modal.tsx","../../src/components/toast/toast.tsx","../../src/components/avatar/avatar.tsx","../../src/components/activityArea/activityArea.tsx","../../src/components/reset-password-modal/reset-password-modal.tsx","../../src/components/header/components/notification-menu/notification-menu.tsx","../../src/components/header/header.tsx","../../src/components/appbar/appbar.tsx"],"sourcesContent":["import { Button as MUIButton, ButtonProps, styled } from '@mui/material';\r\n\r\nconst StyledButton = styled(MUIButton)(\r\n\t({ theme: { palette, } /* , variant */ }) => ({\r\n\t\tfontSize: '.875rem',\r\n\t\ttextTransform: 'none',\r\n\t\tminHeight: '0rem',\r\n\t\tminWidth: '0rem',\r\n\t\tpadding: '0.25rem .75rem',\r\n\t\tfontWeight: '500',\r\n\t\tlineHeight: '1.25rem',\r\n\t\tletterSpacing: '-0.01875rem',\r\n\r\n\t\t'&.MuiButton-startIcon': {\r\n\t\t\tbackgroundColor: 'red'\r\n\t\t},\r\n\r\n\t\t'&.MuiButton-contained': {\r\n\t\t\tbackgroundColor: palette.theme?.primary[700],\r\n\t\t\t// boxShadow: '0px 0px 2px 0px #E0E0E0, 0px 1px 4px -2px rgba(24, 39, 75, 0.02), 0px 4px 4px -2px rgba(24, 39, 75, 0.06)',\r\n\t\t\t'&:hover': {\r\n\t\t\t\tbackgroundColor: palette.theme?.primary[800]\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'&.MuiButton-outlined': {\r\n\t\t\tborder: 'none',\r\n\t\t\tboxShadow: '0px 0px 2px 0px #E0E0E0, 0px 1px 4px -2px rgba(24, 39, 75, 0.02), 0px 4px 4px -2px rgba(24, 39, 75, 0.06)',\r\n\t\t\tcolor: palette.theme?.primary[700]\r\n\t\t},\r\n\r\n\t\t'&.MuiButton-text': {\r\n\t\t\tcolor: palette.theme?.secondary[1000],\r\n\t\t\tbackgroundColor: 'white',\r\n\t\t\t'&:hover': {\r\n\t\t\t\tcolor: palette.theme?.primary[700]\r\n\t\t\t},\r\n\t\t\t'& .MuiButton-startIcon': {\r\n\t\t\t\t// background: palette.theme?.primary[400],\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'&.MuiButton-containedError': {\r\n\t\t\tbackgroundColor: palette.theme?.error[500],\r\n\t\t\t'&:hover': {\r\n\t\t\t\tbackgroundColor: palette.theme?.error[600]\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'&.Mui-disabled': {\r\n\t\t\topacity: 0.5\r\n\t\t}\r\n\t})\r\n);\r\n\r\nconst Button = (props: ButtonProps) => {\r\n\tconst { children, variant = 'contained', ...rest } = props;\r\n\r\n\treturn (\r\n\t\t<StyledButton variant={variant} {...rest}>\r\n\t\t\t{children}\r\n\t\t</StyledButton>\r\n\t);\r\n};\r\n\r\nexport { Button };\r\nexport default Button;\r\n","import { Dialog, DialogProps, styled } from \"@mui/material\";\r\n\r\nconst StyledDialog = styled(Dialog)(() => ({\r\n \".MuiDialog-paper\": {\r\n borderRadius: \"1rem\",\r\n },\r\n\r\n \".MuiDialogTitle-root\": {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n padding: \"0.5rem 1.5rem\",\r\n },\r\n\r\n \".MuiDialogContent-root\": {\r\n padding: \"1.5rem\",\r\n },\r\n\r\n \".MuiDialogActions-root\": {\r\n padding: \"0.5rem 1rem\",\r\n },\r\n}));\r\n\r\nconst Modal = ({ children, open, onClose, ...rest }: DialogProps) => {\r\n return (\r\n <StyledDialog open={open} onClose={onClose} {...rest}>\r\n {children}\r\n </StyledDialog>\r\n );\r\n};\r\n\r\nexport { Modal };\r\nexport default Modal;\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-imports */\r\nimport { InputAdornment, TextField, styled } from \"@mui/material\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport React, { forwardRef } from 'react';\r\n\r\nconst StyledSearch = styled(TextField)(({ theme: { palette } }) => ({\r\n padding: \"0rem 0.75rem 0.5rem 0.75rem\",\r\n borderBottom: `1px solid ${palette.theme?.secondary[200]}`,\r\n input: {\r\n padding: \"0.5rem 0rem\",\r\n },\r\n \".MuiOutlinedInput-notchedOutline\": {\r\n border: 0,\r\n },\r\n \"& .MuiOutlinedInput-root\": {\r\n fontSize: \"0.8125rem\",\r\n paddingLeft: \"0.5rem\",\r\n color: palette.theme?.secondary[800],\r\n // backgroundColor: palette.theme?.secondary[200],\r\n border: \"1px solid #F5F6F5\",\r\n borderRadius: \"0.5rem\",\r\n \":hover .MuiOutlinedInput-notchedOutline\": {\r\n border: 1,\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n border: 0,\r\n },\r\n },\r\n}));\r\n\r\nconst SelectSearch = forwardRef<HTMLInputElement, any>(\r\n ({ searchPlaceholder, handleSearch, value, ...rest }, ref) => (\r\n <StyledSearch\r\n inputRef={ref} // Attach the ref here for focusing\r\n placeholder={searchPlaceholder}\r\n onChange={handleSearch}\r\n value={value}\r\n fullWidth\r\n variant=\"outlined\"\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <SearchIcon fontSize=\"small\" />\r\n </InputAdornment>\r\n ),\r\n }}\r\n {...rest}\r\n />\r\n )\r\n);\r\n\r\nexport { SelectSearch };\r\nexport default SelectSearch;\r\n","/* eslint-disable no-mixed-spaces-and-tabs */\r\n\r\nimport {\r\n Box,\r\n\tCircularProgress,\r\n\tFormHelperText,\r\n\tSelect as MUISelect,\r\n\tstyled\r\n} from '@mui/material';\r\nimport Typography from '../typography/typography';\r\nimport SelectSearch from './select-search';\r\nimport { memo, useRef } from 'react';\r\nimport './controller/controller-select.scss'\r\nimport { ArrowDown } from '../icons';\r\nconst StyledSelect = styled(MUISelect)(({ theme: { palette } }) => ({\r\n\tcolor: palette.theme?.secondary[800],\r\n\tfontSize: ' 0.875rem',\r\n\t'.MuiOutlinedInput-notchedOutline': {\r\n\t\tborderColor: palette.theme?.secondary[300]\r\n\t},\r\n\t'&.Mui-focused .MuiOutlinedInput-notchedOutline': {\r\n\t\tborderWidth: '0.0625rem',\r\n\t\tborderColor: palette.theme?.primary[700]\r\n\t},\r\n\t'&.Mui-focused.Mui-error .MuiOutlinedInput-notchedOutline': {\r\n\t\tborderWidth: '0.0625rem',\r\n\t\tborderColor: palette.theme?.error[600]\r\n\t},\r\n\t'&:hover .MuiOutlinedInput-notchedOutline': {\r\n\t\tborderColor: palette.theme?.secondary[400]\r\n\t},\r\n\t'&.Mui-error:hover .MuiOutlinedInput-notchedOutline': {\r\n\t\tborderColor: palette.theme?.error[600]\r\n\t},\r\n\t'&.Mui-disabled': {\r\n\t\tbackground: palette.theme?.secondary[200],\r\n\t\tcolor: palette.theme?.secondary[800]\r\n\t},\r\n\r\n\t'.MuiMenuItem-root': {\r\n\t\tfontSize: '10px'\r\n\t},\r\n\t'&.Mui-error': {\r\n\t\tcolor: palette.theme?.error[600],\r\n\t\t'&fieldset': {\r\n\t\t\tborderColor: 'grey'\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nconst Select = memo((props: any) => {\r\n\tconst searchInputRef = useRef<HTMLInputElement>(null);\r\n\tconst {\r\n\t\tchildren,\r\n\t\tlabel,\r\n\t\thandleSearch,\r\n\t\tdataPosition,\r\n\t\tdataName,\r\n\t\tplaceholder,\r\n\t\tsearchPlaceholder,\r\n\t\trequired,\r\n\t\tsearchValue,\r\n\t\tfullWidth = false,\r\n\t\tonChange,\r\n\t\trenderValue,\r\n\t\terror,\r\n\t\thelperText,\r\n\t\tloading = false,\r\n\t\tCustomDropdownIcon = ArrowDown,\r\n\t\t...rest\r\n\t} = props;\r\n\r\n\t\r\n\tconst handleOpen = () => {\r\n setTimeout(() => {\r\n if (searchInputRef.current) {\r\n searchInputRef.current.focus(); // Focus the search input\r\n }\r\n }, 0);\r\n };\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{label && (\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tweight='medium'\r\n\t\t\t\t\tdata-position={dataPosition}\r\n\t\t\t\t\tdata-name={dataName}\r\n\t\t\t\t\tmb={0.5}\r\n\t\t\t\t\tcolor={error ? 'theme.error.600' : 'theme.secondary.800'}>\r\n\t\t\t\t\t{label} {required && <span style={{ color: '#c64d4d' }}>*</span>}\r\n\t\t\t\t</Typography>\r\n\t\t\t)}\r\n<StyledSelect\r\n IconComponent={(iconProps) => <CustomDropdownIcon {...iconProps} fontSize='small' />}\r\n MenuProps={{\r\n PaperProps: {\r\n sx: {\r\n maxHeight: 300, // Scrollable area for dropdown\r\n overflowY: 'auto',\r\n },\r\n },\r\n anchorOrigin: {\r\n vertical: 'bottom',\r\n horizontal: 'center',\r\n },\r\n }}\r\n displayEmpty\r\n fullWidth={fullWidth}\r\n renderValue={\r\n renderValue ??\r\n ((value: any) =>\r\n value !== '' ? (\r\n (value as any)\r\n ) : (\r\n <Typography color='inherit' type='s3'>\r\n {placeholder}\r\n </Typography>\r\n ))\r\n }\r\n onChange={onChange}\r\n error={error}\r\n\tonOpen={handleOpen} \r\n {...rest}\r\n>\r\n {handleSearch && (\r\n <Box\r\n sx={{\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1, // Ensure it's above the dropdown items\r\n backgroundColor: '#fff',\r\n // padding: '0.5rem',\r\n\t\t\t\tmargin: '-4px -4px 0 -4px',\r\n\t\t\t\tmb: 0.5\r\n }}\r\n >\r\n <SelectSearch\r\n\t\t\t\tref={searchInputRef}\r\n searchPlaceholder={searchPlaceholder}\r\n handleSearch={(e: any) => handleSearch(e.target.value)}\r\n value={searchValue}\r\n onClick={(e) => e.stopPropagation()}\r\n onKeyDown={(e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tif (props?.value) {\r\n\t\t\t\t\t\tsetTimeout(() => searchInputRef.current?.focus(), 0); \r\n\t\t\t\t\t}\r\n\t\t \t}}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tp: 1,\r\n\t\t\t\t}}\r\n />\r\n </Box>\r\n )}\r\n {loading ? (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n width: '100%',\r\n p: 2,\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <CircularProgress size={30} color='inherit' />\r\n </Box>\r\n ) : (\r\n children\r\n )}\r\n</StyledSelect>\r\n\r\n\t\t\t{helperText && <FormHelperText error={error}>{helperText}</FormHelperText>}\r\n\t\t</>\r\n\t);\r\n});\r\n\r\nexport { Select };\r\nexport default Select;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { debounce } from \"lodash\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport { SxProps, TextField, styled, Theme } from \"@mui/material\";\r\n// import images from \"../../assets/images\";\r\n\r\nimport \"./search-bar.scss\";\r\nimport { Search, SearchStatus } from \"../icons\";\r\n\r\nconst StyledSearch = styled(TextField)(({ theme: { palette } }) => ({\r\n \"&.MuiTextField-root\": {\r\n backgroundColor: palette.theme?.secondary[200],\r\n borderRadius: \"0.5rem\",\r\n padding: \"0.375rem 0.75rem\",\r\n },\r\n \"& .MuiOutlinedInput-input\": {\r\n fontSize: \"0.875rem\",\r\n padding: \"0rem\",\r\n paddingLeft: \"1.375rem\",\r\n },\r\n \".MuiOutlinedInput-notchedOutline\": {\r\n border: \"none\",\r\n },\r\n}));\r\n\r\ninterface ISearchBar {\r\n placeholder?: string;\r\n handleSearch: (key: string) => void;\r\n debounceTime?: number;\r\n className?: string;\r\n InputProps?: any;\r\n sx?: SxProps<Theme>;\r\n isDrivePage?: boolean;\r\n searchText?:string\r\n}\r\n\r\nconst SearchBar = ({\r\n handleSearch,\r\n debounceTime = 300,\r\n className,\r\n InputProps,\r\n isDrivePage,\r\n searchText,\r\n value = '',\r\n ...rest\r\n}: ISearchBar) => {\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n\r\n const debouncedSearchRef = useRef<(value: string) => void>();\r\n\r\n // Set `searchTerm` from localStorage on mount and clear `localStorage` if needed\r\n useEffect(() => {\r\n const initialSearchTerm = isDrivePage ? localStorage.getItem(\"searchTerm\") || \"\" : \"\";\r\n setSearchTerm(initialSearchTerm);\r\n\r\n // Set `localStorage` to an empty string on the first render\r\n if (isDrivePage) {\r\n localStorage.setItem(\"searchTerm\", \"\");\r\n }\r\n }, [isDrivePage]);\r\n\r\n useEffect(() => {\r\n setSearchTerm((typeof searchText=='string' && searchText) || '')\r\n }, [searchText])\r\n\r\n // Initialize the debounced function only once\r\n useEffect(() => {\r\n debouncedSearchRef.current = debounce((value: string) => handleSearch(value), debounceTime);\r\n \r\n // Cleanup function to cancel debounced call on component unmount\r\n return () => {\r\n debouncedSearchRef.current?.cancel();\r\n };\r\n }, [handleSearch, debounceTime]);\r\n\r\n useEffect(() => {\r\n setSearchTerm(value || '')\r\n }, [])\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value;\r\n setSearchTerm(value);\r\n if (isDrivePage) {\r\n localStorage.setItem(\"searchTerm\", value);\r\n }\r\n\r\n // Call the debounced search function\r\n if (debouncedSearchRef.current) {\r\n debouncedSearchRef.current(value);\r\n }\r\n };\r\n\r\n const handleKeyDown = (event: any) => {\r\n event.stopPropagation();\r\n };\r\n\r\n const handleClick = (event: any) => {\r\n event.stopPropagation();\r\n };\r\n\r\n return (\r\n <div className={`${className} search-wrapper`}>\r\n <StyledSearch\r\n fullWidth\r\n className=\"s3\"\r\n value={searchTerm}\r\n onChange={handleChange}\r\n onKeyDown={handleKeyDown}\r\n onClick={handleClick}\r\n autoComplete=\"off\"\r\n InputProps={InputProps}\r\n {...rest}\r\n />\r\n <span className=\"search-icon\">\r\n {\r\n searchTerm ?\r\n <SearchStatus fontSize=\"small\" sx={{ color: searchTerm ? \"grey.900\": \"grey.700\" }}/> : \r\n <Search fontSize=\"small\" sx={{ color: searchTerm ? \"grey.900\": \"grey.700\" }}/>\r\n }\r\n </span>\r\n {/* <img src={images.search} alt=\"search icon\" /> */}\r\n </div>\r\n );\r\n};\r\n\r\nexport { SearchBar };\r\nexport default SearchBar;\r\n","import {\r\n TextField as MUITextField,\r\n // TextFieldProps,\r\n styled,\r\n} from \"@mui/material\";\r\nimport \"./text-field.scss\";\r\nimport Typography from \"../typography/typography\";\r\nimport { memo } from \"react\";\r\n\r\nconst StyledTextField = styled(MUITextField)(({ theme: { palette } }) => ({\r\n \"& .MuiOutlinedInput-root\": {\r\n padding: \"0\",\r\n color: palette.theme?.secondary[800],\r\n \"& fieldset\": {\r\n borderColor: palette.theme?.secondary[400],\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: palette.theme?.secondary[500],\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderWidth: \"0.0625rem\",\r\n borderStyle: \"solid\",\r\n borderColor: palette.theme?.primary[700],\r\n },\r\n \"&.Mui-error fieldset\": {\r\n borderColor: palette.theme?.error[600],\r\n },\r\n \"&.Mui-error .MuiInputBase-input::placeholder\": {\r\n color: palette.theme?.error[600],\r\n },\r\n \"&.Mui-disabled\": {\r\n background: palette.theme?.secondary[200],\r\n color: palette.theme?.secondary[800],\r\n },\r\n \"& .MuiInputBase-input::placeholder\": {\r\n color: palette.theme?.secondary[800],\r\n opacity: 1,\r\n },\r\n },\r\n \"& .MuiFormHelperText-root\": {\r\n marginLeft: 0,\r\n color: palette.theme?.secondary[800],\r\n \"&.Mui-error\": {\r\n color: palette.theme?.error[600],\r\n },\r\n },\r\n \"& .MuiIconButton-root\": {\r\n marginRight: 0,\r\n },\r\n}));\r\n\r\nconst TextField = memo((props: any) => {\r\n const {\r\n required,\r\n placeholder,\r\n label,\r\n error = false,\r\n dataPosition,\r\n dataName,\r\n hidden,\r\n ...rest\r\n } = props;\r\n return (\r\n <>\r\n {label && !hidden && (\r\n <Typography\r\n type=\"s5\"\r\n weight={\"medium\"}\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n data-position={dataPosition}\r\n data-name={dataName}\r\n >\r\n {label} {required && <span className=\"requiredStar\">*</span>}\r\n </Typography>\r\n )}\r\n <StyledTextField\r\n error={error}\r\n placeholder={placeholder}\r\n className=\"textfield\"\r\n hidden={hidden}\r\n {...rest}\r\n />\r\n </>\r\n );\r\n});\r\n\r\nexport { TextField };\r\nexport default TextField;\r\n","import { Controller } from \"react-hook-form\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport TextField from \"../../../text-field/text-field\";\r\n\r\nimport \"./element.scss\";\r\nimport { IconButton, InputAdornment } from \"@mui/material\";\r\nimport React from \"react\";\r\n\r\nconst DynamicInput = React.memo((props: any) => {\r\n\r\n return (\r\n <Controller\r\n control={props.formControl}\r\n name={`${props.fieldArrayName}.${props.name}`}\r\n // defaultValue={props.defaultValue || \"\"}\r\n render={({ field, fieldState }) => (\r\n <TextField\r\n {...field}\r\n dataPosition={props.position}\r\n dataName={`${props.fieldArrayName}.${props.name}`}\r\n fullWidth\r\n label={props.label}\r\n defaultValue={\r\n props.type === \"number\" ||\r\n props.type === \"currency\" ||\r\n props.type === \"geoLocation\"\r\n ? typeof props.defaultValue === 'string' ? props.defaultValue.replace(/[^0-9]/g, \"\") : props.defaultValue\r\n : props.defaultValue || \"\"\r\n }\r\n // value={props.formType === \"builder\" ? props.defaultValue : \"\"}\r\n placeholder={props.placeholder}\r\n // onChange={(e) => {\r\n // field.onChange(e);\r\n // props.formControl.fieldArrayDirty[props.fieldArrayName] = true;\r\n // }}\r\n type={\r\n props.type === \"currency\" ||\r\n props.type === \"geoLocation\" ||\r\n props.type === \"relation\"\r\n ? \"text\"\r\n : props.type || \"text\"\r\n }\r\n // value={\r\n // props.type === \"number\" && typeof field.value === 'number'\r\n // ? (props?.shouldApplyPrecission === false || ['exchange_rate'].includes(props.name)) ? field.value : field.value.toFixed(2)\r\n // : field.value || \"\"\r\n // }\r\n value={\r\n props.type === \"number\" && typeof field.value === 'number'\r\n ? (props?.shouldApplyPrecission === false || ['exchange_rate'].includes(props.name)) \r\n ? field.value \r\n : (() => {\r\n const step = props?.float_step\r\n const decimalPlaces = step && step !== 'any' \r\n ? (String(step).split('.')[1]?.length ?? 2)\r\n : 2\r\n console.log(\"+++++++\", field.value, decimalPlaces)\r\n return Number(field.value.toFixed(decimalPlaces)).toString()\r\n })()\r\n : field.value || \"\"\r\n }\r\n multiline={props.is_multiline || false}\r\n minRows={4}\r\n required={props.formType === \"builder\" ? false : props.required}\r\n // onChange={(e) => {\r\n // return;\r\n // }}\r\n InputProps={{\r\n // inputMode: 'numeric',\r\n // pattern: '[0-9]*',\r\n minLength: props.min || 1,\r\n // maxLength: props.max || 255,\r\n // step: props?.float_step || \"0\",\r\n endAdornment: props.endIcon ? (\r\n <InputAdornment position=\"end\">\r\n <IconButton edge=\"end\" onClick={props?.onIconClick}>\r\n {props.endIcon}\r\n </IconButton>\r\n </InputAdornment>\r\n ) : undefined,\r\n ...props.InputProps,\r\n }}\r\n inputProps={{\r\n step: props?.float_step || 'any',\r\n min: props.min_length || undefined,\r\n // max: props.max_length,\r\n }}\r\n disabled={props.disabled}\r\n hidden={props.hidden}\r\n error={Boolean(fieldState.error?.message)}\r\n helperText={fieldState.error?.message || \"\"}\r\n onBlur={(e: any) => {\r\n field.onBlur(e)\r\n if (props.onBlur && typeof props.onBlur === 'function') {\r\n props.onBlur(e)\r\n }\r\n }}\r\n />\r\n )}\r\n />\r\n );\r\n});\r\n\r\nDynamicInput.propTypes = {\r\n formControl: PropTypes.shape({\r\n register: PropTypes.func.isRequired,\r\n setValue: PropTypes.func,\r\n _formState: PropTypes.object.isRequired,\r\n }).isRequired,\r\n name: PropTypes.string.isRequired,\r\n placeholder: PropTypes.string.isRequired,\r\n label: PropTypes.node.isRequired,\r\n fieldArrayName: PropTypes.string,\r\n defaultValue: PropTypes.string,\r\n type: PropTypes.string,\r\n required: PropTypes.bool,\r\n is_multiline: PropTypes.bool,\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n min_length: PropTypes.number,\r\n max_length: PropTypes.number,\r\n float_step: PropTypes.string,\r\n position: PropTypes.number,\r\n formType: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n typeOfField: PropTypes.string,\r\n endIcon: PropTypes.node,\r\n onIconClick: PropTypes.func,\r\n onBlur: PropTypes.func, // This should be optional\r\n hidden: PropTypes.bool,\r\n InputProps: PropTypes.object,\r\n shouldApplyPrecission: PropTypes.bool\r\n};\r\nDynamicInput.defaultProps = {\r\n onBlur: () => { }\r\n};\r\n\r\n\r\n\r\n\r\nexport { DynamicInput };\r\nexport default DynamicInput;","import{validateFieldsNatively as e,toNestErrors as t}from\"@hookform/resolvers\";import{appendErrors as r}from\"react-hook-form\";function o(o,n,a){return void 0===n&&(n={}),void 0===a&&(a={}),function(s,i,c){try{return Promise.resolve(function(t,r){try{var u=(n.context&&\"development\"===process.env.NODE_ENV&&console.warn(\"You should not used the yup options context. Please, use the 'useForm' context object instead\"),Promise.resolve(o[\"sync\"===a.mode?\"validateSync\":\"validate\"](s,Object.assign({abortEarly:!1},n,{context:i}))).then(function(t){return c.shouldUseNativeValidation&&e({},c),{values:a.raw?s:t,errors:{}}}))}catch(e){return r(e)}return u&&u.then?u.then(void 0,r):u}(0,function(e){if(!e.inner)throw e;return{values:{},errors:t((o=e,n=!c.shouldUseNativeValidation&&\"all\"===c.criteriaMode,(o.inner||[]).reduce(function(e,t){if(e[t.path]||(e[t.path]={message:t.message,type:t.type}),n){var o=e[t.path].types,a=o&&o[t.type];e[t.path]=r(t.path,n,e,t.type,a?[].concat(a,t.message):t.message)}return e},{})),c)};var o,n}))}catch(e){return Promise.reject(e)}}}export{o as yupResolver};\n//# sourceMappingURL=yup.module.js.map\n","import { Tooltip as MUITooltip, TooltipProps } from \"@mui/material\";\n\nconst Tooltip = ({ title, children, sx, ...rest }: TooltipProps) => {\n return (\n <MUITooltip\n componentsProps={{\n tooltip: {\n sx: {\n padding: \"0.5rem 0.75rem\",\n backgroundColor: \"#393B3E\",\n maxWidth: \"12rem\",\n '& .MuiTooltip-arrow': {\n color: \"#393B3E\"\n },\n ...sx\n },\n },\n }}\n title={title}\n {...rest}\n >\n {children}\n </MUITooltip>\n );\n};\n\nexport { Tooltip };\nexport default Tooltip;\n","import {\n\tBox,\n\tCircularProgress,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogProps,\n\tDialogTitle,\n\tDivider,\n\tIconButton\n} from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Typography from '../typography/typography';\nimport Button from '../button/button';\nimport './confirm-modal.scss';\nimport images from '../../assets/images';\nimport { useLanguage } from '../../hooks/useLangauge';\nimport { useTranslation } from 'react-i18next';\n\ninterface ConfirmPopUpProps extends DialogProps {\n\ttitle: string;\n\tdescription: string | JSX.Element;\n\tonClose: () => void;\n\tonConfirm: () => void;\n\tbuttonTexts?: {\n\t\tconfirm: string;\n\t\tcancel: string;\n\t};\n\tbuttonColors?: {\n\t\tconfirm: string;\n\t\tcancel?: string;\n\t};\n\tmodalType?: 'alert' | 'info';\n\tloading?: boolean;\n\tshowAction?: boolean;\n}\n\nexport const ConfirmPopUp = (props: ConfirmPopUpProps) => {\n\tconst { t } = useTranslation();\n\tconst {\n\t\topen,\n\t\ttitle,\n\t\tdescription,\n\t\tonClose,\n\t\tonConfirm,\n\t\tmodalType = 'alert',\n\t\tbuttonTexts = { confirm: t('common.delete'), cancel: t('common.cancel') },\n\t\tbuttonColors = { confirm: 'error' },\n\t\tloading = false,\n\t\tshowAction=true,\n\t\t...rest\n\t} = props;\n\n\tconst icon = modalType === 'info' ? images.info : images.alert;\n const {isRtl}=useLanguage();\n\treturn (\n\t\t<>\n\t\t\t<Dialog open={open} onClose={onClose} className='confirm' {...rest}>\n\t\t\t\t<DialogTitle className='confirm--head'>\n\t\t\t\t\t<Box className='confirm--title'>\n\t\t\t\t\t\t<img src={icon} alt='alert icon' />{' '}\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\tml={1}\n\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\tcolor='theme.secondary.1000'>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t\t<IconButton disableRipple onClick={onClose} disabled={loading}>\n\t\t\t\t\t\t<CloseIcon />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</DialogTitle>\n\t\t\t\t<Divider />\n\t\t\t\t<DialogContent className='confirm--content'>\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Typography>\n\t\t\t\t</DialogContent>\n\t\t\t\t<Divider />\n\t\t\t\t{showAction &&<DialogActions\n\t\t\t\t\tclassName='confirm--actions'\n\t\t\t\t\tsx={{ backgroundColor: 'theme.secondary.200' }}>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant='text'\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\tcolor={buttonColors?.cancel}\n\t\t\t\t\t\tdisabled={loading}>\n\t\t\t\t\t\t{buttonTexts.cancel}\n\t\t\t\t\t</Button>\n\t\t\t\t{buttonTexts.confirm &&<Button\n\t\t\t\t\t\tcolor={buttonColors.confirm}\n\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\tsx={isRtl?{mr: 1}:{}}\n\t\t\t\t\t\tendIcon={loading && <CircularProgress size={18} color='inherit' />}\n\t\t\t\t\t\tdisabled={loading}>\n\t\t\t\t\t\t{buttonTexts.confirm}\n\t\t\t\t\t</Button>}\n\t\t\t\t</DialogActions>}\n\t\t\t</Dialog>\n\t\t</>\n\t);\n};\n\nexport default ConfirmPopUp;\n","import Close from \"@mui/icons-material/Close\";\r\nimport {\r\n Alert as MUIAlert,\r\n IconButton,\r\n Snackbar,\r\n SnackbarProps,\r\n styled,\r\n} from \"@mui/material\";\r\nimport WarningAmberIcon from \"@mui/icons-material/WarningAmber\";\r\nimport CheckCircleOutlineIcon from \"@mui/icons-material/CheckCircleOutline\";\r\nimport \"./toast.scss\";\r\nimport Typography from \"../typography/typography\";\r\n\r\ninterface IToast extends SnackbarProps {\r\n handleClose: () => void;\r\n type?: \"normal\" | \"alert\";\r\n handleUndo?: () => void;\r\n}\r\n\r\nconst StyledAlert = styled(MUIAlert)(({ theme: { palette } }) => ({\r\n color: \"white\",\r\n height: \"2.5rem\",\r\n padding: \"0rem 1rem\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n\r\n \"&.MuiAlert-standardWarning\": {\r\n backgroundColor: palette.theme?.error[600],\r\n },\r\n\r\n \"&.MuiAlert-standardInfo\": {\r\n backgroundColor: palette.theme?.secondary[900],\r\n },\r\n\r\n \".MuiAlert-action\": {\r\n padding: \"0rem\",\r\n marginLeft: \"0.5rem\",\r\n },\r\n\r\n \".MuiAlert-icon\": {\r\n marginRight: \"0.5rem\",\r\n },\r\n}));\r\n\r\nconst Toast = (props: IToast) => {\r\n const {\r\n open,\r\n message,\r\n type = \"alert\",\r\n handleUndo,\r\n handleClose,\r\n ...rest\r\n } = props;\r\n\r\n const action = (\r\n <>\r\n {handleUndo ? (\r\n <Typography\r\n className=\"toast-undo\"\r\n type=\"s4\"\r\n color={type === \"normal\" ? \"theme.primary.600\" : \"white\"}\r\n onClick={handleUndo}\r\n >\r\n Undo\r\n </Typography>\r\n ) : (\r\n <IconButton color=\"inherit\" className=\"icon\" onClick={handleClose}>\r\n <Close fontSize=\"inherit\" />\r\n </IconButton>\r\n )}\r\n </>\r\n );\r\n\r\n return (\r\n <>\r\n <Snackbar\r\n open={open}\r\n autoHideDuration={300000}\r\n onClose={handleClose}\r\n {...rest}\r\n >\r\n <StyledAlert\r\n action={action}\r\n onClose={handleClose}\r\n severity={type === \"normal\" ? \"info\" : \"warning\"}\r\n icon={\r\n type === \"normal\" ? (\r\n <CheckCircleOutlineIcon htmlColor=\"white\" className=\"icon\" />\r\n ) : (\r\n <WarningAmberIcon htmlColor=\"white\" className=\"icon\" />\r\n )\r\n }\r\n >\r\n <Typography color=\"inherit\" type=\"s4\">\r\n {message}\r\n </Typography>\r\n </StyledAlert>\r\n </Snackbar>\r\n </>\r\n );\r\n};\r\n\r\nexport { Toast };\r\nexport default Toast;\r\n","import { Avatar as AvatarMUI, SvgIcon } from \"@mui/material\";\nimport Person2OutlinedIcon from \"@mui/icons-material/Person2Outlined\";\nimport \"./avatar.scss\";\n\nexport const Avatar = (props: any) => {\n const { icon, badge, src, alt, size, altIcon, ...rest } = props;\n const avatarStyle = {\n height: size,\n width: size,\n };\n\n const fontSize = size * (alt && alt.split(\" \").length > 1 ? 0.025 : 0.035);\n const badgeSize = size * 0.0225;\n const badgeBorder = size * 0.004;\n let altFirstChar = \"\";\n\n if (alt && alt.length > 0) {\n const words = alt.split(\" \");\n altFirstChar = words.map((word: string) => word.charAt(0)).join(\"\");\n }\n\n return (\n <div className=\"Avatar\">\n <AvatarMUI\n alt={alt}\n src={src ? src : undefined}\n style={avatarStyle}\n {...rest}\n >\n {icon && (!src || (alt && alt.length === 0)) && (\n <>\n {altIcon ? (\n <SvgIcon>{altIcon}</SvgIcon>\n ) : (\n <Person2OutlinedIcon\n style={{ fontSize: `${fontSize + 0.8}rem` }}\n />\n )}\n </>\n )}\n {!icon && !src && (\n <span\n className=\"Avatar--FirstChar\"\n style={{ fontSize: `${fontSize}rem` }}\n >\n {altFirstChar}\n </span>\n )}\n </AvatarMUI>\n\n {badge && (\n <div\n className=\"Avatar--Badge\"\n style={{\n width: `${badgeSize}rem`,\n height: `${badgeSize}rem`,\n border: `${badgeBorder}rem solid #ffffff`,\n }}\n />\n )}\n </div>\n );\n};\n\nexport default Avatar;\n","import Box from \"@mui/material/Box\";\r\nimport \"./activityArea.scss\";\r\n\r\nexport const ActivityArea = (props: any) => {\r\n return (\r\n <Box\r\n className=\"main-wrapper\"\r\n component=\"main\"\r\n width={\"100%\"}\r\n // sx={{ flexGrow: 1, p: 3, flexWrap: \"wrap\" }}\r\n marginTop=\"4.6875rem\"\r\n >\r\n {props.children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ActivityArea;\r\n","import { useState } from \"react\";\r\nimport Modal from \"../modal/modal\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { LoginFormValues } from \"../../contexts/AuthContext\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport * as Yup from \"yup\";\r\nimport { useAuth } from \"../../hooks/useAuth\";\r\nimport { styled } from '@mui/material/styles';\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"../typography/typography\";\r\nimport DynamicInput from \"../form-control/form-builder/form-builder-element/text\";\r\nimport { Eye, EyeOff } from \"../icons\";\r\nimport Button from \"../button/button\";\r\nimport Toast from \"../toast/toast\";\r\n\r\n\r\nconst validationSchema = Yup.object({\r\n login: Yup.object({\r\n current_password: Yup.string().required(\"Please enter current password\"),\r\n password: Yup.string()\r\n .required(\"Please enter password\")\r\n .min(8, \"Password must be at least 8 characters\")\r\n .matches(/[A-Z]/, \"Password must contain at least one uppercase letter\")\r\n .matches(/[!@#$%^&*(),.?\":{}|<>]/, \"Password must contain at least one special character\"),\r\n confirm_password: Yup.string().required(\"Please enter confirm password\").oneOf([Yup.ref('password')], \"Passwords must match\"),\r\n }),\r\n});\r\n\r\n\r\n\r\nconst ResetPasswordModal = ({showModal, setShowModal}) => {\r\n const { changeUserPassword } = useAuth();\r\n\r\n // const [showModal, setShowModal] = useState(false);\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n interface FormValeus {\r\n login: LoginFormValues;\r\n }\r\n\r\n const { control, handleSubmit, trigger } = useForm<FormValeus>({\r\n resolver: yupResolver(validationSchema),\r\n mode: \"all\",\r\n });\r\n\r\n const onSubmit = async (values: FormValeus) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await changeUserPassword(values.login, (message, type) => {\r\n if (type) {\r\n setToast({ message: message, type: \"normal\" });\r\n setShowModal(false);\r\n } else {\r\n setToast({ message: message, type: \"alert\" });\r\n }\r\n // make logout\r\n });\r\n return values; \r\n };\r\n\r\n const [showPassword, setShowPassword] = useState<boolean>(false);\r\n const handleShowPassword = () => setShowPassword(!showPassword);\r\n\r\n const [showCurrentPassword, setShowCurrentPassword] = useState<boolean>(false);\r\n const handleShowCurrentPassword = () => setShowCurrentPassword(!showCurrentPassword);\r\n\r\n const [showConfirmPassword, setShowConfirmPassword] = useState<boolean>(false);\r\n const handleShowConfirmPassword = () => setShowConfirmPassword(!showConfirmPassword);\r\n\r\n const FlexBox = styled(Box)(() => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }));\r\n\r\n return (\r\n <>\r\n <Modal \r\n open={showModal}\r\n onClose={() => setShowModal(false)} \r\n children={\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <FlexBox gap={4} className=\"popup-change-pass\">\r\n <FlexBox gap={2}>\r\n <Box>\r\n <Typography\r\n align=\"center\"\r\n type=\"h1\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n Change Password\r\n </Typography>\r\n <Typography\r\n align=\"center\"\r\n type=\"h5\"\r\n weight=\"normal\"\r\n color=\"theme.secondary81000\"\r\n >\r\n Enter Details below\r\n </Typography>\r\n </Box>\r\n <FlexBox gap={2}>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Current Password\"\r\n name=\"current_password\"\r\n type={showCurrentPassword ? \"text\" : \"password\"}\r\n placeholder=\"Enter Current Password\"\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showCurrentPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowCurrentPassword}\r\n />\r\n </Box>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Password\"\r\n name=\"password\"\r\n type={showPassword ? \"text\" : \"password\"}\r\n placeholder=\"Enter Password\"\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowPassword}\r\n />\r\n </Box>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Confirm Password\"\r\n name=\"confirm_password\"\r\n type={showConfirmPassword ? \"text\" : \"password\"}\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showConfirmPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowConfirmPassword} \r\n placeholder=\"Enter confirm password\"\r\n />\r\n </Box>\r\n </FlexBox>\r\n </FlexBox>\r\n <FlexBox gap={2}>\r\n <Button type=\"button\" onClick={handleSubmit(onSubmit)} size=\"large\" variant=\"contained\">\r\n Change Password\r\n </Button>\r\n </FlexBox>\r\n </FlexBox>\r\n </form> \r\n </>\r\n }\r\n />\r\n <Toast\r\n open={Boolean(toast)}\r\n message={toast?.message}\r\n type={toast?.type}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n autoHideDuration={3000}\r\n />\r\n </>\r\n );\r\n}\r\n\r\nexport { ResetPasswordModal };\r\nexport default ResetPasswordModal;","import React, { useState, useCallback, useRef, useEffect } from 'react'\r\nimport {\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tBadge,\r\n\tBox,\r\n\tCircularProgress,\r\n\tAvatar,\r\n\tListItemText,\r\n\tListItemAvatar,\r\n\tAlert,\r\n\tSkeleton,\r\n} from '@mui/material'\r\nimport {\r\n\tPerson as PersonIcon,\r\n\tEmail as EmailIcon,\r\n\tWarning as WarningIcon,\r\n\tCheckCircle as CheckCircleIcon,\r\n\tAssignment as AssignmentIcon,\r\n\tAccountBalance as AccountBalanceIcon,\r\n\tHourglassEmpty as HourglassEmptyIcon,\r\n\tCancel as CancelIcon,\r\n} from '@mui/icons-material'\r\nimport {\r\n\tgetV1Notification,\r\n\tgetV1NotificationMarkAllAsRead,\r\n\tpatchV1NotificationMarkAsReadId,\r\n} from '../../../../api-client/api.system-feature/api'\r\nimport { getErrorMessage, getToken } from '../../../../utils/common'\r\nimport formatText, { convertToUnderscore, formatLabel } from '../../../../utils/format-text'\r\nimport Typography from '../../../typography/typography'\r\nimport images from '../../../../assets/images'\r\nimport { generateRouteWithId } from '../../../../utils/route-utils'\r\nimport { PathnameGenerator, PathnameAccounting } from '../../../../constants/pathnames/pathname.accounting'\r\nimport { ROUTES as RENTALROUTES } from '../../../../constants/pathnames/pathname.rental'\r\n\r\nimport { PathnameInventory, PathnameGenerator as PathnameGeneratorInventory } from '../../../../constants/pathnames/pathname.inventory'\r\n\r\nimport {\r\n\tPathnameManufacturing,\r\n\tPathnameGenerator as PathnameGeneratorManufacuring,\r\n} from '../../../../constants/pathnames/pathname.manufacturing.ts'\r\n\r\nimport {\r\n\tPathnamePurchase,\r\n\tPathnameGenerator as PathnameGeneratorPurchase,\r\n} from '../../../../constants/pathnames/pathname.procurement.ts'\r\n\r\nimport { PathnameCrm, PathnameGenerator as PathnameGeneratorCrm } from '../../../../constants/pathnames/pathname.crm.ts'\r\n\r\nimport { PathnameRental, PathnameGenerator as PathnameGeneratorRental } from '../../../../constants/pathnames/pathname.rental.ts'\r\n\r\nimport { useNavigate } from 'react-router-dom'\r\nimport { Notification, Tick } from '../../../icons'\r\nimport Button from '../../../button/button'\r\nimport { enqueueSnackbar } from 'notistack'\r\n\r\nconst getNotificationUrl = (data: any) => {\r\n\tconst { moduleName = '', moduleId = '', notificationData = {} } = data\r\n\tconst key = convertToUnderscore(moduleName)\r\n\r\n\tconst routeMap: Record<string, () => string> = {\r\n\t\tsales_invoice: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_SALES_INVOICES), moduleId.toString()),\r\n\r\n\t\tasset_transfers: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_ASSET_TRANSFER), moduleId.toString()),\r\n\r\n\t\tbudgets: () => generateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_BUDGET), moduleId.toString()),\r\n\r\n\t\tcash_expense: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_CASH_EXPENSE), moduleId.toString()),\r\n\r\n\t\tcredit_notes: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_CREDIT_NOTE), moduleId.toString()),\r\n\r\n\t\tdebit_notes: () => generateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_DEBIT_NOTE), moduleId.toString()),\r\n\r\n\t\texpense_reimbursement: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_EXPENSE_REIMBURSEMENT), moduleId.toString()),\r\n\r\n\t\tjournal_entries: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_JOURNAL_ENTRY), moduleId.toString()),\r\n\r\n\t\tpayment_entries: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_PAYMENT_ENTRY), moduleId.toString()),\r\n\r\n\t\tpurchase_invoice: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_PURCHASE_INVOICE), moduleId.toString()),\r\n\r\n\t\tstock_transfer: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorInventory(PathnameInventory.VIEW_STOCK_TRANSFER), moduleId.toString()),\r\n\r\n\t\tbills_of_materials: () =>\r\n\t\t\tgenerateRouteWithId(\r\n\t\t\t\tPathnameGeneratorManufacuring(PathnameManufacturing.VIEW_BILL_OF_MATERIAL),\r\n\t\t\t\tmoduleId.toString()\r\n\t\t\t),\r\n\r\n\t\tpurchase_agreement: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_AGREEMENT), moduleId.toString()),\r\n\r\n\t\tpurchase_orders: () =>\r\n\t\t\tgenerateRouteWithId(\r\n\t\t\t\tnotificationData?.data?.is_rental == 1\r\n\t\t\t\t\t? RENTALROUTES.VIEW\r\n\t\t\t\t\t: PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_ORDER),\r\n\t\t\t\tmoduleId.toString()\r\n\t\t\t),\r\n\r\n\t\tpurchase_request: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_ORDER), moduleId.toString()),\r\n\r\n\t\tvra: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_VENDOR_RETURNS), moduleId.toString()),\r\n\r\n\t\tsales_customer_returns: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorCrm(PathnameCrm.VIEW_CUSTOMER_RETURNS), moduleId.toString()),\r\n\r\n\t\tsales_order: () => generateRouteWithId(PathnameGeneratorCrm(PathnameCrm.VIEW_SALES_ORDER), moduleId.toString()),\r\n\r\n\t\trental_order: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_RENTAL_ORDER), moduleId.toString()),\r\n\r\n\t\treplacement_order: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_RENTAL_ORDER), moduleId.toString()),\r\n\r\n\t\trental_agreement: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_AGREEMENT), moduleId.toString()),\r\n\r\n\t\tcross_hire_order: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_CROSS_HIRE_ORDER), moduleId.toString()),\r\n\r\n\t\tcross_hire_request: () =>\r\n\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_CROSS_HIRE_REQUEST), moduleId.toString()),\r\n\t}\r\n\r\n\treturn routeMap[key]?.() || '/dashboard'\r\n}\r\n\r\nconst mainModuleIcons = {\r\n\trbac: images.user,\r\n\tdocument: images.document,\r\n\t'accounts-and-finance': images.accounting,\r\n\tinventory: images.inventory,\r\n\tmanufacturing: images.manufacturing,\r\n\tsales: images.crm,\r\n\trental: images.rental,\r\n\tuser: images.user,\r\n\tpurchase: images.procurement,\r\n\thrms: images.hrms,\r\n}\r\nconst mainModuleBgColors = {\r\n\trbac: '#F3E5F5',\r\n\tdocument: '#FFF8E1',\r\n\t'accounts-and-finance': '#E8F5E8',\r\n\tinventory: '#E3F2FD',\r\n\tmanufacturing: '#FFF3E0',\r\n\tsales: '#F3E5F5',\r\n\trental: '#E8F5E8',\r\n\tuser: '#F3E5F5',\r\n\tpurchase: '#FCE4EC',\r\n\thrms: '#fcfcfc',\r\n}\r\n\r\nconst NotificationMenu = () => {\r\n\tconst [anchorEl, setAnchorEl] = useState(null)\r\n\tconst [notifications, setNotifications] = useState([])\r\n\tconst [loading, setLoading] = useState(false)\r\n\tconst [loadingMore, setLoadingMore] = useState(false)\r\n\tconst [error, setError] = useState(null)\r\n\tconst [unreadCount, setUnreadCount] = useState(0)\r\n\tconst [markingAllAsRead, setMarkingAllAsRead] = useState(false)\r\n\tconst [pagination, setPagination] = useState({\r\n\t\tskip: 0,\r\n\t\tlimit: 10,\r\n\t\ttotalCount: 0,\r\n\t\thasMore: true,\r\n\t})\r\n\r\n\tconst navigate = useNavigate()\r\n\r\n\tconst menuRef = useRef(null)\r\n\tconst isLoadingMoreRef = useRef(false)\r\n\tconst open = Boolean(anchorEl)\r\n\r\n\t// Transform API notification to display format\r\n\tconst transformNotification = (apiNotification) => {\r\n\t\tconst moduleIcons = {\r\n\t\t\t'accounts-and-finance': <AccountBalanceIcon color=\"primary\" />,\r\n\t\t\tuser: <PersonIcon color=\"action\" />,\r\n\t\t\tapproval: <AssignmentIcon color=\"warning\" />,\r\n\t\t}\r\n\r\n\t\tconst getInitials = (performedUser) => {\r\n\t\t\tif (!performedUser) return null\r\n\t\t\tconst firstName = performedUser.first_name || ''\r\n\t\t\tconst lastName = performedUser.last_name || ''\r\n\t\t\tif (!firstName && !lastName) return null\r\n\t\t\treturn (firstName.charAt(0) + lastName.charAt(0)).toUpperCase()\r\n\t\t}\r\n\r\n\t\tconst getFullName = (performedUser) => {\r\n\t\t\tif (!performedUser) return null\r\n\t\t\tconst firstName = performedUser.first_name || ''\r\n\t\t\tconst lastName = performedUser.last_name || ''\r\n\t\t\treturn `${firstName} ${lastName}`.trim() || null\r\n\t\t}\r\n\r\n\t\tconst formatTimestamp = (dateString) => {\r\n\t\t\tconst date = new Date(dateString)\r\n\t\t\tconst now = new Date()\r\n\t\t\tconst diffMs = now - date\r\n\t\t\tconst diffMins = Math.floor(diffMs / 60000)\r\n\t\t\tconst diffHours = Math.floor(diffMs / 3600000)\r\n\t\t\tconst diffDays = Math.floor(diffMs / 86400000)\r\n\r\n\t\t\tif (diffMins < 1) return 'Just now'\r\n\t\t\tif (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? 's' : ''} ago`\r\n\t\t\tif (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`\r\n\t\t\tif (diffDays < 7) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`\r\n\t\t\treturn date.toLocaleDateString()\r\n\t\t}\r\n\r\n\t\tconst subData = apiNotification.sub_module_data || {}\r\n\r\n\t\treturn {\r\n\t\t\tid: apiNotification.id,\r\n\t\t\ttype: apiNotification.action || apiNotification.notification_type || 'info',\r\n\t\t\ttitle: formatText(apiNotification.title),\r\n\t\t\tmessage: apiNotification.message,\r\n\t\t\ttimestamp: formatTimestamp(apiNotification.created_at),\r\n\t\t\tread: apiNotification.status === 'read',\r\n\t\t\tavatar: getInitials(apiNotification.performed_user),\r\n\t\t\tperformedByName: getFullName(apiNotification.performed_user),\r\n\t\t\tmodule: apiNotification.module,\r\n\t\t\tsubModule: apiNotification.sub_module,\r\n\t\t\tsubModuleId: apiNotification.sub_module_id,\r\n\t\t\tstatus: apiNotification.status,\r\n\t\t\tseriesNumber: subData.series_number || null,\r\n\t\t\tdocumentStatus: subData.status || null,\r\n\t\t\tcustomerName: subData.customer_name || null,\r\n\t\t\ticon: moduleIcons[apiNotification.module] || moduleIcons[apiNotification.action] || <PersonIcon color=\"action\" />,\r\n\t\t}\r\n\t}\r\n\r\n\t// Fetch notifications with pagination\r\n\tconst fetchNotifications = useCallback(async (isLoadMore = false) => {\r\n\t\t// Prevent multiple simultaneous load more requests\r\n\t\tif (isLoadMore && isLoadingMoreRef.current) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (isLoadMore) {\r\n\t\t\tisLoadingMoreRef.current = true\r\n\t\t\tsetLoadingMore(true)\r\n\t\t} else {\r\n\t\t\tsetLoading(true)\r\n\t\t\t// Reset pagination when loading fresh data\r\n\t\t\tsetPagination((prev) => ({\r\n\t\t\t\t...prev,\r\n\t\t\t\tskip: 0,\r\n\t\t\t\thasMore: true,\r\n\t\t\t}))\r\n\t\t}\r\n\t\tsetError(null)\r\n\r\n\t\ttry {\r\n\t\t\tconst currentSkip = isLoadMore ? pagination.skip : 0\r\n\t\t\tconst response = await getV1Notification({\r\n\t\t\t\tskip: currentSkip,\r\n\t\t\t\tlimit: pagination.limit,\r\n\t\t\t\t...getToken(),\r\n\t\t\t})\r\n\r\n\t\t\tif (response.success && response.data) {\r\n\t\t\t\tconst transformedNotifications = response.data.notifications.map(transformNotification)\r\n\r\n\t\t\t\tif (isLoadMore) {\r\n\t\t\t\t\tsetNotifications((prev) => [...prev, ...transformedNotifications])\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetNotifications(transformedNotifications)\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Update pagination\r\n\t\t\t\tconst newSkip = currentSkip + response.data.notifications.length\r\n\t\t\t\tconst hasMore = newSkip < response.data.pagination.totalCount\r\n\r\n\t\t\t\tsetPagination((prev) => ({\r\n\t\t\t\t\t...prev,\r\n\t\t\t\t\tskip: newSkip,\r\n\t\t\t\t\ttotalCount: response.data.pagination.totalCount,\r\n\t\t\t\t\thasMore,\r\n\t\t\t\t}))\r\n\r\n\t\t\t\t// Calculate unread count (assuming 'pending' status means unread)\r\n\t\t\t\tif (!isLoadMore) {\r\n\t\t\t\t\tconst unread = response.data.pagination.unreadCount\r\n\t\t\t\t\tsetUnreadCount(unread)\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tsetUnreadCount(0)\r\n\t\t\t\tthrow new Error(response.message || 'Failed to load notifications')\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\tsetError('Failed to load notifications')\r\n\t\t} finally {\r\n\t\t\tsetLoading(false)\r\n\t\t\tsetLoadingMore(false)\r\n\t\t\tif (isLoadMore) {\r\n\t\t\t\tisLoadingMoreRef.current = false\r\n\t\t\t}\r\n\t\t}\r\n\t}, [pagination.limit, pagination.skip])\r\n\r\n\t// Handle scroll for infinite loading\r\n\tconst handleScroll = useCallback(\r\n\t\t(event) => {\r\n\t\t\tconst { scrollTop, scrollHeight, clientHeight } = event.target\r\n\t\t\tconst isNearBottom = scrollTop + clientHeight >= scrollHeight - 50 // Increased threshold\r\n\r\n\t\t\tif (isNearBottom && !isLoadingMoreRef.current && !loading && pagination.hasMore) {\r\n\t\t\t\tfetchNotifications(true)\r\n\t\t\t}\r\n\t\t},\r\n\t\t[fetchNotifications, loading, pagination.hasMore]\r\n\t)\r\n\r\n\tconst handleClick = (event) => {\r\n\t\tsetAnchorEl(event.currentTarget)\r\n\t\tif (notifications.length === 0) {\r\n\t\t\tfetchNotifications()\r\n\t\t}\r\n\t}\r\n\r\n\tconst handleClose = () => {\r\n\t\tsetAnchorEl(null)\r\n\r\n\t\t// Don't clear notifications immediately to avoid flickering\r\n\t\t// They will be refreshed when menu is opened again\r\n\t}\r\n\r\n\tconst handleNotificationClick = async (notificationId) => {\r\n\t\t// Mark notification as read\r\n\t\tconst n = notifications.find((n) => {\r\n\t\t\treturn n.id === notificationId\r\n\t\t})\r\n\t\tif (!n) return\r\n\r\n\t\thandleClose()\r\n\r\n\t\tif (n.status === 'pending') {\r\n\t\t\tawait patchV1NotificationMarkAsReadId({\r\n\t\t\t\tid: notificationId,\r\n\t\t\t\t...getToken(),\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tsetNotifications((prev) => prev.map((n) => (n.id === notificationId ? { ...n, read: true } : n)))\r\n\t\tsetUnreadCount((prev) => Math.max(0, prev - 1))\r\n\t\tconst url = getNotificationUrl({\r\n\t\t\tmoduleName: n.subModule,\r\n\t\t\tmoduleId: n.subModuleId,\r\n\t\t\tnotificationData: n,\r\n\t\t})\r\n setTimeout(() => {\r\n navigate(url)\r\n }, 300)\r\n\t}\r\n\r\n\tconst getNotificationIcon = (notification) => {\r\n\t\tif (notification.icon) {\r\n\t\t\treturn notification.icon\r\n\t\t}\r\n\r\n\t\tswitch (notification.type) {\r\n\t\t\tcase 'approval':\r\n\t\t\t\treturn <AssignmentIcon color=\"warning\" />\r\n\t\t\tcase 'user':\r\n\t\t\t\treturn <PersonIcon color=\"action\" />\r\n\t\t\tcase 'message':\r\n\t\t\t\treturn <EmailIcon color=\"primary\" />\r\n\t\t\tcase 'warning':\r\n\t\t\t\treturn <WarningIcon color=\"warning\" />\r\n\t\t\tcase 'success':\r\n\t\t\t\treturn <CheckCircleIcon color=\"success\" />\r\n\t\t\tdefault:\r\n\t\t\t\treturn <PersonIcon color=\"action\" />\r\n\t\t}\r\n\t}\r\n\r\n\tconst handleMarkAllAsRead = useCallback(async () => {\r\n\t\tif (markingAllAsRead) return // Prevent multiple calls\r\n\r\n\t\tsetMarkingAllAsRead(true)\r\n\r\n\t\tif (!unreadCount) {\r\n\t\t\tenqueueSnackbar('No unread notifications!')\r\n\t\t\tsetMarkingAllAsRead(false)\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tawait getV1NotificationMarkAllAsRead({ ...getToken() })\r\n\t\t\t// Update local state immediately for better UX\r\n\t\t\tsetNotifications((prev) => prev.map((n) => ({ ...n, read: true, status: 'read' })))\r\n\t\t\tsetUnreadCount(0)\r\n\t\t} catch (error) {\r\n\t\t\tconst m = getErrorMessage(error.message)\r\n\t\t\tenqueueSnackbar(m, { variant: 'error' })\r\n\t\t} finally {\r\n\t\t\tsetMarkingAllAsRead(false)\r\n\t\t}\r\n\t}, [markingAllAsRead, unreadCount])\r\n\r\n\t// Remove the problematic useEffect that was causing extra API calls\r\n\r\n useEffect(() => {\r\n if(!open) {\r\n setTimeout(() => {\r\n setNotifications([])\r\n }, 500)\r\n }\r\n }, [open])\r\n\r\n\tconst getPerformerLabel = (action: string) => {\r\n\t\tswitch (action?.toLowerCase()) {\r\n\t\t\tcase 'approved':\r\n\t\t\t\treturn 'Approved by'\r\n\t\t\tcase 'rejected':\r\n\t\t\tcase 'reject':\r\n\t\t\t\treturn 'Rejected by'\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'Request to'\r\n\t\t}\r\n\t}\r\n\r\n\tconst getStatusIcon = (action: string) => {\r\n\t\tswitch (action?.toLowerCase()) {\r\n\t\t\tcase 'approved':\r\n\t\t\t\treturn <CheckCircleIcon sx={{ fontSize: '0.9rem', color: 'success.main' }} />\r\n\t\t\tcase 'rejected':\r\n\t\t\tcase 'reject':\r\n\t\t\t\treturn <CancelIcon sx={{ fontSize: '0.9rem', color: 'error.main' }} />\r\n\t\t\tdefault:\r\n\t\t\t\treturn <HourglassEmptyIcon sx={{ fontSize: '0.9rem', color: 'warning.main' }} />\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Box>\r\n\t\t\t<IconButton\r\n\t\t\t\t// size=\"small\"\r\n\t\t\t\taria-label=\"notifications\"\r\n\t\t\t\taria-controls={open ? 'notification-menu' : undefined}\r\n\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\taria-expanded={open ? 'true' : undefined}\r\n\t\t\t\tonClick={handleClick}\r\n\t\t\t>\r\n\t\t\t\t<Badge badgeContent={unreadCount} color=\"error\">\r\n\t\t\t\t\t<Notification fontSize=\"medium\" />\r\n\t\t\t\t</Badge>\r\n\t\t\t</IconButton>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tid=\"notification-menu\"\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={open}\r\n\t\t\t\tonClose={handleClose}\r\n\t\t\t\tref={menuRef}\r\n\t\t\t\tslotProps={{\r\n\t\t\t\t\tpaper: {\r\n\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\toverflow: 'visible',\r\n\t\t\t\t\t\t\tminWidth: 400,\r\n\t\t\t\t\t\t\tmaxWidth: 450,\r\n\t\t\t\t\t\t\tmaxHeight: 520,\r\n\t\t\t\t\t\t\t'&:before': {\r\n\t\t\t\t\t\t\t\tcontent: '\"\"',\r\n\t\t\t\t\t\t\t\tdisplay: 'block',\r\n\t\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\tright: '50%',\r\n\t\t\t\t\t\t\t\twidth: 10,\r\n\t\t\t\t\t\t\t\theight: 10,\r\n\t\t\t\t\t\t\t\tbgcolor: 'background.paper',\r\n\t\t\t\t\t\t\t\ttransform: 'translateY(-50%) translateX(50%) rotate(45deg)',\r\n\t\t\t\t\t\t\t\tzIndex: 0,\r\n\t\t\t\t\t\t\t\tborder: '1px solid',\r\n\t\t\t\t\t\t\t\tborderColor: ({ palette }) => palette.grey[300],\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t}}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\t'& .MuiList-root': {\r\n\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\tmaxHeight: 520,\r\n\t\t\t\t\t\toverflowY: 'auto',\r\n\t\t\t\t\t\tpadding: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t}}\r\n\t\t\t\ttransformOrigin={{ horizontal: 'center', vertical: 'top' }}\r\n\t\t\t\tanchorOrigin={{ horizontal: 'center', vertical: 'bottom' }}\r\n\t\t\t\tonScroll={handleScroll}\r\n\t\t\t>\r\n\t\t\t\t{/* Header */}\r\n\t\t\t\t<Box sx={{ px: 2, py: 1, borderBottom: '1px solid #e0e0e0', backgroundColor: '#fafafa' }}>\r\n\t\t\t\t\t<Typography type=\"h5\" weight=\"bold\" color=\"grey.1000\">\r\n\t\t\t\t\t\tNotifications\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t{unreadCount > 0 && (\r\n\t\t\t\t\t\t<Box sx={{ display: 'flex', justifyContent: 'space-between', width: '100%', alignItems: 'center' }}>\r\n\t\t\t\t\t\t\t<Typography type=\"s4\" color=\"grey.800\">\r\n\t\t\t\t\t\t\t\tYou have {unreadCount} unread notification{unreadCount > 1 ? 's' : ''}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant=\"text\"\r\n\t\t\t\t\t\t\t\tstartIcon={\r\n\t\t\t\t\t\t\t\t\tmarkingAllAsRead ? (\r\n\t\t\t\t\t\t\t\t\t\t<CircularProgress size={15} color=\"inherit\" />\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Tick sx={{ fontSize: '0.75rem !important' }} color=\"grey.900\" />\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tsx={{ p: 0 }}\r\n\t\t\t\t\t\t\t\tonClick={handleMarkAllAsRead}\r\n\t\t\t\t\t\t\t\tdisabled={unreadCount <= 0 || markingAllAsRead}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Typography type=\"s4\" color=\"grey.900\">\r\n\t\t\t\t\t\t\t\t\tMark all as read\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{/* Loading State */}\r\n\t\t\t\t{loading && notifications.length === 0 && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\tflexDirection: 'column',\r\n\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\tjustifyContent: 'center',\r\n\t\t\t\t\t\t\t\tminWidth: 400,\r\n\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\tm: 1,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'grey.200',\r\n\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\r\n\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={40} height={40} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={25} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={150} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\tflexDirection: 'column',\r\n\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\tjustifyContent: 'center',\r\n\t\t\t\t\t\t\t\tminWidth: 400,\r\n\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\tm: 1,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'grey.200',\r\n\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\r\n\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={40} height={40} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={25} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={150} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\tflexDirection: 'column',\r\n\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\tjustifyContent: 'center',\r\n\t\t\t\t\t\t\t\tminWidth: 400,\r\n\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\tm: 1,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'grey.200',\r\n\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\r\n\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={40} height={40} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={25} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={150} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t\t<Skeleton variant=\"rounded\" width={360} height={11} />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{/* Error State */}\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<Box sx={{ p: 2 }}>\r\n\t\t\t\t\t\t<Alert severity=\"error\">{error}</Alert>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{/* Notifications List */}\r\n\t\t\t\t{!loading && !error && notifications.length > 0 && (\r\n\t\t\t\t\t<Box sx={{ maxHeight: 420, overflowY: 'auto', p: 1 }} onScroll={handleScroll}>\r\n\t\t\t\t\t\t{notifications.map((notification) => (\r\n\t\t\t\t\t\t\t<div key={notification.id}>\r\n\t\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\t\tonClick={() => handleNotificationClick(notification.id)}\r\n\t\t\t\t\t\t\t\t\tsx={({ palette }) => ({\r\n\t\t\t\t\t\t\t\t\t\tpy: 1,\r\n\t\t\t\t\t\t\t\t\t\tpx: 1,\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: !notification.read ? palette.theme.grey[200] : 'transparent',\r\n\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${palette.grey[200]}`,\r\n\t\t\t\t\t\t\t\t\t\tmarginBottom: '4px !important',\r\n\t\t\t\t\t\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: palette.theme.grey[200],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\talignItems: 'flex-start',\r\n\t\t\t\t\t\t\t\t\t\tminHeight: 'auto',\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<ListItemAvatar sx={{ minWidth: 48, mt: 0 }}>\r\n\t\t\t\t\t\t\t\t\t\t{mainModuleIcons?.[notification.module] ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 40,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: 40,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: '0.875rem',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: mainModuleBgColors[notification.module] || 'primary.main',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'white',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t'& img': {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: '28px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: '28px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tobjectFit: 'contain',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={mainModuleIcons?.[notification.module]}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{notification.avatar ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 40,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 40,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: '0.875rem',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'primary.main',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'white',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.avatar}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Avatar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 36,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 36,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: 'grey.600',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '8px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getNotificationIcon(notification)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Avatar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</ListItemAvatar>\r\n\t\t\t\t\t\t\t\t\t<ListItemText\r\n\t\t\t\t\t\t\t\t\t\tsx={{ margin: 0, pr: 1 }}\r\n\t\t\t\t\t\t\t\t\t\tprimary={\r\n\t\t\t\t\t\t\t\t\t\t\t// Line 1: title seriesNumber statusIcon\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap', mb: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s3\" weight=\"bold\" color=\"grey.1000\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.title}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{notification.seriesNumber && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s4\" sx={{ color: 'text.secondary', fontWeight: 500 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.seriesNumber}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{getStatusIcon(notification.type)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tsecondary={\r\n\t\t\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Line 2: Customer / Vendor label + name */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{notification.customerName && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s4\" color=\"grey.800\" sx={{ display: 'block', mb: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography component=\"span\" type=\"s5\" sx={{ fontSize: '0.7rem !important', color: 'text.secondary', mr: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.module === 'purchase' ? 'Vendor:' : 'Customer:'}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.customerName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Line 3: Approved by {name} · timestamp */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.performedByName && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s5\" sx={{ fontSize: '0.7rem !important', color: 'text.secondary' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getPerformerLabel(notification.type)} {notification.performedByName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.performedByName && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ height: 4, width: 4, borderRadius: '100%', backgroundColor: 'grey.400', flexShrink: 0 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type=\"s5\" color=\"primary\" sx={{ fontSize: '0.65rem !important' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{notification.timestamp}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t{!notification.read && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: 10,\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: 10,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '50%',\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'primary.main',\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmt: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t))}\r\n\r\n\t\t\t\t\t\t{/* Loading More Indicator */}\r\n\t\t\t\t\t\t{loadingMore && (\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', justifyContent: 'center', py: 2.5, px: 3 }}>\r\n\t\t\t\t\t\t\t\t<CircularProgress size={20} />\r\n\t\t\t\t\t\t\t\t<Typography variant=\"body2\" sx={{ ml: 1.5, color: 'text.secondary' }}>\r\n\t\t\t\t\t\t\t\t\tLoading more...\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{/* End of List Indicator */}\r\n\t\t\t\t\t\t{!pagination.hasMore && notifications.length > 0 && (\r\n\t\t\t\t\t\t\t<Box sx={{ textAlign: 'center', py: 1.5, px: 2 }}>\r\n\t\t\t\t\t\t\t\t<Typography type=\"s3\" color=\"grey.800\" textAlign=\"center\">\r\n\t\t\t\t\t\t\t\t\tNo more notifications\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{/* Empty State */}\r\n\t\t\t\t{!loading && !error && notifications.length === 0 && (\r\n\t\t\t\t\t<Box sx={{ p: 4, textAlign: 'center' }}>\r\n\t\t\t\t\t\t<Notification sx={{ fontSize: 56, color: 'text.secondary', mb: 2 }} />\r\n\t\t\t\t\t\t<Typography type=\"s1\" color=\"grey.800\" sx={{ mb: 1 }} textAlign=\"center\">\r\n\t\t\t\t\t\t\tNo notifications yet\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\t\t</Box>\r\n\t)\r\n}\r\n\r\nexport { NotificationMenu };\r\nexport default NotificationMenu\r\n","// components/header/Header.tsx - Complete updated version with English fallback\r\nimport React, { useState, useCallback, useMemo } from \"react\";\r\nimport { Link, matchRoutes, useLocation, useNavigate } from \"react-router-dom\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport LockIcon from \"@mui/icons-material/Lock\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport Menu from \"@mui/material/Menu\";\r\nimport KeyboardBackspaceIcon from \"@mui/icons-material/KeyboardBackspace\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\r\n\r\n\r\nimport { Pathname } from \"../../constants/pathnames/pathname\"; // Removed - should be passed as props\r\nimport Typography from \"../typography/typography\";\r\nimport logo, { images } from \"../../assets/images\";\r\nimport Select from \"../select/select\";\r\nimport modules from \"../../constants/modules\"; // Removed - should be passed as props\r\nimport Avatar from \"../avatar/avatar\";\r\nimport { useAuth } from \"../../hooks/useAuth\";\r\nimport ConfirmPopUp from \"../confirm-modal/confirm-modal\";\r\nimport formatText from \"../../utils/format-text\";\r\nimport \"./header.scss\";\r\nimport { useLanguage } from \"../../hooks/useLangauge\";\r\nimport { Eye } from \"../icons\";\r\nimport ResetPasswordModal from \"../reset-password-modal/reset-password-modal\";\r\nimport NotificationMenu from \"./components/notification-menu/notification-menu\";\r\nimport { getApiConfig } from \"@/utils\";\r\n\r\ninterface ILanguage {\r\n label: string;\r\n code: string;\r\n direction: string;\r\n}\r\n\r\ninterface IModule {\r\n label: any;\r\n link: string;\r\n sidebar: string;\r\n icon: string;\r\n permission: string;\r\n bg: string;\r\n connectedRoutes: string[];\r\n translationModule: string;\r\n}\r\n\r\n\r\nexport function Header(props: any): React.ReactElement {\r\n const navigate = useNavigate();\r\n const { t } = useTranslation();\r\n const location = useLocation();\r\n const { logout, user } = useAuth();\r\n const config = getApiConfig();\r\n\r\n const {\r\n languages,\r\n currentLanguage,\r\n changeLanguage,\r\n isLoading: languagesLoading,\r\n error: languageContextError,\r\n isFallbackActive,\r\n fetchLanguages,\r\n isRtl\r\n } = useLanguage();\r\n\r\n const { pathname } = location;\r\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\r\n const [logoutConfirmation, setLogoutConfirmation] = useState<boolean>(false);\r\n const [localLanguageError, setLocalLanguageError] = useState<string | null>(null);\r\n const [showModal, setShowModal] = useState(false);\r\n\r\n const u_data = localStorage.getItem(\"_u_data\") || undefined;\r\n const userData = u_data ? JSON.parse(u_data) : \"\";\r\n const isMenuOpen = Boolean(anchorEl);\r\n\r\n const handleLogoutConfirmation = () =>\r\n setLogoutConfirmation(!logoutConfirmation);\r\n\r\n const checkMatchedRoutes = useCallback(\r\n (paths: string[] | string) => {\r\n const shouldMatch: { path: string }[] = Array.isArray(paths)\r\n ? paths.map((path: string) => ({ path }))\r\n : [{ path: paths }];\r\n\r\n return Boolean(matchRoutes(shouldMatch, location));\r\n },\r\n [location],\r\n );\r\n\r\n const erp_modules = useMemo<IModule[]>(() => modules(t), [t]);\r\n\r\n const selectedModule = useMemo<IModule | null>(() => {\r\n return (\r\n erp_modules.find(\r\n (module: IModule) =>\r\n module?.link?.toLowerCase() === pathname.toLowerCase() ||\r\n checkMatchedRoutes(module.connectedRoutes),\r\n ) || null\r\n );\r\n }, [erp_modules, pathname, checkMatchedRoutes]);\r\n\r\n const handleChangePasswordView = () => {\r\n setShowModal(true);\r\n }\r\n\r\n // Enhanced language change handler with validation and error handling\r\n const onChangeLang = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const lang_code = e.target.value;\r\n\r\n // Clear any previous errors\r\n setLocalLanguageError(null);\r\n\r\n // Validate the language exists before changing\r\n if (!languages || languages.length === 0) {\r\n const errorMsg = t('header.language_not_available') || 'Languages not available';\r\n setLocalLanguageError(errorMsg);\r\n return;\r\n }\r\n\r\n const languageExists = languages.some((lang: ILanguage) => lang.code === lang_code);\r\n\r\n if (languageExists) {\r\n try {\r\n changeLanguage(lang_code);\r\n } catch (error) {\r\n const errorMsg = error instanceof Error ? error.message : 'Failed to change language';\r\n setLocalLanguageError(errorMsg);\r\n }\r\n } else {\r\n const errorMsg = t('header.language_not_found', { language: lang_code }) ||\r\n `Selected language \"${lang_code}\" is not available`;\r\n setLocalLanguageError(errorMsg);\r\n }\r\n };\r\n\r\n // Retry language loading\r\n const handleRetryLanguages = async () => {\r\n setLocalLanguageError(null);\r\n try {\r\n await fetchLanguages();\r\n } catch (error) {\r\n const errorMsg = 'Failed to reload languages';\r\n setLocalLanguageError(errorMsg);\r\n }\r\n };\r\n\r\n\r\n const handleProfileMenuOpen = (event: React.MouseEvent<HTMLElement>) =>\r\n setAnchorEl(event.currentTarget);\r\n\r\n const handleMenuClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleChange = (event: any) => {\r\n const selectedLink = event.target.value;\r\n setTimeout(() => {\r\n navigate(selectedLink);\r\n }, 300);\r\n };\r\n\r\n const handleBackButton = () => {\r\n window.history.back();\r\n };\r\n\r\n // Get current language display value with fallback indication\r\n const getCurrentLanguageDisplay = (): string => {\r\n if (!currentLanguage) return t('header.select_language') || 'Select Language';\r\n\r\n // Show fallback indicator for better UX\r\n if (isFallbackActive || languageContextError) {\r\n return `${currentLanguage.label}`;\r\n }\r\n\r\n return currentLanguage.label;\r\n };\r\n\r\n // Create English fallback for consistent display\r\n const createEnglishFallback = (): ILanguage => ({\r\n code: 'en',\r\n label: 'English',\r\n direction: 'ltr'\r\n });\r\n\r\n // Get languages for dropdown - ensure English is always available\r\n const getLanguagesForDropdown = (): ILanguage[] => {\r\n if (!languages || languages.length === 0) {\r\n // If no languages available, show only English\r\n return [createEnglishFallback()];\r\n }\r\n\r\n // Ensure English is in the list\r\n const hasEnglish = languages.some(lang => lang.code === 'en');\r\n if (!hasEnglish) {\r\n return [createEnglishFallback(), ...languages];\r\n }\r\n\r\n return languages;\r\n };\r\n\r\n // Render language selector based on different states\r\n const renderLanguageSelector = () => {\r\n const availableLanguages = getLanguagesForDropdown();\r\n const displayValue = currentLanguage?.code || 'en'; // Default to English\r\n\r\n // Loading state\r\n if (languagesLoading) {\r\n return (\r\n <Box className=\"language-loading\">\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n {'Loading...'}\r\n </Typography>\r\n </Box>\r\n );\r\n }\r\n\r\n // Always show dropdown with at least English available\r\n return (\r\n <Select\r\n onChange={onChangeLang}\r\n size=\"small\"\r\n value={displayValue}\r\n renderValue={() => getCurrentLanguageDisplay()}\r\n error={!!localLanguageError}\r\n className={`language-select ${isFallbackActive || languageContextError ? 'language-fallback-active' : ''}`}\r\n\r\n >\r\n {availableLanguages.map(({ code, label }: ILanguage) => (\r\n <MenuItem key={code} value={code}>\r\n <Typography\r\n type=\"s4\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n\r\n >\r\n {label}\r\n {/* Show fallback indicator in dropdown */}\r\n {/* {(isFallbackActive || languageContextError) && code === 'en' && \r\n ` (${t('header.fallback') || 'Fallback'})`\r\n } */}\r\n </Typography>\r\n </MenuItem>\r\n ))}\r\n\r\n {/* Show retry option if there's an error */}\r\n {languageContextError && (\r\n <MenuItem onClick={handleRetryLanguages} style={{ fontStyle: 'italic' }}>\r\n <Typography\r\n type=\"s4\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.500\"\r\n >\r\n 🔄 {t('header.retry_languages') || 'Retry loading languages'}\r\n </Typography>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n );\r\n };\r\n\r\n const menuId = \"primary-search-account-menu\";\r\n const renderMenu = (\r\n <Menu\r\n className=\"main-profile-menu\"\r\n anchorEl={anchorEl}\r\n id={menuId}\r\n keepMounted\r\n open={isMenuOpen}\r\n onClose={handleMenuClose}\r\n >\r\n <MenuItem className=\"user-assigned\">\r\n <span>{t('common.assigned_roles') || 'Assigned roles'}</span>\r\n </MenuItem>\r\n <MenuItem className=\"user-data-wrap\" value={userData.role_id}>\r\n <ListItemIcon>\r\n <Avatar size={27} alt={userData.role_name} />\r\n </ListItemIcon>\r\n <ListItemText className=\"size15\">\r\n {userData.role_name}\r\n </ListItemText>\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n <img src={images.tickicon} alt=\"Active\" />\r\n </Typography>\r\n </MenuItem>\r\n <Divider />\r\n <MenuItem\r\n className=\"user-assigned\"\r\n onClick={() => {\r\n handleChangePasswordView();\r\n setAnchorEl(null);\r\n }}\r\n >\r\n <ListItemIcon>\r\n <Eye fontSize=\"medium\" width={20} height={20} htmlColor=\"#292D32\" />\r\n </ListItemIcon>\r\n <ListItemText className=\"size15\">{t(\"common.change_password\")}</ListItemText>\r\n </MenuItem>\r\n <Divider />\r\n <MenuItem\r\n className=\"menu-item-color\"\r\n onClick={() => {\r\n handleLogoutConfirmation();\r\n setAnchorEl(null);\r\n }}\r\n >\r\n <ListItemIcon>\r\n <img src={images.logout} alt=\"logout\" />\r\n </ListItemIcon>\r\n <ListItemText className=\"size15\">{t(\"common.logout\")}</ListItemText>\r\n </MenuItem>\r\n </Menu>\r\n );\r\n\r\n const appLogo = getApiConfig().appLogo || images.logo\r\n\r\n return (\r\n <>\r\n <Box className=\"main-box\">\r\n {!props.isDropdownShow && (\r\n <Link to={user ? Pathname.DASHBOARD : Pathname.LOGIN}>\r\n <img src={appLogo} alt=\"logo\" height={55}/>\r\n </Link>\r\n )}\r\n <Box className=\"second-box\">\r\n {props.isDropdownShow && (\r\n <>\r\n <IconButton onClick={handleBackButton}>\r\n <KeyboardBackspaceIcon\r\n className={isRtl ? \"arrow-pointer_rtl\" : \"arrow-pointer\"}\r\n />\r\n </IconButton>\r\n <Box width={250}>\r\n <Select\r\n fullWidth\r\n placeholder=\"Placeholder\"\r\n size={\"small\"}\r\n value={selectedModule?.link || \"\"}\r\n onChange={handleChange}\r\n className=\"select-box\"\r\n variant=\"outlined\"\r\n renderValue={(value: string) => (\r\n <>\r\n {selectedModule ? (\r\n <Box className=\"selected-menu-box\">\r\n <img\r\n src={selectedModule.icon}\r\n alt={selectedModule.label}\r\n />\r\n {selectedModule.label}\r\n </Box>\r\n ) : (\r\n value\r\n )}\r\n </>\r\n )}\r\n >\r\n {erp_modules.map((module: any, index: number) => (\r\n <MenuItem\r\n className=\"select-box-menu-item\"\r\n value={module.link}\r\n key={index}\r\n >\r\n <img src={module.icon} alt={module.label} />\r\n {module.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Box>\r\n </>\r\n )}\r\n </Box>\r\n <Box className=\"header-right-wrap\">\r\n {/* Language Selector with Enhanced Fallback Support */}\r\n <Box className=\"language-selector-wrapper\">\r\n {renderLanguageSelector()}\r\n </Box>\r\n\r\n {/* <IconButton\r\n size=\"small\"\r\n aria-label=\"notification bell\"\r\n className=\"p-0\"\r\n >\r\n <img src={logo.notification} alt=\"notification icon\" />\r\n </IconButton> */}\r\n <NotificationMenu />\r\n <IconButton\r\n size=\"small\"\r\n aria-label=\"help\"\r\n className=\"p-0\"\r\n >\r\n <img src={logo.question} alt=\"question icon\" />\r\n </IconButton>\r\n <img src={logo.vdivider} alt=\"divider icon\" />\r\n {localStorage.getItem(\"_tid\") ? (\r\n <Box className=\"user-profile-box\" onClick={handleProfileMenuOpen}>\r\n <Avatar\r\n size={32}\r\n src={user?.profile_image ? `${config?.s3BucketUrl}${user?.profile_image}` : undefined}\r\n alt={formatText(user?.full_name)}\r\n className=\"avatar-class\"\r\n />\r\n <div>\r\n <Typography className=\"profile-name\">\r\n {user?.full_name}\r\n </Typography>\r\n <Typography className=\"user-auth\">\r\n {user?.role_name}\r\n </Typography>\r\n </div>\r\n </Box>\r\n ) : (\r\n <IconButton\r\n size=\"large\"\r\n edge=\"end\"\r\n aria-label=\"account of current user\"\r\n aria-controls={menuId}\r\n aria-haspopup=\"true\"\r\n component={Link}\r\n to={Pathname.LOGIN}\r\n color=\"inherit\"\r\n >\r\n <LockIcon className=\"icon-btn\" />\r\n </IconButton>\r\n )}\r\n </Box>\r\n {renderMenu}\r\n </Box>\r\n\r\n {/* Logout Confirmation Dialog */}\r\n <ConfirmPopUp\r\n open={logoutConfirmation}\r\n title={t(\"common.logout\")}\r\n description={t('common.logout_confirmation') || \"Are you sure, you want to logout?\"}\r\n onConfirm={() => logout()}\r\n onClose={handleLogoutConfirmation}\r\n fullWidth\r\n maxWidth=\"xs\"\r\n buttonTexts={{\r\n confirm: t(\"common.logout\"),\r\n cancel: t(\"common.cancel\"),\r\n }}\r\n />\r\n\r\n <ResetPasswordModal showModal={showModal} setShowModal={setShowModal} />\r\n\r\n </>\r\n );\r\n}\r\n\r\nexport default Header;","import { styled } from \"@mui/material/styles\";\nimport MuiAppBar, { AppBarProps as MuiAppBarProps } from \"@mui/material/AppBar\";\nimport Toolbar from \"@mui/material/Toolbar\";\n// import MenuIcon from \"@mui/icons-material/Menu\";\nimport IconButton from \"@mui/material/IconButton\";\n\n// import { Box, FormControl, FormControlLabel, FormLabel, Radio, RadioGroup, ThemeProvider } from '@mui/material';\n\nimport Header from \"../header/header\";\n// import ThemeSelector from \"../../utils/themeSelector\";\n\nimport \"./appbar.scss\";\nimport images from \"../../assets/images\";\n// import { Box } from \"@mui/material\";\n\nlet drawerWidth: any;\n\ninterface AppBarProps extends MuiAppBarProps {\n open?: boolean;\n}\n\n// const getTheme = (selectedTheme: any) => {\n// switch (selectedTheme) {\n// case ThemeSelector.PRIMARY:\n// return themes.redStone;\n// case ThemeSelector.SECONDARY:\n// return themes.blueNavy;\n// case ThemeSelector.TERTIARY:\n// return themes.oliveGreen;\n// default:\n// return themes.redStone;\n// }\n// };\n\nconst AppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => prop !== \"open\",\n})<AppBarProps>(({ theme, open }) => ({\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n ...(open && {\n marginLeft: document.body.dir === \"ltr\" ? drawerWidth : 0,\n marginRight: document.body.dir === \"rtl\" ? drawerWidth : 0,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n boxShadow: \"none\",\n}));\n\nexport const AppBarWrapper = (props: any) => {\n drawerWidth = props.width;\n\n // const handleThemeChange = (e: any) => setSelectedTheme(e.target.value);\n\n return (\n <AppBar\n position=\"fixed\"\n open={props?.open}\n sx={(theme) => ({\n borderBottom: \"1px solid\",\n borderColor: theme.palette.theme?.secondary[200],\n backgroundColor: theme.palette.theme?.secondary[100],\n })}\n >\n {/* <FormControl>\n <FormLabel id=\"theme-radio-buttons-group-label\">Theme</FormLabel>\n <RadioGroup\n row\n value={selectedTheme}\n onChange={handleThemeChange}\n aria-labelledby=\"theme-radio-buttons-group-label\"\n name=\"row-radio-buttons-group\"\n >\n {Object.keys(ThemeSelector)?.map((variant: any, index: any) => (\n <FormControlLabel\n key={index}\n value={ThemeSelector[variant]}\n control={<Radio />}\n label={ThemeSelector[variant]}\n sx={{\n '.MuiFormControlLabel-label': {\n color: 'theme.text',\n },\n }}\n />\n ))}\n </RadioGroup>\n </FormControl> */}\n <Toolbar sx={{ backgroundColor: 'grey.100'}}>\n {props?.handleDrawerOpen ? (\n <>\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n // onClick={props.handleDrawerOpen}\n edge=\"start\"\n sx={{\n marginRight: 5,\n ...(props.open && { display: \"none\" }),\n }}\n >\n {/* <MenuIcon sx={{ color: \"theme.secondary.1000\" }} /> */}\n <img src={images.favicon} height={30} width={30}></img>\n </IconButton>\n {/* {!props.open && ( \n <Box marginRight={5}>\n <img src={images.favicon} height={30} width={30}></img>\n </Box>\n )} */}\n <Header isDropdownShow={true} />\n </>\n ) : (\n <>\n <Header isDropdownShow={false} />\n </>\n )}\n </Toolbar>\n {/* <Header /> */}\n </AppBar>\n );\n};\n\nexport default AppBarWrapper;\n"],"names":["MUIButton","StyledSearch","TextField","MUISelect","value","MUITextField","React","_a","o","t","e","n","a","r","MUITooltip","CloseIcon","MUIAlert","AvatarMUI","Box","yupResolver","styled","PathnameGenerator","PathnameGeneratorInventory","PathnameGeneratorManufacuring","PathnameGeneratorPurchase","RENTALROUTES","PathnameGeneratorCrm","PathnameGeneratorRental","AccountBalanceIcon","PersonIcon","AssignmentIcon","EmailIcon","WarningIcon","CheckCircleIcon","error","CancelIcon","HourglassEmptyIcon","Avatar","MenuItem","Menu","ListItemText","Divider","IconButton","logo"],"mappings":"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","x_google_ignoreList":[7]}
|