@argusoft/medplat-core 1.0.26 → 1.0.27

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.
Files changed (63) hide show
  1. package/dist/{AccessRights-CupmTG3T.js → AccessRights-CHu27ZOw.js} +220 -217
  2. package/dist/AccessRights-CHu27ZOw.js.map +1 -0
  3. package/dist/{AddEditQueryBuilder-C8ZSkOF0.js → AddEditQueryBuilder-Brdnm6rQ.js} +2 -2
  4. package/dist/{AddEditQueryBuilder-C8ZSkOF0.js.map → AddEditQueryBuilder-Brdnm6rQ.js.map} +1 -1
  5. package/dist/{AddFeatures-CqE3v0BN.js → AddFeatures-C0Z29oSd.js} +2 -2
  6. package/dist/{AddFeatures-CqE3v0BN.js.map → AddFeatures-C0Z29oSd.js.map} +1 -1
  7. package/dist/{AddLabelModal-CB8E8cYG.js → AddLabelModal-DFllBVcd.js} +2 -2
  8. package/dist/{AddLabelModal-CB8E8cYG.js.map → AddLabelModal-DFllBVcd.js.map} +1 -1
  9. package/dist/{AppModal-BKgIwe1h.js → AppModal-CtG2GjD_.js} +2 -2
  10. package/dist/{AppModal-BKgIwe1h.js.map → AppModal-CtG2GjD_.js.map} +1 -1
  11. package/dist/{ChangePasswordModalCore-DTYWRTa-.js → ChangePasswordModalCore-CDxkeIIM.js} +2 -2
  12. package/dist/{ChangePasswordModalCore-DTYWRTa-.js.map → ChangePasswordModalCore-CDxkeIIM.js.map} +1 -1
  13. package/dist/{EventConfigurations-lPcZGpLi.js → EventConfigurations-kNtAj_WM.js} +76 -76
  14. package/dist/EventConfigurations-kNtAj_WM.js.map +1 -0
  15. package/dist/{FeatureMenu-DUZL32RI.js → FeatureMenu-jl7-Tk6y.js} +49 -49
  16. package/dist/FeatureMenu-jl7-Tk6y.js.map +1 -0
  17. package/dist/FileSaver.min-CN9EpL2h.js.map +1 -1
  18. package/dist/{ImmunizationConfigurationsList-K2ddBpPJ.js → ImmunizationConfigurationsList-DdSZicTP.js} +72 -73
  19. package/dist/{ImmunizationConfigurationsList-K2ddBpPJ.js.map → ImmunizationConfigurationsList-DdSZicTP.js.map} +1 -1
  20. package/dist/ImmunizationSkeleton-D2tdv5k-.js.map +1 -1
  21. package/dist/{LanguagesModal-CX3oS8rk.js → LanguagesModal-D6VfaGrl.js} +2 -2
  22. package/dist/{LanguagesModal-CX3oS8rk.js.map → LanguagesModal-D6VfaGrl.js.map} +1 -1
  23. package/dist/{ManageNotification-CSl02Wq7.js → ManageNotification-CaBAOhji.js} +2 -2
  24. package/dist/ManageNotification-CaBAOhji.js.map +1 -0
  25. package/dist/{ManageRole-B9bs_T00.js → ManageRole-CGYfglpo.js} +2 -2
  26. package/dist/{ManageRole-B9bs_T00.js.map → ManageRole-CGYfglpo.js.map} +1 -1
  27. package/dist/{ManageTranslation-D9IScGhk.js → ManageTranslation-B4C9-lWD.js} +74 -74
  28. package/dist/ManageTranslation-B4C9-lWD.js.map +1 -0
  29. package/dist/{ManageUser-AB3_Vfp_.js → ManageUser-AY1EUDLI.js} +600 -601
  30. package/dist/ManageUser-AY1EUDLI.js.map +1 -0
  31. package/dist/{NotificationList-D1U1LYnz.js → NotificationList-C3Vb_jKU.js} +73 -73
  32. package/dist/NotificationList-C3Vb_jKU.js.map +1 -0
  33. package/dist/OtherTypeEventConfigModal-BeG1GrUi.js.map +1 -1
  34. package/dist/{QueryBuilder-DI0wCJbz.js → QueryBuilder-z7eqfd7D.js} +117 -119
  35. package/dist/QueryBuilder-z7eqfd7D.js.map +1 -0
  36. package/dist/{QueryManagement-CRykYGum.js → QueryManagement-BIhEDKuA.js} +114 -114
  37. package/dist/QueryManagement-BIhEDKuA.js.map +1 -0
  38. package/dist/{RoleManagement-BIiW9uTq.js → RoleManagement-BPl2cE27.js} +99 -99
  39. package/dist/RoleManagement-BPl2cE27.js.map +1 -0
  40. package/dist/{SubMenu-CM_4wNCR.js → SubMenu-DYxAPH2Z.js} +34 -34
  41. package/dist/SubMenu-DYxAPH2Z.js.map +1 -0
  42. package/dist/{UserList-2gGuDgNa.js → UserList-Bc8gYxRL.js} +397 -400
  43. package/dist/UserList-Bc8gYxRL.js.map +1 -0
  44. package/dist/{WidgetList-B7X8Awkg.js → WidgetList-Dw_FmbbE.js} +26 -26
  45. package/dist/WidgetList-Dw_FmbbE.js.map +1 -0
  46. package/dist/i18next-CTOWN_jH.js.map +1 -1
  47. package/dist/index.css +1 -1
  48. package/dist/index.js +10 -10
  49. package/dist/xlsx.min-D1LFqt_b.js.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/AccessRights-CupmTG3T.js.map +0 -1
  52. package/dist/EventConfigurations-lPcZGpLi.js.map +0 -1
  53. package/dist/FeatureMenu-DUZL32RI.js.map +0 -1
  54. package/dist/ManageNotification-CSl02Wq7.js.map +0 -1
  55. package/dist/ManageTranslation-D9IScGhk.js.map +0 -1
  56. package/dist/ManageUser-AB3_Vfp_.js.map +0 -1
  57. package/dist/NotificationList-D1U1LYnz.js.map +0 -1
  58. package/dist/QueryBuilder-DI0wCJbz.js.map +0 -1
  59. package/dist/QueryManagement-CRykYGum.js.map +0 -1
  60. package/dist/RoleManagement-BIiW9uTq.js.map +0 -1
  61. package/dist/SubMenu-CM_4wNCR.js.map +0 -1
  62. package/dist/UserList-2gGuDgNa.js.map +0 -1
  63. package/dist/WidgetList-B7X8Awkg.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"NotificationList-D1U1LYnz.js","sources":["../src/services/Notifications.js","../src/views/Notifications/Skeletons/NotificationsSkeletons.jsx","../src/views/Notifications/NotificationList.jsx"],"sourcesContent":["import { api } from \"@/common/interceptors/AxiosInterceptor\";\nimport implementationConfig from \"@/common/config/implementationConfig\";\nexport const toggleActiveState = ({ id, state }) =>\n api.put(\n implementationConfig.api.useQueryParamStyle ? `notificationtype/toggleActive?id=${id}&is_active=${state === \"INACTIVE\" ? \"true\" : \"false\"}` : `notificationtype/${id}?is_active=${state === \"INACTIVE\" ? \"true\" : \"false\"}`\n );\n\nexport const createNotification = (params) =>\n api.post(implementationConfig.api.useQueryParamStyle ? \"notificationtype/create\" : \"notificationtype\", params);\n\nexport const updateNotification = (params) =>\n api.post(implementationConfig.api.useQueryParamStyle ? \"notificationtype/update\" : \"notificationtype\", params);\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\n\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nexport const NotificationListSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!isLoading) {\n return children;\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex space-between justify-between m-[0px]\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"flex\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[150px] h-[40px] mx-[5px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[100px] h-[40px]\"></div>\n </div>\n </div>\n\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-full h-100\"></div>\n </div>\n );\n};\n\nNotificationListSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\nexport const ManageNotificationSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!isLoading) {\n return children;\n }\n\n return (\n <div className=\"flex flex-col w-full md:w-[650px] bg-white \">\n <div className=\"px-2 py-2 flex items-center \">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-60 h-10\"></div>\n </div>\n <hr></hr>\n <div className=\"flex flex-col w-full space-y-2 p-2\">\n <div className=\"flex flex-col space-y-2\">\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-40 h-5 mr-[100px]\"></button>\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-full h-10 \"></button>\n </div>\n <div className=\"flex flex-col space-y-2 \">\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-40 h-5 mr-[100px]\"></button>\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-full h-10 \"></button>\n </div>\n <div className=\"flex flex-col space-y-2 \">\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-40 h-5 mr-[100px]\"></button>\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-full h-10 \"></button>\n </div>\n <div className=\"flex flex-col space-y-2 \">\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-40 h-5 mr-[100px]\"></button>\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-full h-10 \"></button>\n </div>\n <div className=\"flex flex-col space-y-2 \">\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-40 h-5 mr-[100px]\"></button>\n <button className=\"bg-gray-300 animate-pulse rounded-sm w-full h-10 \"></button>\n </div>\n </div>\n <hr></hr>\n <div className=\"px-2 py-2 w-full flex space-x-3 items-center justify-end \">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-20 h-10\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-20 h-10\"></div>\n </div>\n </div>\n );\n};\n\nManageNotificationSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n","import {\n lazy,\n default as React,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { toggleActiveState } from \"../../services/Notifications\";\nimport { getAllRoleList, getNotifications } from \"@/common/services/GlobalApis\";\nimport SyncWithServerDialog from \"@/common/syncWithServer/SyncWithServerDialog\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nconst ManageNotification = lazy(() => import(\"./ManageNotification\"));\nconst NotificationFlywayQuery = lazy(() => import(\"./NotificationFlywayQuery\"));\nimport { Box, Button, Card, Checkbox, debounce, FormControlLabel, TextField, Typography } from \"@mui/material\";\nimport { Grid } from \"@mui/system\";\nimport { NotificationListSkeleton } from \"./Skeletons/NotificationsSkeletons\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport { faBars, faPen } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\n\n/**\n *\n * @module NotificationList\n * @returns {JSX.element}\n *\n */\nexport default function NotificationList() {\n const trackEvent = useTrackEvent();\n const [search, setSearch] = useState(\"\");\n const [notifications, setNotifications] = useState([]);\n const [filteredNotifications, setFilteredNotifications] = useState([]);\n const [openModal, setOpenModal] = useState(\"\");\n const [rowData, setRowData] = useState({});\n const [roleData, setRoleData] = useState([]);\n const { translate } = useTranslateProvider();\n const [featureUuid, setFeatureUuid] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [rights, setRights] = useState({});\n const defaultColumns = [\n {\n field: \"notificationName\",\n label: \"Name\",\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n },\n {\n field: \"code\",\n label: \"Code\",\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n },\n {\n field: \"notificationType\",\n label: \"Type\",\n align: \"left\",\n render: (row) => {\n return <Typography mt={0.5}>{row.notificationType === 'WEB' ? 'WEB' : 'MOBILE'}</Typography>;\n }\n },\n {\n field: \"state\",\n label: \"State\",\n sortable: true,\n sortOrder: \"asc\",\n align: \"left\",\n },\n { field: \"Actions\", label: \"Actions\", align: \"left\" },\n ];\n const [columns, setColumns] = useState(defaultColumns);\n const [isActive, setisActive] = useState(true);\n const [isMobile, setisMobile] = useState(true);\n\n const isActiveRef = useRef(isActive);\n const isMobileRef = useRef(isMobile);\n\n useEffect(() => {\n isActiveRef.current = isActive;\n }, [isActive]);\n\n useEffect(() => {\n isMobileRef.current = isMobile;\n }, [isMobile]);\n\n /**\n * Toggles the active/inactive status of a notification.\n * @async\n * @function toggleActiveStatus\n * @returns {Promise<void>} A promise that resolves when the active status has been toggled and notifications reloaded.\n */\n const toggleActiveStatus = async () => {\n try {\n setIsLoading((cur) => !cur);\n await toggleActiveState({ id: rowData.id, state: rowData.state });\n setOpenModal(\"\");\n const { data } = await getNotifications();\n setNotifications(data);\n setFilteredNotifications(data);\n showToast({\n type: \"success\",\n message: `State succesfully changed from ${rowData?.state === \"INACTIVE\" ? \"inactive\" : \"active\"} to ${rowData?.state === \"INACTIVE\" ? \"active\" : \"inactive\"}`,\n });\n setIsLoading((cur) => !cur);\n } catch (error) {\n showToast({\n type: \"error\",\n message: `Error ${error}`,\n });\n setIsLoading((cur) => !cur);\n }\n };\n\n const actions = useMemo(() => (row) => {\n const list = [];\n\n if (!GeneralUtil.isTecho || rights?.['update.manage.notificationlist']) {\n list.push({\n label: \"\",\n icon: (\n <FontAwesomeIcon\n icon={faPen}\n data-testid=\"notificationlist-button-edit\"\n />\n ),\n onClick: (e) => {\n setOpenModal(1);\n setRowData(e);\n },\n });\n }\n\n const currentMenuItems = [];\n if (!GeneralUtil.isTecho || rights?.['update.manage.notificationlist']) {\n currentMenuItems.push({\n label: translate(\n row.state === \"ACTIVE\" ? \"Mark as Inactive\" : \"Mark as Active\"\n ),\n onClick: (e) => {\n setRowData(e);\n setOpenModal(2);\n },\n });\n currentMenuItems.push({\n label: translate(\"Sync With Server\"),\n onClick: (e) => {\n if (!e.uuid) {\n showToast({\n type: \"info\",\n message: `No configuration found. Please open the respective feature item and save it.`,\n });\n return;\n }\n setOpenModal(4);\n setFeatureUuid(e?.uuid);\n setRowData(e);\n },\n });\n currentMenuItems.push({\n label: translate(\"Show Flyway Query\"),\n onClick: (e) => {\n setOpenModal(3);\n setRowData(e);\n },\n });\n }\n\n if (currentMenuItems.length > 0) {\n list.push({\n label: \"\",\n icon: (\n <FontAwesomeIcon\n icon={faBars}\n data-testid=\"notificationlist-button-menu\"\n />\n ),\n menuItems: currentMenuItems,\n });\n }\n\n return list;\n }, [rights, translate]);\n\n const debouncedFilter = useCallback(\n debounce((searchValue) => {\n const filteredData = notifications.filter(d =>\n d.notificationName?.toLowerCase().includes(searchValue) &&\n d.state === (isActiveRef.current ? 'ACTIVE' : 'INACTIVE') &&\n d.notificationType === (isMobileRef.current ? 'MO' : 'WEB')\n );\n trackEvent(\"search_tracking\", {\n searchTerm: searchValue,\n results_count: filteredData.length,\n search_type: \"Page Search\",\n });\n setFilteredNotifications(filteredData);\n }, 500),\n [notifications, trackEvent]\n );\n\n /**\n * Handles the search input to filter notifications by name.\n * @function handleSearch\n * @param {Object} e - The event object from the input field.\n * @param {string} e.target.value - The current value in the search input field.\n */\n const handleSearch = (e) => {\n const searchValue = e.target.value.toLowerCase();\n setSearch(searchValue);\n debouncedFilter(searchValue);\n };\n\n /**\n * Handles sorting of the notification list based on the specified column.\n * @function handleSort\n */\n const handleSort = (column) => {\n const order = column.sortOrder === \"asc\" ? \"desc\" : \"asc\";\n setColumns((prev) =>\n prev.map((col) => {\n if (col.field === column.field) {\n return { ...col, sortOrder: order };\n }\n return col;\n })\n );\n\n const sortedData = [...filteredNotifications].sort((a, b) => {\n const valA = a[column.field]?.toString().toLowerCase();\n const valB = b[column.field]?.toString().toLowerCase();\n\n if (valA < valB) {\n return order === \"asc\" ? -1 : 1;\n }\n if (valA > valB) {\n return order === \"asc\" ? 1 : -1;\n }\n return 0;\n });\n\n setFilteredNotifications(sortedData);\n };\n\n /**\n * Loads initial data for notifications and roles when the component is mounted or when `openModal` changes.\n * @function useEffect\n * @param {boolean} openModal - The state that controls whether a modal is open. Triggers the hook to reload data when it changes.\n */\n\n const loadInitialData = async () => {\n try {\n setIsLoading((cur) => !cur);\n const { data } = await getNotifications();\n setNotifications(data);\n const filteredData = data.filter(d => d.notificationType === 'MO' && d.state === 'ACTIVE');\n setFilteredNotifications(filteredData);\n if (!roleData.length) {\n const { data: roleData } = await getAllRoleList();\n setRoleData(roleData);\n }\n const { data: assignedFeatures } = await getAssignedFeatures(\"techo.manage.notification\");\n setRights(JSON.parse(assignedFeatures));\n setIsLoading((cur) => !cur);\n setSearch('');\n } catch (error) {\n console.error(\"error\", error);\n setIsLoading((cur) => !cur);\n }\n };\n\n useEffect(() => {\n loadInitialData();\n }, []);\n\n const handleFilter = (value, filterType) => {\n const nextIsActive =\n filterType === 'status' ? value : isActive;\n\n const nextIsMobile =\n filterType === 'notificationType' ? value : isMobile;\n\n setisActive(nextIsActive);\n setisMobile(nextIsMobile);\n\n if (search) {\n debouncedFilter(search);\n } else {\n setFilteredNotifications(\n notifications.filter(d =>\n d.state === (nextIsActive ? 'ACTIVE' : 'INACTIVE') &&\n d.notificationType === (nextIsMobile ? 'MO' : 'WEB')\n )\n );\n }\n };\n\n return (\n <Card\n variant=\"elevation\"\n container\n className=\"mt-6 p-3 flex flex-col space-y-3 shadow-xl\"\n >\n <Suspense>\n <ManageNotification\n open={openModal === 1 || openModal === 5}\n handleClose={() => setOpenModal(\"\")}\n data={openModal === 1 ? rowData : null}\n roleData={roleData}\n setNotifications={loadInitialData}\n data-testid=\"notification-list-managenotification-dialog\"\n />\n </Suspense>\n <Suspense>\n <NotificationFlywayQuery\n open={openModal === 3}\n handleClose={() => setOpenModal(\"\")}\n data={rowData}\n roleData={roleData}\n />\n </Suspense>\n <CustomConfirmationModal\n title={\"CONFIRM ACTION\"}\n open={openModal === 2}\n description={`Are you sure you want to change the state ${rowData?.state === \"INACTIVE\" ? \"inactive\" : \"active\"} to ${rowData?.state === \"INACTIVE\" ? \"active\" : \"inactive\"}`}\n handleClick={toggleActiveStatus}\n handleClose={() => setOpenModal(\"\")}\n dataTestId=\"notification-list-customconfirmationmodal-dialog\"\n />\n <SyncWithServerDialog\n isOpen={Boolean(featureUuid)}\n handleClose={() => setFeatureUuid(() => null)}\n featureUUID={featureUuid}\n dataTestId=\"notification-list-syncwithserverdialog-dialog\"\n />\n <NotificationListSkeleton isLoading={isLoading}>\n <Grid container className=\"flex justify-between\">\n <Grid>\n <Typography\n variant=\"body2\"\n className=\"font-bold font-sans text-lg text-customBlue uppercase\"\n data-testid=\"notification-list-typography-title\"\n >\n {translate(\"Notification Configuration\")}\n </Typography>\n </Grid>\n <Box className=\"flex flex-col sm:flex-row sm:items-center gap-3 w-full sm:w-auto\">\n <Box className=\"flex items-center gap-3\">\n <FormControlLabel\n control={\n <Checkbox\n checked={isActive}\n onChange={(e) =>\n handleFilter(e.target.checked, 'status')\n }\n data-testid=\"notifications-checkbox-include-active\"\n />\n }\n label={translate(\"Active\")}\n slotProps={{\n typography: {\n className: \"custom-label\",\n },\n }}\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={isMobile}\n onChange={(e) =>\n handleFilter(e.target.checked, 'notificationType')\n }\n data-testid=\"notifications-checkbox-include-mobile\"\n />\n }\n label={translate(\"Mobile\")}\n slotProps={{\n typography: {\n className: \"custom-label\",\n },\n }}\n />\n </Box>\n <Box className=\"flex items-center gap-3 w-full sm:w-auto\">\n <TextField\n id=\"searchQuery\"\n placeholder=\"Search Text\"\n size=\"small\"\n onChange={handleSearch}\n className=\"m-0 p-0 bg-white\"\n value={search}\n data-testid=\"notification-list-textfield-search\"\n sx={{\n \"& .MuiInputBase-root\": {\n height: \"2.4em\",\n width: { xs: \"100%\", sm: \"190px\" },\n },\n flex: { xs: 1, sm: 1 }\n }}\n />\n {(!GeneralUtil.isTecho || rights?.['create.manage.notificationlist']) && (\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={() => {\n trackEvent(\"button_click\", {\n button_name: \"notification-list-add-button\",\n button_type: \"navigate\",\n button_id: \"notification-list-button-add\",\n });\n setOpenModal(5);\n }}\n data-testid=\"notification-list-button-add\"\n sx={{ whiteSpace: 'nowrap' }}\n >\n {translate(\"Add\")}\n </Button>\n )}\n </Box>\n </Box>\n </Grid>\n <Grid size={{ xs: 12 }}>\n <CustomizedTable\n columns={columns}\n actions={actions}\n tableData={filteredNotifications}\n paginationConfig={{\n pagination: false,\n }}\n styleConfig={{\n tableStyle: {\n maxHeight: 40,\n },\n }}\n handleSort={handleSort}\n isLoading={isLoading}\n dataTestId=\"notification-list-customizedtable\"\n />\n </Grid>\n </NotificationListSkeleton>\n </Card>\n );\n}\n"],"names":["toggleActiveState","id","state","api","implementationConfig","createNotification","params","updateNotification","NotificationListSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","ManageNotificationSkeleton","ManageNotification","lazy","NotificationFlywayQuery","NotificationList","trackEvent","useTrackEvent","search","setSearch","useState","notifications","setNotifications","filteredNotifications","setFilteredNotifications","openModal","setOpenModal","rowData","setRowData","roleData","setRoleData","translate","useTranslateProvider","featureUuid","setFeatureUuid","setIsLoading","rights","setRights","defaultColumns","row","Typography","columns","setColumns","isActive","setisActive","isMobile","setisMobile","isActiveRef","useRef","isMobileRef","useEffect","toggleActiveStatus","cur","data","getNotifications","showToast","error","actions","useMemo","list","GeneralUtil","FontAwesomeIcon","faPen","e","currentMenuItems","faBars","debouncedFilter","useCallback","debounce","searchValue","filteredData","_a","d","handleSearch","handleSort","column","order","prev","col","sortedData","b","valA","valB","_b","loadInitialData","getAllRoleList","assignedFeatures","getAssignedFeatures","handleFilter","value","filterType","nextIsActive","nextIsMobile","Card","Suspense","CustomConfirmationModal","SyncWithServerDialog","Grid","Box","FormControlLabel","Checkbox","TextField","Button","CustomizedTable"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryBuilder-DI0wCJbz.js","sources":["../src/services/QueryBuilder.js","../src/views/QueryBuilder/Skeletons/QueryBuilderSkeleton.jsx","../src/views/QueryBuilder/QueryBuilder.jsx"],"sourcesContent":["import { api } from \"@/common/interceptors/AxiosInterceptor\";\n\nexport const retrieveAllConfigured = (isActive) =>\n api.get(\"/resource\", { params: { is_active: isActive } });\n\nexport const toggleState = (data) => api.put(\"/resource\", data);\n\nexport const executeForFormConfigurator = (data) =>\n api.post(`/resource/getdataforformconfigurator/${data.code}`, data);\n\nexport const executeWithTimeout = (params) =>\n api.post(\"/resource/getdatawithtimeout\", params);\n\nexport const executeQueryForFamilyReport = (data) =>\n api.post(\"/resource/getdata\", data);\n\nexport const executeAllQuery = (dataList) =>\n api.post(\"/resource/getdatas\", dataList);\n\nexport const executeAll = (dataList) =>\n api.post(\"/resource/getalldata\", dataList);\n\nexport const getServerList = () =>\n api.post(\"/resource/getdata\", {\n code: \"get_runqueryactive_server_list\",\n parameters: {},\n });\n\nexport const saveOrUpdate = (data) => api.post(\"/resource\", data);\n\nexport const runQuery = (query) =>\n api.post(\"/resource/runquery\", query, {\n headers: { \"Content-Type\": \"application/json\" },\n transformRequest: [(data) => data],\n });\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nexport const QueryBuilderSkeleton = ({children , isLoading}) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!isLoading) return children;\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"w-full justify-between flex-wrap flex flex-row pt-6\">\n <div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm h-[36px] w-[64px]\"></div>\n </div>\n\n <div className=\"flex\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm h-[32px] w-[160px] mr-2\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm h-[32px] w-[60px]\"></div>\n </div>\n </div>\n\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-full h-100\"></div>\n </div>\n );\n};\n\nQueryBuilderSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n","import { lazy, default as React, Suspense, useEffect, useState, useRef } from \"react\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { toggleState } from \"../../services/QueryBuilder\";\nimport { execute } from \"@/common/services/GlobalApis\";\nimport SyncWithServerDialog from \"@/common/syncWithServer/SyncWithServerDialog\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport usePagination from \"@/hooks/usePagination\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport \"./Styles/QueryBuilder.scss\";\nconst AddEditQueryBuilder = lazy(() => import(\"./AddEditQueryBuilder\"));\nconst ShowFlywayQuery = lazy(() => import(\"./ShowFlywayQuery\"));\nconst ShowQueryHistory = lazy(() => import(\"./ShowQueryHistory\"));\nimport { Box, Button, Card, TextField, Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\n\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faBars, faPen } from \"@fortawesome/free-solid-svg-icons\";\nimport { QueryBuilderSkeleton } from \"./Skeletons/QueryBuilderSkeleton\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\nimport implementationConfig from \"@/common/config/implementationConfig\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\n\n/**\n * @module QueryBuilder\n * @returns {JSX.Element}\n */\n\nconst QueryBuilder = () => {\n const trackEvent = useTrackEvent();\n const [queryTableValues, setQueryTableValues] = useState([]);\n const [refreshData, setRefreshData] = useState(false);\n const [actualData, setActualData] = useState([]);\n const [currentPage, setCurrentPage] = useState(1);\n const [isActiveLabel, setIsActiveLabel] = useState(\"\");\n const [isActiveDescription, setIsActiveDescription] = useState(\"\");\n const [queryHistory, setQueryHistory] = useState({});\n const [openHistory, setOpenHistory] = useState(false);\n const [configuredQuery, setConfiguredQuery] = useState(\"\");\n const [openFlywayQuery, setOpenFlywayQuery] = useState(false);\n const [featureUuid, setFeatureUuid] = useState(null);\n const [search, setSearch] = useState(null);\n const [debounceSearch, setDebounceSearch] = useState(null);\n const [clickedRow, setClickedRow] = useState({});\n const [isEdit, setIsEdit] = useState(false);\n const [editRow, setEditRow] = useState({});\n const [toggleOpen, setToggleOpen] = useState(false);\n const [addEdit, setAddEdit] = useState(false);\n const [totalRows, setTotalRows] = useState(0);\n const { translate } = useTranslateProvider();\n const [rights, setRights] = useState({});\n const rightsRef = useRef(rights);\n\n useEffect(() => {\n rightsRef.current = rights;\n }, [rights]);\n\n const isClickhouseEnabledEnv = implementationConfig.queryBuilder.showClickhouseOption;\n\n const queryTableFields = [\n { field: \"code\", label: \"Code\", align: \"left\" },\n {\n field: \"description\",\n label: \"Description\",\n align: \"left\",\n },\n { field: \"query\", label: \"Query\", align: \"left\" },\n { field: \"returnsResultSet\", label: \"Returns Result Set\" },\n { field: \"isPublic\", label: \"Is Public\" },\n ];\n\n if (isClickhouseEnabledEnv) {\n queryTableFields.push({\n field: \"isClickhouseQuery\",\n label: \"Is Clickhouse Query\",\n });\n }\n\n queryTableFields.push({ field: \"Actions\", label: \"Actions\" });\n\n const [isLoading, setIsLoading] = useState(false);\n\n const pageSize = 50;\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} isFetchingNextPage - Indicates if the next page is currently being fetched.\n **/\n const { data: pageData } = usePagination({\n key: [\"queries\", debounceSearch, currentPage, refreshData, rights],\n queryFn: (pageParam) => loadMoreData(pageParam),\n currentPage,\n limit: pageSize,\n searchString: debounceSearch || null,\n paginationType: \"traditional\",\n });\n\n /**\n * Handles the editing of a data item.\n * @function handleEdit\n * @param {Object} data - The data item to be edited, including at least the `uuid` property.\n * @param {string} data.uuid - The unique identifier of the data item.\n * @returns {void}\n */\n\n const handleEdit = (data) => {\n const toggledData = actualData.filter((item) => item.uuid === data.uuid);\n setEditRow(toggledData[0]);\n setAddEdit((cur) => !cur);\n setIsEdit(true);\n };\n\n /**\n * Handles toggling the state of a data item between active and inactive.\n * @function handleToggleOption\n * @param {Object} data - The data item whose state is being toggled, including at least the `uuid` and `state` properties.\n * @param {string} data.uuid - The unique identifier of the data item.\n * @param {string} data.state - The current state of the data item (e.g., 'ACTIVE' or 'INACTIVE').\n * @returns {void}\n */\n\n const handleToggleOption = (data) => {\n setIsActiveLabel(\n data?.state === \"ACTIVE\" ? \"Mark as Inactive\" : \"Mark as Active\"\n );\n setIsActiveDescription(\n data?.state === \"ACTIVE\"\n ? \"Are you sure you want to change the state from active to inactive?\"\n : \"Are you sure you want to change the state from inactive to active?\"\n );\n const toggledData = actualData.filter((item) => item.uuid === data.uuid);\n setClickedRow(toggledData[0]);\n };\n\n /**\n * Toggles the state of a boolean value used to open or close a toggle component.\n * @async\n * @function handleToggle\n * @returns {void}\n */\n\n const handleToggle = async () => {\n setToggleOpen((cur) => !cur);\n };\n\n /**\n * Handles the state toggling operation and updates the UI accordingly.\n * @async\n * @function handleToggleState\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\n * @throws {Error} Throws an error if `toggleState` or `loadInitialState` fails, which is caught and handled by showing a toast message.\n */\n\n const handleToggleState = async () => {\n try {\n let data = JSON.parse(JSON.stringify(clickedRow));\n data.state = clickedRow?.state === \"ACTIVE\" ? \"INACTIVE\" : \"ACTIVE\";\n await toggleState(data);\n await fetchTotalRows();\n const updatedData = await loadMoreData({\n limit: pageSize,\n offset: (currentPage - 1) * pageSize,\n searchString: search || \"\",\n });\n setTableData(updatedData);\n setRefreshData(clickedRow);\n setToggleOpen((cur) => !cur);\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in toggle state\", type: \"error\" });\n }\n };\n\n /**\n * Retrieves and displays the query history for a specific query code.\n * @async\n * @function showQueryHistory\n * @returns {Promise<void>} A promise that resolves when the query history has been retrieved and displayed.\n * @throws {Error} Throws an error if `getQueryHistory` fails, which is caught and handled by showing a toast message.\n */\n\n const showQueryHistory = async () => {\n try {\n const data = {\n code: \"retrieve_logged_actions_by_table_name_query_code\",\n parameters: {\n tableName: \"query_master\",\n queryCode: clickedRow.code,\n },\n };\n const response = await execute(data);\n\n if (response?.data?.result?.length === 0) {\n showToast({\n message: \"No Query History found for Query code\",\n type: \"warn\",\n });\n } else {\n setQueryHistory(response?.data?.result);\n setOpenHistory((cur) => !cur);\n }\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in loading Query History\", type: \"error\" });\n }\n };\n\n /**\n * Toggles the display of the Flyway query configuration modal.\n * @function showFlywayQuery\n * @returns {void} This function does not return any value.\n */\n\n const showFlywayQuery = () => {\n setConfiguredQuery(clickedRow);\n setOpenFlywayQuery((cur) => !cur);\n };\n\n /**\n * Synchronizes the local feature state with the server.\n * @function syncWithServer\n * @returns {void} This function does not return any value.\n */\n\n const syncWithServer = () => {\n setFeatureUuid(clickedRow?.uuid);\n };\n\n /**\n * sets the feature UUid to null.\n * @function handleSyncClose\n * @returns {void} This function does not return any value.\n */\n\n const handleSyncClose = () => setFeatureUuid(() => null);\n\n const getActions = () => {\n const actions = [\n {\n label: \"\",\n icon: <FontAwesomeIcon icon={faBars} size=\"lg\" />,\n menuClick: handleToggleOption,\n menuItems: [\n {\n label: translate(isActiveLabel),\n onClick: handleToggle,\n },\n {\n label: \"Show Flyway Query\",\n onClick: showFlywayQuery,\n },\n {\n label: \"Show Query History\",\n onClick: showQueryHistory,\n },\n {\n label: \"Sync With Server\",\n onClick: syncWithServer,\n },\n ],\n dataTestId: \"MenuIcon\",\n },\n ];\n if (rightsRef.current?.[\"update.admin.query\"]) {\n actions.unshift({\n label: \"\",\n icon: <FontAwesomeIcon icon={faPen} size=\"lg\" />,\n onClick: handleEdit,\n dataTestId: \"EditIcon\",\n });\n }\n return actions;\n };\n\n useEffect(() => {\n const timer = setTimeout(async () => {\n await fetchTotalRows();\n setCurrentPage(1);\n setDebounceSearch(search);\n }, 1000);\n\n return () => clearTimeout(timer); // Cleanup previous timer\n }, [search]);\n\n const fetchTotalRows = async () => {\n try {\n const { data: countData } = await execute(\n {\n code: \"fetch_total_count_for_query_builder\",\n parameters: {\n state: null,\n searchString: search || null,\n },\n },\n { showLoader: false }\n );\n setTotalRows(countData.result[0].count);\n } catch (error) {\n console.error(error);\n }\n };\n\n /**\n * Fetches additional query 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\n const loadMoreData = async (pageParam) => {\n try {\n if (rights?.[\"view.admin.query\"]) {\n setIsLoading((cur) => !cur);\n const { data } = await execute(\n {\n code: \"fetch_queries_for_query_builder\",\n parameters: {\n limit: pageParam.limit || 50,\n offset: pageParam.offset || 0,\n state: null,\n searchString: pageParam.searchString || \"\",\n },\n },\n { showLoader: false }\n );\n search !== \"\" &&\n trackEvent(\"search_tracking\", {\n searchTerm: search,\n results_count: data?.length,\n search_type: \"Page Search\",\n });\n setIsLoading((cur) => !cur);\n return data.result;\n }\n } catch (error) {\n showToast({ message: `error ${error}`, type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n const loadRights = async () => {\n try {\n setIsLoading(true);\n const { data: featureJson } =\n await getAssignedFeatures(\"techo.manage.query\");\n setRights(JSON.parse(featureJson));\n setIsLoading(false);\n } catch (error) {\n console.error(\"Error loading rights:\", error);\n setIsLoading(false);\n }\n };\n useEffect(() => {\n loadRights();\n }, []);\n\n const setTableData = (tableData) => {\n const allQueriesData = tableData?.flat() || [];\n\n setActualData(allQueriesData);\n const data = allQueriesData.map((item) => {\n return {\n ...item,\n query: `${item?.query.slice(0, 50)}...`,\n returnsResultSet: item?.returnsResultSet ? \"Yes\" : \"No\",\n isPublic: item?.isPublic ? \"Yes\" : \"No\",\n isClickhouseQuery: item?.isClickhouseQuery ? \"Yes\" : \"No\",\n };\n });\n setQueryTableValues(data);\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 setTableData(pageData);\n }, [pageData]);\n\n /**\n * Toggles the add/edit state of the component and resets the edit row.\n * @function handleAddEdit\n */\n\n const handleAddEdit = () => {\n trackEvent(\"button_click\", {\n button_name: \"querybuilder-add-button\",\n button_type: \"navigate\",\n button_id: \"querybuilder-add-button\",\n });\n setAddEdit((cur) => !cur);\n setIsEdit(false);\n setEditRow({});\n };\n\n const addEditLoadInitial = async () => {\n try {\n if (search !== \"\") {\n setSearch(\"\");\n } else {\n await fetchTotalRows();\n const updatedData = await loadMoreData({\n limit: pageSize,\n offset: (currentPage - 1) * pageSize,\n searchString: search || \"\",\n });\n setTableData(updatedData);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n return !isLoading && !rightsRef.current?.[\"view.admin.query\"] ? (\n <Box className=\"flex justify-center items-center w-full h-[80vh]\">\n <Card className=\"h-80 w-150 flex justify-center items-center\">\n <Typography variant=\"h5\" data-testid=\"no-permission-message\" className=\"text-customBlue\">\n You dont have permission to view Queries\n </Typography>\n </Card>\n </Box>\n ) : (\n <Grid pt={2} sx={{ height: \"calc(100vh - 84px)\" }}>\n <Suspense>\n {addEdit && (\n <AddEditQueryBuilder\n loadInitialState={addEditLoadInitial}\n isEditMode={isEdit}\n editRow={editRow}\n open={addEdit}\n close={handleAddEdit}\n data-testid=\"querybuilder-addeditquerybuilder\"\n />\n )}\n </Suspense>\n\n {featureUuid && (\n <SyncWithServerDialog\n isOpen={Boolean(setFeatureUuid)}\n handleClose={handleSyncClose}\n featureUUID={featureUuid}\n dataTestId=\"querybuilder-syncwithserverdialog\"\n />\n )}\n\n <Suspense>\n <ShowFlywayQuery\n configuredQuery={configuredQuery}\n open={openFlywayQuery}\n onClose={() => {\n setOpenFlywayQuery((cur) => !cur);\n }}\n data-testid=\"querybuilder-showflywayquery\"\n />\n </Suspense>\n\n <Suspense>\n <ShowQueryHistory\n historyList={queryHistory}\n open={openHistory}\n handleClose={() => {\n setOpenHistory((cur) => !cur);\n }}\n data-testid=\"querybuilder-showqueryhistory\"\n />\n </Suspense>\n\n <CustomConfirmationModal\n description={isActiveDescription}\n title={\"CONFIRM ACTION\"}\n handleClick={handleToggleState}\n open={toggleOpen}\n handleClose={() => setToggleOpen((cur) => !cur)}\n dataTestId=\"querybuilder-customconfirmationmodal\"\n />\n\n <Grid>\n <QueryBuilderSkeleton isLoading={isLoading}>\n <>\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems={\"center\"}\n >\n <Grid item=\"true\" mt={1}>\n <Typography\n variant=\"body2\"\n className=\"font-bold font-sans text-lg uppercase text-customBlue\"\n >\n {translate(\"Queries\")}\n </Typography>\n </Grid>\n <Grid item=\"true\">\n <Grid container spacing={2}>\n <Grid item=\"true\">\n <TextField\n name=\"searchQuery\"\n id=\"searchQuery\"\n className=\"m-0 p-0\"\n placeholder=\"Search Code\"\n size=\"small\"\n value={search}\n onChange={(e) => setSearch(e?.target?.value)}\n slotProps={{\n input: {\n className: \"custom-input-root\",\n },\n }}\n sx={{\n \"& .MuiInputBase-root\": {\n backgroundColor: (theme) =>\n theme.palette.background.paper,\n },\n }}\n data-testid=\"querybuilder-search-textfield\"\n />\n </Grid>\n {rights?.[\"create.admin.query\"] && (\n <Grid item=\"true\" className=\"flex items-center\">\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={handleAddEdit}\n data-testid=\"querybuilder-add-button\"\n >\n {translate(\"Add\")}\n </Button>\n </Grid>\n )}\n </Grid>\n </Grid>\n </Grid>\n <Grid container className=\"mt-4\">\n <CustomizedTable\n columns={queryTableFields}\n tableData={queryTableValues}\n actions={getActions()}\n paginationConfig={{\n pagination: true,\n rowsPerPageInTable: pageSize,\n onPageChange: (newPage) => {\n setCurrentPage(newPage);\n },\n currentPage: currentPage,\n totalRows: totalRows,\n }}\n dataTestId=\"querybuilder-customizedtable\"\n styleConfig={{ tableStyle: { maxHeight: 65 } }}\n isLoading={isLoading}\n />\n </Grid>\n </>\n </QueryBuilderSkeleton>\n </Grid>\n </Grid>\n );\n};\n\nexport default QueryBuilder;\n"],"names":["toggleState","data","api","saveOrUpdate","QueryBuilderSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","AddEditQueryBuilder","lazy","ShowFlywayQuery","ShowQueryHistory","QueryBuilder","trackEvent","useTrackEvent","queryTableValues","setQueryTableValues","useState","refreshData","setRefreshData","actualData","setActualData","currentPage","setCurrentPage","isActiveLabel","setIsActiveLabel","isActiveDescription","setIsActiveDescription","queryHistory","setQueryHistory","openHistory","setOpenHistory","configuredQuery","setConfiguredQuery","openFlywayQuery","setOpenFlywayQuery","featureUuid","setFeatureUuid","search","setSearch","debounceSearch","setDebounceSearch","clickedRow","setClickedRow","isEdit","setIsEdit","editRow","setEditRow","toggleOpen","setToggleOpen","addEdit","setAddEdit","totalRows","setTotalRows","translate","useTranslateProvider","rights","setRights","rightsRef","useRef","useEffect","isClickhouseEnabledEnv","implementationConfig","queryTableFields","setIsLoading","pageSize","pageData","usePagination","pageParam","loadMoreData","handleEdit","toggledData","item","cur","handleToggleOption","handleToggle","handleToggleState","fetchTotalRows","updatedData","setTableData","error","showToast","showQueryHistory","response","execute","_b","_a","_c","showFlywayQuery","syncWithServer","handleSyncClose","getActions","actions","FontAwesomeIcon","faBars","faPen","timer","countData","loadRights","featureJson","getAssignedFeatures","tableData","allQueriesData","handleAddEdit","addEditLoadInitial","Box","Card","Typography","Grid","Suspense","SyncWithServerDialog","CustomConfirmationModal","Fragment","TextField","theme","Button","CustomizedTable","newPage"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryManagement-CRykYGum.js","sources":["../src/services/QueryManagement.js","../src/views/QueryManagement/Skeletons/QueryManagementSkeleton.jsx","../src/views/QueryManagement/QueryManagement.jsx"],"sourcesContent":["import { api } from \"@/common/interceptors/AxiosInterceptor\";\n\nexport const getDataWithTimeout = (params) =>\n api.post(\"resource/getdatawithtimeout\", params);\n\nexport const getQueryBasedData = (query) =>\n api.post(\"querymanagement/retrieve\", query, {\n headers: { \"Content-Type\": \"application/json\" },\n transformRequest: [(data) => data],\n });\n\nexport const executeQuery = (query) =>\n api.post(\"querymanagement/execute\", query, {\n headers: { \"Content-Type\": \"application/json\" },\n transformRequest: [(data) => data],\n });\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nexport const QueryManagementSkeleton = ({ children, loading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!loading) {\n return children;\n }\n\n return (\n <div className=\"flex flex-col space-y-4 h-[100vh] pt-3 relative w-full\">\n <div className=\" flex flex-row space-x-2 overflow-auto\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[100%] h-[50px] \"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[100%] h-[50px] mx-[10px]\"></div>\n </div>\n <div className=\" flex flex-col flex-1 \">\n <div className=\"bg-gray-300 animate-pulse h-[10rem] w-full rounded-md mb-2\"></div>\n <div className=\"flex h-40 space-x-6\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-60 h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-[130px] h-[40px]\"></div>\n </div>\n </div>\n </div>\n );\n};\n\nQueryManagementSkeleton.propTypes = {\n children: PropTypes.any,\n loading: PropTypes.any,\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport {\n Typography,\n Button,\n Box,\n Card,\n TextField,\n Chip,\n Divider,\n Modal,\n IconButton,\n Tabs,\n Tab,\n InputAdornment,\n} from \"@mui/material\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport {\n executeQuery,\n getDataWithTimeout,\n getQueryBasedData,\n} from \"../../services/QueryManagement\";\nimport { execute, downloadExcel } from \"@/common/services/GlobalApis\";\nimport { getAssignedFeatures } from \"@/utils/feature.js\";\nimport { useSelector } from \"react-redux\";\nimport CustomTextField from \"@/views/custom-components/CustomTextField\";\nimport { useForm } from \"react-hook-form\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport dayjs from \"dayjs\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { QueryManagementSkeleton } from \"./Skeletons/QueryManagementSkeleton\";\nimport Editor from \"@monaco-editor/react\";\nimport \"./Styles/QueryManagement.scss\";\nimport CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport {\n faDatabase,\n faHistory,\n faTerminal,\n faPlay,\n faDownload,\n faTimes,\n faTableList,\n faSearch,\n faSlidersH,\n faLock,\n faSitemap,\n faSyncAlt,\n faClock\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport debounce from \"lodash/debounce\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\nimport baburao from \"@/assets/gifs/baburao.gif\";\n\nconst dbaToolkitScripts = [\n {\n category: \"Performance & Space\",\n name: \"Table Disk Usage Breakdown\",\n description: \"Displays all tables in the public schema ordered by total disk footprint.\",\n code: `SELECT \\n relname AS table_name, \\n pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size,\\n pg_size_pretty(pg_relation_size(c.oid)) AS data_size,\\n pg_size_pretty(pg_total_relation_size(c.oid) - pg_relation_size(c.oid)) AS index_size\\nFROM pg_class c\\nLEFT JOIN pg_namespace n ON (n.oid = c.relnamespace)\\nWHERE n.nspname = 'public' AND c.relkind = 'r'\\nORDER BY pg_total_relation_size(c.oid) DESC;`\n },\n {\n category: \"Performance & Space\",\n name: \"Unused Indexes Audit\",\n description: \"Finds indexes that have never been scanned by queries (candidates to drop).\",\n code: `SELECT \\n schemaname, relname AS table_name, indexrelname AS index_name, \\n idx_scan AS times_used, pg_size_pretty(pg_relation_size(indexrelid)) AS index_size\\nFROM pg_stat_user_indexes WHERE idx_scan = 0 \\nORDER BY pg_relation_size(indexrelid) DESC;`\n },\n {\n category: \"Performance & Space\",\n name: \"Buffer Cache Hit Ratio\",\n description: \"Calculates percentage of data reads served from shared memory RAM vs hitting cold disk storage. Aim for > 99%.\",\n code: `SELECT \\n relname AS table_name, \\n heap_blks_hit AS ram_hits, \\n heap_blks_read AS disk_reads,\\n ROUND(100.0 * heap_blks_hit / NULLIF(heap_blks_hit + heap_blks_read, 0), 2) AS cache_hit_ratio_pct\\nFROM pg_statio_user_tables \\nWHERE (heap_blks_hit + heap_blks_read) > 0\\nORDER BY disk_reads DESC;`\n },\n {\n category: \"Performance & Space\",\n name: \"Table Scan Analysis (Seq vs Index)\",\n description: \"Identifies heavy tables that frequently perform sequential scans instead of utilizing indexes.\",\n code: `SELECT \\n relname AS table_name, \\n seq_scan AS sequential_scans, \\n idx_scan AS indexed_scans,\\n ROUND(100.0 * idx_scan / NULLIF(seq_scan + idx_scan, 0), 2) AS optimal_index_usage_pct\\nFROM pg_stat_user_tables \\nWHERE (seq_scan + idx_scan) > 100\\nORDER BY seq_scan DESC;`\n },\n {\n category: \"Index Health\",\n name: \"Duplicate & Redundant Indexes\",\n description: \"Finds index keys pointing to the same table column combination—wasting memory buffers and slowing down mutations.\",\n code: `SELECT \\n indrelid::regclass AS table_name,\\n amname AS access_method,\\n indkey::text AS stringified_keys,\\n array_agg(indexrelid::regclass) AS duplicate_indexes\\nFROM pg_index i\\nJOIN pg_opclass o ON o.oid = ANY(i.indclass)\\nJOIN pg_am a ON a.oid = o.opcmethod\\nGROUP BY indrelid, amname, indkey\\nHAVING count(*) > 1;`\n },\n {\n category: \"Index Health\",\n name: \"Index Size vs Usage Breakdown\",\n description: \"Compares raw storage footprint vs actual read utilization across your entire index ecosystem.\",\n code: `SELECT \\n schemaname, \\n relname AS table_name, \\n indexrelname AS index_name, \\n pg_size_pretty(pg_relation_size(indexrelid)) AS index_size, \\n idx_scan AS scan_count\\nFROM pg_stat_user_indexes \\nORDER BY pg_relation_size(indexrelid) DESC;`\n },\n {\n category: \"Maintenance\",\n name: \"Dead Rows & Bloat Tracking\",\n description: \"Shows dead row accumulation counts that require manual VACUUMing.\",\n code: `SELECT \\n schemaname, relname AS table_name, n_dead_tup AS dead_rows,\\n n_live_tup AS live_rows, last_vacuum, last_autovacuum\\nFROM pg_stat_user_tables WHERE n_dead_tup > 0\\nORDER BY n_dead_tup DESC;`\n },\n {\n category: \"Maintenance\",\n name: \"Autovacuum Live Execution Progress\",\n description: \"Monitors actively running background cleanups, physical page heap scans, and current phase progressions.\",\n code: `SELECT \\n p.pid, \\n now() - a.xact_start AS active_duration, \\n p.phase, \\n p.heap_blks_total, \\n p.heap_blks_scanned, \\n p.heap_blks_vacuumed\\nFROM pg_stat_progress_vacuum p\\nJOIN pg_stat_activity a ON p.pid = a.pid;`\n },\n {\n category: \"Maintenance\",\n name: \"Transaction ID Wraparound Risk Age\",\n description: \"Tracks how close databases are climbing toward freezing points to prevent catastrophic read-only emergencies.\",\n code: `SELECT \\n datname AS database_name, \\n age(datfrozenxid) AS current_tx_age, \\n ROUND(100.0 * age(datfrozenxid) / 2000000000.0, 4) AS wraparound_emergency_consumed_pct\\nFROM pg_database \\nWHERE datallowconn = true\\nORDER BY current_tx_age DESC;`\n }\n];\n\nconst staticTableListPaginationConfig = { pagination: false };\nconst staticTableListStyleConfig = { tableStyle: { maxHeight: \"55vh\", borderRadius: \"8px\" } };\nconst staticQueryOutputPaginationConfig = {\n pagination: false,\n paginationType: \"virtual-scroll\",\n};\nconst staticQueryOutputStyleConfig = { tableStyle: { maxHeight: \"62vh\", borderRadius: \"8px\" } };\n\nconst modalStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"90%\",\n maxWidth: \"1200px\",\n bgcolor: \"background.paper\",\n boxShadow: \"0px 20px 50px rgba(0, 0, 0, 0.15)\",\n p: 4,\n borderRadius: \"16px\",\n outline: \"none\",\n border: \"1px solid rgba(0, 0, 0, 0.05)\"\n};\n\nconst extractNodeMetric = (line) => {\n if (!line) return 0;\n const timeMatch = line.match(/actual\\s+time=[\\d.]+\\.\\.([\\d.]+)/);\n if (timeMatch && timeMatch[1]) return parseFloat(timeMatch[1]);\n\n const costMatch = line.match(/cost=[\\d.]+\\.\\.([\\d.]+)/);\n if (costMatch && costMatch[1]) return parseFloat(costMatch[1]);\n\n return 0;\n};\n\nconst VisualPlanRow = ({ rawTextLine, totalPlanMetric }) => {\n if (!rawTextLine || !rawTextLine.trim()) return null;\n\n const leadingSpaces = rawTextLine.search(/\\S/);\n const depth = leadingSpaces > 0 ? Math.floor(leadingSpaces / 2) : 0;\n const cleanContent = rawTextLine.trim();\n\n const isSeqScan = cleanContent.includes(\"Seq Scan\");\n const isIndexScan = cleanContent.includes(\"Index Scan\");\n const isCostRow = cleanContent.startsWith(\"->\") || depth > 0;\n\n const nodeMetric = extractNodeMetric(cleanContent);\n const impactPercentage = totalPlanMetric > 0 ? Math.round((nodeMetric / totalPlanMetric) * 100) : 0;\n\n const isBottleneck = impactPercentage >= 35;\n\n return (\n <Box\n className=\"flex items-center justify-between gap-4 py-2 px-3 my-1 rounded-lg border transition-all hover:bg-slate-100/80\"\n sx={{\n marginLeft: `${depth * 24}px`,\n backgroundColor: isBottleneck ? \"#fff5f5\" : isSeqScan ? \"#fef2f2\" : isIndexScan ? \"#f0fdf4\" : \"#ffffff\",\n borderColor: isBottleneck ? \"#fecaca\" : isSeqScan ? \"#fca5a5\" : isIndexScan ? \"#bbf7d0\" : \"var(--color-gray3)\",\n borderLeft: isBottleneck ? \"5px solid #dc2626\" : isSeqScan ? \"5px solid #ef4444\" : isIndexScan ? \"5px solid #22c55e\" : \"1px solid var(--color-gray3)\"\n }}\n >\n <Box className=\"flex items-center gap-2 overflow-hidden flex-grow\">\n {isCostRow && <span className=\"text-gray-400 font-bold select-none\">↳</span>}\n <Typography\n variant=\"body2\"\n className=\"font-mono text-slate-700 font-medium break-all whitespace-pre-wrap\"\n sx={{ color: isBottleneck ? \"#991b1b\" : isSeqScan ? \"#991b1b\" : isIndexScan ? \"#166534\" : \"#334155\" }}\n >\n {cleanContent}\n </Typography>\n </Box>\n\n {nodeMetric > 0 && (\n <Box className=\"flex items-center gap-1.5 shrink-0\">\n <Chip\n label={`${impactPercentage}% cost`}\n size=\"small\"\n color={isBottleneck ? \"error\" : impactPercentage > 15 ? \"warning\" : \"default\"}\n sx={{\n fontSize: '11px',\n fontWeight: '700',\n height: '22px',\n borderRadius: '6px'\n }}\n />\n </Box>\n )}\n </Box>\n );\n};\n\nconst QueryManagement = () => {\n const useSkeleton = useSelector(getUseSkeleton);\n const [rights, setRights] = useState({});\n const [processId, setProcessId] = useState(null);\n const [selectedQuery, setSelectedQuery] = useState(\"\");\n const [modalIndex, setModalIndex] = useState(0);\n const [queryOutputColumns, setQueryOutputColumns] = useState([]);\n const [queryOutputData, setQueryOutputData] = useState([]);\n const [isfetchLockedQuery, setisFetchLockedQuery] = useState(false);\n const { user } = useSelector((state) => state.Authenticate);\n\n const [activeTab, setActiveTab] = useState(0);\n const [resultSearchQuery, setResultSearchQuery] = useState(\"\");\n const [isTablesModalOpen, setIsTablesModalOpen] = useState(false);\n const [isHistoryModalOpen, setIsHistoryModalOpen] = useState(false);\n\n const [tableListData, setTableListData] = useState([]);\n const [filteredTableData, setFilteredTableData] = useState([]);\n const [queryHistoryData, setQueryHistoryData] = useState([]);\n const [actions, setActions] = useState([]);\n const numberOfRows = queryOutputData.length || null;\n\n const [explainTextLines, setExplainTextLines] = useState([]);\n const [executionTime, setExecutionTime] = useState(null);\n\n const populateStateQuery = `select pid,datname,state,wait_event_type,cast(now() - query_start as text) as query_age,cast(now() - state_change as text) as state_age,query from pg_stat_activity where state in ('active','idle in transaction') order by query_age desc;`;\n const killProcessQuery = `select pg_terminate_backend( ${processId} )`;\n const fetchLockedQuery = `select cast(pid as text) as pid, cast(usename as text) as usename, cast(pg_blocking_pids(pid) as text) as blocked_by, datname as Database_Name,cast(query as text) as blocked_query from pg_stat_activity where cardinality(pg_blocking_pids(pid)) > 0`;\n const fetchExceptionsQuery = `select * from caught_exception where username = (select user_name from um_user where id = ` + user.id + `) order by id desc limit 100`;\n\n const { translate } = useTranslateProvider();\n const [loading, setLoading] = useState(false);\n const [isCustomLoading, setisCustomLoading] = useState(false);\n const [isTableDataLoading, setisTableDataLoading] = useState(false);\n const [disabled, setDisabled] = useState(true);\n\n const [isDbaToolkitOpen, setIsDbaToolkitOpen] = useState(false);\n\n const [showDropGif, setShowDropGif] = useState(false);\n\n const handleSelectedTable = async (row, queryType = null) => {\n let query;\n if (queryType === \"index\") {\n query = \"SELECT * FROM pg_indexes WHERE tablename = '\" + row.tablename + \"' limit 100\";\n } else if (queryType === \"ddl\") {\n query = `WITH table_columns AS (\n SELECT c.relname AS table_name, a.attname AS column_name, pg_catalog.format_type(a.atttypid, a.atttypmod) AS column_type,\n CASE WHEN a.attnotnull THEN 'not null' ELSE 'null' END AS column_constraint\n FROM pg_class c JOIN pg_attribute a ON a.attrelid = c.oid JOIN pg_type t ON a.atttypid = t.oid\n WHERE c.relname = '${row.tablename}' AND a.attnum > 0 ORDER BY a.attnum\n ), table_indexes AS (\n SELECT t.relname AS table_name, i.relname AS index_name, pg_catalog.pg_get_indexdef(ix.indexrelid) AS index_def\n FROM pg_class t JOIN pg_index ix ON t.oid = ix.indrelid JOIN pg_class i ON i.oid = ix.indexrelid\n WHERE t.relname = '${row.tablename}'\n )\n SELECT 'CREATE TABLE ' || tc.table_name || E'\\\\n(\\\\n' || array_to_string(array_agg(DISTINCT ' ' || tc.column_name || ' ' || tc.column_type || ' ' || tc.column_constraint), E',\\\\n') || E'\\\\n);\\\\n' || COALESCE(string_agg(DISTINCT ti.index_def, E'\\\\n'), '') AS ddl\n FROM table_columns tc LEFT JOIN table_indexes ti ON tc.table_name = ti.table_name GROUP BY tc.table_name;`;\n } else {\n query = `select * from ${row.tablename} limit 100`;\n }\n setSelectedQuery(query);\n setIsTablesModalOpen(false);\n setActiveTab(0);\n handleRetrieveData(query);\n };\n\n const handleSelectedQuery = async (row) => {\n setSelectedQuery(row.query);\n setValue(\"query\", row.query);\n setDisabled(!(row.query && row.query.trim().length > 0));\n setIsHistoryModalOpen(false);\n setActiveTab(0);\n };\n\n const tableListColumns = [\n { field: \"Sr. No.\", label: \"#\", align: \"left\" },\n { field: \"size_pretty\", label: \"Size\", align: \"left\" },\n { field: \"tablename\", label: \"Table Name\", align: \"left\", onClick: handleSelectedTable },\n {\n field: \"Action\",\n label: \"Action\",\n align: \"center\",\n render: (row) => (\n <Button variant=\"outlined\" color=\"primary\" size=\"small\" sx={{ borderRadius: \"6px\", textTransform: \"none\" }} onClick={() => handleSelectedTable(row, \"index\")}>\n {translate(\"Index\")}\n </Button>\n ),\n },\n {\n field: \"DDL\",\n label: \"DDL\",\n align: \"center\",\n render: (row) => (\n <Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={{ borderRadius: \"6px\", textTransform: \"none\" }} onClick={() => handleSelectedTable(row, \"ddl\")}>\n {translate(\"DDL\")}\n </Button>\n ),\n },\n ];\n\n const queryHistoryColumns = [\n { field: \"Sr. No.\", label: \"#\", align: \"left\" },\n { field: \"query\", label: \"Query\", align: \"left\", onClick: handleSelectedQuery },\n { field: \"created_on\", label: \"Executed On\", align: \"left\" },\n ];\n\n const { control, setValue, getValues, formState: { errors } } = useForm({\n mode: \"onChange\",\n defaultValues: { excelFileName: \"\" },\n });\n\n useEffect(() => { setFilteredTableData(tableListData); }, [tableListData]);\n\n useEffect(() => {\n if (selectedQuery?.length > 0) {\n setDisabled(false);\n setValue(\"query\", selectedQuery);\n } else {\n setDisabled(true);\n }\n }, [selectedQuery]);\n\n const trackEvent = useTrackEvent();\n\n const handleRetrieveData = async (query, actions = []) => {\n try {\n if (!query) {\n showToast({ message: `Query can not be empty`, type: \"error\" });\n return;\n }\n setisCustomLoading(true);\n setResultSearchQuery(\"\");\n \n const startTime = performance.now();\n const { data } = await getQueryBasedData(query).catch((error) => {\n setQueryOutputData([]);\n setisCustomLoading(false);\n setExecutionTime(null);\n showToast({ message: `${error.response.data.message}`, type: \"error\" });\n });\n const endTime = performance.now();\n setExecutionTime((endTime - startTime).toFixed(0));\n\n if (data && !data.length) {\n setQueryOutputData([]);\n showToast({ message: `No data found`, type: \"info\" });\n setisCustomLoading(false);\n return;\n }\n if (data?.length) {\n if (query !== populateStateQuery) {\n showToast({ message: `Query Executed Successfully`, type: \"success\" });\n }\n }\n if (query === populateStateQuery) {\n actions = [\n {\n label: \"KILL PROCESS\",\n icon: (\n <Button\n variant=\"outlined\"\n color=\"error\"\n size=\"small\"\n sx={{\n borderRadius: '6px',\n textTransform: 'none',\n fontSize: '11px',\n minWidth: 'auto'\n }}\n >\n {translate(\"Kill Query\")}\n </Button>\n ),\n onClick: openKillProcessModal,\n },\n ];\n } else if (query === killProcessQuery) {\n if (data?.length) showToast({ message: `Terminated Successfully`, type: \"success\" });\n setQueryOutputData([]);\n return;\n }\n setQueryOutputData(data.map((data, index) => ({ index: index + 1, ...data })));\n const columnNames = Object.keys(data[0]);\n if (actions.length || query === populateStateQuery) columnNames.push(\"Actions\");\n const columns = columnNames.map((column) => ({ field: column, label: column, align: \"left\" }));\n setActions(actions);\n setQueryOutputColumns([{ field: \"index\", label: \"#\", align: \"left\" }, ...columns]);\n fetchLimitedQueryHistory();\n setisCustomLoading(false);\n setActiveTab(1);\n } catch (error) {\n setisCustomLoading(false);\n }\n };\n\n const handleExplainPlan = async () => {\n const rawQueryInput = getValues(\"query\");\n if (!rawQueryInput) {\n showToast({ message: `Query can not be empty`, type: \"error\" });\n return;\n }\n\n const cleanedQuery = rawQueryInput.trim().replace(/;+$/, \"\");\n const explainStatement = `EXPLAIN ${cleanedQuery};`;\n\n try {\n setisCustomLoading(true);\n const { data } = await getQueryBasedData(explainStatement).catch((error) => {\n setisCustomLoading(false);\n showToast({ message: `${error.response?.data?.message || \"Explain failed\"}`, type: \"error\" });\n });\n\n if (data && data.length > 0) {\n const planKey = Object.keys(data[0])[0];\n const parsedLines = data.map(row => row[planKey]);\n\n setExplainTextLines(parsedLines);\n showToast({ message: `Explain Plan Calculated`, type: \"success\" });\n setActiveTab(2);\n } else {\n showToast({ message: `No data returned from execution plan`, type: \"info\" });\n }\n setisCustomLoading(false);\n } catch (error) {\n setisCustomLoading(false);\n console.error(error);\n }\n };\n\n const handleExecuteData = async (query) => {\n try {\n if (!query) {\n showToast({ message: `Query can not be empty`, type: \"error\" });\n return;\n }\n const { data } = await executeQuery(query).catch((error) => {\n showToast({ message: `${error.response.data.message}`, type: \"error\" });\n });\n if (!data.length) showToast({ message: `No data found`, type: \"info\" });\n if (data.length) showToast({ message: `Query updated successfully`, type: \"success\" });\n } catch (error) {\n console.error(error);\n }\n };\n\n const handleDownloadExcel = async () => {\n const queryUUID = \"d91d249f-c8e1-4397-a84d-6ce6eb33eb48\";\n const queryValue = getValues(\"query\");\n const excelFileName = getValues(\"excelFileName\");\n if (!queryValue) {\n showToast({ message: `Query can not be empty`, type: \"info\" });\n return;\n }\n try {\n setisCustomLoading(true);\n const reportExcelDto = { paramObj: { query: queryValue } };\n const response = await downloadExcel(queryUUID, reportExcelDto).catch((error) => {\n showToast({ message: `Operation Unsuccessful, Something went wrong`, type: \"error\" });\n return null;\n });\n\n if (!response) {\n setisCustomLoading(false);\n return;\n }\n\n const blob = new Blob([response.data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\n const filename = `${excelFileName || \"rename\"}_${new Date().getTime()}.xlsx`;\n\n if (navigator.msSaveBlob) {\n const blobData = new Blob([response.data], { type: \"\" });\n trackEvent(\"file_download\", { file_type: \"xlsx\", file_name: filename, file_size: `${(blobData.size / 1024).toFixed(2)} KB`, download_status: \"success\" });\n return navigator.msSaveBlob(blobData, filename);\n } else {\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n a.style.display = \"none\";\n document.body.appendChild(a);\n a.click();\n trackEvent(\"file_download\", { file_type: \"xlsx\", file_name: filename, file_size: `${(blob.size / 1024).toFixed(2)} KB`, download_status: \"success\" });\n URL.revokeObjectURL(url);\n a.remove();\n }\n setisCustomLoading(false);\n } catch (error) {\n setisCustomLoading(false);\n showToast({ type: \"error\", message: `Something went wrong!` });\n }\n };\n\n const handleFetchLockedQuery = async () => {\n try {\n setisFetchLockedQuery(true);\n setSelectedQuery(fetchLockedQuery);\n await handleRetrieveData(fetchLockedQuery);\n } catch (error) {\n console.error(error);\n }\n };\n\n const openKillProcessModal = async (row) => {\n setModalIndex(3);\n setProcessId(row.pid);\n };\n\n const handleKillProcess = async () => {\n try {\n await handleRetrieveData(killProcessQuery);\n await handleRetrieveData(isfetchLockedQuery ? fetchLockedQuery : populateStateQuery);\n } catch (error) {\n console.error(error);\n }\n };\n\n const handlePopulateStateQuery = async () => {\n try {\n setSelectedQuery(populateStateQuery);\n await handleRetrieveData(populateStateQuery);\n } catch (error) {\n console.error(error);\n }\n };\n\n const fetchLimitedQueryHistory = async () => {\n try {\n const queryHistorySearchKey = getValues(\"queryHistorySearchKey\");\n const { data } = await execute({\n code: \"retrieve_limited_query_history\",\n parameters: { userId: user?.id, limit: 100, searchKey: queryHistorySearchKey },\n });\n setQueryHistoryData(\n data.result.map((data, index) => ({\n index: index + 1,\n ...data,\n created_on: dayjs(data.created_on).format(\"DD-MM-YYYY h:mm:ss A\"),\n }))\n );\n } catch (error) {\n console.error(error);\n }\n };\n\n const init = async () => {\n try {\n setLoading(true);\n const { data: featureJson } = await getAssignedFeatures(\"techo.querymanagement\");\n if (featureJson) setRights(JSON.parse(featureJson));\n await fetchLimitedQueryHistory();\n setLoading(false);\n } catch (error) {\n setLoading(false);\n }\n };\n\n useEffect(() => { init(); }, []);\n\n const openTablesModal = async () => {\n setIsTablesModalOpen(true);\n if (!tableListData.length) await fetchTableList();\n };\n\n const openDbaToolkitModal = () => {\n setIsDbaToolkitOpen(true);\n };\n\n const fetchTableList = async () => {\n try {\n setisTableDataLoading(true);\n const { data } = await getDataWithTimeout({ code: \"retrieve_all_tables\" });\n setTableListData(data.result.map((data, index) => ({ index: index + 1, ...data })));\n setisTableDataLoading(false);\n } catch (error) {\n setisTableDataLoading(false);\n }\n };\n\n const handleSearchKeyChange = (e) => { handleSearchChange(e.target.value); };\n\n const handleSearchChange = useMemo(\n () =>\n debounce((value) => {\n const lowerCaseValue = value.toLowerCase();\n setFilteredTableData(tableListData.filter((data) => data?.tablename?.toLowerCase().includes(lowerCaseValue)));\n }, 300),\n [tableListData]\n );\n\n const processedFilteredOutputData = useMemo(() => {\n if (!resultSearchQuery) return queryOutputData;\n const cleanSearchVal = resultSearchQuery.toLowerCase().trim();\n\n return queryOutputData.filter((row) => {\n return Object.entries(row).some(([key, val]) => {\n if (key === \"index\" || key === \"Actions\") return false;\n return String(val ?? \"\").toLowerCase().includes(cleanSearchVal);\n });\n });\n }, [queryOutputData, resultSearchQuery]);\n\n const handleRefreshCurrentQuery = async () => {\n const currentQuery = getValues(\"query\") || selectedQuery;\n if (currentQuery) {\n await handleRetrieveData(currentQuery, actions);\n } else {\n showToast({ message: \"No context query found to refresh\", type: \"warning\" });\n }\n };\n\n const handleFetchExceptions = async () => {\n try {\n setSelectedQuery(fetchExceptionsQuery);\n await handleRetrieveData(fetchExceptionsQuery);\n } catch (error) {\n console.error(error);\n }\n };\n\n return GeneralUtil.isTecho && !loading && !rights?.[\"view.manage.querymanagement.retrieve\"] ? (\n <Box className=\"flex justify-center items-center w-full h-[80vh]\">\n <Card className=\"p-8 max-w-md text-center shadow-2xl border border-gray-100 rounded-2xl bg-white\">\n <Typography variant=\"h5\" color=\"error\" fontWeight=\"700\" letterSpacing=\"-0.5px\">Access Denied</Typography>\n <Typography variant=\"body2\" className=\"text-gray-400 mt-2\">You don't have permission to view Query Management Tool</Typography>\n </Card>\n </Box>\n ) : (\n <QueryManagementSkeleton loading={loading}>\n {isCustomLoading && useSkeleton && (\n <div className=\"loader-overlay\"><div className=\"loader-spinner\"></div></div>\n )}\n\n <Box className=\"w-full flex flex-col gap-4 mt-2 p-3 min-h-[85vh] bg-[#fdfeff]\">\n\n <Card className=\"px-4 py-2.5 shadow-sm border border-gray-200/70 rounded-xl bg-white flex flex-wrap items-center justify-between gap-4\">\n\n <Tabs\n value={activeTab}\n onChange={(e, newVal) => setActiveTab(newVal)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n sx={{\n '& .MuiTabs-indicator': { height: '3px', borderRadius: '3px' },\n '& .MuiTab-root': { textTransform: 'none', fontWeight: 600, fontSize: '14px', minHeight: '44px' }\n }}\n >\n <Tab\n label={\n <Box className=\"flex items-center gap-2\">\n <FontAwesomeIcon icon={faTerminal} className=\"text-xs opacity-80\" />\n <span>{translate(\"Query Console\")}</span>\n </Box>\n }\n />\n <Tab\n label={\n <Box className=\"flex items-center gap-2\">\n <FontAwesomeIcon icon={faTableList} className=\"text-xs opacity-80\" />\n <span>{translate(\"Results Layer\")}</span>\n {!!numberOfRows && (\n <Chip label={numberOfRows} size=\"small\" color=\"primary\" sx={{ height: 18, fontSize: '10px', fontWeight: 'bold' }} />\n )}\n </Box>\n }\n />\n <Tab\n label={\n <Box className=\"flex items-center gap-2\">\n <FontAwesomeIcon icon={faSitemap} className=\"text-xs text-indigo-500 opacity-90\" />\n <span>{translate(\"Query Plan\")}</span>\n {explainTextLines.length > 0 && (\n <Chip label=\"Ready\" size=\"small\" color=\"info\" sx={{ height: 18, fontSize: '9px', fontWeight: 'bold' }} />\n )}\n </Box>\n }\n />\n </Tabs>\n\n <Box className=\"flex flex-wrap items-center gap-2.5\">\n <Button variant=\"outlined\" color=\"inherit\" size=\"small\" onClick={openTablesModal} className=\"h-[36px] border-gray-300 hover:bg-gray-50 text-gray-700\" sx={{ textTransform: \"none\", borderRadius: \"8px\", fontWeight: 500 }}>\n <FontAwesomeIcon icon={faDatabase} className=\"mr-2 text-blue-500\" />\n {translate(\"Tables Explorer\")}\n </Button>\n\n <Button variant=\"outlined\" color=\"inherit\" size=\"small\" onClick={openDbaToolkitModal} className=\"h-[36px] border-gray-300 hover:bg-gray-50 text-gray-700\" sx={{ textTransform: \"none\", borderRadius: \"8px\", fontWeight: 500 }}>\n <FontAwesomeIcon icon={faSlidersH} className=\"mr-2 text-blue-500\" />\n {translate(\"DBA Toolkit\")}\n </Button>\n\n <Button variant=\"outlined\" color=\"inherit\" size=\"small\" onClick={() => setIsHistoryModalOpen(true)} className=\"h-[36px] border-gray-300 hover:bg-gray-50 text-gray-700\" sx={{ textTransform: \"none\", borderRadius: \"8px\", fontWeight: 500 }}>\n <FontAwesomeIcon icon={faHistory} className=\"mr-2 text-purple-500\" />\n {translate(\"Query History\")}\n </Button>\n\n <Divider orientation=\"vertical\" flexItem className=\"hidden md:block my-1\" />\n\n <Button size=\"small\" color=\"secondary\" onClick={handleFetchLockedQuery} className=\"h-[34px] font-semibold text-xs text-gray-500\" sx={{ textTransform: \"none\" }}>\n <FontAwesomeIcon icon={faLock} className=\"mr-1 text-amber-500 text-[10px]\" /> {translate(\"Locked Queries\")}\n </Button>\n\n <Button size=\"small\" color=\"secondary\" onClick={handlePopulateStateQuery} className=\"h-[34px] font-semibold text-xs text-gray-500\" sx={{ textTransform: \"none\" }}>\n <FontAwesomeIcon icon={faSlidersH} className=\"mr-1 text-teal-500 text-[10px]\" /> {translate(\"Active Queries\")}\n </Button>\n\n <Button size=\"small\" color=\"secondary\" onClick={handleFetchExceptions} className=\"h-[34px] font-semibold text-xs text-gray-500\" sx={{ textTransform: \"none\" }}>\n <FontAwesomeIcon icon={faTimes} className=\"mr-1 text-teal-500 text-[10px]\" /> {translate(\"Recent Exceptions\")}\n </Button>\n </Box>\n </Card>\n\n <Box className=\"flex-grow flex flex-col\">\n\n {activeTab === 0 && (\n <Card className=\"p-4 shadow-sm border border-gray-200 rounded-2xl bg-white flex flex-col gap-4 flex-grow min-h-[520px]\">\n\n <Box className=\"flex-grow relative rounded-xl overflow-hidden border border-gray-200 shadow-inner bg-[#fffffe] h-[400px]\">\n <Editor\n height=\"100%\"\n defaultLanguage=\"sql\"\n theme=\"vs-light\"\n value={getValues(\"query\") || \"\"}\n onChange={(value) => {\n setValue(\"query\", value || \"\");\n setDisabled(!(value && value.trim().length > 0));\n }}\n options={{\n minimap: { enabled: false },\n fontSize: 14,\n fontFamily: \"'Fira Code', 'Courier New', monospace\",\n lineNumbers: \"on\",\n roundedSelection: true,\n scrollBeyondLastLine: false,\n readOnly: false,\n automaticLayout: true,\n tabSize: 2,\n suggestOnTriggerCharacters: true,\n wordWrap: \"on\"\n }}\n loading={<div className=\"p-4 text-gray-400 font-mono text-xs\">Loading IDE Engine...</div>}\n />\n </Box>\n\n <Box className=\"flex flex-wrap items-center justify-between gap-3 pt-3 border-t border-gray-100\">\n\n <Box className=\"flex items-center gap-2 bg-gray-50/80 p-1.5 rounded-xl border border-gray-200/60\">\n\n <CustomTextField\n id=\"excelFileName\"\n name=\"excelFileName\"\n control={control}\n placeholder=\"Export sheet filename...\"\n size=\"small\"\n className=\"max-w-[220px] bg-white\"\n sx={{ '& .MuiOutlinedInput-root': { borderRadius: '8px', height: '36px' } }}\n />\n\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleDownloadExcel}\n className=\"border-gray-300 text-gray-700 hover:bg-white\"\n sx={{\n textTransform: \"none\",\n borderRadius: \"8px\",\n height: \"36px\",\n minWidth: \"max-content\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n px: 2,\n py: 0,\n fontSize: \"0.875rem\",\n lineHeight: 1\n }}\n >\n <FontAwesomeIcon icon={faDownload} className=\"mr-2 text-gray-400\" />\n Spreadsheet\n </Button>\n\n </Box>\n\n <Box className=\"flex gap-2.5\">\n {(!GeneralUtil.isTecho || rights?.['view.manage.querymanagement.execute']) && (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n disabled={disabled}\n className=\"h-[38px]\"\n sx={{ textTransform: \"none\", borderRadius: \"8px\", fontWeight: 600 }}\n onClick={async () => {\n const val = getValues(\"query\");\n setSelectedQuery(val);\n val?.toLowerCase().includes(\"where\") ? await handleExecuteData(val) : setModalIndex(2);\n }}\n >\n {translate(\"Execute Command\")}\n </Button>\n )}\n\n <Button\n variant=\"outlined\"\n disabled={disabled}\n className=\"h-[38px] border-indigo-200 text-indigo-600 hover:bg-indigo-50 disabled:border-gray-200 disabled:text-gray-400\"\n sx={{ textTransform: \"none\", borderRadius: \"8px\", fontWeight: 600 }}\n onClick={handleExplainPlan}\n >\n <FontAwesomeIcon icon={faSitemap} className=\"mr-2 text-xs\" />\n {translate(\"Explain Plan\")}\n </Button>\n {(!GeneralUtil.isTecho || rights?.['view.manage.querymanagement.retrieve']) && (\n <Button\n variant=\"contained\"\n color=\"success\"\n disabled={disabled}\n className=\"h-[38px] shadow-sm shadow-green-200\"\n sx={{ textTransform: \"none\", borderRadius: \"8px\", fontWeight: 600, px: 3 }}\n onClick={async () => {\n const val = getValues(\"query\");\n setSelectedQuery(val);\n \n const cleanVal = val?.toLowerCase().trim() || \"\";\n \n const restrictedRegex = /\\b(drop|truncate|delete|update)\\b/;\n\n if (restrictedRegex.test(cleanVal)) {\n setShowDropGif(true);\n return;\n }\n\n const isSelect = cleanVal.startsWith(\"select\");\n const hasWhere = cleanVal.includes(\"where\");\n\n if (isSelect && !hasWhere) {\n setModalIndex(1);\n } else {\n await handleRetrieveData(val);\n }\n }}\n >\n <FontAwesomeIcon icon={faPlay} className=\"mr-2 text-xs\" />\n {translate(\"Retrieve Data\")}\n </Button>\n )}\n </Box>\n </Box>\n </Card>\n )}\n\n {activeTab === 1 && (\n <Card className=\"p-4 shadow-sm border border-gray-200 rounded-2xl bg-white flex flex-col flex-grow min-h-[520px]\">\n <Box className=\"flex flex-wrap items-center justify-between border-b border-gray-100 pb-3 mb-3 gap-3\">\n {queryOutputData.length > 0 && (\n <Box className=\"flex flex-wrap items-center justify-between w-full gap-3\">\n <Box className=\"flex items-center gap-3 w-full sm:w-auto\">\n <TextField\n size=\"small\"\n variant=\"outlined\"\n placeholder=\"Filter layout results...\"\n value={resultSearchQuery}\n onChange={(e) => setResultSearchQuery(e.target.value)}\n sx={{\n width: { xs: \"100%\", sm: \"280px\" },\n '& .MuiOutlinedInput-root': { borderRadius: '10px', height: '36px', backgroundColor: '#fafbfe' }\n }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faSearch} className=\"text-gray-400 text-xs\" />\n </InputAdornment>\n ),\n endAdornment: resultSearchQuery && (\n <InputAdornment position=\"end\">\n <IconButton size=\"small\" onClick={() => setResultSearchQuery(\"\")} edge=\"end\">\n <FontAwesomeIcon icon={faTimes} className=\"text-[10px]\" />\n </IconButton>\n </InputAdornment>\n )\n }}\n />\n\n <Chip\n label={\n resultSearchQuery\n ? `${translate(\"Matches\")}: ${processedFilteredOutputData.length} / ${numberOfRows}`\n : `${translate(\"Records Loaded\")}: ${numberOfRows}`\n }\n size=\"medium\"\n color={resultSearchQuery ? \"primary\" : \"success\"}\n variant={resultSearchQuery ? \"outlined\" : \"filled\"}\n sx={{ borderRadius: \"8px\", fontWeight: \"600\", fontSize: \"12px\", height: \"34px\" }}\n />\n\n {executionTime && (\n <Chip\n icon={<FontAwesomeIcon icon={faClock} style={{ fontSize: '11px', color: '#475569' }} />}\n label={`${executionTime} ms`}\n variant=\"outlined\"\n sx={{ \n borderRadius: \"8px\", \n fontWeight: \"500\", \n fontSize: \"12px\",\n height: \"34px\", \n backgroundColor: '#f1f5f9', \n borderColor: '#e2e8f0' \n }}\n />\n )}\n </Box>\n\n <Box className=\"flex flex-wrap items-center gap-2.5 ml-auto\">\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n size=\"small\"\n onClick={handleRefreshCurrentQuery}\n className=\"h-[36px] border-gray-300 hover:bg-gray-50 text-gray-700\"\n sx={{ textTransform: \"none\", borderRadius: \"8px\", fontWeight: 500 }}\n >\n <FontAwesomeIcon icon={faSyncAlt} className=\"mr-2 text-teal-600\" />\n {translate(\"Refresh\")}\n </Button>\n\n <Box className=\"flex items-center gap-2 bg-gray-50/80 p-1.5 rounded-xl border border-gray-200/60\">\n <CustomTextField\n id=\"excelFileName\"\n name=\"excelFileName\"\n control={control}\n placeholder=\"Export sheet filename...\"\n size=\"small\"\n className=\"max-w-[220px] bg-white\"\n sx={{ '& .MuiOutlinedInput-root': { borderRadius: '8px', height: '36px' } }}\n />\n\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleDownloadExcel}\n className=\"border-gray-300 text-gray-700 hover:bg-white\"\n sx={{\n textTransform: \"none\",\n borderRadius: \"8px\",\n height: \"36px\",\n minWidth: \"max-content\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n px: 2,\n py: 0,\n fontSize: \"0.875rem\",\n lineHeight: 1\n }}\n >\n <FontAwesomeIcon icon={faDownload} className=\"mr-2 text-blue-600\" />\n {translate(\"Spreadsheet\")}\n </Button>\n </Box>\n </Box>\n </Box>\n )}\n </Box>\n\n {processedFilteredOutputData.length ? (\n <Box className=\"w-full overflow-x-auto flex-grow border border-gray-150 rounded-xl\">\n <CustomizedTable\n className=\"min-w-[600px]\"\n columns={queryOutputColumns}\n actions={actions}\n tableData={processedFilteredOutputData}\n paginationConfig={staticQueryOutputPaginationConfig}\n styleConfig={staticQueryOutputStyleConfig}\n />\n </Box>\n ) : (\n <Box className=\"flex flex-col items-center justify-center flex-grow py-24 text-gray-400 bg-gray-50/50 rounded-xl border border-dashed border-gray-200\">\n <FontAwesomeIcon icon={faTableList} size=\"2x\" className=\"mb-3 text-gray-300\" />\n <Typography variant=\"body2\" fontWeight=\"600\" className=\"text-gray-600\">\n {queryOutputData.length > 0 ? \"No Matching Metadata Fields\" : \"No Active Dataset Displayed\"}\n </Typography>\n <Typography variant=\"caption\" className=\"mt-1 text-gray-400 max-w-xs text-center\">\n {queryOutputData.length > 0\n ? \"The criteria keywords queried didn't flag hits inside the running table frame matrix.\"\n : \"Head backwards into the query console and fire data queries to populate results layer.\"\n }\n </Typography>\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"inherit\"\n onClick={() => {\n if (queryOutputData.length > 0) {\n setResultSearchQuery(\"\");\n } else {\n setActiveTab(0);\n }\n }}\n className=\"mt-4 border-gray-300 text-gray-600 bg-white\"\n sx={{ textTransform: \"none\", borderRadius: \"8px\", fontSize: \"12px\" }}\n >\n {queryOutputData.length > 0 ? \"Reset Matrix Filter\" : \"Go to Query Workspace\"}\n </Button>\n </Box>\n )}\n </Card>\n )}\n\n {activeTab === 2 && (\n <Card className=\"p-5 shadow-sm border border-gray-200 rounded-2xl bg-white flex flex-col flex-grow min-h-[520px]\">\n {explainTextLines.length > 0 ? (\n <Box className=\"flex flex-col flex-grow w-full\">\n <Typography variant=\"subtitle2\" className=\"text-gray-500 font-bold mb-3 uppercase tracking-wider text-xs\">\n Plan Graph Node Sequence: (Root Bottleneck Impact Assessment):\n </Typography>\n\n <Box className=\"flex-grow w-full overflow-y-auto bg-slate-50/50 border border-gray-200/80 rounded-xl p-4 max-h-[60vh]\">\n {(() => {\n const totalPlanMetric = extractNodeMetric(explainTextLines[0]);\n return explainTextLines.map((line, idx) => (\n <VisualPlanRow\n key={idx}\n rawTextLine={line}\n totalPlanMetric={totalPlanMetric}\n />\n ));\n })()}\n </Box>\n </Box>\n ) : (\n <Box className=\"flex flex-col items-center justify-center flex-grow py-24 text-gray-400 bg-gray-50/30 rounded-xl border border-dashed border-gray-200\">\n <FontAwesomeIcon icon={faSitemap} size=\"2x\" className=\"mb-3 text-indigo-300\" />\n <Typography variant=\"body2\" fontWeight=\"600\" className=\"text-gray-600\">\n No Query Plan Loaded\n </Typography>\n <Typography variant=\"caption\" className=\"mt-1 text-gray-400 max-w-xs text-center\">\n Type a query inside the editor and select 'Explain Plan' to compile the database execution steps.\n </Typography>\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n onClick={() => setActiveTab(0)}\n className=\"mt-4\"\n sx={{ textTransform: \"none\", borderRadius: \"8px\" }}\n >\n Go to Query Console\n </Button>\n </Box>\n )}\n </Card>\n )}\n </Box>\n\n </Box>\n\n <Modal open={isTablesModalOpen} onClose={() => setIsTablesModalOpen(false)}>\n <Box sx={modalStyle} className=\"flex flex-col gap-4 max-h-[85vh]\">\n <Box className=\"flex items-center justify-between border-b border-gray-100 pb-3\">\n <Typography variant=\"h6\" fontWeight=\"700\" className=\"flex items-center gap-2.5 text-gray-800\" letterSpacing=\"-0.4px\">\n <FontAwesomeIcon icon={faDatabase} className=\"text-blue-500 text-lg\" /> {translate(\"Tables Explorer\")}\n </Typography>\n <IconButton onClick={() => setIsTablesModalOpen(false)} size=\"small\" className=\"hover:bg-gray-100\">\n <FontAwesomeIcon icon={faTimes} className=\"text-sm text-gray-400\" />\n </IconButton>\n </Box>\n <TextField\n fullWidth\n onChange={handleSearchKeyChange}\n size=\"small\"\n placeholder=\"Type matching schema name indexes...\"\n sx={{ '& .MuiOutlinedInput-root': { borderRadius: '10px', backgroundColor: '#fdfeff' } }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faSearch} className=\"text-gray-400 text-xs\" />\n </InputAdornment>\n )\n }}\n />\n <Box className=\"overflow-y-auto flex-grow border border-gray-100 rounded-xl\">\n <CustomizedTable\n strip={true}\n isLoading={isTableDataLoading}\n columns={tableListColumns}\n tableData={filteredTableData}\n paginationConfig={staticTableListPaginationConfig}\n styleConfig={staticTableListStyleConfig}\n />\n </Box>\n </Box>\n </Modal>\n\n <Modal open={isHistoryModalOpen} onClose={() => setIsHistoryModalOpen(false)}>\n <Box sx={modalStyle} className=\"flex flex-col gap-4 max-h-[85vh]\">\n <Box className=\"flex items-center justify-between border-b border-gray-100 pb-3\">\n <Typography variant=\"h6\" fontWeight=\"700\" className=\"flex items-center gap-2.5 text-gray-800\" letterSpacing=\"-0.4px\">\n <FontAwesomeIcon icon={faHistory} className=\"text-purple-500 text-lg\" /> {translate(\"Query History\")}\n </Typography>\n <IconButton onClick={() => setIsHistoryModalOpen(false)} size=\"small\" className=\"hover:bg-gray-100\">\n <FontAwesomeIcon icon={faTimes} className=\"text-sm text-gray-400\" />\n </IconButton>\n </Box>\n <Box className=\"flex gap-2.5\">\n <CustomTextField\n id=\"queryHistorySearchKey\"\n name=\"queryHistorySearchKey\"\n control={control}\n placeholder=\"Search previous queries...\"\n size=\"small\"\n className=\"flex-grow\"\n sx={{ '& .MuiOutlinedInput-root': { borderRadius: '10px' } }}\n />\n <Button variant=\"contained\" color=\"primary\" onClick={fetchLimitedQueryHistory} sx={{ borderRadius: \"10px\", px: 3, textTransform: \"none\" }}>\n {translate(\"Search\")}\n </Button>\n </Box>\n <Box className=\"overflow-y-auto flex-grow border border-gray-150 rounded-xl\">\n <CustomizedTable\n strip={true}\n columns={queryHistoryColumns}\n tableData={queryHistoryData}\n paginationConfig={staticTableListPaginationConfig}\n styleConfig={staticTableListStyleConfig}\n />\n </Box>\n </Box>\n </Modal>\n\n <Modal open={isDbaToolkitOpen} onClose={() => setIsDbaToolkitOpen(false)}>\n <Box sx={modalStyle} className=\"flex flex-col gap-4 max-h-[85vh]\">\n <Box className=\"flex items-center justify-between border-b border-gray-100 pb-3\">\n <Typography variant=\"h6\" fontWeight=\"700\" className=\"flex items-center gap-2.5 text-gray-800\" letterSpacing=\"-0.4px\">\n <FontAwesomeIcon icon={faDatabase} className=\"text-purple-500 text-lg\" />\n {translate(\"DBA Toolkit\")}\n </Typography>\n <IconButton onClick={() => setIsDbaToolkitOpen(false)} size=\"small\" className=\"hover:bg-gray-100\">\n <FontAwesomeIcon icon={faTimes} className=\"text-sm text-gray-400\" />\n </IconButton>\n </Box>\n\n <Box className=\"overflow-y-auto flex-grow bg-slate-50/50 p-3 rounded-xl border border-gray-100 flex flex-col gap-5\">\n {[\"Performance & Space\", \"Index Health\", \"Maintenance\"].map((category) => {\n const categoryScripts = dbaToolkitScripts.filter(s => s.category === category);\n if (categoryScripts.length === 0) return null;\n\n return (\n <Box key={category} className=\"flex flex-col gap-2\">\n <Typography variant=\"caption\" className=\"text-slate-400 font-bold uppercase tracking-wider pl-1 text-[11px]\">\n {category}\n </Typography>\n\n <Box className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n {categoryScripts.map((snippet, index) => (\n <Box\n key={index}\n onClick={() => {\n setValue(\"query\", snippet.code);\n setDisabled(false);\n setIsDbaToolkitOpen(false);\n setActiveTab(0);\n showToast({ message: `Injected script: ${snippet.name}`, type: \"success\" });\n }}\n className=\"p-4 bg-white hover:bg-purple-50/30 border border-slate-200 hover:border-purple-300 rounded-xl cursor-pointer transition-all shadow-sm group flex flex-col justify-between\"\n >\n <Box>\n <Typography variant=\"body2\" className=\"font-bold text-slate-800 group-hover:text-purple-700 transition-colors\">\n {snippet.name}\n </Typography>\n <Typography variant=\"caption\" className=\"text-slate-500 block mt-1 leading-normal\">\n {snippet.description}\n </Typography>\n </Box>\n\n <Box className=\"mt-3 pt-2 border-t border-slate-100 flex items-center justify-between text-xs text-purple-600 font-medium opacity-80 group-hover:opacity-100\">\n <span>Load Into Editor</span>\n <span className=\"font-mono text-[10px] bg-purple-100 px-1.5 py-0.5 rounded text-purple-700\">SQL</span>\n </Box>\n </Box>\n ))}\n </Box>\n </Box>\n );\n })}\n </Box>\n </Box>\n </Modal>\n\n <Modal \n open={showDropGif} \n onClose={() => setShowDropGif(false)}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n >\n <Box \n sx={{ \n bgcolor: 'background.paper', \n boxShadow: 24, \n p: 4, \n borderRadius: '16px', \n textAlign: 'center',\n maxWidth: '500px',\n outline: 'none'\n }}\n >\n <Typography variant=\"h5\" color=\"error\" fontWeight=\"700\" sx={{ mb: 2 }}>\n 🛑 ACCESS DENIED!\n </Typography>\n \n <img \n src={baburao}\n alt=\"baburao\" \n style={{ width: '100%', borderRadius: '8px', marginBottom: '16px' }}\n />\n \n <Typography variant=\"body2\" className=\"text-gray-600 mb-4\">\n Nice try! Attempting to commit such acts from a data retrieval screen is strictly forbidden by the DBA overlords.\n </Typography>\n \n <Button \n variant=\"contained\" \n color=\"error\" \n onClick={() => setShowDropGif(false)}\n sx={{ borderRadius: '8px', textTransform: 'none' }}\n >\n I promise to behave\n </Button>\n </Box>\n </Modal>\n\n {!!modalIndex && (\n <CustomConfirmationModal\n description={\n modalIndex === 3\n ? `Are you sure you want to kill process id ${processId}?`\n : \"The query does not include a WHERE clause. Are you sure you want to proceed?\"\n }\n title={\"CONFIRM ACTION\"}\n open={modalIndex}\n handleClick={async () => {\n if (modalIndex === 1) handleRetrieveData(selectedQuery);\n if (modalIndex === 2) handleExecuteData(selectedQuery);\n if (modalIndex === 3) handleKillProcess();\n setModalIndex(0);\n }}\n handleClose={() => setModalIndex(0)}\n />\n )}\n </QueryManagementSkeleton>\n );\n};\n\nexport default QueryManagement;"],"names":["getDataWithTimeout","params","api","getQueryBasedData","query","data","executeQuery","QueryManagementSkeleton","children","loading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","dbaToolkitScripts","staticTableListPaginationConfig","staticTableListStyleConfig","staticQueryOutputPaginationConfig","staticQueryOutputStyleConfig","modalStyle","extractNodeMetric","line","timeMatch","costMatch","VisualPlanRow","rawTextLine","totalPlanMetric","leadingSpaces","depth","cleanContent","isSeqScan","isIndexScan","isCostRow","nodeMetric","impactPercentage","isBottleneck","Box","Typography","Chip","QueryManagement","useSkeleton","rights","setRights","useState","processId","setProcessId","selectedQuery","setSelectedQuery","modalIndex","setModalIndex","queryOutputColumns","setQueryOutputColumns","queryOutputData","setQueryOutputData","isfetchLockedQuery","setisFetchLockedQuery","user","state","activeTab","setActiveTab","resultSearchQuery","setResultSearchQuery","isTablesModalOpen","setIsTablesModalOpen","isHistoryModalOpen","setIsHistoryModalOpen","tableListData","setTableListData","filteredTableData","setFilteredTableData","queryHistoryData","setQueryHistoryData","actions","setActions","numberOfRows","explainTextLines","setExplainTextLines","executionTime","setExecutionTime","populateStateQuery","killProcessQuery","fetchLockedQuery","fetchExceptionsQuery","translate","useTranslateProvider","setLoading","isCustomLoading","setisCustomLoading","isTableDataLoading","setisTableDataLoading","disabled","setDisabled","isDbaToolkitOpen","setIsDbaToolkitOpen","showDropGif","setShowDropGif","handleSelectedTable","row","queryType","handleRetrieveData","handleSelectedQuery","setValue","tableListColumns","Button","queryHistoryColumns","control","getValues","errors","useForm","useEffect","trackEvent","useTrackEvent","showToast","startTime","error","endTime","openKillProcessModal","index","columnNames","columns","column","fetchLimitedQueryHistory","handleExplainPlan","rawQueryInput","explainStatement","_b","_a","planKey","parsedLines","handleExecuteData","handleDownloadExcel","queryUUID","queryValue","excelFileName","response","downloadExcel","blob","filename","blobData","url","a","handleFetchLockedQuery","handleKillProcess","handlePopulateStateQuery","queryHistorySearchKey","execute","dayjs","init","featureJson","getAssignedFeatures","openTablesModal","fetchTableList","openDbaToolkitModal","handleSearchKeyChange","e","handleSearchChange","useMemo","debounce","value","lowerCaseValue","processedFilteredOutputData","cleanSearchVal","key","val","handleRefreshCurrentQuery","currentQuery","handleFetchExceptions","GeneralUtil","Card","Tabs","newVal","Tab","FontAwesomeIcon","faTerminal","faTableList","faSitemap","faDatabase","faSlidersH","faHistory","Divider","faLock","faTimes","Editor","CustomTextField","faDownload","cleanVal","isSelect","hasWhere","faPlay","TextField","InputAdornment","faSearch","IconButton","faClock","faSyncAlt","CustomizedTable","idx","Modal","category","categoryScripts","s","snippet","baburao","CustomConfirmationModal"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RoleManagement-BIiW9uTq.js","sources":["../src/services/Roles.js","../src/views/Roles/Skeletons/RoleManagementSkeleton.jsx","../src/views/Roles/RoleManagement.jsx"],"sourcesContent":["import implementationConfig from \"@/common/config/implementationConfig\";\nimport { api } from \"@/common/interceptors/AxiosInterceptor\";\n\nexport const getAllRoleList = () => api.get(\"/role\");\n\nexport const deleteRoleFeature = (id) =>\n api.delete(implementationConfig.api.useQueryParamStyle ? `/menuconfig/usermenuitem/delete?empMenuItemId=${id}` : `/menuconfig/usermenuitem/${id}`);\n\nexport const getRoleById = (id) => api.get(implementationConfig.api.useQueryParamStyle ? `/role/retrieveById?id=${id}` : `/role/${id}`);\n\nexport const postRole = (params) => api.post(\"/role\", { ...params });\n\nexport const putRole = (params) => implementationConfig.api.useQueryParamStyle ? api.put(\"/role/update\", { ...params }) : api.post(\"/role\", { ...params });\n\nexport const ToggleState = (params) =>\n api.put(`role/?is_active=${params.state === \"INACTIVE\" ? \"true\" : \"false\"}`, {\n ...params,\n });\nexport const postNewFeature = (params, id) =>\n api.post(`/menuconfig/assignnewfeature?roleId=${id}`, { ...params });\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nconst RoleManagementSkeleton = ({ children, isLoading = true }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!isLoading) {\n return children;\n }\n\n return (\n <div className=\"pt-6 relative h-[90vh]\">\n {/* skleton for roles and add button */}\n\n <div className=\"flex flex-row h-[80vh] \">\n <div className=\"flex flex-col border border-gray-300 w-[20%] p-2 mr-3 rounded-md\">\n {\" \"}\n <div className=\"flex justify-between\">\n {/* skleton for list of roles and toogle roles */}\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-23 h-[40px] mr-3\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-40 h-[40px]\"></div>\n </div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-[50px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-full\"></div>\n </div>\n <div className=\"flex flex-col border border-gray-300 w-[80%] p-2 rounded-md\">\n <div className=\"flex justify-between\">\n {/* skleton for role name and options */}\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-24 h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-21 h-[40px]\"></div>\n </div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-[50px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-full\"></div>\n </div>\n </div>\n\n <div className=\"absolute bottom-20 right-[10px] \">\n <div className=\"bg-gray-300 animate-pulse rounded-full w-[40px] h-[40px]\"></div>\n </div>\n </div>\n );\n};\n\nRoleManagementSkeleton.propTypes = {\n children: PropTypes.any,\n loading: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\nexport default RoleManagementSkeleton;\n","import GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport { Suspense, useEffect, useState, lazy } from \"react\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport {\n Box,\n Card,\n Switch,\n TextField,\n Button,\n Chip,\n Typography,\n} from \"@mui/material\";\nimport { alpha } from \"@mui/material/styles\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport {\n getAllRoleList,\n ToggleState,\n deleteRoleFeature,\n getRoleById,\n} from \"../../services/Roles.js\";\nimport { getRoleList } from \"@/common/services/GlobalApis.js\";\nimport { getAssignedFeatures } from \"@/utils/feature.js\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport RoleManagementSkeleton from \"./Skeletons/RoleManagementSkeleton.jsx\";\nimport { useSelector } from \"react-redux\";\nconst AddFeatures = lazy(() => import(\"./AddFeatures.jsx\"));\nconst ManageRole = lazy(() => import(\"./ManageRole.jsx\"));\n\nexport default function RoleManagement() {\n const { translate } = useTranslateProvider();\n const [Data, setData] = useState(\"\");\n const [selectedRole, setSelectedRole] = useState(Data[0]);\n const [includeInActive, setincludeInActive] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [openModal, setOpenModal] = useState(false);\n const [openManageRole, setOpenManageRole] = useState(0);\n const [searchText, setSearchText] = useState(\"\");\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [rights, setRights] = useState({});\n const [confirmToggleOpen, setConfirmToggleOpen] = useState(false);\n const trackEvent = useTrackEvent();\n const currentLoogedInUserRoleId = useSelector((state) => state.Authenticate.user.roleId);\n const [allowedRoleIds, setallowedRoleIds] = useState([]);\n\n const getAllData = async (isPreserveRole = false) => {\n try {\n setIsLoading(true);\n const roleListPromise = includeInActive ? getAllRoleList() : getRoleList();\n let data, userRoleIds = [];\n if (currentLoogedInUserRoleId) {\n // Run both APIs in parallel\n const [{ data: roleData }, currRoleData] = await Promise.all([\n roleListPromise,\n getRoleById(currentLoogedInUserRoleId),\n ]);\n data = roleData;\n userRoleIds = currRoleData?.data?.roleIds || [];\n } else {\n // Only fetch role list\n const { data: roleData } = await roleListPromise;\n data = roleData;\n }\n setallowedRoleIds(userRoleIds);\n // ✅ Filter logic (keep only allowed roles)\n const filteredData =\n userRoleIds.length > 0\n ? data.filter((role) => userRoleIds.includes(role.id))\n : data; // fallback: show all if no roleIds\n setData(filteredData);\n if (!isPreserveRole && filteredData.length > 0) {\n setSelectedRole(filteredData[0]);\n }\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in getting role data\", type: \"error\" });\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(function () {\n const fetchRights = async () => {\n const { data: featureJson } = await getAssignedFeatures(\"techo.manage.role\");\n if (featureJson) setRights(JSON.parse(featureJson));\n };\n fetchRights();\n getAllData();\n }, []);\n\n const handleCheckboxChange = async (event) => {\n let isChecked = event.target.checked;\n setincludeInActive(event.target.checked);\n try {\n setIsLoading((cur) => !cur);\n let data;\n if (isChecked) {\n ({ data } = await getAllRoleList());\n } else {\n ({ data } = await getRoleList());\n }\n if (allowedRoleIds && allowedRoleIds.length > 0) {\n data = data.filter(\n (role) => allowedRoleIds.includes(role.id)\n );\n }\n setData(data);\n setSelectedRole(data[0]);\n setIsLoading((cur) => !cur);\n setSearchText(\"\");\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in getting role data\", type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n const filterData = Data\n ? Data?.filter((feature) =>\n feature.name.toLowerCase().includes(searchText.toLowerCase())\n )\n : [];\n\n const formatDateDDMMYYYY = (timestamp) => {\n if (!timestamp) return \"\";\n const date = new Date(Number(timestamp));\n const day = String(date.getDate()).padStart(2, \"0\");\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const year = date.getFullYear();\n return `${day}/${month}/${year}`;\n };\n\n const handleToggleState = async () => {\n setConfirmToggleOpen(false);\n try {\n const payload = Data?.find((data) => data.id === selectedRole.id);\n await ToggleState(payload);\n showToast({\n message: `State succesfully changed from ${payload?.state === \"INACTIVE\" ? \"inactive\" : \"active\"} to ${payload?.state === \"INACTIVE\" ? \"active\" : \"inactive\"}`,\n type: \"success\",\n });\n let res;\n setIsLoading((cur) => !cur);\n if (includeInActive) {\n res = await getAllRoleList();\n } else {\n res = await getRoleList();\n }\n\n setData(res.data);\n setSelectedRole(res.data[0]);\n setIsLoading((cur) => !cur);\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in handle active\", type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n const sortedFilteredFeatures = Data\n ? Data.find((obj) => obj.id === selectedRole.id)\n ?.assignedFeatureList.filter((feature) =>\n feature.featureName\n ?.toLowerCase()\n .includes(searchQuery?.toLowerCase())\n )\n .sort((a, b) => a.featureName?.localeCompare(b.featureName))\n : [];\n\n const handleDeleteRoleFeature = async (feature) => {\n try {\n await deleteRoleFeature(feature.userMenuItemId);\n await getAllData(true);\n setSearchQuery(\"\");\n showToast({ message: \"Feature deleted successfully!\", type: \"success\" });\n } catch (error) {\n showToast({ message: error, type: \"error\" });\n }\n };\n\n const handleManageRoleModel = (index) => {\n setOpenManageRole(index);\n trackEvent(\"button_click\", {\n button_name: `${index === 1 ? \"add\" : \"edit\"} role modal button`,\n button_type: \"navigate\",\n button_id: `roles-${index === 1 ? \"add\" : \"edit\"}-button`,\n });\n };\n\n const isRoleListModified = () => {\n getAllData();\n setSearchText(\"\");\n };\n\n const handleOpen = async () => {\n try {\n setOpenModal(true);\n await trackEvent(\"button_click\", {\n button_name: \"add feature button\",\n button_type: \"navigate\",\n button_id: \"roles-addfeatures-button-add\",\n });\n } catch (error) {\n console.error(error);\n }\n };\n\n return GeneralUtil.isTecho && !isLoading && !rights?.[\"view.manage.role\"] ? (\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 >\n <Typography variant=\"h5\" className=\"text-customBlue\">\n You dont have permission to view Roles\n </Typography>\n </Card>\n </Box>\n ) : (\n <RoleManagementSkeleton isLoading={isLoading}>\n <Box className=\"flex flex-col gap-4 p-4 min-[900px]:flex-row min-[900px]:h-[calc(100vh-80px)]\">\n <Card\n variant=\"outlined\"\n className=\"w-full min-[900px]:w-[300px] flex flex-col p-4\"\n >\n <div className=\"flex justify-between items-center mb-3\">\n <Typography\n variant=\"h6\"\n fontWeight={600}\n className=\"text-customBlue\"\n >\n User Roles\n </Typography>\n {(!GeneralUtil.isTecho || rights?.['create.manage.role']) && (\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => handleManageRoleModel(1)}\n data-testid=\"managerole-add-button\"\n >\n {translate(\"+ Add Role\")}\n </Button>\n )}\n </div>\n <TextField\n size=\"small\"\n variant=\"outlined\"\n placeholder=\"Search roles...\"\n fullWidth\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n data-testid=\"listofroles-search-input\"\n />\n <div className=\"flex items-center gap-2 mt-3\">\n <Switch\n size=\"small\"\n checked={includeInActive}\n onChange={handleCheckboxChange}\n />\n <Typography variant=\"body2\">Include Inactive</Typography>\n </div>\n <div className=\"flex-1 overflow-y-auto mt-4\">\n {filterData.length > 0 && (\n <>\n {filterData.map((role) => (\n <Card\n key={role.id}\n variant=\"outlined\"\n onClick={() => setSelectedRole(role)}\n className={`p-3 cursor-pointer transition\n ${selectedRole.id === role.id\n ? \"border-b-2\"\n : \"border-b-2 border-0\"\n }`}\n sx={\n selectedRole.id === role.id\n ? {\n bgcolor: (t) => alpha(t.palette.primary.main, 0.08),\n }\n : {}\n }\n >\n <Typography fontWeight={600}>\n {role.name}\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n {role?.state === \"INACTIVE\" && (\n <Chip label=\"INACTIVE\" color=\"disabled\" size=\"small\" />\n )}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {role.assignedFeatureList.length} Features\n </Typography>\n </Card>\n ))}\n </>\n )}\n </div>\n </Card>\n <Card\n variant=\"outlined\"\n className=\"w-full min-[900px]:flex-1 flex flex-col p-5\"\n >\n <div className=\"flex flex-col sm:flex-row justify-between items-start border-b pb-4 gap-4\">\n <div className=\"flex flex-col gap-1 w-full sm:w-auto\">\n <div className=\"flex items-center gap-2\">\n <Typography\n variant=\"h5\"\n fontWeight={600}\n className=\"text-customBlue\"\n >\n {selectedRole?.name || \"Select Role\"}\n </Typography>\n {selectedRole?.state === \"ACTIVE\" && (\n <Chip label=\"ACTIVE\" color=\"success\" size=\"small\" />\n )}\n {selectedRole?.state === \"INACTIVE\" && (\n <Chip label=\"INACTIVE\" color=\"disabled\" size=\"small\" />\n )}\n </div>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n className=\"mt-1\"\n >\n Created on {formatDateDDMMYYYY(selectedRole?.createdOn)}\n </Typography>\n </div>\n <div className=\"flex gap-2\">\n {(!GeneralUtil.isTecho || rights?.['update.manage.role.toggleActive']) && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setConfirmToggleOpen(true)}\n >\n {selectedRole?.state === \"ACTIVE\" ? \"Deactivate\" : \"Activate\"}\n </Button>\n )}\n {(!GeneralUtil.isTecho || rights?.['update.manage.role']) && (\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={() => handleManageRoleModel(2)}\n >\n ✏️ Edit Role\n </Button>\n )}\n </div>\n </div>\n {/* ASSIGNED FEATURES */}\n <div className=\"mt-5 flex flex-col flex-1 overflow-hidden\">\n <div className=\"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-4 gap-4\">\n <div className=\"flex flex-row items-center gap-2 w-full sm:w-auto\">\n <Typography fontWeight={600}>{translate(\"Assigned Features\")}</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n ({sortedFilteredFeatures.length} {translate(\"features active for this role\")})\n </Typography>\n </div>\n <TextField\n size=\"small\"\n sx={{ width: { xs: \"100%\", sm: \"60%\" } }}\n placeholder=\"Search Feature Name\"\n variant=\"outlined\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n data-testid=\"assignedfeatures-search-input\"\n />\n </div>\n <Box className=\"overflow-x-auto w-full\">\n <Box\n className=\"grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-2 text-[15px] font-semibold border-b min-w-[500px]\"\n sx={{\n color: \"text.secondary\",\n bgcolor: (t) => alpha(t.palette.action.hover, 0.04),\n }}\n >\n <div>{translate(\"FEATURE NAME\")}</div>\n <div className=\"text-center\">{translate(\"ACTIONS\")}</div>\n </Box>\n <Box\n className=\"h-[calc(100vh-440px)] overflow-y-auto min-w-[500px]\"\n sx={{\n bgcolor: \"background.paper\",\n }}\n >\n {sortedFilteredFeatures.length > 0 && (\n <>\n {sortedFilteredFeatures.map((feature, index) => (\n <Box\n key={feature.id}\n className=\"grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-3 items-center border-b last:border-b-0 transition\"\n sx={{\n \"&:hover\": {\n bgcolor: (t) => alpha(t.palette.action.hover, 0.04),\n },\n }}\n >\n <div className=\"flex flex-col\">\n <Typography sx={{ fontSize: \"13px\", fontWeight: 600 }}>\n {feature.featureName}\n </Typography>\n </div>\n <div className=\"flex justify-center\">\n {(!GeneralUtil.isTecho || rights?.['view.manage.role.unassignFeature']) && (\n <FontAwesomeIcon\n icon={faTrash}\n onClick={() => {\n handleDeleteRoleFeature(feature);\n }}\n color=\"error\"\n className=\"text-red-400 cursor-pointer\"\n data-testid={`assignedfeatures-delete-icon-${index}`}\n />\n )}\n </div>\n </Box>\n ))}\n </>\n )}\n {sortedFilteredFeatures.length === 0 && (\n <>\n <Typography\n className=\"p-4\"\n sx={{ fontSize: \"13px\", fontStyle: \"italic\" }}\n >\n No Features assigned yet!\n </Typography>\n </>\n )}\n </Box>\n </Box>\n </div>\n <Box\n className=\"border-t p-4\"\n sx={{\n bgcolor: (t) => alpha(t.palette.primary.main, 0.06),\n }}\n >\n {(!GeneralUtil.isTecho || rights?.['view.manage.role.assignFeature']) && (\n <Button variant=\"outlined\" size=\"small\" onClick={handleOpen}>\n + Add More Features\n </Button>\n )}\n </Box>\n </Card>\n <CustomConfirmationModal\n open={confirmToggleOpen}\n handleClose={() => setConfirmToggleOpen(false)}\n handleClick={handleToggleState}\n title={selectedRole?.state === \"ACTIVE\" ? \"Deactivate Role\" : \"Activate Role\"}\n description={`Are you sure you want to ${selectedRole?.state === \"ACTIVE\" ? \"deactivate\" : \"activate\"} the role \"${selectedRole?.name}\"?`}\n dataTestId=\"toggle-role-confirm-modal\"\n />\n <Suspense>\n <ManageRole\n isUpdate={openManageRole !== 1}\n selectedId={openManageRole === 2 ? selectedRole.id : null}\n data-testid=\"roles-managerole-add-button\"\n open={openManageRole}\n setOpen={setOpenManageRole}\n isRoleListModified={isRoleListModified}\n />\n </Suspense>\n <Suspense fallback={<div className=\"animate-pulse w-80 h-20 \"></div>}>\n {openModal === true && (\n <AddFeatures\n open={openModal}\n setOpenModal={setOpenModal}\n selectedId={selectedRole.id}\n setData={() => getAllData(true)}\n assignedFeatureList={\n Data\n ? (() =>\n Data?.find((data) => data?.id === selectedRole.id)\n ?.assignedFeatureList\n ? Data?.find((data) => data?.id === selectedRole.id)\n ?.assignedFeatureList\n : Data[0]?.assignedFeatureList)()\n : []\n }\n data-testid=\"roles-addfeatures-component\"\n />\n )}\n </Suspense>\n </Box>\n </RoleManagementSkeleton>\n );\n}\n"],"names":["getAllRoleList","api","deleteRoleFeature","id","implementationConfig","getRoleById","postRole","params","putRole","ToggleState","postNewFeature","RoleManagementSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","AddFeatures","lazy","ManageRole","RoleManagement","translate","useTranslateProvider","Data","setData","useState","selectedRole","setSelectedRole","includeInActive","setincludeInActive","setIsLoading","openModal","setOpenModal","openManageRole","setOpenManageRole","searchText","setSearchText","searchQuery","setSearchQuery","rights","setRights","confirmToggleOpen","setConfirmToggleOpen","trackEvent","useTrackEvent","currentLoogedInUserRoleId","state","allowedRoleIds","setallowedRoleIds","getAllData","isPreserveRole","roleListPromise","getRoleList","data","userRoleIds","roleData","currRoleData","_a","filteredData","role","error","showToast","useEffect","featureJson","getAssignedFeatures","handleCheckboxChange","event","isChecked","cur","filterData","feature","formatDateDDMMYYYY","timestamp","date","day","month","year","handleToggleState","payload","res","sortedFilteredFeatures","obj","a","b","handleDeleteRoleFeature","handleManageRoleModel","index","isRoleListModified","handleOpen","GeneralUtil","Box","Card","Typography","Button","TextField","Switch","Fragment","t","alpha","Chip","FontAwesomeIcon","faTrash","CustomConfirmationModal","Suspense","_b","_c"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SubMenu-CM_4wNCR.js","sources":["../src/views/Features/SubMenu.jsx"],"sourcesContent":["import React, { lazy, Suspense, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport \"@/assets/scss/scrollBar.scss\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nconst FlywayQuery = lazy(() => import(\"./FlywayQuery\"));\nimport {\n darken,\n List,\n ListItem,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableRow,\n TextField,\n Typography,\n useTheme,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport PropTypes from \"prop-types\";\nimport { useNavigate } from \"react-router-dom\";\nconst ServerSyncModal = lazy(() => import(\"./ServerSyncModal\"));\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faArrowsRotate,\n faFloppyDisk,\n faPen,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { SubMenuSkeleton } from \"./Skeletons/FeatureSkeletons\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\n\n/**\n * A component that renders a submenu interface.\n * @module SubMenu\n * @param {Object} props - The props object.\n * @param {Object} props.data - The data to be used or displayed within the submenu.\n * @param {string} props.subMenuId - The ID of the current submenu to display.\n * @param {Function} props.setSubMenuId - Function to update the submenu ID.\n * @param {Function} props.setSubMenuGroupName - Function to update the submenu Group name.\n * @param {Function} props.setSubMenuFeatureVal - Function to update the submenu state.\n * @param {string} props.type - The type of submenu or functionality to render.\n * @returns {JSX.Element} The rendered submenu component.\n */\nexport default function SubMenu({\n data,\n subMenuId,\n setSubMenuId,\n setSubMenuGroupName,\n setSubMenuFeatureVal,\n type,\n isLoading,\n isNewAPI,\n subMenuGroupName,\n rights,\n}) {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [open, setOpen] = useState(false);\n const [hoveredIndex, setHoveredIndex] = useState(null);\n const [itemId, setItemId] = useState(\"\");\n const [openServerSyncModal, setOpenServerSyncModal] = useState(false);\n const [selectedFeatureId, setSelectedFeatureId] = useState();\n const [selectedFeature, setSelectedFeature] = useState({});\n const [navigationState, setNavigationState] = useState(\"\");\n const theme = useTheme();\n const borderColor = theme.palette.divider;\n const sortedFilteredFeatures = data.filter((feature) =>\n feature.name.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n const { translate } = useTranslateProvider();\n const { user } = useSelector((state) => state.Authenticate);\n const isAdmin =\n user?.roleCode === \"argusadmin\" || user?.roleCode === \"medplatadmin\";\n\n const navigate = useNavigate();\n\n /**\n * Navigates to the edit feature page with the specified feature ID and type.\n * @function handleEdit\n * @param {string|number} id - The ID of the feature to be edited.\n * @param {string} type - The type of the feature to be edited.\n * @returns {void}\n */\n\n const handleEdit = (id, isDynamicFeature, type) => {\n const staticOrDynamic = isDynamicFeature ? \"DYNAMIC\" : \"STATIC\";\n const queryParams = new URLSearchParams({\n featureId: id,\n featureType: type,\n subMenuGroupName: subMenuGroupName,\n staticOrDynamic,\n }).toString();\n\n const url = `addDynamicFeature?${queryParams}`;\n\n navigate(url, { state: { isNew: isNewAPI } });\n };\n\n const handleServerSync = (id, navigationState, feature) => {\n setSelectedFeatureId(id);\n setNavigationState(navigationState);\n setSelectedFeature(feature);\n setOpenServerSyncModal(true);\n };\n\n return (\n <>\n <SubMenuSkeleton isLoading={isLoading}>\n <Grid container className=\"flex flex-col w-full\">\n <Grid className=\"p-2.5 flex-0\" sx={{ borderBottom: `1px solid ${borderColor}` }}>\n <Typography variant=\"body2\" className=\"pl-1.5 font-bold pt-0.5\">\n {translate(\"List of Sub Menus\")}\n </Typography>\n </Grid>\n\n <Grid className=\"px-2 py-1 flex-0\" sx={{ borderBottom: `1px solid ${borderColor}` }}>\n <TextField\n placeholder=\"Search Features\"\n variant=\"outlined\"\n size=\"small\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n sx={{\n width: \"100%\",\n backgroundColor: (theme) => theme.palette.background.paper,\n }}\n data-testid=\"submenu-search-input\"\n />\n </Grid>\n\n <Grid width={\"100%\"} className=\"flex-1 \">\n <TableContainer\n className=\"\"\n style={{ maxHeight: \"calc(100vh - 300px)\" }}\n >\n <Table>\n <TableBody>\n <TableRow\n sx={{\n backgroundColor: (theme) => theme.palette.background.main,\n }}\n >\n <TableCell className=\"p-0 h-full align-top\">\n <Grid>\n {sortedFilteredFeatures.length ? (\n <List className=\"p-0 m-0\">\n {sortedFilteredFeatures?.map(\n (item, index, array) => {\n return (\n <ListItem\n key={item?.id}\n className=\"flex justify-between px-4 py-2 transition-colors duration-300\"\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n onClick={() => {\n setSubMenuId(item.id);\n setSubMenuGroupName(item.groupName);\n setSubMenuFeatureVal(item.isNewFeature);\n }}\n data-testid={`submenu-list-item-${item.id}`}\n sx={{\n borderBottom:\n index === array.length - 1 ? \"none\" : `1px solid ${borderColor}`,\n backgroundColor: (theme) =>\n subMenuId === item.id\n ? darken(\n theme.palette.background.default,\n 0.1,\n )\n : \"inherit\",\n }}\n >\n <Typography\n variant=\"body2\"\n className={`m-0 ${\n subMenuId === item.id ||\n hoveredIndex === index\n ? \"font-bold\"\n : \"font-normal\"\n } ${hoveredIndex === index ? \"cursor-pointer\" : \"cursor-default\"}`}\n >\n {item.name}\n </Typography>\n {item.isDynamicReport !== true && isAdmin && (\n <Grid className=\"flex flex-row\">\n {item.isDynamicFeature && (!GeneralUtil.isTecho || rights?.['update.manage.featurelist']) && (\n <FontAwesomeIcon\n size=\"lg\"\n icon={faArrowsRotate}\n rotation={90}\n onClick={() =>\n handleServerSync(\n item.id,\n item.navigationState,\n item,\n )\n }\n className=\"mr-2 text-[var(--color-primary)]\"\n />\n )}\n {(!GeneralUtil.isTecho || rights?.['update.manage.featurelist']) && (\n <button\n onClick={() =>\n handleEdit(\n item.id,\n item.isDynamicFeature,\n type,\n )\n }\n disabled={item.id !== subMenuId}\n className={`mr-2 ${\n item.id !== subMenuId\n ? \"text-gray-400 cursor-not-allowed\"\n : \"text-[var(--color-primary)]\"\n }`}\n >\n <FontAwesomeIcon\n size=\"lg\"\n icon={faPen}\n data-testid={`submenu-edit-button-${item.id}`}\n />\n </button>\n )}\n {(!GeneralUtil.isTecho || rights?.['update.manage.featurelist']) && (\n <FontAwesomeIcon\n icon={faFloppyDisk}\n size=\"lg\"\n onClick={() => {\n setOpen(true);\n setItemId(item.id);\n }}\n data-testid={`submenu-save-button-${item.id}`}\n className=\"mr-1 text-[var(--color-primary)] cursor-pointer\"\n />\n )}\n </Grid>\n )}\n </ListItem>\n );\n },\n )}\n </List>\n ) : (\n <List className=\"p-0 m-0\">\n <ListItem>\n <Typography variant=\"body2\" className=\" m-0\">\n {translate(\"No features for search query\")}\n </Typography>\n </ListItem>\n </List>\n )}\n </Grid>\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n </Grid>\n </Grid>\n </SubMenuSkeleton>\n\n {open === true && (\n <Suspense>\n <FlywayQuery\n data-testid=\"submenu-flywayquery\"\n open={open}\n data={itemId ? data.find((data) => data.id === itemId) : {}}\n type={type}\n handleClose={() => setOpen(false)}\n />\n </Suspense>\n )}\n <Suspense>\n {openServerSyncModal && (\n <ServerSyncModal\n id={selectedFeatureId}\n selectedFeature={selectedFeature}\n navigationState={navigationState}\n openServerSyncModal={openServerSyncModal}\n openModalFunc={setOpenServerSyncModal}\n />\n )}\n </Suspense>\n </>\n );\n}\n\nSubMenu.propTypes = {\n data: PropTypes.any,\n subMenuId: PropTypes.any,\n setSubMenuId: PropTypes.any,\n setSubMenuGroupName: PropTypes.any,\n setSubMenuFeatureVal: PropTypes.any,\n type: PropTypes.any,\n isLoading: PropTypes.any,\n isNewAPI: PropTypes.any,\n subMenuGroupName: PropTypes.any,\n rights: PropTypes.any,\n};\n"],"names":["FlywayQuery","lazy","ServerSyncModal","SubMenu","data","subMenuId","setSubMenuId","setSubMenuGroupName","setSubMenuFeatureVal","type","isLoading","isNewAPI","subMenuGroupName","rights","searchQuery","setSearchQuery","useState","open","setOpen","hoveredIndex","setHoveredIndex","itemId","setItemId","openServerSyncModal","setOpenServerSyncModal","selectedFeatureId","setSelectedFeatureId","selectedFeature","setSelectedFeature","navigationState","setNavigationState","borderColor","useTheme","sortedFilteredFeatures","feature","translate","useTranslateProvider","user","useSelector","state","isAdmin","navigate","useNavigate","handleEdit","id","isDynamicFeature","staticOrDynamic","url","handleServerSync","jsxs","Fragment","jsx","SubMenuSkeleton","Grid","Typography","TextField","theme","TableContainer","Table","TableBody","TableRow","TableCell","List","item","index","array","ListItem","darken","GeneralUtil","FontAwesomeIcon","faArrowsRotate","faPen","faFloppyDisk","Suspense","PropTypes"],"mappings":"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"}