@argusoft/medplat-core 1.0.18 → 1.0.20

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 (106) hide show
  1. package/dist/{AccessRights-Bvd5Bm5K.js → AccessRights-CupmTG3T.js} +2 -2
  2. package/dist/{AccessRights-Bvd5Bm5K.js.map → AccessRights-CupmTG3T.js.map} +1 -1
  3. package/dist/{AddEditQueryBuilder-Bcjl5mXE.js → AddEditQueryBuilder-C8ZSkOF0.js} +60 -60
  4. package/dist/AddEditQueryBuilder-C8ZSkOF0.js.map +1 -0
  5. package/dist/{AddFeatures-CE5rBxEG.js → AddFeatures-CiZZZ0GL.js} +2 -2
  6. package/dist/{AddFeatures-CE5rBxEG.js.map → AddFeatures-CiZZZ0GL.js.map} +1 -1
  7. package/dist/{AddMenuConfiguration-QWfpcnuP.js → AddMenuConfiguration-DsnY0Rws.js} +544 -544
  8. package/dist/AddMenuConfiguration-DsnY0Rws.js.map +1 -0
  9. package/dist/{AddRoleDrawer-SvntLdRu.js → AddRoleDrawer-CQdzQZLb.js} +39 -39
  10. package/dist/AddRoleDrawer-CQdzQZLb.js.map +1 -0
  11. package/dist/ChangePasswordModalCore-50EzprTk.js +5495 -0
  12. package/dist/ChangePasswordModalCore-50EzprTk.js.map +1 -0
  13. package/dist/{ConditionConfig-DB0FqwgG.js → ConditionConfig-C3rF2wXU.js} +2 -2
  14. package/dist/{ConditionConfig-DB0FqwgG.js.map → ConditionConfig-C3rF2wXU.js.map} +1 -1
  15. package/dist/{EntityManagement-DQKXnEzz.js → EntityManagement-D4nG7wUX.js} +2 -2
  16. package/dist/{EntityManagement-DQKXnEzz.js.map → EntityManagement-D4nG7wUX.js.map} +1 -1
  17. package/dist/{EventConfigurations-D8juDb29.js → EventConfigurations-BGffjVC7.js} +3 -3
  18. package/dist/{EventConfigurations-D8juDb29.js.map → EventConfigurations-BGffjVC7.js.map} +1 -1
  19. package/dist/{EventsExceptionModal-DsvngLi8.js → EventsExceptionModal-D4Bf1ilS.js} +2 -2
  20. package/dist/{EventsExceptionModal-DsvngLi8.js.map → EventsExceptionModal-D4Bf1ilS.js.map} +1 -1
  21. package/dist/EventsSkeleton-8iiETGcf.js +76 -0
  22. package/dist/EventsSkeleton-8iiETGcf.js.map +1 -0
  23. package/dist/{FeatureMenu-CLX8VNZ-.js → FeatureMenu-DUZL32RI.js} +3 -3
  24. package/dist/{FeatureMenu-CLX8VNZ-.js.map → FeatureMenu-DUZL32RI.js.map} +1 -1
  25. package/dist/Features-CObdzJp_.js +13 -0
  26. package/dist/Features-CObdzJp_.js.map +1 -0
  27. package/dist/ImmunizationConfigurationBase-C5wnjI_-.js +5706 -0
  28. package/dist/ImmunizationConfigurationBase-C5wnjI_-.js.map +1 -0
  29. package/dist/ImmunizationConfigurationBase.css +1 -1
  30. package/dist/{ManageDynamicFeature-CsIett5x.js → ManageDynamicFeature-BhONvfC_.js} +3 -3
  31. package/dist/{ManageDynamicFeature-CsIett5x.js.map → ManageDynamicFeature-BhONvfC_.js.map} +1 -1
  32. package/dist/{ManageEventConfiguration-0YBDaxOI.js → ManageEventConfiguration-BntUc_YI.js} +93 -93
  33. package/dist/ManageEventConfiguration-BntUc_YI.js.map +1 -0
  34. package/dist/{ManageNotification-BUAvg5Ge.js → ManageNotification-CSl02Wq7.js} +2 -2
  35. package/dist/{ManageNotification-BUAvg5Ge.js.map → ManageNotification-CSl02Wq7.js.map} +1 -1
  36. package/dist/{ManageRole-Cbs9dUhc.js → ManageRole-tdzAiCOE.js} +222 -229
  37. package/dist/ManageRole-tdzAiCOE.js.map +1 -0
  38. package/dist/{ManageUser-eBS0yC5k.js → ManageUser-C6dlK-Mr.js} +3 -4
  39. package/dist/{ManageUser-eBS0yC5k.js.map → ManageUser-C6dlK-Mr.js.map} +1 -1
  40. package/dist/{MobileMenuManagement-BmrO-7MN.js → MobileMenuManagement-CV6QCeos.js} +15 -15
  41. package/dist/MobileMenuManagement-CV6QCeos.js.map +1 -0
  42. package/dist/{MobileTypeEventConfigModal-Ltm529jG.js → MobileTypeEventConfigModal-BNjZ8pnq.js} +2 -2
  43. package/dist/{MobileTypeEventConfigModal-Ltm529jG.js.map → MobileTypeEventConfigModal-BNjZ8pnq.js.map} +1 -1
  44. package/dist/{NewServerManagement-5YcAtF-g.js → NewServerManagement-Cxe0dV0O.js} +5 -5
  45. package/dist/NewServerManagement-Cxe0dV0O.js.map +1 -0
  46. package/dist/{NotificationList-CUZSWp2J.js → NotificationList-D1U1LYnz.js} +140 -139
  47. package/dist/NotificationList-D1U1LYnz.js.map +1 -0
  48. package/dist/{OtherTypeEventConfigModal-dXt2qDg_.js → OtherTypeEventConfigModal-DiVhWDpG.js} +43 -43
  49. package/dist/{OtherTypeEventConfigModal-dXt2qDg_.js.map → OtherTypeEventConfigModal-DiVhWDpG.js.map} +1 -1
  50. package/dist/{QueryBuilder-DXexUIe8.js → QueryBuilder-DI0wCJbz.js} +85 -84
  51. package/dist/QueryBuilder-DI0wCJbz.js.map +1 -0
  52. package/dist/{QueryManagement-DGHV_-d5.js → QueryManagement-CRykYGum.js} +3 -3
  53. package/dist/QueryManagement-CRykYGum.js.map +1 -0
  54. package/dist/{RoleManagement-BThAL5LO.js → RoleManagement-Cg8-EiVr.js} +83 -82
  55. package/dist/RoleManagement-Cg8-EiVr.js.map +1 -0
  56. package/dist/SecurityAuditLogList-Dod711KT.js +874 -0
  57. package/dist/SecurityAuditLogList-Dod711KT.js.map +1 -0
  58. package/dist/{ShowFlywayQuery-BkyA6QaA.js → ShowFlywayQuery-tj42YQAS.js} +33 -33
  59. package/dist/ShowFlywayQuery-tj42YQAS.js.map +1 -0
  60. package/dist/{SubMenu-BGznOP2a.js → SubMenu-CM_4wNCR.js} +2 -2
  61. package/dist/{SubMenu-BGznOP2a.js.map → SubMenu-CM_4wNCR.js.map} +1 -1
  62. package/dist/{TableDetails-DztbjsIA.js → TableDetails-Cf_YfnY2.js} +235 -235
  63. package/dist/TableDetails-Cf_YfnY2.js.map +1 -0
  64. package/dist/{TableList-DYwotUDO.js → TableList-HGbEN4bv.js} +28 -28
  65. package/dist/TableList-HGbEN4bv.js.map +1 -0
  66. package/dist/{TypeConfiguration-DYbBG_hZ.js → TypeConfiguration-CupQxH9Y.js} +28 -28
  67. package/dist/TypeConfiguration-CupQxH9Y.js.map +1 -0
  68. package/dist/{UserList-BAeAFeXZ.js → UserList-BzHsbYel.js} +423 -423
  69. package/dist/UserList-BzHsbYel.js.map +1 -0
  70. package/dist/{WidgetList-D-fIf3N2.js → WidgetList-B7X8Awkg.js} +2 -2
  71. package/dist/{WidgetList-D-fIf3N2.js.map → WidgetList-B7X8Awkg.js.map} +1 -1
  72. package/dist/index-D9YNFPn9.js +1439 -0
  73. package/dist/index-D9YNFPn9.js.map +1 -0
  74. package/dist/index.css +1 -1
  75. package/dist/index.js +102 -100
  76. package/dist/index.js.map +1 -1
  77. package/dist/{index-BFznsakV.js → pdfmake-Cf-381ou.js} +13951 -15385
  78. package/dist/pdfmake-Cf-381ou.js.map +1 -0
  79. package/package.json +1 -1
  80. package/dist/AddEditQueryBuilder-Bcjl5mXE.js.map +0 -1
  81. package/dist/AddMenuConfiguration-QWfpcnuP.js.map +0 -1
  82. package/dist/AddRoleDrawer-SvntLdRu.js.map +0 -1
  83. package/dist/ChangePasswordModalCore-ClND1mel.js +0 -181
  84. package/dist/ChangePasswordModalCore-ClND1mel.js.map +0 -1
  85. package/dist/EventsSkeleton-DCXwwPbb.js +0 -76
  86. package/dist/EventsSkeleton-DCXwwPbb.js.map +0 -1
  87. package/dist/Features-Cpf1PDx0.js +0 -13
  88. package/dist/Features-Cpf1PDx0.js.map +0 -1
  89. package/dist/ImmunizationConfigurationBase-BqPTExSk.js +0 -5653
  90. package/dist/ImmunizationConfigurationBase-BqPTExSk.js.map +0 -1
  91. package/dist/ManageEventConfiguration-0YBDaxOI.js.map +0 -1
  92. package/dist/ManageRole-Cbs9dUhc.js.map +0 -1
  93. package/dist/MobileMenuManagement-BmrO-7MN.js.map +0 -1
  94. package/dist/NewServerManagement-5YcAtF-g.js.map +0 -1
  95. package/dist/NotificationList-CUZSWp2J.js.map +0 -1
  96. package/dist/QueryBuilder-DXexUIe8.js.map +0 -1
  97. package/dist/QueryManagement-DGHV_-d5.js.map +0 -1
  98. package/dist/RoleManagement-BThAL5LO.js.map +0 -1
  99. package/dist/SecurityAuditLogList-DHTcOtbx.js +0 -748
  100. package/dist/SecurityAuditLogList-DHTcOtbx.js.map +0 -1
  101. package/dist/ShowFlywayQuery-BkyA6QaA.js.map +0 -1
  102. package/dist/TableDetails-DztbjsIA.js.map +0 -1
  103. package/dist/TableList-DYwotUDO.js.map +0 -1
  104. package/dist/TypeConfiguration-DYbBG_hZ.js.map +0 -1
  105. package/dist/UserList-BAeAFeXZ.js.map +0 -1
  106. package/dist/index-BFznsakV.js.map +0 -1
