@argusoft/medplat-core 1.0.24 → 1.0.26
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/{AddFeatures-CTVs_Gr9.js → AddFeatures-CqE3v0BN.js} +2 -2
- package/dist/{AddFeatures-CTVs_Gr9.js.map → AddFeatures-CqE3v0BN.js.map} +1 -1
- package/dist/AddMenuConfiguration-BSQLl88V.js +6570 -0
- package/dist/AddMenuConfiguration-BSQLl88V.js.map +1 -0
- package/dist/{ChangePasswordModalCore-Czu7OZe6.js → ChangePasswordModalCore-DTYWRTa-.js} +3 -3
- package/dist/{ChangePasswordModalCore-Czu7OZe6.js.map → ChangePasswordModalCore-DTYWRTa-.js.map} +1 -1
- package/dist/{ConditionConfig-BECSbvY2.js → ConditionConfig-DSsgGEXS.js} +2 -2
- package/dist/{ConditionConfig-BECSbvY2.js.map → ConditionConfig-DSsgGEXS.js.map} +1 -1
- package/dist/{ManageEventConfiguration-CBi2KMB1.js → ManageEventConfiguration-DV3I5POA.js} +4 -4
- package/dist/{ManageEventConfiguration-CBi2KMB1.js.map → ManageEventConfiguration-DV3I5POA.js.map} +1 -1
- package/dist/{ManageRole-CZAk-IlM.js → ManageRole-B9bs_T00.js} +116 -116
- package/dist/ManageRole-B9bs_T00.js.map +1 -0
- package/dist/{ManageUser-BnEPFSPT.js → ManageUser-AB3_Vfp_.js} +34 -33
- package/dist/{ManageUser-BnEPFSPT.js.map → ManageUser-AB3_Vfp_.js.map} +1 -1
- package/dist/{MobileTypeEventConfigModal-C34AN-IJ.js → MobileTypeEventConfigModal-BxLympIO.js} +2 -2
- package/dist/{MobileTypeEventConfigModal-C34AN-IJ.js.map → MobileTypeEventConfigModal-BxLympIO.js.map} +1 -1
- package/dist/{OtherTypeEventConfigModal-BYjMFl0-.js → OtherTypeEventConfigModal-BeG1GrUi.js} +3 -2
- package/dist/{OtherTypeEventConfigModal-BYjMFl0-.js.map → OtherTypeEventConfigModal-BeG1GrUi.js.map} +1 -1
- package/dist/{RoleManagement-B9WgZGEj.js → RoleManagement-BIiW9uTq.js} +2 -2
- package/dist/{RoleManagement-B9WgZGEj.js.map → RoleManagement-BIiW9uTq.js.map} +1 -1
- package/dist/{TypeConfiguration-Bs5WkIa2.js → TypeConfiguration-37wp-gsl.js} +2 -2
- package/dist/{TypeConfiguration-Bs5WkIa2.js.map → TypeConfiguration-37wp-gsl.js.map} +1 -1
- package/dist/{UserList-BzHsbYel.js → UserList-2gGuDgNa.js} +38 -37
- package/dist/{UserList-BzHsbYel.js.map → UserList-2gGuDgNa.js.map} +1 -1
- package/dist/{UserListSkeleton-DhIJ5X3y.js → UserListSkeleton-BMKANCtW.js} +57 -93
- package/dist/UserListSkeleton-BMKANCtW.js.map +1 -0
- package/dist/Users-CsJ08Kjm.js +40 -0
- package/dist/Users-CsJ08Kjm.js.map +1 -0
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/dist/AddMenuConfiguration-m3R8FDhj.js +0 -5570
- package/dist/AddMenuConfiguration-m3R8FDhj.js.map +0 -1
- package/dist/ManageRole-CZAk-IlM.js.map +0 -1
- package/dist/UserListSkeleton-DhIJ5X3y.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserList-BzHsbYel.js","sources":["../src/views/Users/UserFilterForm.jsx","../src/views/Users/UserList.jsx"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport React, { lazy, Suspense, useEffect, useState } from \"react\";\nconst LocationSelectionComponent = lazy(\n () =>\n import(\"@/views/feature-components/LocationDirective/LocationDirectiveV2\"),\n);\nimport { Button, InputLabel, Switch } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { getRoles } from \"../../services/Users\";\nimport CustomDropdown from \"@/views/custom-components/CustomDropdown\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { useDispatch } from \"react-redux\";\nimport { setUserDetails } from \"@/store/reducers/AuthenticationReducer\";\nimport { useLocation } from \"react-router\";\nimport {\n UserFilterFormSkeleton,\n UserFilterFormSwitchButtonSkeleton,\n} from \"./Skeletons/UserListSkeleton\";\nimport implementationConfig from \"@/common/config/implementationConfig\";\n\nconst UserFilterForm = ({\n handleOverlayState,\n setIsLoading,\n isLoading,\n setLocationId,\n setRoleDetails,\n roleDetails,\n status,\n setStatus,\n selectedLocation,\n setSelectedLocation,\n filterRequired,\n setUserFilterPreference,\n user,\n setFilterRequired,\n locationIdRef,\n locations,\n setLocations,\n setAdminRoleIdsStats,\n}) => {\n const [roles, setRoles] = useState([]);\n\n const trackEvent = useTrackEvent();\n const { translate } = useTranslateProvider();\n const methods = useForm({ mode: \"onChange\" });\n const dispatch = useDispatch();\n const location = useLocation();\n const {\n control,\n handleSubmit,\n formState: { errors },\n getValues,\n setValue,\n clearErrors,\n } = methods;\n\n const loadInitialData = async () => {\n try {\n const { data } = await getRoles({}, { showLoader: false });\n setRoles(data);\n if (roleDetails?.id) {\n setValue(\"roleId\", roleDetails.id);\n }\n if (status) {\n setValue(\"status\", status);\n }\n if (\n Object.keys(user?.userFilterPreference || {})?.length > 0 &&\n location?.state?.fromManageUser === true\n ) {\n setValue(\"roleId\", user?.userFilterPreference?.roleid);\n setValue(\"status\", user?.userFilterPreference?.status);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n useEffect(() => {\n loadInitialData();\n }, []);\n\n const onSubmit = async () => {\n try {\n setIsLoading((cur) => !cur);\n setAdminRoleIdsStats([]);\n trackEvent(\"button_click\", {\n button_name: `User Filter-filter-button`,\n button_type: \"filter\",\n button_id: \"userfilterform-search-button\",\n });\n\n const status = getValues(\"status\") || \"BOTH\";\n if (status) {\n setStatus(status);\n }\n const searchObject = {\n limit: 50,\n offset: 0,\n order: \"asc\",\n orderby: \"userName\",\n status,\n };\n\n const selectedLocationId =\n selectedLocation?.finalSelected?.optionSelected?.id;\n if (selectedLocationId) {\n searchObject[\"locationId\"] = selectedLocationId;\n setLocationId(selectedLocationId);\n } else {\n setLocationId(null);\n }\n\n const selectedRole = roles.find(\n (item) => item.id === getValues(\"roleId\"),\n );\n if (selectedRole?.id) {\n searchObject[\"roleid\"] = selectedRole.id;\n setRoleDetails(selectedRole);\n } else {\n setRoleDetails(null);\n }\n setUserFilterPreference(searchObject);\n dispatch(\n setUserDetails({\n ...user,\n userFilterPreference: {\n ...searchObject,\n filterRequired,\n selectedLocation,\n },\n }),\n );\n trackEvent(\"filter\", {\n filter_type: [\"location\", \"role\", \"status\"],\n ...searchObject,\n });\n setIsLoading((cur) => !cur);\n handleOverlayState();\n } catch (error) {\n showToast({ message: `error : ${error?.message}`, type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n return (\n <FormProvider {...methods}>\n <Grid\n className=\"m-[1rem]\"\n component=\"form\"\n onSubmit={(event) => {\n if (Object.keys(errors).length > 0) {\n event.preventDefault(); // Prevent form submission\n return;\n }\n handleSubmit(onSubmit)(event);\n }}\n data-testid=\"userfilterform-container-grid\"\n noValidate\n >\n <UserFilterFormSwitchButtonSkeleton isLoading={isLoading}>\n <Grid className=\"flex items-center\">\n <InputLabel>{translate(\"Location Filter Required\")} :</InputLabel>\n <Switch\n defaultChecked\n checked={filterRequired}\n onChange={(e) => {\n setFilterRequired(e.target.checked);\n if (!e.target.checked) {\n locationIdRef.current = null;\n clearErrors(\"level1\");\n }\n }}\n />\n </Grid>\n </UserFilterFormSwitchButtonSkeleton>\n\n {filterRequired === true && (\n <Suspense>\n <LocationSelectionComponent\n childForm={true}\n selectedLocation={selectedLocation}\n setSelectedLocation={setSelectedLocation}\n templateType=\"inline\"\n disabled={isLoading}\n locations={locations}\n setLocations={setLocations}\n fetchAccordingToUserAoi={implementationConfig.user.filterLocationsByUserAoi}\n // Add any other props needed for your use case\n />\n </Suspense>\n )}\n <UserFilterFormSkeleton isLoading={isLoading}>\n <Grid>\n <InputLabel data-testid=\"userfilterform-role-label\">\n {translate(\"Role\")}\n </InputLabel>\n\n <CustomDropdown\n control={control}\n name=\"roleId\"\n options={roles}\n displayName=\"name\"\n optionValue=\"id\"\n errors={errors}\n dataTestId=\"userfilterform-role-dropdown\"\n className=\"mb-[0.3125rem]\"\n />\n\n <InputLabel\n className=\"mt-2\"\n data-testid=\"userfilterform-status-label\"\n >\n {translate(\"Status\")}\n </InputLabel>\n\n <CustomDropdown\n control={control}\n name=\"status\"\n defaultValue=\"BOTH\"\n options={[\"ACTIVE\", \"INACTIVE\", \"BOTH\"]}\n errors={errors}\n dataTestId=\"userfilterform-status-dropdown\"\n />\n <Grid\n container\n spacing={1}\n marginTop={1}\n justifyContent=\"flex-end\"\n data-testid=\"userfilterform-buttons-container\"\n >\n <Grid item data-testid=\"userfilterform-closebutton-item\">\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => handleOverlayState()}\n data-testid=\"userfilterform-close-button\"\n >\n {translate(\"Close\")}\n </Button>\n </Grid>\n\n <Grid item data-testid=\"userfilterform-searchbutton-item\">\n <Button\n variant=\"contained\"\n type=\"submit\"\n data-testid=\"userfilterform-search-button\"\n >\n {translate(\"Search\")}\n </Button>\n </Grid>\n </Grid>\n </Grid>\n </UserFilterFormSkeleton>\n </Grid>\n </FormProvider>\n );\n};\n\nexport default UserFilterForm;\n\nUserFilterForm.propTypes = {\n handleOverlayState: PropTypes.any,\n setUsersData: PropTypes.any,\n setIsLoading: PropTypes.any,\n isLoading: PropTypes.any,\n setLocationId: PropTypes.func,\n setRoleDetails: PropTypes.func,\n roleDetails: PropTypes.any,\n status: PropTypes.any,\n setStatus: PropTypes.any,\n selectedLocation: PropTypes.any,\n setSelectedLocation: PropTypes.any,\n filterRequired: PropTypes.any,\n setFilterRequired: PropTypes.any,\n setUserFilterPreference: PropTypes.any,\n user: PropTypes.any,\n resetLocationDirective: PropTypes.any,\n locationIdRef: PropTypes.any,\n setSelectedLocationId: PropTypes.any,\n locations: PropTypes.any,\n setLocations: PropTypes.any,\n setAdminRoleIdsStats: PropTypes.any,\n};\n","import { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport {\n generateSOHCode,\n getUsersList,\n toggleUserStatus,\n} from \"../../services/Users.js\";\nimport { showToast } from \"@/common/toaster/toaster.jsx\";\nimport usePagination from \"@/hooks/usePagination.js\";\nimport { getAssignedFeatures } from \"@/utils/feature.js\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal.jsx\";\nimport CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport SideOverlay from \"@/views/custom-components/SideOverlay.jsx\";\nimport UserFilterForm from \"./UserFilterForm.jsx\";\nimport \"./Styles/Users.css\";\nimport { alpha } from \"@mui/material/styles\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { execute } from \"@/common/services/QueryBuilder\";\nimport {\n faBars,\n faFileExcel,\n faFilePdf,\n faPen,\n faPhone,\n faHospital,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n Box,\n Button,\n Card,\n CircularProgress,\n TextField,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { saveAs } from \"file-saver\";\nimport {\n default as React,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useLocation, useNavigate } from \"react-router\";\n\nimport { getRoles } from \"../../services/Users\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport * as XLSX from \"xlsx-js-style\";\nimport {\n UserListSkeleton,\n UserStatsSkeleton,\n} from \"./Skeletons/UserListSkeleton.jsx\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setUserDetails } from \"@/store/reducers/AuthenticationReducer\";\nimport useDownloadPdf from \"@/hooks/useDownloadPdf.js\";\nimport CustomStatsComponent from \"@/views/custom-components/CustomStatsComponent.jsx\";\nimport {\n faUsers,\n faCheckCircle,\n faTimesCircle,\n faUserShield,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil.js\";\n\n/**\n * @module UserList\n * @returns {JSX.Element}\n */\n\nexport default function UserList() {\n const navigate = useNavigate();\n const trackEvent = useTrackEvent();\n const [adminRolesIds, setAdminRolesId] = useState([]);\n\n //colors for stats\n let totalUserColor = \"#8688ecff\";\n let activeUserColor = \"#10b981\";\n let inactiveUserColor = \"#f43f5e\";\n let adminUserColor = \"#f59e0b\";\n let whiteColor = \"#ffffffff\";\n\n const [adminRoleIdsStats, setAdminRoleIdsStats] = useState([]);\n const [rolesIds, setRolesIds] = useState([]);\n const [userStats, setUserStats] = useState(null);\n const [userStatsLoading, setUserStatsLoading] = useState(false);\n const theme = useTheme();\n const isDark = theme.palette.mode === \"dark\";\n //status model=1,soh model =2\n const [openModel, setOpenModel] = useState(0);\n const [rights, setRights] = useState({});\n const rightsRef = useRef(rights);\n\n useEffect(() => {\n rightsRef.current = rights;\n }, [rights]);\n\n const [row, setRow] = useState(null);\n const [search, setSearch] = useState(\"\");\n const [debounceSearch, setDebounceSearch] = useState(\"\");\n const [usersData, setUsersData] = useState([]);\n const [hasMore, setHasMore] = useState(true);\n const [overlayOpen, setOverlayOpen] = useState(false);\n const [sortConfig, setSortConfig] = useState({\n sortColumn: \"userName\",\n sortOrder: \"asc\",\n });\n const [toggle, setToggle] = useState(false);\n const pageSize = 50;\n const { translate } = useTranslateProvider();\n const [isLoading, setIsLoading] = useState(false);\n const [locationId, setLocationId] = useState(null);\n const [roleDetails, setRoleDetails] = useState(null);\n const [status, setStatus] = useState(null);\n const location = useLocation();\n const dispatch = useDispatch();\n const { user } = useSelector((state) => state?.Authenticate);\n const [selectedLocationId, setSelectedLocationId] = useState(\n user?.userFilterPreference?.locationId || null,\n );\n const locationIdRef = useRef(selectedLocationId);\n const [selectedLocation, setSelectedLocation] = useState(\n (location?.state?.fromManageUser === true &&\n user?.userFilterPreference?.selectedLocation) ||\n {},\n {},\n );\n const [filterRequired, setFilterRequired] = useState(\n (location?.state?.fromManageUser === true &&\n user?.userFilterPreference?.filterRequired) ||\n false,\n );\n const [userFilterPreference, setUserFilterPreference] = useState(\n (location?.state?.fromManageUser === true && user?.userFilterPreference) ||\n {},\n );\n const [resetLocationDirective, setResetLocationDirective] = useState(0);\n const [locations, setLocations] = useState([]);\n\n /**\n * Toggles the label for the action button based on the display state of a row.\n * @function handleToggleOption\n * @param {Object} row - The row object containing the display state.\n * @param {string} row.displayState - The current display state of the row, which determines the button label.\n * @returns {void}\n */\n // const isDark = theme.palette.mode === \"dark\";\n const updatedData = useMemo(() => {\n return usersData?.map((user, index) => {\n let name = \"\";\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n return {\n ...user,\n index: index + 1,\n firstName: name.trim(),\n };\n });\n }, [usersData, isDark]);\n\n useEffect(() => {\n const getUsersStats = async () => {\n try {\n if (rolesIds.length > 0) {\n setUserStatsLoading(true);\n const response = await execute(\n {\n code: \"GET_USERS_STATS\",\n parameters: {\n locationId: userFilterPreference?.locationId || locationId,\n roleid: userFilterPreference?.roleid || roleDetails?.id || null,\n roleIds: rolesIds?.join(\",\"),\n },\n },\n { showLoader: false },\n );\n if (response?.data?.result && response?.data?.result.length > 0) {\n setUserStats(response.data.result[0]);\n }\n setUserStatsLoading(false);\n }\n } catch (error) {\n setUserStatsLoading(false);\n console.error(\"Error fetching user stats:\", error);\n }\n };\n getUsersStats();\n }, [userFilterPreference, rolesIds]);\n\n const defaultColumns = [\n { field: \"Sr. No.\", label: \"#\", align: \"left\" },\n {\n field: \"userName\",\n label: \"User Identity\".toUpperCase(),\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-48 gap-4 h-full\">\n <Box\n className=\"w-[15%] h-10 rounded-2xl flex items-center justify-center font-black text-xs shadow-sm transition-transform duration-300 group-hover:scale-110\"\n sx={{\n background: `linear-gradient(to bottom right, ${alpha(theme.palette.primary.main, 0.05)}, ${alpha(theme.palette.primary.main, 0.2)})`,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n color: theme.palette.primary.main,\n }}\n >\n {row?.firstName\n ?.split(\" \")\n .filter((n) => ![\"Mr\", \"Ms\", \"Mrs\"].includes(n))\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()}\n </Box>\n\n <div className=\"w-[80%] flex flex-col h-full justify-center pt-2\">\n <Box\n component=\"span\"\n className=\"text-sm font-black leading-tight transition-colors duration-300\"\n sx={{\n color: theme.palette.text.primary, // Dynamic text color\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n {row?.firstName}\n </Box>\n <Box\n component=\"span\"\n className=\"text-md font-bold font-mono flex items-center gap-1.5 transition-colors duration-300\"\n sx={{\n color: theme.palette.text.secondary, // Dynamic muted color\n }}\n >\n <Box\n component=\"span\"\n className=\"w-1.5 h-1.5 rounded-full transition-colors duration-300\"\n sx={{\n backgroundColor: theme.palette.divider, // Dynamic dot color\n }}\n ></Box>\n {row?.userName}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"contactNumber\",\n label: \"Phone number\".toUpperCase(),\n sortable: true,\n align: \"left\",\n sortOrder: \"asc\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-32 gap-4 h-full\">\n <div className=\"flex items-center text-md tracking-tight\">\n <Box\n className=\"w-7 h-7 rounded-xl flex items-center justify-center mr-2 shadow-sm transition-all duration-300\"\n sx={{\n backgroundColor:\n theme.palette.mode === \"dark\"\n ? alpha(theme.palette.common.white, 0.05)\n : \"rgb(248, 250, 252)\",\n color: theme.palette.text.disabled,\n \".group:hover &\": {\n backgroundColor: theme.palette.primary.main,\n color: \"white\",\n },\n }}\n >\n <FontAwesomeIcon icon={faPhone} className=\"text-xs\" />\n </Box>\n\n <Box\n component=\"span\"\n className=\"transition-colors duration-300\"\n sx={{\n color: theme.palette.text.primary,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n {row?.contactNumber || \"N/A\"}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"roleName\",\n label: \"Role Name\".toUpperCase(),\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-auto h-full\">\n <div className=\"flex flex-col gap-1.5\">\n <Box\n component=\"span\"\n className=\"px-2.5 rounded-lg text-[0.6rem] font-black uppercase tracking-widest w-fit whitespace-nowrap\"\n sx={{\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n color: theme.palette.primary.main,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n }}\n >\n {row?.roleName}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"areaOfIntervention\",\n label: \"Area of Intervention\".toUpperCase(),\n align: \"left\",\n render: (row) => {\n const formattedArea = row?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \", \",\n );\n return (\n <div className=\"flex items-center w-48 h-full\">\n <div className=\"flex flex-col gap-1.5 w-full min-w-0\">\n <Box\n className=\"flex items-center text-md pl-2\"\n sx={{ color: theme.palette.text.primary }} // Use theme color instead of slate-700\n >\n <Tooltip\n arrow\n placement=\"top\"\n title={\n <span\n dangerouslySetInnerHTML={{\n __html: row?.areaOfIntervention || \"N/A\",\n }}\n />\n }\n >\n <span\n className=\"cursor-default block w-full whitespace-normal break-words\"\n dangerouslySetInnerHTML={{\n __html: formattedArea || \"N/A\",\n }}\n />\n </Tooltip>\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"healthFacilityName\",\n label: \"Health Infrastructure\".toUpperCase(),\n align: \"left\",\n render: (row) => (\n <div className=\"flex items-center gap-3 h-full\">\n <Box\n className=\"w-8 h-8 rounded-lg flex items-center justify-center transition-all duration-300\"\n sx={{\n color: theme.palette.text.disabled,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n },\n }}\n >\n <FontAwesomeIcon icon={faHospital} />\n </Box>\n\n <Box\n component=\"span\"\n className=\"text-sm transition-colors duration-300\"\n sx={{\n color: theme.palette.text.secondary,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n <div className=\"whitespace-pre-line\">\n {row?.healthFacilityName?.replace(/<br\\s*\\/?>/gi, \"\\n\") || \"N/A\"}\n </div>\n </Box>\n </div>\n ),\n },\n {\n field: \"displayState\",\n label: \"User Status\".toUpperCase(),\n align: \"left\",\n render: (row) => {\n const isActive = row?.displayState === \"ACTIVE\";\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Box\n className=\"inline-flex items-center justify-center rounded-full text-[0.8rem] font-black border transition-all duration-500 shadow-sm px-3 w-auto min-w-[110px]\"\n sx={{\n backgroundColor: isActive\n ? theme.palette.mode === \"dark\"\n ? alpha(theme.palette.success.main, 0.15)\n : \"rgb(236, 253, 245)\"\n : theme.palette.mode === \"dark\"\n ? alpha(theme.palette.error.main, 0.15)\n : \"rgb(254, 242, 242)\",\n color: isActive\n ? theme.palette.mode === \"dark\"\n ? theme.palette.success.light\n : \"rgb(4, 120, 87)\"\n : theme.palette.mode === \"dark\"\n ? theme.palette.error.light\n : \"rgb(248, 113, 113)\",\n borderColor: isActive\n ? alpha(theme.palette.success.main, 0.3)\n : alpha(theme.palette.error.main, 0.3),\n }}\n >\n <span\n className={`w-2 h-2 rounded-full mr-2 ${isActive ? \"bg-emerald-500 animate-pulse\" : \"bg-red-400\"\n }`}\n ></span>\n {row?.displayState}\n </Box>\n </div>\n );\n },\n },\n {\n field: \"Actions\",\n label: \"Actions\".toUpperCase(),\n align: \"left\",\n },\n ];\n\n const [columns, setColumns] = useState(defaultColumns);\n useEffect(() => {\n setColumns(defaultColumns);\n }, [isDark]);\n /**\n * Handles the status toggle action for the selected user and updates the user list.\n *\n * @async\n * @function handleClickStatusModal\n * @returns {Promise<void>}\n */\n\n const handleClickStatusModal = async () => {\n const is_active = row.displayState !== \"ACTIVE\";\n try {\n await toggleUserStatus(row, { is_active });\n setOpenModel(0);\n setToggle((cur) => !cur);\n showToast({\n message: \"User State Updated Successfully\",\n type: \"success\",\n });\n } catch (error) {\n setOpenModel(0);\n setToggle((cur) => !cur);\n const errorCode = error?.response?.data?.errorcode;\n const message =\n error?.response?.data?.message ||\n error?.message ||\n \"Something went wrong\";\n console.log(errorCode, message);\n if (errorCode === 400) {\n showToast({\n message: `${message}`,\n type: \"error\",\n });\n } else {\n showToast({\n message: \"Error in Updating User State.\",\n type: \"error\",\n });\n }\n }\n };\n\n /**\n * Handles the generation of the SOH (Statement of Holdings) code for a user.\n * @async\n * @function handleClickGenerateSOHModal\n * @returns {Promise<void>} - A promise that resolves after the SOH code is generated.\n */\n\n const handleClickGenerateSOHModal = async () => {\n try {\n const response = await generateSOHCode({\n userId: row?.userId ?? row?.id,\n });\n if (response) {\n setUsersData((users) => {\n return users.map((user) => {\n return user?.userId ===\n (row?.userId ?? row?.id)\n ? { ...user, loginCode: response.data }\n : user;\n });\n });\n showToast({\n message: `You have successfully generated your login code. Your login code is : ${response.data}`,\n type: \"success\",\n });\n }\n } catch (error) {\n showToast({ message: `${error.response.data.message}`, type: \"error\" });\n } finally {\n setOpenModel(0);\n }\n };\n\n /**\n * Navigates to the user edit page for the specified user.\n * @function handleEditUser\n * @param {Object} row - The user data object.\n * @param {number} row.id - The unique ID of the user.\n * @returns {void}\n */\n\n const handleEditUser = (row) => {\n return navigate(`/ui/medplat/manage/user/${row?.userId ?? row?.id}`);\n };\n const getActions = useCallback(\n (row) => {\n return [\n rightsRef.current?.[\"update.manage.users\"] && {\n label: \"\",\n icon: (\n <FontAwesomeIcon icon={faPen} data-testid=\"userlist-button-edit\" />\n ),\n onClick: () => {\n handleEditUser(row);\n },\n iconColor: theme.palette.secondary.main,\n backgroundColor: alpha(theme.palette.secondary.main, 0.1),\n hoverBackgroundColor: theme.palette.secondary.main,\n hoverIconColor: \"white\",\n borderColor: theme.palette.secondary.main,\n rotateIcon: true,\n },\n {\n label: \"\",\n icon: (\n <FontAwesomeIcon icon={faBars} data-testid=\"userlist-button-menu\" />\n ),\n iconColor: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n hoverBackgroundColor: theme.palette.primary.main,\n hoverIconColor: \"white\",\n borderColor: theme.palette.primary.main,\n menuItems: [\n {\n label: translate(\n row.displayState === \"ACTIVE\"\n ? \"Mark as Inactive\"\n : \"Mark as Active\",\n ),\n onClick: () => {\n setOpenModel(1);\n setRow(row);\n },\n },\n row.displayState === \"ACTIVE\" &&\n !row?.loginCode && {\n label: translate(\"Generate SOH Code\"),\n onClick: () => {\n setOpenModel(2);\n setRow(row);\n },\n },\n ].filter(Boolean),\n },\n ].filter(Boolean);\n },\n [translate],\n );\n\n /**\n * Handles sorting of the user list by the specified column.\n * @function s\n * @returns {Promise<void>}\n */\n\n const handleSort = async (column) => {\n const newOrder = column.sortOrder === \"asc\" ? \"desc\" : \"asc\";\n setColumns((prev) =>\n prev.map((col) => {\n if (col.field === column.field) {\n return { ...col, sortOrder: newOrder };\n }\n return col;\n }),\n );\n setSortConfig({ sortColumn: column.field, sortOrder: newOrder });\n };\n\n /**\n * Toggles the state of the overlay.\n * @function handleOverlayState\n * @returns {void}\n */\n\n const handleOverlayState = () => {\n trackEvent(\"button_click\", {\n button_name: \"User Filter-open-button\",\n button_type: \"filter_open\",\n button_id: \"userlist-overlay-filter\",\n });\n setOverlayOpen(!overlayOpen);\n };\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebounceSearch(search);\n }, 1000);\n\n return () => clearTimeout(timer); // Cleanup previous timer\n }, [search]);\n\n /**\n * Fetches additional user data for pagination and logs the search tracking event.\n * @async\n * @function loadMoreData\n * @param {Object} pageParam - The pagination parameters for the API request.\n * @param {number} pageParam.limit - The number of items to fetch per page.\n * @param {number} pageParam.offset - The offset for pagination.\n * @returns {Promise<Array>} - A promise that resolves to an array of user data fetched from the API.\n * @throws {Error} - Displays a toast notification if an error occurs during the API call.\n *\n **/\n async function loadMoreData(pageParam, initialLoad) {\n try {\n if (rightsRef.current?.[\"view.manage.users\"]) {\n initialLoad && setIsLoading((cur) => !cur);\n\n const response = await getUsersList({\n limit: pageParam.limit,\n offset: pageParam.offset,\n locationId: userFilterPreference?.locationId || locationId,\n order: sortConfig.sortOrder,\n orderby: sortConfig.sortColumn,\n roleIds: adminRoleIdsStats?.join(\",\"),\n status: userFilterPreference?.status\n ? userFilterPreference?.status\n : status || \"BOTH\",\n ...(userFilterPreference?.roleid\n ? { roleid: userFilterPreference?.roleid }\n : roleDetails?.id && { roleid: roleDetails.id }),\n ...(search && { searchString: search }),\n });\n search !== \"\" &&\n trackEvent(\"search_tracking\", {\n searchTerm: search,\n results_count: response?.data?.length,\n search_type: \"Page Search\",\n });\n initialLoad && setIsLoading((cur) => !cur);\n return response.data;\n }\n } catch (error) {\n showToast({ message: `error ${error}`, type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n }\n\n /**\n * Custom hook for managing paginated user data.\n *\n * @CustomHook\n * @type {Object}\n * @property {Array} pageData - The paginated user data fetched from the server.\n * @property {Function} fetchNextPage - Function to fetch the next page of data.\n * @property {boolean} hasNextPage - Indicates whether more pages are available to fetch.\n * @property {boolean} isFetchingNextPage - Indicates if the next page is currently being fetched.\n **/\n\n const {\n data: pageData,\n fetchNextPage,\n hasNextPage,\n } = usePagination({\n key: [\n \"users\",\n debounceSearch,\n sortConfig.sortOrder,\n sortConfig.sortColumn,\n toggle,\n locationId,\n roleDetails?.id,\n status,\n rights,\n adminRoleIdsStats,\n ],\n queryFn: ({ pageParam }) => {\n const isInitial = !pageParam?.offset || pageParam?.offset === 0;\n return loadMoreData(pageParam, isInitial);\n },\n limit: pageSize,\n });\n\n /**\n * `useEffect` hook that loads initial data when the component mounts.\n *\n * @function useEffect\n * @async\n * @returns {void} This function does not return a value.\n */\n\n useEffect(() => {\n const loadInitialData = async () => {\n try {\n const { data } = await getRoles({}, { showLoader: false });\n const adminIds = data\n ?.filter((role) => role?.name?.toLowerCase()?.includes(\"admin\"))\n .map((role) => role.id);\n setAdminRolesId(adminIds);\n const allIds = data?.map((role) => role.id);\n setRolesIds(allIds);\n setIsLoading(true);\n const { data: featureJson } =\n await getAssignedFeatures(\"techo.manage.users\");\n featureJson && setRights(JSON.parse(featureJson));\n if (!location?.state?.fromManageUser === true) {\n dispatch(setUserDetails({ ...user, userFilterPreference: {} }));\n }\n setIsLoading(false);\n } catch (error) {\n setIsLoading(false);\n console.error(\"Error loading initial data:\", error);\n }\n };\n loadInitialData();\n }, []);\n\n /**\n * `useEffect` hook that loads initial data when the component mounts.\n * @function useEffect\n * @async\n * @returns {void} This function does not return a value.\n */\n useEffect(() => {\n const allUsers = pageData?.pages?.flat() || [];\n setHasMore(hasNextPage);\n setUsersData(allUsers);\n }, [pageData]);\n\n const getAllUser = async () => {\n try {\n const batchSize = 50000;\n let offset = 0;\n let allUsers = [];\n let hasMoreUsers = true;\n\n while (hasMoreUsers) {\n const response = await getUsersList({\n limit: batchSize,\n offset,\n locationId: userFilterPreference?.locationId || locationId,\n order: sortConfig.sortOrder,\n orderby: sortConfig.sortColumn,\n roleIds: adminRoleIdsStats?.join(\",\"),\n status: userFilterPreference?.status\n ? userFilterPreference?.status\n : status || \"BOTH\",\n ...(userFilterPreference?.roleid\n ? { roleid: userFilterPreference?.roleid }\n : roleDetails?.id && { roleid: roleDetails.id }),\n ...(search && { searchString: search }),\n });\n\n const currentBatch = response?.data || [];\n allUsers = [...allUsers, ...currentBatch];\n\n if (currentBatch.length < batchSize) {\n hasMoreUsers = false;\n } else {\n offset += batchSize;\n }\n }\n\n return allUsers;\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in retriving all Users\", type: \"error\" });\n return [];\n }\n };\n\n const processAndDownloadExcel = async (data) => {\n try {\n const now = new Date();\n const month = now.getMonth() + 1;\n const fileName = `UserList-${now.getDate()}/${month}/${now.getFullYear().toString().substr(-2)}-${now.getHours()}:${now.getMinutes()}`;\n\n const worksheet = XLSX.utils.json_to_sheet(data);\n\n const headerStyle = {\n font: { bold: true },\n alignment: { horizontal: \"center\" },\n };\n\n if (data.length > 0) {\n const range = XLSX.utils.decode_range(worksheet[\"!ref\"]);\n\n for (let C = range.s.c; C <= range.e.c; ++C) {\n const cell = worksheet[XLSX.utils.encode_cell({ r: 0, c: C })];\n if (!cell) continue;\n cell.s = headerStyle;\n }\n }\n\n const workbook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(workbook, worksheet, \"Sheet1\");\n\n const excelBuffer = XLSX.write(workbook, {\n bookType: \"xlsx\",\n type: \"array\",\n });\n\n const blob = new Blob([excelBuffer], {\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n });\n const blobSizeInMB = (blob.size / (1024 * 1024)).toFixed(2);\n\n saveAs(blob, `${fileName}.xlsx`);\n\n trackEvent(\"file_download\", {\n file_type: \"excel\",\n file_name: `${fileName}.xlsx`,\n file_size: `${blobSizeInMB} MB`,\n filter_parameters: {\n taskTypeId: usersData.id,\n },\n download_status: \"success\",\n });\n } catch (error) {\n console.error(\"Error generating Excel file:\", error);\n showToast({ message: \"Error generating Excel file\", type: \"error\" });\n }\n };\n const [disableExcel, setDisableExcel] = useState(false);\n const downloadExcel = async () => {\n try {\n setDisableExcel(true);\n const userList = await getAllUser();\n\n let taskDetails = [];\n if (userList && userList.length > 0) {\n taskDetails = userList.map((user, index) => {\n let name = \"\",\n areaOfIntervention;\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n if (user?.areaOfIntervention)\n areaOfIntervention = user?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \",\\n\",\n );\n const processedUser = {\n \"No.\": index + 1,\n NAME: name || \"NA\",\n \"USER IDENTITY\": user?.userName || \"NA\",\n \"MOBILE NUMBER\": user?.contactNumber || \"NA\",\n \"USER ROLE\": user?.roleName || \"NA\",\n \"AREA OF INTERVENTION\": areaOfIntervention || \"NA\",\n \"HEALTH INFRASTRUCTURE\": user?.healthFacilityName || \"NA\",\n \"USER STATUS\": user?.displayState || \"NA\",\n };\n\n // Convert `null` values to empty strings and boolean values to \"Yes\" or \"No\"\n Object.keys(processedUser).forEach((key) => {\n if (key === \"id\") {\n delete processedUser[key];\n } else if (processedUser[key] === null) {\n processedUser[key] = \"\";\n } else if (typeof processedUser[key] === \"boolean\") {\n processedUser[key] = processedUser[key] ? \"Yes\" : \"No\";\n }\n });\n\n return processedUser;\n });\n\n // Call the function to process data and download the Excel file\n }\n processAndDownloadExcel(taskDetails);\n setDisableExcel(false);\n } catch (error) {\n setDisableExcel(false);\n console.log(error);\n showToast({\n message: \"Error in downloading excel\",\n type: \"error\",\n });\n }\n };\n\n const downloadPdf = useDownloadPdf();\n const [disablePdf, setDisablePdf] = useState(false);\n const handleDownloadPdf = async () => {\n try {\n setDisablePdf(true);\n const usersData = await getAllUser();\n if (!usersData || usersData.length === 0) return;\n // Build columns and keys as in TableComponent\n let pdfColumns = [];\n let pdfKeys = [];\n pdfColumns.push(\"NAME\");\n pdfKeys.push(\"name\");\n defaultColumns\n .filter(\n (col) =>\n col.field !== \"Actions\" &&\n col.field !== \"index\" &&\n col.field !== \"Sr. No.\",\n )\n .forEach((col) => {\n pdfColumns.push(col.label);\n pdfKeys.push(col.field);\n });\n let taskDetails = usersData.map((user) => {\n let name = \"\",\n areaOfIntervention;\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n if (user?.areaOfIntervention)\n areaOfIntervention = user?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \",\\n\",\n );\n const processedUser = {\n ...user,\n name: name || \"NA\",\n areaOfIntervention: areaOfIntervention,\n };\n return processedUser;\n });\n\n const now = new Date();\n const month = now.getMonth() + 1;\n\n downloadPdf({\n columns: pdfColumns,\n keys: pdfKeys,\n data: taskDetails,\n fileName: `UserList-${now.getDate()}/${month}/${now.getFullYear().toString().substr(-2)}-${now.getHours()}:${now.getMinutes()}`,\n headerText: \"User List\",\n footerText: \"User List\",\n orientation: pdfColumns.length > 7 ? \"landscape\" : \"portrait\",\n });\n setDisablePdf(false);\n } catch (error) {\n setDisablePdf(false);\n console.error(error);\n }\n };\n\n const resetFilter = () => {\n setLocationId(null);\n setRoleDetails(null);\n setStatus(\"BOTH\");\n setUserFilterPreference({});\n setFilterRequired(false);\n setLocations([]);\n setAdminRoleIdsStats([]);\n // setSelectedLocation([])\n dispatch(setUserDetails({ ...user, userFilterPreference: {} }));\n setSelectedLocationId(null);\n setSelectedLocation({});\n setResetLocationDirective((cur) => {\n return cur + 1;\n });\n locationIdRef.current = null;\n handleOverlayState();\n };\n\n return !isLoading && !rights?.[\"view.manage.users\"] ? (\n <Box className=\"flex justify-center items-center w-full h-[80vh]\">\n <Card\n className=\"h-80 w-150 flex justify-center items-center\"\n data-testid=\"userlist-no-permission\"\n >\n <Typography variant=\"h5\" className=\"text-customBlue\">\n You dont have permission to view Users\n </Typography>\n </Card>\n </Box>\n ) : (\n <Grid className=\"w-[98%] mt-4 \">\n <CustomConfirmationModal\n open={openModel === 1}\n handleClose={() => setOpenModel(0)}\n handleClick={handleClickStatusModal}\n title=\"CONFIRM ACTION\"\n description=\"Are you sure you want toggle the state of this user type?\"\n dataTestId=\"userlist-modal-status-confirmation\"\n />\n <CustomConfirmationModal\n open={openModel === 2}\n handleClose={() => setOpenModel(0)}\n handleClick={handleClickGenerateSOHModal}\n title=\"CONFIRM ACTION\"\n description=\"Are you sure you want to Generate SOH code ?\"\n dataTestId=\"userlist-modal-generate-soh-confirmation\"\n />\n\n <UserListSkeleton isLoading={isLoading}>\n <Grid\n container\n className=\"flex flex-col md:flex-row mb-2 justify-between items-start md:items-center space-y-2 md:space-y-0\"\n >\n <Grid>\n <Typography\n variant=\"body2\"\n className=\"font-bold font-sans text-lg text-[var(--color-customBlue)] uppercase text-customBlue\"\n data-testid=\"notification-list-typography-title\"\n >\n {translate(\"User List\")}\n </Typography>\n </Grid>\n\n <Grid className=\"flex flex-col md:flex-row w-full md:w-auto space-y-2 md:space-y-0 md:space-x-3\">\n <Grid className=\"w-full md:w-auto\">\n <TextField\n name=\"searchQuery\"\n id=\"searchQuery\"\n className=\"w-full md:w-auto\"\n placeholder=\"Search...\"\n size=\"small\"\n onChange={(e) => setSearch(e.target?.value)}\n value={search}\n data-testid=\"userlist-textfield-search\"\n sx={{\n \"& .MuiInputBase-root\": {\n backgroundColor: (theme) => theme.palette.background.paper,\n },\n }}\n />\n </Grid>\n <div className=\"flex items-center gap-3 flex-wrap md:flex-nowrap\">\n {/* PDF + Excel group */}\n <div\n className={`flex items-center rounded-2xl p-1 shadow-sm transition-all duration-300 border ${isDark\n ? \"bg-slate-900 border-slate-800\"\n : \"bg-white border-slate-200\"\n }`}\n >\n <button\n disabled={disablePdf}\n onClick={handleDownloadPdf}\n className={`px-4 py-2 rounded-xl transition-all flex items-center gap-2 text-xs font-black uppercase tracking-wider ${isDark\n ? \"text-slate-400 hover:text-slate-100 hover:bg-slate-800\"\n : \"text-slate-600 hover:text-red-600 hover:bg-slate-50\"\n }`}\n >\n {disablePdf ? (\n <>\n <CircularProgress size={14} sx={{ color: \"inherit\" }} />\n <FontAwesomeIcon icon={faFilePdf} className=\"mr-1\" />\n Pdf\n </>\n ) : (\n <>\n <FontAwesomeIcon icon={faFilePdf} className=\"mr-1\" />\n Pdf\n </>\n )}\n </button>\n\n <button\n disabled={disableExcel}\n onClick={() => downloadExcel(usersData)}\n className={`px-4 py-2 rounded-xl transition-all flex items-center gap-2 text-xs font-black uppercase tracking-wider ml-1 ${isDark\n ? \"bg-slate-800 text-slate-100 hover:bg-slate-700\"\n : \"bg-[var(--color-tableHeader)] text-white hover:bg-[var(--color-tableHeader)]\"\n }`}\n >\n {disableExcel ? (\n <>\n <CircularProgress size={14} sx={{ color: \"inherit\" }} />\n <FontAwesomeIcon icon={faFileExcel} className=\"mr-1\" />\n Excel Data\n </>\n ) : (\n <>\n <FontAwesomeIcon icon={faFileExcel} className=\"mr-1\" />\n Excel Data\n </>\n )}\n </button>\n </div>\n\n {/* Add Button */}\n {rights?.[\"create.manage.users\"] && (\n <Button\n variant=\"contained\"\n className=\"w-auto ml-auto\"\n onClick={() => {\n trackEvent(\"button_click\", {\n button_name: \"add_user\",\n button_type: \"navigate\",\n button_id: \"userlist-button-add\",\n });\n navigate(\"/ui/medplat/manage/user\");\n }}\n size=\"small\"\n data-testid=\"userlist-button-add\"\n >\n {translate(\"Add\")}\n </Button>\n )}\n </div>\n\n {/* <Grid className=\"flex space-x-2 mt-2\">\n <FontAwesomeIcon\n icon={faFilePdf}\n size=\"2xl\"\n className=\"cursor-pointer mt-1\"\n data-testid=\"userlist-icon-pdf\"\n onClick={handleDownloadPdf}\n />\n </Grid>\n <Grid className=\"flex space-x-2 mt-2\">\n <FontAwesomeIcon\n icon={faFileExcel}\n size=\"2xl\"\n className=\"cursor-pointer mt-1\"\n onClick={() => downloadExcel(usersData)}\n data-testid=\"userlist-icon-save\"\n />\n </Grid> */}\n </Grid>\n </Grid>\n </UserListSkeleton>\n\n <UserStatsSkeleton isLoading={userStatsLoading}>\n {userStats && (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mt-4 mb-4\">\n <CustomStatsComponent\n title=\"Total Users\"\n value={userStats?.total_users || 0}\n icon={faUsers}\n bottomIndicator={totalUserColor}\n selected={status === \"BOTH\" && adminRoleIdsStats.length === 0}\n selectedBgColor={totalUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.total_users > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"BOTH\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"BOTH\",\n };\n });\n } else {\n showToast({ message: \"No users found\", type: \"warning\" });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Active Users\"\n value={userStats?.active_count || 0}\n icon={faCheckCircle}\n bottomIndicator={activeUserColor}\n selected={status === \"ACTIVE\" && adminRoleIdsStats.length === 0}\n selectedBgColor={activeUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.active_count > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"ACTIVE\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"ACTIVE\",\n };\n });\n } else {\n showToast({\n message: \"No active users found\",\n type: \"warning\",\n });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Inactive Users\"\n value={userStats?.inactive_count || 0}\n icon={faTimesCircle}\n bottomIndicator={inactiveUserColor}\n selected={status === \"INACTIVE\" && adminRoleIdsStats.length === 0}\n selectedBgColor={inactiveUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.inactive_count > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"INACTIVE\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"INACTIVE\",\n };\n });\n } else {\n showToast({\n message: \"No inactive users found\",\n type: \"warning\",\n });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Admins\"\n value={userStats?.admin_role_count || 0}\n icon={faUserShield}\n bottomIndicator={adminUserColor}\n selected={adminRoleIdsStats.length > 0}\n selectedBgColor={adminUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.admin_role_count > 0) {\n setStatus(\"BOTH\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"BOTH\",\n };\n });\n setAdminRoleIdsStats(adminRolesIds);\n } else {\n showToast({\n message: \"No active users found\",\n type: \"warning\",\n });\n }\n }}\n />\n </div>\n )}\n </UserStatsSkeleton>\n\n <CustomizedTable\n columns={columns}\n tableData={updatedData}\n actions={getActions}\n paginationConfig={{\n pagination: true,\n paginationType: \"infinite-scroll\",\n rowsPerPageInTable: pageSize,\n hasMore,\n loadMore: () => hasMore && fetchNextPage({ cancelRefetch: false }),\n }}\n styleConfig={{ cellStyle: { maxLines: 2 } }}\n isLoading={usersData ? isLoading : true}\n handleSort={handleSort}\n dataTestId=\"userlist-table-customized\"\n />\n <SideOverlay\n title=\"User Filter\"\n resetButtonLabel=\"Reset\"\n onResetClick={resetFilter}\n FormBody={UserFilterForm}\n handleOverlayState={handleOverlayState}\n overlayOpen={overlayOpen}\n dataTestId=\"userlist-overlay-filter\"\n formProps={{\n setAdminRoleIdsStats,\n setIsLoading,\n isLoading,\n setLocationId,\n setRoleDetails,\n roleDetails,\n status,\n setStatus,\n setSelectedLocation,\n selectedLocation,\n filterRequired,\n setFilterRequired,\n setUserFilterPreference,\n user,\n userFilterPreference,\n locationIdRef,\n setSelectedLocationId,\n resetLocationDirective,\n setResetLocationDirective,\n locations,\n setLocations,\n }}\n />\n </Grid>\n );\n}\n"],"names":["LocationSelectionComponent","lazy","UserFilterForm","handleOverlayState","setIsLoading","isLoading","setLocationId","setRoleDetails","roleDetails","status","setStatus","selectedLocation","setSelectedLocation","filterRequired","setUserFilterPreference","user","setFilterRequired","locationIdRef","locations","setLocations","setAdminRoleIdsStats","roles","setRoles","useState","trackEvent","useTrackEvent","translate","useTranslateProvider","methods","useForm","dispatch","useDispatch","location","useLocation","control","handleSubmit","errors","getValues","setValue","clearErrors","loadInitialData","data","getRoles","_a","_b","_c","_d","error","useEffect","onSubmit","cur","searchObject","selectedLocationId","selectedRole","item","setUserDetails","showToast","jsx","FormProvider","jsxs","Grid","event","UserFilterFormSwitchButtonSkeleton","InputLabel","Switch","e","Suspense","implementationConfig","UserFilterFormSkeleton","CustomDropdown","Button","PropTypes","UserList","navigate","useNavigate","adminRolesIds","setAdminRolesId","totalUserColor","activeUserColor","inactiveUserColor","adminUserColor","whiteColor","adminRoleIdsStats","rolesIds","setRolesIds","userStats","setUserStats","userStatsLoading","setUserStatsLoading","theme","useTheme","isDark","openModel","setOpenModel","rights","setRights","rightsRef","useRef","row","setRow","search","setSearch","debounceSearch","setDebounceSearch","usersData","setUsersData","hasMore","setHasMore","overlayOpen","setOverlayOpen","sortConfig","setSortConfig","toggle","setToggle","pageSize","locationId","useSelector","state","setSelectedLocationId","_e","userFilterPreference","_f","resetLocationDirective","setResetLocationDirective","updatedData","useMemo","index","name","response","execute","defaultColumns","Box","alpha","n","FontAwesomeIcon","faPhone","formattedArea","Tooltip","faHospital","isActive","columns","setColumns","handleClickStatusModal","is_active","toggleUserStatus","errorCode","message","handleClickGenerateSOHModal","generateSOHCode","users","handleEditUser","getActions","useCallback","faPen","faBars","handleSort","column","newOrder","prev","col","timer","loadMoreData","pageParam","initialLoad","getUsersList","pageData","fetchNextPage","hasNextPage","usePagination","isInitial","adminIds","role","allIds","featureJson","getAssignedFeatures","allUsers","getAllUser","offset","hasMoreUsers","currentBatch","processAndDownloadExcel","now","month","fileName","worksheet","XLSX.utils","headerStyle","range","C","cell","workbook","excelBuffer","XLSX.write","blob","blobSizeInMB","saveAs","disableExcel","setDisableExcel","downloadExcel","userList","taskDetails","areaOfIntervention","processedUser","key","downloadPdf","useDownloadPdf","disablePdf","setDisablePdf","handleDownloadPdf","pdfColumns","pdfKeys","resetFilter","Card","Typography","CustomConfirmationModal","UserListSkeleton","TextField","Fragment","CircularProgress","faFilePdf","faFileExcel","UserStatsSkeleton","CustomStatsComponent","faUsers","faCheckCircle","faTimesCircle","faUserShield","CustomizedTable","SideOverlay"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserList-2gGuDgNa.js","sources":["../src/views/Users/UserFilterForm.jsx","../src/views/Users/UserList.jsx"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport React, { lazy, Suspense, useEffect, useState } from \"react\";\nconst LocationSelectionComponent = lazy(\n () =>\n import(\"@/views/feature-components/LocationDirective/LocationDirectiveV2\"),\n);\nimport { Button, InputLabel, Switch } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { getRoles } from \"../../services/Users\";\nimport CustomDropdown from \"@/views/custom-components/CustomDropdown\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { useDispatch } from \"react-redux\";\nimport { setUserDetails } from \"@/store/reducers/AuthenticationReducer\";\nimport { useLocation } from \"react-router\";\nimport {\n UserFilterFormSkeleton,\n UserFilterFormSwitchButtonSkeleton,\n} from \"./Skeletons/UserListSkeleton\";\nimport implementationConfig from \"@/common/config/implementationConfig\";\n\nconst UserFilterForm = ({\n handleOverlayState,\n setIsLoading,\n isLoading,\n setLocationId,\n setRoleDetails,\n roleDetails,\n status,\n setStatus,\n selectedLocation,\n setSelectedLocation,\n filterRequired,\n setUserFilterPreference,\n user,\n setFilterRequired,\n locationIdRef,\n locations,\n setLocations,\n setAdminRoleIdsStats,\n}) => {\n const [roles, setRoles] = useState([]);\n\n const trackEvent = useTrackEvent();\n const { translate } = useTranslateProvider();\n const methods = useForm({ mode: \"onChange\" });\n const dispatch = useDispatch();\n const location = useLocation();\n const {\n control,\n handleSubmit,\n formState: { errors },\n getValues,\n setValue,\n clearErrors,\n } = methods;\n\n const loadInitialData = async () => {\n try {\n const { data } = await getRoles({}, { showLoader: false });\n setRoles(data);\n if (roleDetails?.id) {\n setValue(\"roleId\", roleDetails.id);\n }\n if (status) {\n setValue(\"status\", status);\n }\n if (\n Object.keys(user?.userFilterPreference || {})?.length > 0 &&\n location?.state?.fromManageUser === true\n ) {\n setValue(\"roleId\", user?.userFilterPreference?.roleid);\n setValue(\"status\", user?.userFilterPreference?.status);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n useEffect(() => {\n loadInitialData();\n }, []);\n\n const onSubmit = async () => {\n try {\n setIsLoading((cur) => !cur);\n setAdminRoleIdsStats([]);\n trackEvent(\"button_click\", {\n button_name: `User Filter-filter-button`,\n button_type: \"filter\",\n button_id: \"userfilterform-search-button\",\n });\n\n const status = getValues(\"status\") || \"BOTH\";\n if (status) {\n setStatus(status);\n }\n const searchObject = {\n limit: 50,\n offset: 0,\n order: \"asc\",\n orderby: \"userName\",\n status,\n };\n\n const selectedLocationId =\n selectedLocation?.finalSelected?.optionSelected?.id;\n if (selectedLocationId) {\n searchObject[\"locationId\"] = selectedLocationId;\n setLocationId(selectedLocationId);\n } else {\n setLocationId(null);\n }\n\n const selectedRole = roles.find(\n (item) => item.id === getValues(\"roleId\"),\n );\n if (selectedRole?.id) {\n searchObject[\"roleid\"] = selectedRole.id;\n setRoleDetails(selectedRole);\n } else {\n setRoleDetails(null);\n }\n setUserFilterPreference(searchObject);\n dispatch(\n setUserDetails({\n ...user,\n userFilterPreference: {\n ...searchObject,\n filterRequired,\n selectedLocation,\n },\n }),\n );\n trackEvent(\"filter\", {\n filter_type: [\"location\", \"role\", \"status\"],\n ...searchObject,\n });\n setIsLoading((cur) => !cur);\n handleOverlayState();\n } catch (error) {\n showToast({ message: `error : ${error?.message}`, type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n return (\n <FormProvider {...methods}>\n <Grid\n className=\"m-[1rem]\"\n component=\"form\"\n onSubmit={(event) => {\n if (Object.keys(errors).length > 0) {\n event.preventDefault(); // Prevent form submission\n return;\n }\n handleSubmit(onSubmit)(event);\n }}\n data-testid=\"userfilterform-container-grid\"\n noValidate\n >\n <UserFilterFormSwitchButtonSkeleton isLoading={isLoading}>\n <Grid className=\"flex items-center\">\n <InputLabel>{translate(\"Location Filter Required\")} :</InputLabel>\n <Switch\n defaultChecked\n checked={filterRequired}\n onChange={(e) => {\n setFilterRequired(e.target.checked);\n if (!e.target.checked) {\n locationIdRef.current = null;\n clearErrors(\"level1\");\n }\n }}\n />\n </Grid>\n </UserFilterFormSwitchButtonSkeleton>\n\n {filterRequired === true && (\n <Suspense>\n <LocationSelectionComponent\n childForm={true}\n selectedLocation={selectedLocation}\n setSelectedLocation={setSelectedLocation}\n templateType=\"inline\"\n disabled={isLoading}\n locations={locations}\n setLocations={setLocations}\n fetchAccordingToUserAoi={implementationConfig.user.filterLocationsByUserAoi}\n // Add any other props needed for your use case\n />\n </Suspense>\n )}\n <UserFilterFormSkeleton isLoading={isLoading}>\n <Grid>\n <InputLabel data-testid=\"userfilterform-role-label\">\n {translate(\"Role\")}\n </InputLabel>\n\n <CustomDropdown\n control={control}\n name=\"roleId\"\n options={roles}\n displayName=\"name\"\n optionValue=\"id\"\n errors={errors}\n dataTestId=\"userfilterform-role-dropdown\"\n className=\"mb-[0.3125rem]\"\n />\n\n <InputLabel\n className=\"mt-2\"\n data-testid=\"userfilterform-status-label\"\n >\n {translate(\"Status\")}\n </InputLabel>\n\n <CustomDropdown\n control={control}\n name=\"status\"\n defaultValue=\"BOTH\"\n options={[\"ACTIVE\", \"INACTIVE\", \"BOTH\"]}\n errors={errors}\n dataTestId=\"userfilterform-status-dropdown\"\n />\n <Grid\n container\n spacing={1}\n marginTop={1}\n justifyContent=\"flex-end\"\n data-testid=\"userfilterform-buttons-container\"\n >\n <Grid item data-testid=\"userfilterform-closebutton-item\">\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => handleOverlayState()}\n data-testid=\"userfilterform-close-button\"\n >\n {translate(\"Close\")}\n </Button>\n </Grid>\n\n <Grid item data-testid=\"userfilterform-searchbutton-item\">\n <Button\n variant=\"contained\"\n type=\"submit\"\n data-testid=\"userfilterform-search-button\"\n >\n {translate(\"Search\")}\n </Button>\n </Grid>\n </Grid>\n </Grid>\n </UserFilterFormSkeleton>\n </Grid>\n </FormProvider>\n );\n};\n\nexport default UserFilterForm;\n\nUserFilterForm.propTypes = {\n handleOverlayState: PropTypes.any,\n setUsersData: PropTypes.any,\n setIsLoading: PropTypes.any,\n isLoading: PropTypes.any,\n setLocationId: PropTypes.func,\n setRoleDetails: PropTypes.func,\n roleDetails: PropTypes.any,\n status: PropTypes.any,\n setStatus: PropTypes.any,\n selectedLocation: PropTypes.any,\n setSelectedLocation: PropTypes.any,\n filterRequired: PropTypes.any,\n setFilterRequired: PropTypes.any,\n setUserFilterPreference: PropTypes.any,\n user: PropTypes.any,\n resetLocationDirective: PropTypes.any,\n locationIdRef: PropTypes.any,\n setSelectedLocationId: PropTypes.any,\n locations: PropTypes.any,\n setLocations: PropTypes.any,\n setAdminRoleIdsStats: PropTypes.any,\n};\n","import { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport {\n generateSOHCode,\n getUsersList,\n toggleUserStatus,\n} from \"../../services/Users.js\";\nimport { showToast } from \"@/common/toaster/toaster.jsx\";\nimport usePagination from \"@/hooks/usePagination.js\";\nimport { getAssignedFeatures } from \"@/utils/feature.js\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal.jsx\";\nimport CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport SideOverlay from \"@/views/custom-components/SideOverlay.jsx\";\nimport UserFilterForm from \"./UserFilterForm.jsx\";\nimport \"./Styles/Users.css\";\nimport { alpha } from \"@mui/material/styles\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { execute } from \"@/common/services/QueryBuilder\";\nimport {\n faBars,\n faFileExcel,\n faFilePdf,\n faPen,\n faPhone,\n faHospital,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n Box,\n Button,\n Card,\n CircularProgress,\n TextField,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { saveAs } from \"file-saver\";\nimport {\n default as React,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useLocation, useNavigate } from \"react-router\";\n\nimport { getRoles } from \"../../services/Users\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport * as XLSX from \"xlsx-js-style\";\nimport {\n UserListSkeleton,\n UserStatsSkeleton,\n} from \"./Skeletons/UserListSkeleton.jsx\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setUserDetails } from \"@/store/reducers/AuthenticationReducer\";\nimport useDownloadPdf from \"@/hooks/useDownloadPdf.js\";\nimport CustomStatsComponent from \"@/views/custom-components/CustomStatsComponent.jsx\";\nimport {\n faUsers,\n faCheckCircle,\n faTimesCircle,\n faUserShield,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil.js\";\n\n/**\n * @module UserList\n * @returns {JSX.Element}\n */\n\nexport default function UserList() {\n const navigate = useNavigate();\n const trackEvent = useTrackEvent();\n const [adminRolesIds, setAdminRolesId] = useState([]);\n\n //colors for stats\n let totalUserColor = \"#8688ecff\";\n let activeUserColor = \"#10b981\";\n let inactiveUserColor = \"#f43f5e\";\n let adminUserColor = \"#f59e0b\";\n let whiteColor = \"#ffffffff\";\n\n const [adminRoleIdsStats, setAdminRoleIdsStats] = useState([]);\n const [rolesIds, setRolesIds] = useState([]);\n const [userStats, setUserStats] = useState(null);\n const [userStatsLoading, setUserStatsLoading] = useState(false);\n const theme = useTheme();\n const isDark = theme.palette.mode === \"dark\";\n //status model=1,soh model =2\n const [openModel, setOpenModel] = useState(0);\n const [rights, setRights] = useState({});\n const rightsRef = useRef(rights);\n\n useEffect(() => {\n rightsRef.current = rights;\n }, [rights]);\n\n const [row, setRow] = useState(null);\n const [search, setSearch] = useState(\"\");\n const [debounceSearch, setDebounceSearch] = useState(\"\");\n const [usersData, setUsersData] = useState([]);\n const [hasMore, setHasMore] = useState(true);\n const [overlayOpen, setOverlayOpen] = useState(false);\n const [sortConfig, setSortConfig] = useState({\n sortColumn: \"userName\",\n sortOrder: \"asc\",\n });\n const [toggle, setToggle] = useState(false);\n const pageSize = 50;\n const { translate } = useTranslateProvider();\n const [isLoading, setIsLoading] = useState(false);\n const [locationId, setLocationId] = useState(null);\n const [roleDetails, setRoleDetails] = useState(null);\n const [status, setStatus] = useState(null);\n const location = useLocation();\n const dispatch = useDispatch();\n const { user } = useSelector((state) => state?.Authenticate);\n const [selectedLocationId, setSelectedLocationId] = useState(\n user?.userFilterPreference?.locationId || null,\n );\n const locationIdRef = useRef(selectedLocationId);\n const [selectedLocation, setSelectedLocation] = useState(\n (location?.state?.fromManageUser === true &&\n user?.userFilterPreference?.selectedLocation) ||\n {},\n {},\n );\n const [filterRequired, setFilterRequired] = useState(\n (location?.state?.fromManageUser === true &&\n user?.userFilterPreference?.filterRequired) ||\n false,\n );\n const [userFilterPreference, setUserFilterPreference] = useState(\n (location?.state?.fromManageUser === true && user?.userFilterPreference) ||\n {},\n );\n const [resetLocationDirective, setResetLocationDirective] = useState(0);\n const [locations, setLocations] = useState([]);\n\n /**\n * Toggles the label for the action button based on the display state of a row.\n * @function handleToggleOption\n * @param {Object} row - The row object containing the display state.\n * @param {string} row.displayState - The current display state of the row, which determines the button label.\n * @returns {void}\n */\n // const isDark = theme.palette.mode === \"dark\";\n const updatedData = useMemo(() => {\n return usersData?.map((user, index) => {\n let name = \"\";\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n return {\n ...user,\n index: index + 1,\n firstName: name.trim(),\n };\n });\n }, [usersData, isDark]);\n\n useEffect(() => {\n const getUsersStats = async () => {\n try {\n if (rolesIds.length > 0) {\n setUserStatsLoading(true);\n const response = await execute(\n {\n code: \"GET_USERS_STATS\",\n parameters: {\n locationId: userFilterPreference?.locationId || locationId,\n roleid: userFilterPreference?.roleid || roleDetails?.id || null,\n roleIds: rolesIds?.join(\",\"),\n },\n },\n { showLoader: false },\n );\n if (response?.data?.result && response?.data?.result.length > 0) {\n setUserStats(response.data.result[0]);\n }\n setUserStatsLoading(false);\n }\n } catch (error) {\n setUserStatsLoading(false);\n console.error(\"Error fetching user stats:\", error);\n }\n };\n getUsersStats();\n }, [userFilterPreference, rolesIds]);\n\n const defaultColumns = [\n { field: \"Sr. No.\", label: \"#\", align: \"left\" },\n {\n field: \"userName\",\n label: \"User Identity\".toUpperCase(),\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-48 gap-4 h-full\">\n <Box\n className=\"w-[15%] h-10 rounded-2xl flex items-center justify-center font-black text-xs shadow-sm transition-transform duration-300 group-hover:scale-110\"\n sx={{\n background: `linear-gradient(to bottom right, ${alpha(theme.palette.primary.main, 0.05)}, ${alpha(theme.palette.primary.main, 0.2)})`,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n color: theme.palette.primary.main,\n }}\n >\n {row?.firstName\n ?.split(\" \")\n .filter((n) => ![\"Mr\", \"Ms\", \"Mrs\"].includes(n))\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()}\n </Box>\n\n <div className=\"w-[80%] flex flex-col h-full justify-center pt-2\">\n <Box\n component=\"span\"\n className=\"text-sm font-black leading-tight transition-colors duration-300\"\n sx={{\n color: theme.palette.text.primary, // Dynamic text color\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n {row?.firstName}\n </Box>\n <Box\n component=\"span\"\n className=\"text-md font-bold font-mono flex items-center gap-1.5 transition-colors duration-300\"\n sx={{\n color: theme.palette.text.secondary, // Dynamic muted color\n }}\n >\n <Box\n component=\"span\"\n className=\"w-1.5 h-1.5 rounded-full transition-colors duration-300\"\n sx={{\n backgroundColor: theme.palette.divider, // Dynamic dot color\n }}\n ></Box>\n {row?.userName}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"contactNumber\",\n label: \"Phone number\".toUpperCase(),\n sortable: true,\n align: \"left\",\n sortOrder: \"asc\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-32 gap-4 h-full\">\n <div className=\"flex items-center text-md tracking-tight\">\n <Box\n className=\"w-7 h-7 rounded-xl flex items-center justify-center mr-2 shadow-sm transition-all duration-300\"\n sx={{\n backgroundColor:\n theme.palette.mode === \"dark\"\n ? alpha(theme.palette.common.white, 0.05)\n : \"rgb(248, 250, 252)\",\n color: theme.palette.text.disabled,\n \".group:hover &\": {\n backgroundColor: theme.palette.primary.main,\n color: \"white\",\n },\n }}\n >\n <FontAwesomeIcon icon={faPhone} className=\"text-xs\" />\n </Box>\n\n <Box\n component=\"span\"\n className=\"transition-colors duration-300\"\n sx={{\n color: theme.palette.text.primary,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n {row?.contactNumber || \"N/A\"}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"roleName\",\n label: \"Role Name\".toUpperCase(),\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n render: (row) => {\n return (\n <div className=\"flex items-center w-auto h-full\">\n <div className=\"flex flex-col gap-1.5\">\n <Box\n component=\"span\"\n className=\"px-2.5 rounded-lg text-[0.6rem] font-black uppercase tracking-widest w-fit whitespace-nowrap\"\n sx={{\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n color: theme.palette.primary.main,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n }}\n >\n {row?.roleName}\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"areaOfIntervention\",\n label: \"Area of Intervention\".toUpperCase(),\n align: \"left\",\n render: (row) => {\n const formattedArea = row?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \", \",\n );\n return (\n <div className=\"flex items-center w-48 h-full\">\n <div className=\"flex flex-col gap-1.5 w-full min-w-0\">\n <Box\n className=\"flex items-center text-md pl-2\"\n sx={{ color: theme.palette.text.primary }} // Use theme color instead of slate-700\n >\n <Tooltip\n arrow\n placement=\"top\"\n title={\n <span\n dangerouslySetInnerHTML={{\n __html: row?.areaOfIntervention || \"N/A\",\n }}\n />\n }\n >\n <span\n className=\"cursor-default block w-full whitespace-normal break-words\"\n dangerouslySetInnerHTML={{\n __html: formattedArea || \"N/A\",\n }}\n />\n </Tooltip>\n </Box>\n </div>\n </div>\n );\n },\n },\n {\n field: \"healthFacilityName\",\n label: \"Health Infrastructure\".toUpperCase(),\n align: \"left\",\n render: (row) => (\n <div className=\"flex items-center gap-3 h-full\">\n <Box\n className=\"w-8 h-8 rounded-lg flex items-center justify-center transition-all duration-300\"\n sx={{\n color: theme.palette.text.disabled,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n },\n }}\n >\n <FontAwesomeIcon icon={faHospital} />\n </Box>\n\n <Box\n component=\"span\"\n className=\"text-sm transition-colors duration-300\"\n sx={{\n color: theme.palette.text.secondary,\n \".group:hover &\": {\n color: theme.palette.primary.main,\n },\n }}\n >\n <div className=\"whitespace-pre-line\">\n {row?.healthFacilityName?.replace(/<br\\s*\\/?>/gi, \"\\n\") || \"N/A\"}\n </div>\n </Box>\n </div>\n ),\n },\n {\n field: \"displayState\",\n label: \"User Status\".toUpperCase(),\n align: \"left\",\n render: (row) => {\n const isActive = row?.displayState === \"ACTIVE\";\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Box\n className=\"inline-flex items-center justify-center rounded-full text-[0.8rem] font-black border transition-all duration-500 shadow-sm px-3 w-auto min-w-[110px]\"\n sx={{\n backgroundColor: isActive\n ? theme.palette.mode === \"dark\"\n ? alpha(theme.palette.success.main, 0.15)\n : \"rgb(236, 253, 245)\"\n : theme.palette.mode === \"dark\"\n ? alpha(theme.palette.error.main, 0.15)\n : \"rgb(254, 242, 242)\",\n color: isActive\n ? theme.palette.mode === \"dark\"\n ? theme.palette.success.light\n : \"rgb(4, 120, 87)\"\n : theme.palette.mode === \"dark\"\n ? theme.palette.error.light\n : \"rgb(248, 113, 113)\",\n borderColor: isActive\n ? alpha(theme.palette.success.main, 0.3)\n : alpha(theme.palette.error.main, 0.3),\n }}\n >\n <span\n className={`w-2 h-2 rounded-full mr-2 ${isActive ? \"bg-emerald-500 animate-pulse\" : \"bg-red-400\"\n }`}\n ></span>\n {row?.displayState}\n </Box>\n </div>\n );\n },\n },\n {\n field: \"Actions\",\n label: \"Actions\".toUpperCase(),\n align: \"left\",\n },\n ];\n\n const [columns, setColumns] = useState(defaultColumns);\n useEffect(() => {\n setColumns(defaultColumns);\n }, [isDark]);\n /**\n * Handles the status toggle action for the selected user and updates the user list.\n *\n * @async\n * @function handleClickStatusModal\n * @returns {Promise<void>}\n */\n\n const handleClickStatusModal = async () => {\n const is_active = row.displayState !== \"ACTIVE\";\n try {\n await toggleUserStatus(row, { is_active });\n setOpenModel(0);\n setToggle((cur) => !cur);\n showToast({\n message: \"User State Updated Successfully\",\n type: \"success\",\n });\n } catch (error) {\n setOpenModel(0);\n setToggle((cur) => !cur);\n const errorCode = error?.response?.data?.errorcode;\n const message =\n error?.response?.data?.message ||\n error?.message ||\n \"Something went wrong\";\n console.log(errorCode, message);\n if (errorCode === 400) {\n showToast({\n message: `${message}`,\n type: \"error\",\n });\n } else {\n showToast({\n message: \"Error in Updating User State.\",\n type: \"error\",\n });\n }\n }\n };\n\n /**\n * Handles the generation of the SOH (Statement of Holdings) code for a user.\n * @async\n * @function handleClickGenerateSOHModal\n * @returns {Promise<void>} - A promise that resolves after the SOH code is generated.\n */\n\n const handleClickGenerateSOHModal = async () => {\n try {\n const response = await generateSOHCode({\n userId: row?.userId ?? row?.id,\n });\n if (response) {\n setUsersData((users) => {\n return users.map((user) => {\n return user?.userId ===\n (row?.userId ?? row?.id)\n ? { ...user, loginCode: response.data }\n : user;\n });\n });\n showToast({\n message: `You have successfully generated your login code. Your login code is : ${response.data}`,\n type: \"success\",\n });\n }\n } catch (error) {\n showToast({ message: `${error.response.data.message}`, type: \"error\" });\n } finally {\n setOpenModel(0);\n }\n };\n\n /**\n * Navigates to the user edit page for the specified user.\n * @function handleEditUser\n * @param {Object} row - The user data object.\n * @param {number} row.id - The unique ID of the user.\n * @returns {void}\n */\n\n const handleEditUser = (row) => {\n return navigate(`/ui/medplat/manage/user/${row?.userId ?? row?.id}`);\n };\n const getActions = useCallback(\n (row) => {\n return [\n rightsRef.current?.[\"update.manage.users\"] && {\n label: \"\",\n icon: (\n <FontAwesomeIcon icon={faPen} data-testid=\"userlist-button-edit\" />\n ),\n onClick: () => {\n handleEditUser(row);\n },\n iconColor: theme.palette.secondary.main,\n backgroundColor: alpha(theme.palette.secondary.main, 0.1),\n hoverBackgroundColor: theme.palette.secondary.main,\n hoverIconColor: \"white\",\n borderColor: theme.palette.secondary.main,\n rotateIcon: true,\n },\n {\n label: \"\",\n icon: (\n <FontAwesomeIcon icon={faBars} data-testid=\"userlist-button-menu\" />\n ),\n iconColor: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n hoverBackgroundColor: theme.palette.primary.main,\n hoverIconColor: \"white\",\n borderColor: theme.palette.primary.main,\n menuItems: [\n {\n label: translate(\n row.displayState === \"ACTIVE\"\n ? \"Mark as Inactive\"\n : \"Mark as Active\",\n ),\n onClick: () => {\n setOpenModel(1);\n setRow(row);\n },\n },\n row.displayState === \"ACTIVE\" &&\n !row?.loginCode && {\n label: translate(\"Generate SOH Code\"),\n onClick: () => {\n setOpenModel(2);\n setRow(row);\n },\n },\n ].filter(Boolean),\n },\n ].filter(Boolean);\n },\n [translate],\n );\n\n /**\n * Handles sorting of the user list by the specified column.\n * @function s\n * @returns {Promise<void>}\n */\n\n const handleSort = async (column) => {\n const newOrder = column.sortOrder === \"asc\" ? \"desc\" : \"asc\";\n setColumns((prev) =>\n prev.map((col) => {\n if (col.field === column.field) {\n return { ...col, sortOrder: newOrder };\n }\n return col;\n }),\n );\n setSortConfig({ sortColumn: column.field, sortOrder: newOrder });\n };\n\n /**\n * Toggles the state of the overlay.\n * @function handleOverlayState\n * @returns {void}\n */\n\n const handleOverlayState = () => {\n trackEvent(\"button_click\", {\n button_name: \"User Filter-open-button\",\n button_type: \"filter_open\",\n button_id: \"userlist-overlay-filter\",\n });\n setOverlayOpen(!overlayOpen);\n };\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebounceSearch(search);\n }, 1000);\n\n return () => clearTimeout(timer); // Cleanup previous timer\n }, [search]);\n\n /**\n * Fetches additional user data for pagination and logs the search tracking event.\n * @async\n * @function loadMoreData\n * @param {Object} pageParam - The pagination parameters for the API request.\n * @param {number} pageParam.limit - The number of items to fetch per page.\n * @param {number} pageParam.offset - The offset for pagination.\n * @returns {Promise<Array>} - A promise that resolves to an array of user data fetched from the API.\n * @throws {Error} - Displays a toast notification if an error occurs during the API call.\n *\n **/\n async function loadMoreData(pageParam, initialLoad) {\n try {\n if (rightsRef.current?.[\"view.manage.users\"]) {\n initialLoad && setIsLoading((cur) => !cur);\n\n const response = await getUsersList({\n limit: pageParam.limit,\n offset: pageParam.offset,\n locationId: userFilterPreference?.locationId || locationId,\n order: sortConfig.sortOrder,\n orderby: sortConfig.sortColumn,\n roleIds: adminRoleIdsStats?.join(\",\"),\n status: userFilterPreference?.status\n ? userFilterPreference?.status\n : status || \"BOTH\",\n ...(userFilterPreference?.roleid\n ? { roleid: userFilterPreference?.roleid }\n : roleDetails?.id && { roleid: roleDetails.id }),\n ...(search && { searchString: search }),\n });\n search !== \"\" &&\n trackEvent(\"search_tracking\", {\n searchTerm: search,\n results_count: response?.data?.length,\n search_type: \"Page Search\",\n });\n initialLoad && setIsLoading((cur) => !cur);\n return response.data;\n }\n } catch (error) {\n showToast({ message: `error ${error}`, type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n }\n\n /**\n * Custom hook for managing paginated user data.\n *\n * @CustomHook\n * @type {Object}\n * @property {Array} pageData - The paginated user data fetched from the server.\n * @property {Function} fetchNextPage - Function to fetch the next page of data.\n * @property {boolean} hasNextPage - Indicates whether more pages are available to fetch.\n * @property {boolean} isFetchingNextPage - Indicates if the next page is currently being fetched.\n **/\n\n const {\n data: pageData,\n fetchNextPage,\n hasNextPage,\n } = usePagination({\n key: [\n \"users\",\n debounceSearch,\n sortConfig.sortOrder,\n sortConfig.sortColumn,\n toggle,\n locationId,\n roleDetails?.id,\n status,\n rights,\n adminRoleIdsStats,\n ],\n queryFn: ({ pageParam }) => {\n const isInitial = !pageParam?.offset || pageParam?.offset === 0;\n return loadMoreData(pageParam, isInitial);\n },\n limit: pageSize,\n });\n\n /**\n * `useEffect` hook that loads initial data when the component mounts.\n *\n * @function useEffect\n * @async\n * @returns {void} This function does not return a value.\n */\n\n useEffect(() => {\n const loadInitialData = async () => {\n try {\n const { data } = await getRoles({}, { showLoader: false });\n const adminIds = data\n ?.filter((role) => role?.name?.toLowerCase()?.includes(\"admin\"))\n .map((role) => role.id);\n setAdminRolesId(adminIds);\n const allIds = data?.map((role) => role.id);\n setRolesIds(allIds);\n setIsLoading(true);\n const { data: featureJson } =\n await getAssignedFeatures(\"techo.manage.users\");\n featureJson && setRights(JSON.parse(featureJson));\n if (!location?.state?.fromManageUser === true) {\n dispatch(setUserDetails({ ...user, userFilterPreference: {} }));\n }\n setIsLoading(false);\n } catch (error) {\n setIsLoading(false);\n console.error(\"Error loading initial data:\", error);\n }\n };\n loadInitialData();\n }, []);\n\n /**\n * `useEffect` hook that loads initial data when the component mounts.\n * @function useEffect\n * @async\n * @returns {void} This function does not return a value.\n */\n useEffect(() => {\n const allUsers = pageData?.pages?.flat() || [];\n setHasMore(hasNextPage);\n setUsersData(allUsers);\n }, [pageData]);\n\n const getAllUser = async () => {\n try {\n const batchSize = 50000;\n let offset = 0;\n let allUsers = [];\n let hasMoreUsers = true;\n\n while (hasMoreUsers) {\n const response = await getUsersList({\n limit: batchSize,\n offset,\n locationId: userFilterPreference?.locationId || locationId,\n order: sortConfig.sortOrder,\n orderby: sortConfig.sortColumn,\n roleIds: adminRoleIdsStats?.join(\",\"),\n status: userFilterPreference?.status\n ? userFilterPreference?.status\n : status || \"BOTH\",\n ...(userFilterPreference?.roleid\n ? { roleid: userFilterPreference?.roleid }\n : roleDetails?.id && { roleid: roleDetails.id }),\n ...(search && { searchString: search }),\n });\n\n const currentBatch = response?.data || [];\n allUsers = [...allUsers, ...currentBatch];\n\n if (currentBatch.length < batchSize) {\n hasMoreUsers = false;\n } else {\n offset += batchSize;\n }\n }\n\n return allUsers;\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in retriving all Users\", type: \"error\" });\n return [];\n }\n };\n\n const processAndDownloadExcel = async (data) => {\n try {\n const now = new Date();\n const month = now.getMonth() + 1;\n const fileName = `UserList-${now.getDate()}/${month}/${now.getFullYear().toString().substr(-2)}-${now.getHours()}:${now.getMinutes()}`;\n\n const worksheet = XLSX.utils.json_to_sheet(data);\n\n const headerStyle = {\n font: { bold: true },\n alignment: { horizontal: \"center\" },\n };\n\n if (data.length > 0) {\n const range = XLSX.utils.decode_range(worksheet[\"!ref\"]);\n\n for (let C = range.s.c; C <= range.e.c; ++C) {\n const cell = worksheet[XLSX.utils.encode_cell({ r: 0, c: C })];\n if (!cell) continue;\n cell.s = headerStyle;\n }\n }\n\n const workbook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(workbook, worksheet, \"Sheet1\");\n\n const excelBuffer = XLSX.write(workbook, {\n bookType: \"xlsx\",\n type: \"array\",\n });\n\n const blob = new Blob([excelBuffer], {\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n });\n const blobSizeInMB = (blob.size / (1024 * 1024)).toFixed(2);\n\n saveAs(blob, `${fileName}.xlsx`);\n\n trackEvent(\"file_download\", {\n file_type: \"excel\",\n file_name: `${fileName}.xlsx`,\n file_size: `${blobSizeInMB} MB`,\n filter_parameters: {\n taskTypeId: usersData.id,\n },\n download_status: \"success\",\n });\n } catch (error) {\n console.error(\"Error generating Excel file:\", error);\n showToast({ message: \"Error generating Excel file\", type: \"error\" });\n }\n };\n const [disableExcel, setDisableExcel] = useState(false);\n const downloadExcel = async () => {\n try {\n setDisableExcel(true);\n const userList = await getAllUser();\n\n let taskDetails = [];\n if (userList && userList.length > 0) {\n taskDetails = userList.map((user, index) => {\n let name = \"\",\n areaOfIntervention;\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n if (user?.areaOfIntervention)\n areaOfIntervention = user?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \",\\n\",\n );\n const processedUser = {\n \"No.\": index + 1,\n NAME: name || \"NA\",\n \"USER IDENTITY\": user?.userName || \"NA\",\n \"MOBILE NUMBER\": user?.contactNumber || \"NA\",\n \"USER ROLE\": user?.roleName || \"NA\",\n \"AREA OF INTERVENTION\": areaOfIntervention || \"NA\",\n \"HEALTH INFRASTRUCTURE\": user?.healthFacilityName || \"NA\",\n \"USER STATUS\": user?.displayState || \"NA\",\n };\n\n // Convert `null` values to empty strings and boolean values to \"Yes\" or \"No\"\n Object.keys(processedUser).forEach((key) => {\n if (key === \"id\") {\n delete processedUser[key];\n } else if (processedUser[key] === null) {\n processedUser[key] = \"\";\n } else if (typeof processedUser[key] === \"boolean\") {\n processedUser[key] = processedUser[key] ? \"Yes\" : \"No\";\n }\n });\n\n return processedUser;\n });\n\n // Call the function to process data and download the Excel file\n }\n processAndDownloadExcel(taskDetails);\n setDisableExcel(false);\n } catch (error) {\n setDisableExcel(false);\n console.log(error);\n showToast({\n message: \"Error in downloading excel\",\n type: \"error\",\n });\n }\n };\n\n const downloadPdf = useDownloadPdf();\n const [disablePdf, setDisablePdf] = useState(false);\n const handleDownloadPdf = async () => {\n try {\n setDisablePdf(true);\n const usersData = await getAllUser();\n if (!usersData || usersData.length === 0) return;\n // Build columns and keys as in TableComponent\n let pdfColumns = [];\n let pdfKeys = [];\n pdfColumns.push(\"NAME\");\n pdfKeys.push(\"name\");\n defaultColumns\n .filter(\n (col) =>\n col.field !== \"Actions\" &&\n col.field !== \"index\" &&\n col.field !== \"Sr. No.\",\n )\n .forEach((col) => {\n pdfColumns.push(col.label);\n pdfKeys.push(col.field);\n });\n let taskDetails = usersData.map((user) => {\n let name = \"\",\n areaOfIntervention;\n if (user?.title) name += user.title + \" \";\n if (user?.firstName) name += user.firstName + \" \";\n if (user?.lastName) name += user.lastName;\n if (user?.areaOfIntervention)\n areaOfIntervention = user?.areaOfIntervention?.replace(\n /<br\\s*\\/?>/gi,\n \",\\n\",\n );\n const processedUser = {\n ...user,\n name: name || \"NA\",\n areaOfIntervention: areaOfIntervention,\n };\n return processedUser;\n });\n\n const now = new Date();\n const month = now.getMonth() + 1;\n\n downloadPdf({\n columns: pdfColumns,\n keys: pdfKeys,\n data: taskDetails,\n fileName: `UserList-${now.getDate()}/${month}/${now.getFullYear().toString().substr(-2)}-${now.getHours()}:${now.getMinutes()}`,\n headerText: \"User List\",\n footerText: \"User List\",\n orientation: pdfColumns.length > 7 ? \"landscape\" : \"portrait\",\n });\n setDisablePdf(false);\n } catch (error) {\n setDisablePdf(false);\n console.error(error);\n }\n };\n\n const resetFilter = () => {\n setLocationId(null);\n setRoleDetails(null);\n setStatus(\"BOTH\");\n setUserFilterPreference({});\n setFilterRequired(false);\n setLocations([]);\n setAdminRoleIdsStats([]);\n // setSelectedLocation([])\n dispatch(setUserDetails({ ...user, userFilterPreference: {} }));\n setSelectedLocationId(null);\n setSelectedLocation({});\n setResetLocationDirective((cur) => {\n return cur + 1;\n });\n locationIdRef.current = null;\n handleOverlayState();\n };\n\n return !isLoading && !rights?.[\"view.manage.users\"] ? (\n <Box className=\"flex justify-center items-center w-full h-[80vh]\">\n <Card\n className=\"h-80 w-150 flex justify-center items-center\"\n data-testid=\"userlist-no-permission\"\n >\n <Typography variant=\"h5\" className=\"text-customBlue\">\n You dont have permission to view Users\n </Typography>\n </Card>\n </Box>\n ) : (\n <Grid className=\"w-[98%] mt-4 \">\n <CustomConfirmationModal\n open={openModel === 1}\n handleClose={() => setOpenModel(0)}\n handleClick={handleClickStatusModal}\n title=\"CONFIRM ACTION\"\n description=\"Are you sure you want toggle the state of this user type?\"\n dataTestId=\"userlist-modal-status-confirmation\"\n />\n <CustomConfirmationModal\n open={openModel === 2}\n handleClose={() => setOpenModel(0)}\n handleClick={handleClickGenerateSOHModal}\n title=\"CONFIRM ACTION\"\n description=\"Are you sure you want to Generate SOH code ?\"\n dataTestId=\"userlist-modal-generate-soh-confirmation\"\n />\n\n <UserListSkeleton isLoading={isLoading}>\n <Grid\n container\n className=\"flex flex-col md:flex-row mb-2 justify-between items-start md:items-center space-y-2 md:space-y-0\"\n >\n <Grid>\n <Typography\n variant=\"body2\"\n className=\"font-bold font-sans text-lg text-[var(--color-customBlue)] uppercase text-customBlue\"\n data-testid=\"notification-list-typography-title\"\n >\n {translate(\"User List\")}\n </Typography>\n </Grid>\n\n <Grid className=\"flex flex-col md:flex-row w-full md:w-auto space-y-2 md:space-y-0 md:space-x-3\">\n <Grid className=\"w-full md:w-auto\">\n <TextField\n name=\"searchQuery\"\n id=\"searchQuery\"\n className=\"w-full md:w-auto\"\n placeholder=\"Search...\"\n size=\"small\"\n onChange={(e) => setSearch(e.target?.value)}\n value={search}\n data-testid=\"userlist-textfield-search\"\n sx={{\n \"& .MuiInputBase-root\": {\n backgroundColor: (theme) => theme.palette.background.paper,\n },\n }}\n />\n </Grid>\n <div className=\"flex items-center gap-3 flex-wrap md:flex-nowrap\">\n {/* PDF + Excel group */}\n <div\n className={`flex items-center rounded-2xl p-1 shadow-sm transition-all duration-300 border ${isDark\n ? \"bg-slate-900 border-slate-800\"\n : \"bg-white border-slate-200\"\n }`}\n >\n <button\n disabled={disablePdf}\n onClick={handleDownloadPdf}\n className={`px-4 py-2 rounded-xl transition-all flex items-center gap-2 text-xs font-black uppercase tracking-wider ${isDark\n ? \"text-slate-400 hover:text-slate-100 hover:bg-slate-800\"\n : \"text-slate-600 hover:text-red-600 hover:bg-slate-50\"\n }`}\n >\n {disablePdf ? (\n <>\n <CircularProgress size={14} sx={{ color: \"inherit\" }} />\n <FontAwesomeIcon icon={faFilePdf} className=\"mr-1\" />\n Pdf\n </>\n ) : (\n <>\n <FontAwesomeIcon icon={faFilePdf} className=\"mr-1\" />\n Pdf\n </>\n )}\n </button>\n\n <button\n disabled={disableExcel}\n onClick={() => downloadExcel(usersData)}\n className={`px-4 py-2 rounded-xl transition-all flex items-center gap-2 text-xs font-black uppercase tracking-wider ml-1 ${isDark\n ? \"bg-slate-800 text-slate-100 hover:bg-slate-700\"\n : \"bg-[var(--color-tableHeader)] text-white hover:bg-[var(--color-tableHeader)]\"\n }`}\n >\n {disableExcel ? (\n <>\n <CircularProgress size={14} sx={{ color: \"inherit\" }} />\n <FontAwesomeIcon icon={faFileExcel} className=\"mr-1\" />\n Excel Data\n </>\n ) : (\n <>\n <FontAwesomeIcon icon={faFileExcel} className=\"mr-1\" />\n Excel Data\n </>\n )}\n </button>\n </div>\n\n {/* Add Button */}\n {rights?.[\"create.manage.users\"] && (\n <Button\n variant=\"contained\"\n className=\"w-auto ml-auto\"\n onClick={() => {\n trackEvent(\"button_click\", {\n button_name: \"add_user\",\n button_type: \"navigate\",\n button_id: \"userlist-button-add\",\n });\n navigate(\"/ui/medplat/manage/user\");\n }}\n size=\"small\"\n data-testid=\"userlist-button-add\"\n >\n {translate(\"Add\")}\n </Button>\n )}\n </div>\n\n {/* <Grid className=\"flex space-x-2 mt-2\">\n <FontAwesomeIcon\n icon={faFilePdf}\n size=\"2xl\"\n className=\"cursor-pointer mt-1\"\n data-testid=\"userlist-icon-pdf\"\n onClick={handleDownloadPdf}\n />\n </Grid>\n <Grid className=\"flex space-x-2 mt-2\">\n <FontAwesomeIcon\n icon={faFileExcel}\n size=\"2xl\"\n className=\"cursor-pointer mt-1\"\n onClick={() => downloadExcel(usersData)}\n data-testid=\"userlist-icon-save\"\n />\n </Grid> */}\n </Grid>\n </Grid>\n </UserListSkeleton>\n\n <UserStatsSkeleton isLoading={userStatsLoading}>\n {userStats && (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mt-4 mb-4\">\n <CustomStatsComponent\n title=\"Total Users\"\n value={userStats?.total_users || 0}\n icon={faUsers}\n bottomIndicator={totalUserColor}\n selected={status === \"BOTH\" && adminRoleIdsStats.length === 0}\n selectedBgColor={totalUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.total_users > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"BOTH\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"BOTH\",\n };\n });\n } else {\n showToast({ message: \"No users found\", type: \"warning\" });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Active Users\"\n value={userStats?.active_count || 0}\n icon={faCheckCircle}\n bottomIndicator={activeUserColor}\n selected={status === \"ACTIVE\" && adminRoleIdsStats.length === 0}\n selectedBgColor={activeUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.active_count > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"ACTIVE\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"ACTIVE\",\n };\n });\n } else {\n showToast({\n message: \"No active users found\",\n type: \"warning\",\n });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Inactive Users\"\n value={userStats?.inactive_count || 0}\n icon={faTimesCircle}\n bottomIndicator={inactiveUserColor}\n selected={status === \"INACTIVE\" && adminRoleIdsStats.length === 0}\n selectedBgColor={inactiveUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.inactive_count > 0) {\n setAdminRoleIdsStats([]);\n setStatus(\"INACTIVE\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"INACTIVE\",\n };\n });\n } else {\n showToast({\n message: \"No inactive users found\",\n type: \"warning\",\n });\n }\n }}\n />\n\n <CustomStatsComponent\n title=\"Admins\"\n value={userStats?.admin_role_count || 0}\n icon={faUserShield}\n bottomIndicator={adminUserColor}\n selected={adminRoleIdsStats.length > 0}\n selectedBgColor={adminUserColor}\n selectedTitleColor={whiteColor}\n selectedValueColor={whiteColor}\n onClick={() => {\n if (userStats?.admin_role_count > 0) {\n setStatus(\"BOTH\");\n setUserFilterPreference((prev) => {\n return {\n ...prev,\n status: \"BOTH\",\n };\n });\n setAdminRoleIdsStats(adminRolesIds);\n } else {\n showToast({\n message: \"No active users found\",\n type: \"warning\",\n });\n }\n }}\n />\n </div>\n )}\n </UserStatsSkeleton>\n\n <CustomizedTable\n columns={columns}\n tableData={updatedData}\n actions={getActions}\n paginationConfig={{\n pagination: true,\n paginationType: \"infinite-scroll\",\n rowsPerPageInTable: pageSize,\n hasMore,\n loadMore: () => hasMore && fetchNextPage({ cancelRefetch: false }),\n }}\n styleConfig={{ cellStyle: { maxLines: 2 } }}\n isLoading={usersData ? isLoading : true}\n handleSort={handleSort}\n dataTestId=\"userlist-table-customized\"\n />\n <SideOverlay\n title=\"User Filter\"\n resetButtonLabel=\"Reset\"\n onResetClick={resetFilter}\n FormBody={UserFilterForm}\n handleOverlayState={handleOverlayState}\n overlayOpen={overlayOpen}\n dataTestId=\"userlist-overlay-filter\"\n formProps={{\n setAdminRoleIdsStats,\n setIsLoading,\n isLoading,\n setLocationId,\n setRoleDetails,\n roleDetails,\n status,\n setStatus,\n setSelectedLocation,\n selectedLocation,\n filterRequired,\n setFilterRequired,\n setUserFilterPreference,\n user,\n userFilterPreference,\n locationIdRef,\n setSelectedLocationId,\n resetLocationDirective,\n setResetLocationDirective,\n locations,\n setLocations,\n }}\n />\n </Grid>\n );\n}\n"],"names":["LocationSelectionComponent","lazy","UserFilterForm","handleOverlayState","setIsLoading","isLoading","setLocationId","setRoleDetails","roleDetails","status","setStatus","selectedLocation","setSelectedLocation","filterRequired","setUserFilterPreference","user","setFilterRequired","locationIdRef","locations","setLocations","setAdminRoleIdsStats","roles","setRoles","useState","trackEvent","useTrackEvent","translate","useTranslateProvider","methods","useForm","dispatch","useDispatch","location","useLocation","control","handleSubmit","errors","getValues","setValue","clearErrors","loadInitialData","data","getRoles","_a","_b","_c","_d","error","useEffect","onSubmit","cur","searchObject","selectedLocationId","selectedRole","item","setUserDetails","showToast","jsx","FormProvider","jsxs","Grid","event","UserFilterFormSwitchButtonSkeleton","InputLabel","Switch","e","Suspense","implementationConfig","UserFilterFormSkeleton","CustomDropdown","Button","PropTypes","UserList","navigate","useNavigate","adminRolesIds","setAdminRolesId","totalUserColor","activeUserColor","inactiveUserColor","adminUserColor","whiteColor","adminRoleIdsStats","rolesIds","setRolesIds","userStats","setUserStats","userStatsLoading","setUserStatsLoading","theme","useTheme","isDark","openModel","setOpenModel","rights","setRights","rightsRef","useRef","row","setRow","search","setSearch","debounceSearch","setDebounceSearch","usersData","setUsersData","hasMore","setHasMore","overlayOpen","setOverlayOpen","sortConfig","setSortConfig","toggle","setToggle","pageSize","locationId","useSelector","state","setSelectedLocationId","_e","userFilterPreference","_f","resetLocationDirective","setResetLocationDirective","updatedData","useMemo","index","name","response","execute","defaultColumns","Box","alpha","n","FontAwesomeIcon","faPhone","formattedArea","Tooltip","faHospital","isActive","columns","setColumns","handleClickStatusModal","is_active","toggleUserStatus","errorCode","message","handleClickGenerateSOHModal","generateSOHCode","users","handleEditUser","getActions","useCallback","faPen","faBars","handleSort","column","newOrder","prev","col","timer","loadMoreData","pageParam","initialLoad","getUsersList","pageData","fetchNextPage","hasNextPage","usePagination","isInitial","adminIds","role","allIds","featureJson","getAssignedFeatures","allUsers","getAllUser","offset","hasMoreUsers","currentBatch","processAndDownloadExcel","now","month","fileName","worksheet","XLSX.utils","headerStyle","range","C","cell","workbook","excelBuffer","XLSX.write","blob","blobSizeInMB","saveAs","disableExcel","setDisableExcel","downloadExcel","userList","taskDetails","areaOfIntervention","processedUser","key","downloadPdf","useDownloadPdf","disablePdf","setDisablePdf","handleDownloadPdf","pdfColumns","pdfKeys","resetFilter","Card","Typography","CustomConfirmationModal","UserListSkeleton","TextField","Fragment","CircularProgress","faFilePdf","faFileExcel","UserStatsSkeleton","CustomStatsComponent","faUsers","faCheckCircle","faTimesCircle","faUserShield","CustomizedTable","SideOverlay"],"mappings":"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"}
|