@argusoft/medplat-core 1.0.26 → 1.0.28
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-CupmTG3T.js → AccessRights-CHu27ZOw.js} +220 -217
- package/dist/AccessRights-CHu27ZOw.js.map +1 -0
- package/dist/{AddEditQueryBuilder-C8ZSkOF0.js → AddEditQueryBuilder-Brdnm6rQ.js} +2 -2
- package/dist/{AddEditQueryBuilder-C8ZSkOF0.js.map → AddEditQueryBuilder-Brdnm6rQ.js.map} +1 -1
- package/dist/{AddFeatures-CqE3v0BN.js → AddFeatures-C0Z29oSd.js} +2 -2
- package/dist/{AddFeatures-CqE3v0BN.js.map → AddFeatures-C0Z29oSd.js.map} +1 -1
- package/dist/{AddLabelModal-CB8E8cYG.js → AddLabelModal-DFllBVcd.js} +2 -2
- package/dist/{AddLabelModal-CB8E8cYG.js.map → AddLabelModal-DFllBVcd.js.map} +1 -1
- package/dist/{AppModal-BKgIwe1h.js → AppModal-CtG2GjD_.js} +2 -2
- package/dist/{AppModal-BKgIwe1h.js.map → AppModal-CtG2GjD_.js.map} +1 -1
- package/dist/{ChangePasswordModalCore-DTYWRTa-.js → ChangePasswordModalCore-CDxkeIIM.js} +2 -2
- package/dist/{ChangePasswordModalCore-DTYWRTa-.js.map → ChangePasswordModalCore-CDxkeIIM.js.map} +1 -1
- package/dist/{EventConfigurations-lPcZGpLi.js → EventConfigurations-kNtAj_WM.js} +76 -76
- package/dist/EventConfigurations-kNtAj_WM.js.map +1 -0
- package/dist/{FeatureMenu-DUZL32RI.js → FeatureMenu-jl7-Tk6y.js} +49 -49
- package/dist/FeatureMenu-jl7-Tk6y.js.map +1 -0
- package/dist/{ImmunizationConfigurationBase-BevKZx_l.js → ImmunizationConfigurationBase-DZGqwda2.js} +470 -470
- package/dist/ImmunizationConfigurationBase-DZGqwda2.js.map +1 -0
- package/dist/{ImmunizationConfigurationsList-K2ddBpPJ.js → ImmunizationConfigurationsList-DdSZicTP.js} +72 -73
- package/dist/{ImmunizationConfigurationsList-K2ddBpPJ.js.map → ImmunizationConfigurationsList-DdSZicTP.js.map} +1 -1
- package/dist/{LanguagesModal-CX3oS8rk.js → LanguagesModal-D6VfaGrl.js} +2 -2
- package/dist/{LanguagesModal-CX3oS8rk.js.map → LanguagesModal-D6VfaGrl.js.map} +1 -1
- package/dist/{ManageNotification-CSl02Wq7.js → ManageNotification-CaBAOhji.js} +2 -2
- package/dist/{ManageNotification-CSl02Wq7.js.map → ManageNotification-CaBAOhji.js.map} +1 -1
- package/dist/{ManageRole-B9bs_T00.js → ManageRole-CGYfglpo.js} +2 -2
- package/dist/{ManageRole-B9bs_T00.js.map → ManageRole-CGYfglpo.js.map} +1 -1
- package/dist/{ManageTranslation-D9IScGhk.js → ManageTranslation-B4C9-lWD.js} +74 -74
- package/dist/ManageTranslation-B4C9-lWD.js.map +1 -0
- package/dist/{ManageUser-AB3_Vfp_.js → ManageUser-AY1EUDLI.js} +600 -601
- package/dist/{ManageUser-AB3_Vfp_.js.map → ManageUser-AY1EUDLI.js.map} +1 -1
- package/dist/{NotificationList-D1U1LYnz.js → NotificationList-C3Vb_jKU.js} +73 -73
- package/dist/NotificationList-C3Vb_jKU.js.map +1 -0
- package/dist/{QueryBuilder-DI0wCJbz.js → QueryBuilder-z7eqfd7D.js} +117 -119
- package/dist/QueryBuilder-z7eqfd7D.js.map +1 -0
- package/dist/{QueryManagement-CRykYGum.js → QueryManagement-BIhEDKuA.js} +114 -114
- package/dist/QueryManagement-BIhEDKuA.js.map +1 -0
- package/dist/{RoleManagement-BIiW9uTq.js → RoleManagement-BPl2cE27.js} +99 -99
- package/dist/RoleManagement-BPl2cE27.js.map +1 -0
- package/dist/{SubMenu-CM_4wNCR.js → SubMenu-DYxAPH2Z.js} +34 -34
- package/dist/SubMenu-DYxAPH2Z.js.map +1 -0
- package/dist/{UserList-2gGuDgNa.js → UserList-Bc8gYxRL.js} +397 -400
- package/dist/UserList-Bc8gYxRL.js.map +1 -0
- package/dist/{WidgetList-B7X8Awkg.js → WidgetList-Dw_FmbbE.js} +26 -26
- package/dist/WidgetList-Dw_FmbbE.js.map +1 -0
- package/dist/index.js +11 -11
- package/package.json +1 -1
- package/dist/AccessRights-CupmTG3T.js.map +0 -1
- package/dist/EventConfigurations-lPcZGpLi.js.map +0 -1
- package/dist/FeatureMenu-DUZL32RI.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-BevKZx_l.js.map +0 -1
- package/dist/ManageTranslation-D9IScGhk.js.map +0 -1
- package/dist/NotificationList-D1U1LYnz.js.map +0 -1
- package/dist/QueryBuilder-DI0wCJbz.js.map +0 -1
- package/dist/QueryManagement-CRykYGum.js.map +0 -1
- package/dist/RoleManagement-BIiW9uTq.js.map +0 -1
- package/dist/SubMenu-CM_4wNCR.js.map +0 -1
- package/dist/UserList-2gGuDgNa.js.map +0 -1
- package/dist/WidgetList-B7X8Awkg.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryManagement-BIhEDKuA.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(null);\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 !loading && rights !== null && !GeneralUtil.hasCheckRights(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.hasCheckRights(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.hasCheckRights(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","snippet","baburao","CustomConfirmationModal"],"mappings":"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"}
|