@@ -0,0 +1 @@
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,22 +1,23 @@
1
1
  import { jsxs as r, jsx as t, Fragment as L } from "react/jsx-runtime";
2
- import u from "@/common/services/util/GeneralUtil";
3
- import { useState as m, useEffect as ce, Suspense as H, lazy as Q } from "react";
4
- import { Box as p, Card as T, Typography as d, Button as C, TextField as K, Switch as de, Chip as $ } from "@mui/material";
5
- import { alpha as S } from "@mui/material/styles";
6
- import { useTranslateProvider as me } from "@/common/languageTranslator/TranslationContext";
7
- import { api as h } from "@/common/interceptors/AxiosInterceptor";
2
+ import g from "@/common/services/util/GeneralUtil";
3
+ import { useState as m, useEffect as de, Suspense as H, lazy as X } from "react";
4
+ import { Box as p, Card as C, Typography as d, Button as S, TextField as K, Switch as me, Chip as $ } from "@mui/material";
5
+ import { alpha as T } from "@mui/material/styles";
6
+ import { useTranslateProvider as ue } from "@/common/languageTranslator/TranslationContext";
7
+ import V from "@/common/config/implementationConfig";
8
+ import { api as f } from "@/common/interceptors/AxiosInterceptor";
8
9
  import { getRoleList as _ } from "@/common/services/GlobalApis.js";
