@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.
- package/dist/{AccessRights-Bvd5Bm5K.js → AccessRights-CupmTG3T.js} +2 -2
- package/dist/{AccessRights-Bvd5Bm5K.js.map → AccessRights-CupmTG3T.js.map} +1 -1
- package/dist/{AddEditQueryBuilder-Bcjl5mXE.js → AddEditQueryBuilder-C8ZSkOF0.js} +60 -60
- package/dist/AddEditQueryBuilder-C8ZSkOF0.js.map +1 -0
- package/dist/{AddFeatures-CE5rBxEG.js → AddFeatures-CiZZZ0GL.js} +2 -2
- package/dist/{AddFeatures-CE5rBxEG.js.map → AddFeatures-CiZZZ0GL.js.map} +1 -1
- package/dist/{AddMenuConfiguration-QWfpcnuP.js → AddMenuConfiguration-DsnY0Rws.js} +544 -544
- package/dist/AddMenuConfiguration-DsnY0Rws.js.map +1 -0
- package/dist/{AddRoleDrawer-SvntLdRu.js → AddRoleDrawer-CQdzQZLb.js} +39 -39
- package/dist/AddRoleDrawer-CQdzQZLb.js.map +1 -0
- package/dist/ChangePasswordModalCore-50EzprTk.js +5495 -0
- package/dist/ChangePasswordModalCore-50EzprTk.js.map +1 -0
- package/dist/{ConditionConfig-DB0FqwgG.js → ConditionConfig-C3rF2wXU.js} +2 -2
- package/dist/{ConditionConfig-DB0FqwgG.js.map → ConditionConfig-C3rF2wXU.js.map} +1 -1
- package/dist/{EntityManagement-DQKXnEzz.js → EntityManagement-D4nG7wUX.js} +2 -2
- package/dist/{EntityManagement-DQKXnEzz.js.map → EntityManagement-D4nG7wUX.js.map} +1 -1
- package/dist/{EventConfigurations-D8juDb29.js → EventConfigurations-BGffjVC7.js} +3 -3
- package/dist/{EventConfigurations-D8juDb29.js.map → EventConfigurations-BGffjVC7.js.map} +1 -1
- package/dist/{EventsExceptionModal-DsvngLi8.js → EventsExceptionModal-D4Bf1ilS.js} +2 -2
- package/dist/{EventsExceptionModal-DsvngLi8.js.map → EventsExceptionModal-D4Bf1ilS.js.map} +1 -1
- package/dist/EventsSkeleton-8iiETGcf.js +76 -0
- package/dist/EventsSkeleton-8iiETGcf.js.map +1 -0
- package/dist/{FeatureMenu-CLX8VNZ-.js → FeatureMenu-DUZL32RI.js} +3 -3
- package/dist/{FeatureMenu-CLX8VNZ-.js.map → FeatureMenu-DUZL32RI.js.map} +1 -1
- package/dist/Features-CObdzJp_.js +13 -0
- package/dist/Features-CObdzJp_.js.map +1 -0
- package/dist/ImmunizationConfigurationBase-C5wnjI_-.js +5706 -0
- package/dist/ImmunizationConfigurationBase-C5wnjI_-.js.map +1 -0
- package/dist/ImmunizationConfigurationBase.css +1 -1
- package/dist/{ManageDynamicFeature-CsIett5x.js → ManageDynamicFeature-BhONvfC_.js} +3 -3
- package/dist/{ManageDynamicFeature-CsIett5x.js.map → ManageDynamicFeature-BhONvfC_.js.map} +1 -1
- package/dist/{ManageEventConfiguration-0YBDaxOI.js → ManageEventConfiguration-BntUc_YI.js} +93 -93
- package/dist/ManageEventConfiguration-BntUc_YI.js.map +1 -0
- package/dist/{ManageNotification-BUAvg5Ge.js → ManageNotification-CSl02Wq7.js} +2 -2
- package/dist/{ManageNotification-BUAvg5Ge.js.map → ManageNotification-CSl02Wq7.js.map} +1 -1
- package/dist/{ManageRole-Cbs9dUhc.js → ManageRole-tdzAiCOE.js} +222 -229
- package/dist/ManageRole-tdzAiCOE.js.map +1 -0
- package/dist/{ManageUser-eBS0yC5k.js → ManageUser-C6dlK-Mr.js} +3 -4
- package/dist/{ManageUser-eBS0yC5k.js.map → ManageUser-C6dlK-Mr.js.map} +1 -1
- package/dist/{MobileMenuManagement-BmrO-7MN.js → MobileMenuManagement-CV6QCeos.js} +15 -15
- package/dist/MobileMenuManagement-CV6QCeos.js.map +1 -0
- package/dist/{MobileTypeEventConfigModal-Ltm529jG.js → MobileTypeEventConfigModal-BNjZ8pnq.js} +2 -2
- package/dist/{MobileTypeEventConfigModal-Ltm529jG.js.map → MobileTypeEventConfigModal-BNjZ8pnq.js.map} +1 -1
- package/dist/{NewServerManagement-5YcAtF-g.js → NewServerManagement-Cxe0dV0O.js} +5 -5
- package/dist/NewServerManagement-Cxe0dV0O.js.map +1 -0
- package/dist/{NotificationList-CUZSWp2J.js → NotificationList-D1U1LYnz.js} +140 -139
- package/dist/NotificationList-D1U1LYnz.js.map +1 -0
- package/dist/{OtherTypeEventConfigModal-dXt2qDg_.js → OtherTypeEventConfigModal-DiVhWDpG.js} +43 -43
- package/dist/{OtherTypeEventConfigModal-dXt2qDg_.js.map → OtherTypeEventConfigModal-DiVhWDpG.js.map} +1 -1
- package/dist/{QueryBuilder-DXexUIe8.js → QueryBuilder-DI0wCJbz.js} +85 -84
- package/dist/QueryBuilder-DI0wCJbz.js.map +1 -0
- package/dist/{QueryManagement-DGHV_-d5.js → QueryManagement-CRykYGum.js} +3 -3
- package/dist/QueryManagement-CRykYGum.js.map +1 -0
- package/dist/{RoleManagement-BThAL5LO.js → RoleManagement-Cg8-EiVr.js} +83 -82
- package/dist/RoleManagement-Cg8-EiVr.js.map +1 -0
- package/dist/SecurityAuditLogList-Dod711KT.js +874 -0
- package/dist/SecurityAuditLogList-Dod711KT.js.map +1 -0
- package/dist/{ShowFlywayQuery-BkyA6QaA.js → ShowFlywayQuery-tj42YQAS.js} +33 -33
- package/dist/ShowFlywayQuery-tj42YQAS.js.map +1 -0
- package/dist/{SubMenu-BGznOP2a.js → SubMenu-CM_4wNCR.js} +2 -2
- package/dist/{SubMenu-BGznOP2a.js.map → SubMenu-CM_4wNCR.js.map} +1 -1
- package/dist/{TableDetails-DztbjsIA.js → TableDetails-Cf_YfnY2.js} +235 -235
- package/dist/TableDetails-Cf_YfnY2.js.map +1 -0
- package/dist/{TableList-DYwotUDO.js → TableList-HGbEN4bv.js} +28 -28
- package/dist/TableList-HGbEN4bv.js.map +1 -0
- package/dist/{TypeConfiguration-DYbBG_hZ.js → TypeConfiguration-CupQxH9Y.js} +28 -28
- package/dist/TypeConfiguration-CupQxH9Y.js.map +1 -0
- package/dist/{UserList-BAeAFeXZ.js → UserList-BzHsbYel.js} +423 -423
- package/dist/UserList-BzHsbYel.js.map +1 -0
- package/dist/{WidgetList-D-fIf3N2.js → WidgetList-B7X8Awkg.js} +2 -2
- package/dist/{WidgetList-D-fIf3N2.js.map → WidgetList-B7X8Awkg.js.map} +1 -1
- package/dist/index-D9YNFPn9.js +1439 -0
- package/dist/index-D9YNFPn9.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +102 -100
- package/dist/index.js.map +1 -1
- package/dist/{index-BFznsakV.js → pdfmake-Cf-381ou.js} +13951 -15385
- package/dist/pdfmake-Cf-381ou.js.map +1 -0
- package/package.json +1 -1
- package/dist/AddEditQueryBuilder-Bcjl5mXE.js.map +0 -1
- package/dist/AddMenuConfiguration-QWfpcnuP.js.map +0 -1
- package/dist/AddRoleDrawer-SvntLdRu.js.map +0 -1
- package/dist/ChangePasswordModalCore-ClND1mel.js +0 -181
- package/dist/ChangePasswordModalCore-ClND1mel.js.map +0 -1
- package/dist/EventsSkeleton-DCXwwPbb.js +0 -76
- package/dist/EventsSkeleton-DCXwwPbb.js.map +0 -1
- package/dist/Features-Cpf1PDx0.js +0 -13
- package/dist/Features-Cpf1PDx0.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-BqPTExSk.js +0 -5653
- package/dist/ImmunizationConfigurationBase-BqPTExSk.js.map +0 -1
- package/dist/ManageEventConfiguration-0YBDaxOI.js.map +0 -1
- package/dist/ManageRole-Cbs9dUhc.js.map +0 -1
- package/dist/MobileMenuManagement-BmrO-7MN.js.map +0 -1
- package/dist/NewServerManagement-5YcAtF-g.js.map +0 -1
- package/dist/NotificationList-CUZSWp2J.js.map +0 -1
- package/dist/QueryBuilder-DXexUIe8.js.map +0 -1
- package/dist/QueryManagement-DGHV_-d5.js.map +0 -1
- package/dist/RoleManagement-BThAL5LO.js.map +0 -1
- package/dist/SecurityAuditLogList-DHTcOtbx.js +0 -748
- package/dist/SecurityAuditLogList-DHTcOtbx.js.map +0 -1
- package/dist/ShowFlywayQuery-BkyA6QaA.js.map +0 -1
- package/dist/TableDetails-DztbjsIA.js.map +0 -1
- package/dist/TableList-DYwotUDO.js.map +0 -1
- package/dist/TypeConfiguration-DYbBG_hZ.js.map +0 -1
- package/dist/UserList-BAeAFeXZ.js.map +0 -1
- 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
|
|
3
|
-
import { useState as m, useEffect as
|
|
4
|
-
import { Box as p, Card as
|
|
5
|
-
import { alpha as
|
|
6
|
-
import { useTranslateProvider as
|
|
7
|
-
import
|
|
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
|
|
10
|
+
import { getAssignedFeatures as fe } from "@/utils/feature.js";
|
|
10
11
|
import { showToast as x } from "@/common/toaster/toaster";
|
|
11
|
-
import { FontAwesomeIcon as
|
|
12
|
+
import { FontAwesomeIcon as pe } from "@fortawesome/react-fontawesome";
|
|
12
13
|
import { faTrash as he } from "@fortawesome/free-solid-svg-icons";
|
|
13
|
-
import
|
|
14
|
+
import ge from "@/hooks/useTrackEvent";
|
|
14
15
|
import z from "prop-types";
|
|
15
|
-
import { useSelector as
|
|
16
|
-
import { getUseSkeleton as
|
|
17
|
-
const j = () =>
|
|
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
|
-
}),
|
|
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
|
-
|
|
42
|
+
ee.propTypes = {
|
|
42
43
|
children: z.any,
|
|
43
44
|
loading: z.any,
|
|
44
45
|
isLoading: z.any
|
|
45
46
|
};
|
|
46
|
-
const
|
|
47
|
-
function
|
|
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 } =
|
|
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
|
-
|
|
53
|
+
u(!0);
|
|
53
54
|
const s = A ? j() : _();
|
|
54
|
-
let i,
|
|
55
|
-
if (
|
|
55
|
+
let i, h = [];
|
|
56
|
+
if (Q) {
|
|
56
57
|
const [{ data: v }, M] = await Promise.all([
|
|
57
58
|
s,
|
|
58
|
-
|
|
59
|
+
ye(Q)
|
|
59
60
|
]);
|
|
60
|
-
i = v,
|
|
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
|
-
|
|
66
|
-
const R =
|
|
67
|
-
|
|
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
|
-
|
|
72
|
+
u(!1);
|
|
72
73
|
}
|
|
73
74
|
};
|
|
74
|
-
|
|
75
|
+
de(function() {
|
|
75
76
|
(async () => {
|
|
76
|
-
const { data: a } = await
|
|
77
|
-
a &&
|
|
77
|
+
const { data: a } = await fe("techo.manage.role");
|
|
78
|
+
a && ae(JSON.parse(a));
|
|
78
79
|
})(), N();
|
|
79
80
|
}, []);
|
|
80
|
-
const
|
|
81
|
+
const re = async (e) => {
|
|
81
82
|
let a = e.target.checked;
|
|
82
|
-
|
|
83
|
+
te(e.target.checked);
|
|
83
84
|
try {
|
|
84
|
-
|
|
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
|
-
)),
|
|
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" }),
|
|
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
|
-
) : [],
|
|
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"),
|
|
97
|
-
return `${s}/${i}/${
|
|
98
|
-
},
|
|
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
|
-
|
|
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" }),
|
|
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
|
-
}) : [],
|
|
119
|
+
}) : [], ne = async (e) => {
|
|
119
120
|
try {
|
|
120
|
-
await
|
|
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
|
-
},
|
|
131
|
+
}, ie = () => {
|
|
131
132
|
N(), k("");
|
|
132
|
-
},
|
|
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
|
|
144
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
(!
|
|
167
|
-
|
|
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
|
-
|
|
193
|
+
me,
|
|
193
194
|
{
|
|
194
195
|
size: "small",
|
|
195
196
|
checked: A,
|
|
196
|
-
onChange:
|
|
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
|
-
|
|
203
|
+
C,
|
|
203
204
|
{
|
|
204
205
|
variant: "outlined",
|
|
205
|
-
onClick: () =>
|
|
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) =>
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
(!
|
|
264
|
-
|
|
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: () =>
|
|
269
|
+
onClick: () => oe(),
|
|
269
270
|
children: (o == null ? void 0 : o.state) === "ACTIVE" ? "Deactivate" : "Activate"
|
|
270
271
|
}
|
|
271
272
|
),
|
|
272
|
-
(!
|
|
273
|
-
|
|
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) =>
|
|
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) =>
|
|
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: (!
|
|
343
|
-
|
|
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
|
-
|
|
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) =>
|
|
377
|
+
bgcolor: (e) => T(e.palette.primary.main, 0.06)
|
|
377
378
|
},
|
|
378
|
-
children: (!
|
|
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
|
-
|
|
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:
|
|
393
|
+
isRoleListModified: ie
|
|
393
394
|
}
|
|
394
395
|
) }),
|
|
395
|
-
/* @__PURE__ */ t(H, { fallback: /* @__PURE__ */ t("div", { className: "animate-pulse w-80 h-20 " }), children:
|
|
396
|
-
|
|
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:
|
|
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
|
|
412
|
+
const We = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
412
413
|
__proto__: null,
|
|
413
|
-
default:
|
|
414
|
+
default: Ie
|
|
414
415
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
415
416
|
export {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
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-
|
|
423
|
+
//# sourceMappingURL=RoleManagement-Cg8-EiVr.js.map
|