9
- import { getAssignedFeatures as ue } from "@/utils/feature.js";
10
+ import { getAssignedFeatures as fe } from "@/utils/feature.js";
10
11
  import { showToast as x } from "@/common/toaster/toaster";
11
- import { FontAwesomeIcon as fe } from "@fortawesome/react-fontawesome";
12
+ import { FontAwesomeIcon as pe } from "@fortawesome/react-fontawesome";
12
13
  import { faTrash as he } from "@fortawesome/free-solid-svg-icons";
13
- import pe from "@/hooks/useTrackEvent";
14
+ import ge from "@/hooks/useTrackEvent";
14
15
  import z from "prop-types";
15
- import { useSelector as X } from "react-redux";
16
- import { getUseSkeleton as ge } from "@/store/reducers/SkeletonReducer";
17
- const j = () => h.get("/role"), xe = (l) => h.delete(u.isTecho ? `/menuconfig/usermenuitem/delete?empMenuItemId=${l}` : `/menuconfig/usermenuitem/${l}`), ve = (l) => h.get(u.isTecho ? `/role/retrieveById?id=${l}` : `/role/${l}`), Oe = (l) => h.post("/role", { ...l }), Be = (l) => u.isTecho ? h.put("/role/update", { ...l }) : h.post("/role", { ...l }), be = (l) => h.put(`role/?is_active=${l.state === "INACTIVE" ? "true" : "false"}`, {
16
+ import { useSelector as Z } from "react-redux";
17
+ import { getUseSkeleton as xe } from "@/store/reducers/SkeletonReducer";
18
+ const j = () => f.get("/role"), ve = (l) => f.delete(V.api.useQueryParamStyle ? `/menuconfig/usermenuitem/delete?empMenuItemId=${l}` : `/menuconfig/usermenuitem/${l}`), ye = (l) => f.get(V.api.useQueryParamStyle ? `/role/retrieveById?id=${l}` : `/role/${l}`), Be = (l) => f.post("/role", { ...l }), De = (l) => V.api.useQueryParamStyle ? f.put("/role/update", { ...l }) : f.post("/role", { ...l }), be = (l) => f.put(`role/?is_active=${l.state === "INACTIVE" ? "true" : "false"}`, {
18
19
  ...l
19
- }), De = (l, n) => h.post(`/menuconfig/assignnewfeature?roleId=${n}`, { ...l }), Z = ({ children: l, isLoading: n = !0 }) => !X(ge) || !n ? l : /* @__PURE__ */ r("div", { className: "pt-6 relative h-[90vh]", children: [
20
+ }), Ue = (l, n) => f.post(`/menuconfig/assignnewfeature?roleId=${n}`, { ...l }), ee = ({ children: l, isLoading: n = !0 }) => !Z(xe) || !n ? l : /* @__PURE__ */ r("div", { className: "pt-6 relative h-[90vh]", children: [
20
21
  /* @__PURE__ */ r("div", { className: "flex flex-row h-[80vh] ", children: [
21
22
  /* @__PURE__ */ r("div", { className: "flex flex-col border border-gray-300 w-[20%] p-2 mr-3 rounded-md", children: [
22
23
  " ",
@@ -38,64 +39,64 @@ const j = () => h.get("/role"), xe = (l) => h.delete(u.isTecho ? `/menuconfig/us
38
39
  ] }),
39
40
  /* @__PURE__ */ t("div", { className: "absolute bottom-20 right-[10px] ", children: /* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-full w-[40px] h-[40px]" }) })
40
41
  ] });
41
- Z.propTypes = {
42
+ ee.propTypes = {
42
43
  children: z.any,
43
44
  loading: z.any,
44
45
  isLoading: z.any
45
46
  };
46
- const ye = Q(() => import("./AddFeatures-CE5rBxEG.js")), we = Q(() => import("./ManageRole-Cbs9dUhc.js"));
47
- function Ne() {
47
+ const we = X(() => import("./AddFeatures-CiZZZ0GL.js")), Ne = X(() => import("./ManageRole-tdzAiCOE.js"));
48
+ function Ie() {
48
49
  var q;
49
- const { translate: l } = me(), [n, b] = m(""), [o, y] = m(n[0]), [A, ee] = m(!1), [V, f] = m(!1), [O, B] = m(!1), [F, D] = m(0), [U, k] = m(""), [w, W] = m(""), [c, te] = m({}), Y = pe(), P = X((e) => e.Authenticate.user.roleId), [E, ae] = m([]), N = async (e = !1) => {
50
+ const { translate: l } = ue(), [n, y] = m(""), [o, b] = m(n[0]), [A, te] = m(!1), [O, u] = m(!1), [P, B] = m(!1), [F, D] = m(0), [U, k] = m(""), [w, W] = m(""), [c, ae] = m({}), Y = ge(), Q = Z((e) => e.Authenticate.user.roleId), [E, se] = m([]), N = async (e = !1) => {
50
51
  var a;
51
52
  try {
52
- f(!0);
53
+ u(!0);
53
54
  const s = A ? j() : _();
54
- let i, g = [];
55
- if (P) {
55
+ let i, h = [];
56
+ if (Q) {
56
57
  const [{ data: v }, M] = await Promise.all([
57
58
  s,
58
- ve(P)
59
+ ye(Q)
59
60
  ]);
60
- i = v, g = ((a = M == null ? void 0 : M.data) == null ? void 0 : a.roleIds) || [];
61
+ i = v, h = ((a = M == null ? void 0 : M.data) == null ? void 0 : a.roleIds) || [];
61
62
  } else {
62
63
  const { data: v } = await s;
63
64
  i = v;
64
65
  }
65
- ae(g);
66
- const R = g.length > 0 ? i.filter((v) => g.includes(v.id)) : i;
67
- b(R), !e && R.length > 0 && y(R[0]);
66
+ se(h);
67
+ const R = h.length > 0 ? i.filter((v) => h.includes(v.id)) : i;
68
+ y(R), !e && R.length > 0 && b(R[0]);
68
69
  } catch (s) {
69
70
  console.error(s), x({ message: "Error in getting role data", type: "error" });
70
71
  } finally {
71
- f(!1);
72
+ u(!1);
72
73
  }
73
74
  };
74
- ce(function() {
75
+ de(function() {
75
76
  (async () => {
76
- const { data: a } = await ue("techo.manage.role");
77
- a && te(JSON.parse(a));
77
+ const { data: a } = await fe("techo.manage.role");
78
+ a && ae(JSON.parse(a));
78
79
  })(), N();
79
80
  }, []);
80
- const se = async (e) => {
81
+ const re = async (e) => {
81
82
  let a = e.target.checked;
82
- ee(e.target.checked);
83
+ te(e.target.checked);
83
84
  try {
84
- f((i) => !i);
85
+ u((i) => !i);
85
86
  let s;
86
87
  a ? { data: s } = await j() : { data: s } = await _(), E && E.length > 0 && (s = s.filter(
87
88
  (i) => E.includes(i.id)
88
- )), b(s), y(s[0]), f((i) => !i), k("");
89
+ )), y(s), b(s[0]), u((i) => !i), k("");
89
90
  } catch (s) {
90
- console.error(s), x({ message: "Error in getting role data", type: "error" }), f((i) => !i);
91
+ console.error(s), x({ message: "Error in getting role data", type: "error" }), u((i) => !i);
91
92
  }
92
93
  }, J = n ? n == null ? void 0 : n.filter(
93
94
  (e) => e.name.toLowerCase().includes(U.toLowerCase())
94
- ) : [], re = (e) => {
95
+ ) : [], le = (e) => {
95
96
  if (!e) return "";
96
- const a = new Date(Number(e)), s = String(a.getDate()).padStart(2, "0"), i = String(a.getMonth() + 1).padStart(2, "0"), g = a.getFullYear();
97
- return `${s}/${i}/${g}`;
98
- }, le = async () => {
97
+ const a = new Date(Number(e)), s = String(a.getDate()).padStart(2, "0"), i = String(a.getMonth() + 1).padStart(2, "0"), h = a.getFullYear();
98
+ return `${s}/${i}/${h}`;
99
+ }, oe = async () => {
99
100
  try {
100
101
  const e = n == null ? void 0 : n.find((s) => s.id === o.id);
101
102
  await be(e), x({
@@ -103,9 +104,9 @@ function Ne() {
103
104
  type: "success"
104
105
  });
105
106
  let a;
106
- f((s) => !s), A ? a = await j() : a = await _(), b(a.data), y(a.data[0]), f((s) => !s);
107
+ u((s) => !s), A ? a = await j() : a = await _(), y(a.data), b(a.data[0]), u((s) => !s);
107
108
  } catch (e) {
108
- console.error(e), x({ message: "Error in handle active", type: "error" }), f((a) => !a);
109
+ console.error(e), x({ message: "Error in handle active", type: "error" }), u((a) => !a);
109
110
  }
110
111
  }, I = n ? (q = n.find((e) => e.id === o.id)) == null ? void 0 : q.assignedFeatureList.filter(
111
112
  (e) => {
@@ -115,9 +116,9 @@ function Ne() {
115
116
  ).sort((e, a) => {
116
117
  var s;
117
118
  return (s = e.featureName) == null ? void 0 : s.localeCompare(a.featureName);
118
- }) : [], oe = async (e) => {
119
+ }) : [], ne = async (e) => {
119
120
  try {
120
- await xe(e.userMenuItemId), await N(!0), W(""), x({ message: "Feature deleted successfully!", type: "success" });
121
+ await ve(e.userMenuItemId), await N(!0), W(""), x({ message: "Feature deleted successfully!", type: "success" });
121
122
  } catch (a) {
122
123
  x({ message: a, type: "error" });
123
124
  }
@@ -127,9 +128,9 @@ function Ne() {
127
128
  button_type: "navigate",
128
129
  button_id: `roles-${e === 1 ? "add" : "edit"}-button`
129
130
  });
130
- }, ne = () => {
131
+ }, ie = () => {
131
132
  N(), k("");
132
- }, ie = async () => {
133
+ }, ce = async () => {
133
134
  try {
134
135
  B(!0), await Y("button_click", {
135
136
  button_name: "add feature button",
@@ -140,15 +141,15 @@ function Ne() {
140
141
  console.error(e);
141
142
  }
142
143
  };
143
- return u.isTecho && !V && !(c != null && c["view.manage.role"]) ? /* @__PURE__ */ t(p, { className: "flex justify-center items-center w-full h-[80vh]", children: /* @__PURE__ */ t(
144
- T,
144
+ return g.isTecho && !O && !(c != null && c["view.manage.role"]) ? /* @__PURE__ */ t(p, { className: "flex justify-center items-center w-full h-[80vh]", children: /* @__PURE__ */ t(
145
+ C,
145
146
  {
146
147
  className: "h-80 w-150 flex justify-center items-center",
147
148
  children: /* @__PURE__ */ t(d, { variant: "h5", className: "text-customBlue", children: "You dont have permission to view Roles" })
148
149
  }
149
- ) }) : /* @__PURE__ */ t(Z, { isLoading: V, children: /* @__PURE__ */ r(p, { className: "flex flex-col gap-4 p-4 min-[900px]:flex-row min-[900px]:h-[calc(100vh-80px)]", children: [
150
+ ) }) : /* @__PURE__ */ t(ee, { isLoading: O, children: /* @__PURE__ */ r(p, { className: "flex flex-col gap-4 p-4 min-[900px]:flex-row min-[900px]:h-[calc(100vh-80px)]", children: [
150
151
  /* @__PURE__ */ r(
151
- T,
152
+ C,
152
153
  {
153
154
  variant: "outlined",
154
155
  className: "w-full min-[900px]:w-[300px] flex flex-col p-4",
@@ -163,8 +164,8 @@ function Ne() {
163
164
  children: "User Roles"
164
165
  }
165
166
  ),
166
- (!u.isTecho || (c == null ? void 0 : c["create.manage.role"])) && /* @__PURE__ */ t(
167
- C,
167
+ (!g.isTecho || (c == null ? void 0 : c["create.manage.role"])) && /* @__PURE__ */ t(
168
+ S,
168
169
  {
169
170
  size: "small",
170
171
  variant: "contained",
@@ -189,24 +190,24 @@ function Ne() {
189
190
  ),
190
191
  /* @__PURE__ */ r("div", { className: "flex items-center gap-2 mt-3", children: [
191
192
  /* @__PURE__ */ t(
192
- de,
193
+ me,
193
194
  {
194
195
  size: "small",
195
196
  checked: A,
196
- onChange: se
197
+ onChange: re
197
198
  }
198
199
  ),
199
200
  /* @__PURE__ */ t(d, { variant: "body2", children: "Include Inactive" })
200
201
  ] }),
201
202
  /* @__PURE__ */ t("div", { className: "flex-1 overflow-y-auto mt-4", children: J.length > 0 && /* @__PURE__ */ t(L, { children: J.map((e) => /* @__PURE__ */ r(
202
- T,
203
+ C,
203
204
  {
204
205
  variant: "outlined",
205
- onClick: () => y(e),
206
+ onClick: () => b(e),
206
207
  className: `p-3 cursor-pointer transition
207
208
  ${o.id === e.id ? "border-b-2" : "border-b-2 border-0"}`,
208
209
  sx: o.id === e.id ? {
209
- bgcolor: (a) => S(a.palette.primary.main, 0.08)
210
+ bgcolor: (a) => T(a.palette.primary.main, 0.08)
210
211
  } : {},
211
212
  children: [
212
213
  /* @__PURE__ */ r(d, { fontWeight: 600, children: [
@@ -226,7 +227,7 @@ function Ne() {
226
227
  }
227
228
  ),
228
229
  /* @__PURE__ */ r(
229
- T,
230
+ C,
230
231
  {
231
232
  variant: "outlined",
232
233
  className: "w-full min-[900px]:flex-1 flex flex-col p-5",
@@ -254,23 +255,23 @@ function Ne() {
254
255
  className: "mt-1",
255
256
  children: [
256
257
  "Created on ",
257
- re(o == null ? void 0 : o.createdOn)
258
+ le(o == null ? void 0 : o.createdOn)
258
259
  ]
259
260
  }
260
261
  )
261
262
  ] }),
262
263
  /* @__PURE__ */ r("div", { className: "flex gap-2", children: [
263
- (!u.isTecho || (c == null ? void 0 : c["update.manage.role.toggleActive"])) && /* @__PURE__ */ t(
264
- C,
264
+ (!g.isTecho || (c == null ? void 0 : c["update.manage.role.toggleActive"])) && /* @__PURE__ */ t(
265
+ S,
265
266
  {
266
267
  variant: "outlined",
267
268
  size: "small",
268
- onClick: () => le(),
269
+ onClick: () => oe(),
269
270
  children: (o == null ? void 0 : o.state) === "ACTIVE" ? "Deactivate" : "Activate"
270
271
  }
271
272
  ),
272
- (!u.isTecho || (c == null ? void 0 : c["update.manage.role"])) && /* @__PURE__ */ t(
273
- C,
273
+ (!g.isTecho || (c == null ? void 0 : c["update.manage.role"])) && /* @__PURE__ */ t(
274
+ S,
274
275
  {
275
276
  variant: "contained",
276
277
  size: "small",
@@ -312,7 +313,7 @@ function Ne() {
312
313
  className: "grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-2 text-[15px] font-semibold border-b min-w-[500px]",
313
314
  sx: {
314
315
  color: "text.secondary",
315
- bgcolor: (e) => S(e.palette.action.hover, 0.04)
316
+ bgcolor: (e) => T(e.palette.action.hover, 0.04)
316
317
  },
317
318
  children: [
318
319
  /* @__PURE__ */ t("div", { children: l("FEATURE NAME") }),
@@ -334,17 +335,17 @@ function Ne() {
334
335
  className: "grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-3 items-center border-b last:border-b-0 transition",
335
336
  sx: {
336
337
  "&:hover": {
337
- bgcolor: (s) => S(s.palette.action.hover, 0.04)
338
+ bgcolor: (s) => T(s.palette.action.hover, 0.04)
338
339
  }
339
340
  },
340
341
  children: [
341
342
  /* @__PURE__ */ t("div", { className: "flex flex-col", children: /* @__PURE__ */ t(d, { sx: { fontSize: "13px", fontWeight: 600 }, children: e.featureName }) }),
342
- /* @__PURE__ */ t("div", { className: "flex justify-center", children: (!u.isTecho || (c == null ? void 0 : c["view.manage.role.unassignFeature"])) && /* @__PURE__ */ t(
343
- fe,
343
+ /* @__PURE__ */ t("div", { className: "flex justify-center", children: (!g.isTecho || (c == null ? void 0 : c["view.manage.role.unassignFeature"])) && /* @__PURE__ */ t(
344
+ pe,
344
345
  {
345
346
  icon: he,
346
347
  onClick: () => {
347
- oe(e);
348
+ ne(e);
348
349
  },
349
350
  color: "error",
350
351
  className: "text-red-400 cursor-pointer",
@@ -373,29 +374,29 @@ function Ne() {
373
374
  {
374
375
  className: "border-t p-4",
375
376
  sx: {
376
- bgcolor: (e) => S(e.palette.primary.main, 0.06)
377
+ bgcolor: (e) => T(e.palette.primary.main, 0.06)
377
378
  },
378
- children: (!u.isTecho || (c == null ? void 0 : c["view.manage.role.assignFeature"])) && /* @__PURE__ */ t(C, { variant: "outlined", size: "small", onClick: ie, children: "+ Add More Features" })
379
+ children: (!g.isTecho || (c == null ? void 0 : c["view.manage.role.assignFeature"])) && /* @__PURE__ */ t(S, { variant: "outlined", size: "small", onClick: ce, children: "+ Add More Features" })
379
380
  }
380
381
  )
381
382
  ]
382
383
  }
383
384
  ),
384
385
  /* @__PURE__ */ t(H, { children: /* @__PURE__ */ t(
385
- we,
386
+ Ne,
386
387
  {
387
388
  isUpdate: F !== 1,
388
389
  selectedId: F === 2 ? o.id : null,
389
390
  "data-testid": "roles-managerole-add-button",
390
391
  open: F,
391
392
  setOpen: D,
392
- isRoleListModified: ne
393
+ isRoleListModified: ie
393
394
  }
394
395
  ) }),
395
- /* @__PURE__ */ t(H, { fallback: /* @__PURE__ */ t("div", { className: "animate-pulse w-80 h-20 " }), children: O === !0 && /* @__PURE__ */ t(
396
- ye,
396
+ /* @__PURE__ */ t(H, { fallback: /* @__PURE__ */ t("div", { className: "animate-pulse w-80 h-20 " }), children: P === !0 && /* @__PURE__ */ t(
397
+ we,
397
398
  {
398
- open: O,
399
+ open: P,
399
400
  setOpenModal: B,
400
401
  selectedId: o.id,
401
402
  setData: () => N(!0),
@@ -408,15 +409,15 @@ function Ne() {
408
409
  ) })
409
410
  ] }) });
410
411
  }
411
- const Ue = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
412
+ const We = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
412
413
  __proto__: null,
413
- default: Ne
414
+ default: Ie
414
415
  }, Symbol.toStringTag, { value: "Module" }));
415
416
  export {
416
- Ue as R,
417
- Be as a,
418
- Oe as b,
419
- ve as g,
420
- De as p
417
+ We as R,
418
+ De as a,
419
+ Be as b,
420
+ ye as g,
421
+ Ue as p
421
422
  };
422
- //# sourceMappingURL=RoleManagement-BThAL5LO.js.map
423
+ //# sourceMappingURL=RoleManagement-Cg8-EiVr.js.map