@argusoft/medplat-core 1.0.14 → 1.0.16
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 +1259 -0
- package/dist/AccessRights-Bvd5Bm5K.js.map +1 -0
- package/dist/{AddEditQueryBuilder-7JRplV5J.js → AddEditQueryBuilder-Bcjl5mXE.js} +2 -2
- package/dist/{AddEditQueryBuilder-7JRplV5J.js.map → AddEditQueryBuilder-Bcjl5mXE.js.map} +1 -1
- package/dist/{AddFeatures-CkTu7sOI.js → AddFeatures-CE5rBxEG.js} +2 -2
- package/dist/{AddFeatures-CkTu7sOI.js.map → AddFeatures-CE5rBxEG.js.map} +1 -1
- package/dist/{AddLabelModal-DE3ploGD.js → AddLabelModal-CB8E8cYG.js} +2 -2
- package/dist/{AddLabelModal-DE3ploGD.js.map → AddLabelModal-CB8E8cYG.js.map} +1 -1
- package/dist/{AddRoleDrawer-ZK1eejxI.js → AddRoleDrawer-SvntLdRu.js} +44 -43
- package/dist/AddRoleDrawer-SvntLdRu.js.map +1 -0
- package/dist/{AppModal-BgZyfrd-.js → AppModal-BKgIwe1h.js} +2 -2
- package/dist/{AppModal-BgZyfrd-.js.map → AppModal-BKgIwe1h.js.map} +1 -1
- package/dist/{ChangePasswordModalCore-DIe4rzW-.js → ChangePasswordModalCore-ClND1mel.js} +67 -62
- package/dist/ChangePasswordModalCore-ClND1mel.js.map +1 -0
- package/dist/{ConditionConfig-GDCXIg3C.js → ConditionConfig-DB0FqwgG.js} +2 -2
- package/dist/{ConditionConfig-GDCXIg3C.js.map → ConditionConfig-DB0FqwgG.js.map} +1 -1
- package/dist/{EntityManagement-D-x6Qzal.js → EntityManagement-DQKXnEzz.js} +2 -2
- package/dist/{EntityManagement-D-x6Qzal.js.map → EntityManagement-DQKXnEzz.js.map} +1 -1
- package/dist/EventConfigurations-DZvSJ5EZ.js +395 -0
- package/dist/EventConfigurations-DZvSJ5EZ.js.map +1 -0
- package/dist/{EventsExceptionModal-BF6E1Np7.js → EventsExceptionModal-DsvngLi8.js} +2 -2
- package/dist/{EventsExceptionModal-BF6E1Np7.js.map → EventsExceptionModal-DsvngLi8.js.map} +1 -1
- package/dist/EventsSkeleton-DCXwwPbb.js +76 -0
- package/dist/EventsSkeleton-DCXwwPbb.js.map +1 -0
- package/dist/FeatureMenu-CLX8VNZ-.js +265 -0
- package/dist/FeatureMenu-CLX8VNZ-.js.map +1 -0
- package/dist/Features-Cpf1PDx0.js +13 -0
- package/dist/Features-Cpf1PDx0.js.map +1 -0
- package/dist/FileSaver.min-CN9EpL2h.js.map +1 -1
- package/dist/{ImmunizationConfigurationBase-DZ8EqXlF.js → ImmunizationConfigurationBase-VqVvVR57.js} +2095 -1872
- package/dist/ImmunizationConfigurationBase-VqVvVR57.js.map +1 -0
- package/dist/ImmunizationConfigurationsList-K2ddBpPJ.js +345 -0
- package/dist/ImmunizationConfigurationsList-K2ddBpPJ.js.map +1 -0
- package/dist/ImmunizationSkeleton-D2tdv5k-.js.map +1 -1
- package/dist/{LanguagesModal-rk6IGQwY.js → LanguagesModal-CX3oS8rk.js} +2 -2
- package/dist/{LanguagesModal-rk6IGQwY.js.map → LanguagesModal-CX3oS8rk.js.map} +1 -1
- package/dist/{ManageDynamicFeature-C2I7Ho7i.js → ManageDynamicFeature-CsIett5x.js} +2 -2
- package/dist/{ManageDynamicFeature-C2I7Ho7i.js.map → ManageDynamicFeature-CsIett5x.js.map} +1 -1
- package/dist/{ManageEventConfiguration-BJxS2Su0.js → ManageEventConfiguration-0YBDaxOI.js} +60 -60
- package/dist/ManageEventConfiguration-0YBDaxOI.js.map +1 -0
- package/dist/{ManageNotification-DMN2szWy.js → ManageNotification-BUAvg5Ge.js} +1797 -1705
- package/dist/ManageNotification-BUAvg5Ge.js.map +1 -0
- package/dist/{ManageRole-CuXmWQyp.js → ManageRole-Cbs9dUhc.js} +244 -191
- package/dist/ManageRole-Cbs9dUhc.js.map +1 -0
- package/dist/ManageTranslation-D9IScGhk.js +625 -0
- package/dist/ManageTranslation-D9IScGhk.js.map +1 -0
- package/dist/{ManageUser-Dr3ptCYp.js → ManageUser-eBS0yC5k.js} +754 -748
- package/dist/ManageUser-eBS0yC5k.js.map +1 -0
- package/dist/{MobileTypeEventConfigModal-ChhO_A4f.js → MobileTypeEventConfigModal-Ltm529jG.js} +2 -2
- package/dist/{MobileTypeEventConfigModal-ChhO_A4f.js.map → MobileTypeEventConfigModal-Ltm529jG.js.map} +1 -1
- package/dist/NotificationList-CUZSWp2J.js +402 -0
- package/dist/NotificationList-CUZSWp2J.js.map +1 -0
- package/dist/{OtherTypeEventConfigModal-ZnCGWm9v.js → OtherTypeEventConfigModal-dXt2qDg_.js} +2 -2
- package/dist/OtherTypeEventConfigModal-dXt2qDg_.js.map +1 -0
- package/dist/{QueryBuilder-BPfavHH9.js → QueryBuilder-DXexUIe8.js} +154 -148
- package/dist/QueryBuilder-DXexUIe8.js.map +1 -0
- package/dist/QueryManagement-B2y23kus.js +935 -0
- package/dist/QueryManagement-B2y23kus.js.map +1 -0
- package/dist/RoleManagement-BThAL5LO.js +422 -0
- package/dist/RoleManagement-BThAL5LO.js.map +1 -0
- package/dist/SubMenu-BGznOP2a.js +191 -0
- package/dist/SubMenu-BGznOP2a.js.map +1 -0
- package/dist/TableDetails-DztbjsIA.js +2069 -0
- package/dist/TableDetails-DztbjsIA.js.map +1 -0
- package/dist/TableList-DYwotUDO.js +1425 -0
- package/dist/TableList-DYwotUDO.js.map +1 -0
- package/dist/{TypeConfiguration-C-lk8Szs.js → TypeConfiguration-DYbBG_hZ.js} +2 -2
- package/dist/{TypeConfiguration-C-lk8Szs.js.map → TypeConfiguration-DYbBG_hZ.js.map} +1 -1
- package/dist/{UserList-S5Q76wO7.js → UserList-BAeAFeXZ.js} +410 -400
- package/dist/UserList-BAeAFeXZ.js.map +1 -0
- package/dist/{UserListSkeleton-cglK2SaU.js → UserListSkeleton-DhIJ5X3y.js} +10 -7
- package/dist/UserListSkeleton-DhIJ5X3y.js.map +1 -0
- package/dist/WidgetList-D-fIf3N2.js +200 -0
- package/dist/WidgetList-D-fIf3N2.js.map +1 -0
- package/dist/i18next-CTOWN_jH.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +64 -63
- package/dist/index.js.map +1 -1
- package/dist/xlsx.min-D1LFqt_b.js.map +1 -1
- package/package.json +1 -1
- package/dist/AccessRights-BMRM1u9S.js +0 -1228
- package/dist/AccessRights-BMRM1u9S.js.map +0 -1
- package/dist/AddRoleDrawer-ZK1eejxI.js.map +0 -1
- package/dist/ChangePasswordModalCore-DIe4rzW-.js.map +0 -1
- package/dist/EventConfigurations-jGCJ4LqP.js +0 -384
- package/dist/EventConfigurations-jGCJ4LqP.js.map +0 -1
- package/dist/EventsSkeleton-BN7_0IGs.js +0 -74
- package/dist/EventsSkeleton-BN7_0IGs.js.map +0 -1
- package/dist/FeatureMenu-Ds6lFg4w.js +0 -249
- package/dist/FeatureMenu-Ds6lFg4w.js.map +0 -1
- package/dist/Features-Cshdl06N.js +0 -12
- package/dist/Features-Cshdl06N.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-DZ8EqXlF.js.map +0 -1
- package/dist/ImmunizationConfigurationsList-CQnxWa09.js +0 -335
- package/dist/ImmunizationConfigurationsList-CQnxWa09.js.map +0 -1
- package/dist/ManageEventConfiguration-BJxS2Su0.js.map +0 -1
- package/dist/ManageNotification-DMN2szWy.js.map +0 -1
- package/dist/ManageRole-CuXmWQyp.js.map +0 -1
- package/dist/ManageTranslation-BTxvSYKb.js +0 -616
- package/dist/ManageTranslation-BTxvSYKb.js.map +0 -1
- package/dist/ManageUser-Dr3ptCYp.js.map +0 -1
- package/dist/NotificationList-BqibwMaM.js +0 -400
- package/dist/NotificationList-BqibwMaM.js.map +0 -1
- package/dist/OtherTypeEventConfigModal-ZnCGWm9v.js.map +0 -1
- package/dist/QueryBuilder-BPfavHH9.js.map +0 -1
- package/dist/QueryManagement-DXA73N2j.js +0 -671
- package/dist/QueryManagement-DXA73N2j.js.map +0 -1
- package/dist/RoleManagement-C0feJCuq.js +0 -410
- package/dist/RoleManagement-C0feJCuq.js.map +0 -1
- package/dist/SubMenu-DAfZC9Xi.js +0 -188
- package/dist/SubMenu-DAfZC9Xi.js.map +0 -1
- package/dist/TableDetails-DzREeJkm.js +0 -1508
- package/dist/TableDetails-DzREeJkm.js.map +0 -1
- package/dist/TableList-B9hr05Hs.js +0 -428
- package/dist/TableList-B9hr05Hs.js.map +0 -1
- package/dist/UserList-S5Q76wO7.js.map +0 -1
- package/dist/UserListSkeleton-cglK2SaU.js.map +0 -1
- package/dist/WidgetList-BSApErov.js +0 -188
- package/dist/WidgetList-BSApErov.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueryManagement-DXA73N2j.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 Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n Button,\n Box,\n TextField,\n} from \"@mui/material\";\nimport {\n executeQuery,\n getDataWithTimeout,\n getQueryBasedData,\n} from \"../../services/QueryManagement\";\n// import { getResource } from \"@/common/services/Users\";\nimport { execute, downloadExcel } from \"@/common/services/GlobalApis\";\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 { Link } from \"react-router-dom\";\nimport dayjs from \"dayjs\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { QueryManagementSkeleton } from \"./Skeletons/QueryManagementSkeleton\";\nimport { Grid } from \"@mui/system\";\nimport CustomTextArea from \"@/views/custom-components/CustomTextArea\";\nimport \"./Styles/QueryManagement.scss\";\nimport CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport { faChevronDown } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport debounce from \"lodash/debounce\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nconst staticTableListPaginationConfig = { pagination: false };\nconst staticTableListStyleConfig = { tableStyle: { maxHeight: 180 } };\nconst staticQueryOutputPaginationConfig = {\n pagination: false,\n paginationType: \"virtual-scroll\",\n};\nconst staticQueryOutputStyleConfig = { tableStyle: { maxHeight: \"60vh\" } };\n\nconst QueryManagement = () => {\n const useSkeleton = useSelector(getUseSkeleton);\n const handleSelectedTable = async (row, queryType = null) => {\n let query;\n if (queryType === \"index\") {\n query =\n \"SELECT * FROM pg_indexes WHERE tablename = '\" +\n row.tablename +\n \"' limit 100\";\n } else if (queryType === \"ddl\") {\n query = `WITH table_columns AS (\n SELECT \n c.relname AS table_name, \n a.attname AS column_name,\n pg_catalog.format_type(a.atttypid, a.atttypmod) AS column_type,\n CASE \n WHEN a.attnotnull THEN 'not null' \n ELSE 'null' \n END AS column_constraint\n FROM \n pg_class c\n JOIN pg_attribute a ON a.attrelid = c.oid\n JOIN pg_type t ON a.atttypid = t.oid\n WHERE \n c.relname = '${row.tablename}'\n AND a.attnum > 0 -- Exclude system columns\n ORDER BY a.attnum\n ),\n table_indexes AS (\n SELECT \n t.relname AS table_name,\n i.relname AS index_name,\n pg_catalog.pg_get_indexdef(ix.indexrelid) AS index_def\n FROM \n pg_class t\n JOIN pg_index ix ON t.oid = ix.indrelid\n JOIN pg_class i ON i.oid = ix.indexrelid\n WHERE \n t.relname = '${row.tablename}'\n )\n SELECT \n 'CREATE TABLE ' || tc.table_name || E'\\n(\\n' ||\n array_to_string(\n array_agg(\n DISTINCT ' ' || tc.column_name || ' ' || tc.column_type || ' ' || tc.column_constraint\n ),\n E',\\n'\n ) || E'\\n);\\n' ||\n COALESCE(\n string_agg(\n DISTINCT ti.index_def,\n E'\\n'\n ), \n ''\n ) AS ddl\n FROM \n table_columns tc\n LEFT JOIN table_indexes ti ON tc.table_name = ti.table_name\n GROUP BY \n tc.table_name;\n `;\n } else {\n query = `select * from ${row.tablename} limit 100`;\n }\n setSelectedQuery(query);\n handleRetrieveData(query);\n return {};\n };\n const handleSelectedQuery = async (row) => {\n setSelectedQuery(row.query);\n setExpanded(0);\n // handleRetrieveData(row.query);\n };\n\n const [processId, setProcessId] = useState(null);\n const [selectedQuery, setSelectedQuery] = useState(\"\");\n const [modalIndex, setModalIndex] = useState(0);\n const tableListColumns = [\n { field: \"Sr. No.\", label: \"#\", align: \"left\" },\n { field: \"size_pretty\", label: \"Size\", align: \"left\" },\n {\n field: \"tablename\",\n label: \"Table Name\",\n align: \"left\",\n onClick: handleSelectedTable,\n },\n {\n field: \"Action\",\n label: \"Action\",\n align: \"left\",\n render: (row) => {\n return (\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n className=\"text-[0.75rem]\"\n onClick={() => handleSelectedTable(row, \"index\")}\n >\n {translate(\"Index\")}\n </Button>\n );\n },\n },\n {\n field: \"DDL\",\n label: \"DDL\",\n align: \"left\",\n render: (row) => {\n return (\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n className=\"text-[0.75rem]\"\n onClick={() => handleSelectedTable(row, \"ddl\")}\n >\n {translate(\"DDL\")}\n </Button>\n );\n },\n },\n ];\n const queryHistoryColumns = [\n { field: \"Sr. No.\", label: \"#\", align: \"left\" },\n {\n field: \"query\",\n label: \"Query\",\n align: \"left\",\n onClick: handleSelectedQuery,\n },\n { field: \"created_on\", label: \"Executed On\", align: \"left\" },\n ];\n const [queryOutputColumns, setQueryOutputColumns] = useState([]);\n const [queryOutputData, setQueryOutputData] = useState([]);\n const [isfetchLockedQuery, setisFetchLockedQuery] = useState(false);\n\n const { user } = useSelector((state) => state.Authenticate);\n const [tableListData, setTableListData] = useState([]);\n\n const [filteredTableData, setFilteredTableData] = useState([]);\n const [queryHistoryData, setQueryHistoryData] = useState([]);\n const [actions, setActions] = useState([]);\n const numberOfRows = queryOutputData.length || null;\n const populateStateQuery = `select pid,query,wait_event_type,state_change,cast (now()-state_change as TEXT) as Since from pg_stat_activity where state = 'active' order by state_change`;\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 { translate } = useTranslateProvider();\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState(0);\n const [isCustomLoading, setisCustomLoading] = useState(false);\n const [isTableDataLoading, setisTableDataLoading] = useState(false);\n const [disabled, setDisabled] = useState(true);\n\n const {\n control,\n setValue,\n getValues,\n formState: { errors },\n } = useForm({\n mode: \"onChange\",\n defaultValues: {\n excelFileName: \"\",\n },\n });\n\n // const queryWatch = watch('query');\n // const queryWatch = useWatch({\n // control,\n // name: \"query\",\n // });\n\n useEffect(() => {\n setFilteredTableData(tableListData);\n }, [tableListData]);\n\n useEffect(() => {\n if (selectedQuery) {\n if (selectedQuery?.length > 0) {\n setDisabled(false);\n setValue(\"query\", selectedQuery);\n return;\n }\n setDisabled(true);\n // keep form in sync\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\n setisCustomLoading(true);\n const { data } = await getQueryBasedData(query).catch((error) => {\n setQueryOutputData([]);\n console.error(error);\n setisCustomLoading(false);\n showToast({ message: `${error.response.data.message}`, type: \"error\" });\n });\n if (data && !data.length) {\n setExpanded(0);\n setQueryOutputData([]);\n showToast({ message: `No data found`, type: \"info\" });\n setisCustomLoading(false);\n return;\n }\n if (data?.length) {\n setExpanded(0);\n if (query !== populateStateQuery) {\n showToast({\n message: `Query Executed Successfully`,\n type: \"success\",\n });\n }\n }\n if (query === populateStateQuery) {\n actions = [\n {\n label: \"KILL PROCESS\",\n icon: (\n <Button\n variant=\"contained\"\n color=\"error\"\n className=\"text-[0.75rem]\"\n >\n {translate(\"Kill Process\")}\n </Button>\n ),\n onClick: openKillProcessModal,\n },\n ];\n } else if (query === killProcessQuery) {\n if (data?.length) {\n showToast({ message: `Terminated Successfully`, type: \"success\" });\n }\n setQueryOutputData([]);\n return;\n }\n setQueryOutputData(\n data.map((data, index) => ({ index: index + 1, ...data })),\n );\n const columnNames = Object.keys(data[0]);\n if (actions.length || query === populateStateQuery) {\n columnNames.push(\"Actions\");\n }\n const columns = columnNames.map((column) => {\n return {\n field: column,\n label: column,\n align: \"left\",\n };\n });\n setActions(actions);\n setQueryOutputColumns([\n { field: \"index\", label: \"#\", align: \"left\" },\n ...columns,\n ]);\n fetchLimitedQueryHistory();\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\n const { data } = await executeQuery(query).catch((error) => {\n console.error(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)\n 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 = {\n paramObj: { query: queryValue },\n };\n const response = await downloadExcel(queryUUID, reportExcelDto).catch(\n (error) => {\n console.error(error);\n showToast({\n message: `Operation Unsuccessful, Something went wrong`,\n type: \"error\",\n });\n return null;\n },\n );\n\n if (!response) {\n setisCustomLoading(false);\n return;\n }\n\n const blob = new Blob([response.data], {\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n });\n\n const filename = `${excelFileName || \"rename\"}_${new Date().getTime()}.xlsx`;\n // Check if the browser supports msSaveBlob\n if (navigator.msSaveBlob) {\n const blobData = new Blob([response.data], { type: \"\" });\n const blobDataSizeInKB = (blobData.size / 1024).toFixed(2);\n trackEvent(\"file_download\", {\n file_type: \"xlsx\",\n file_name: filename,\n file_size: `${blobDataSizeInKB} KB`,\n download_status: \"success\",\n });\n return navigator.msSaveBlob(blobData, filename);\n } else {\n // Create a URL for the Blob\n const url = URL.createObjectURL(blob);\n const blobSizeInKB = (blob.size / 1024).toFixed(2);\n\n // Create a temporary link element\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\n // Trigger a click event on the link to start the download\n a.click();\n trackEvent(\"file_download\", {\n file_type: \"xlsx\",\n file_name: filename,\n file_size: `${blobSizeInKB} KB`,\n download_status: \"success\",\n });\n\n // Cleanup\n URL.revokeObjectURL(url);\n a.remove();\n }\n setisCustomLoading(false);\n } catch (error) {\n console.error(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\n let query;\n if (isfetchLockedQuery === true) {\n query = fetchLockedQuery;\n } else {\n query = populateStateQuery;\n }\n await handleRetrieveData(query);\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: {\n userId: user?.id,\n limit: 100,\n searchKey: queryHistorySearchKey,\n },\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 setLoading((cur) => !cur);\n fetchLimitedQueryHistory();\n setLoading((cur) => !cur);\n };\n\n useEffect(() => {\n init();\n }, []);\n\n const fetchTableList = async () => {\n try {\n setisTableDataLoading(true);\n const { data } = await getDataWithTimeout({\n code: \"retrieve_all_tables\",\n });\n setTableListData(\n data.result.map((data, index) => ({\n index: index + 1,\n ...data,\n })),\n );\n setisTableDataLoading(false);\n } catch (error) {\n console.error(error);\n setisTableDataLoading(false);\n }\n };\n\n const handleSearchKeyChange = (e) => {\n const value = e.target.value;\n // setTableListSearchKey(value);\n handleSearchChange(value);\n };\n\n const handleSearchChange = useMemo(\n () =>\n debounce((value) => {\n const lowerCaseValue = value.toLowerCase();\n const filtered = tableListData.filter((data) =>\n data?.tablename?.toLowerCase().includes(lowerCaseValue),\n );\n setFilteredTableData(filtered);\n }, 300), // debounce time in ms\n [tableListData],\n );\n\n const handleChange = (panel, isExpanded) => {\n setExpanded(isExpanded ? panel : false);\n };\n\n return (\n <QueryManagementSkeleton loading={loading}>\n {isCustomLoading && useSkeleton && (\n <div className=\"loader-overlay\">\n <div className=\"loader-spinner\"></div>\n </div>\n )}\n <Box minHeight=\"80vh\" className=\"flex flex-col mt-5\">\n {/* Sidebar */}\n <Box\n // bgcolor=\"#f5f5f5\"\n className=\"flex flex-col md:flex-row md:space-x-2 space-y-2 md:space-y-0\"\n >\n {/* Accordion for Tables */}\n <Grid className=\"w-full md:w-1/2\">\n <Accordion\n expanded={expanded === 1}\n onChange={(event, isExpanded) => {\n isExpanded && !tableListData.length && fetchTableList();\n handleChange(1, isExpanded);\n }}\n data-testid=\"table-list-accordion\"\n className=\"accordion\"\n >\n <AccordionSummary\n expandIcon={<FontAwesomeIcon icon={faChevronDown} />}\n data-testid=\"table-list-accordion-title\"\n sx={{\n \"&.Mui-expanded\": {\n minHeight: \"unset\",\n paddingBottom: \"2px\",\n \"& .MuiAccordionSummary-content\": {\n marginBottom: \"2px\",\n },\n },\n }}\n >\n <Typography>{translate(\"All Table List\")}</Typography>\n </AccordionSummary>\n\n <AccordionDetails\n className=\"accordion-details mt-2.5\"\n sx={{\n backgroundColor: \"background.paper\",\n \".Mui-expanded &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n }}\n >\n <TextField\n id=\"tableListSearchKey\"\n onChange={handleSearchKeyChange}\n size=\"small\"\n placeholder=\"Search Table Name\"\n className=\"w-[70%] mb-2\"\n />\n <CustomizedTable\n strip={true}\n isLoading={isTableDataLoading}\n columns={tableListColumns}\n tableData={filteredTableData}\n paginationConfig={staticTableListPaginationConfig}\n dataTestId=\"table-list-table-customized\"\n styleConfig={staticTableListStyleConfig}\n />\n </AccordionDetails>\n </Accordion>\n </Grid>\n\n {/* Accordion for Query History */}\n <Grid className=\"w-full md:w-1/2\">\n <Accordion\n expanded={expanded === 2}\n onChange={(event, isExpanded) => {\n isExpanded &&\n !queryHistoryData.length &&\n fetchLimitedQueryHistory();\n handleChange(2, isExpanded);\n }}\n data-testid=\"query-history-accordion\"\n className=\"accordion\"\n >\n <AccordionSummary\n expandIcon={<FontAwesomeIcon icon={faChevronDown} />}\n data-testid=\"query-history-accordion-title\"\n sx={{\n \"&.Mui-expanded\": {\n minHeight: \"unset\",\n paddingBottom: \"2px\",\n \"& .MuiAccordionSummary-content\": {\n marginBottom: \"2px\",\n },\n },\n }}\n >\n <Typography>{translate(\"Query History\")}</Typography>\n </AccordionSummary>\n <AccordionDetails\n className=\"accordion-details mt-2.5\"\n sx={{\n backgroundColor: \"background.paper\",\n \".Mui-expanded &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n }}\n test=\"work\"\n >\n <Box className=\"flex items-center mb-2\">\n <CustomTextField\n id=\"queryHistorySearchKey\"\n name=\"queryHistorySearchKey\"\n control={control}\n placeholder=\"Search in History\"\n size=\"small\"\n className=\"w-auto mr-1\"\n />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={fetchLimitedQueryHistory}\n data-testid=\"query-history-accordion-submit\"\n sx={{ ml: { xs: \"10px\", md: \"0px\" } }}\n >\n {translate(\"Search\")}\n </Button>\n </Box>\n\n <CustomizedTable\n strip={true}\n columns={queryHistoryColumns}\n tableData={queryHistoryData}\n paginationConfig={staticTableListPaginationConfig}\n dataTestId=\"query-history-table-customized\"\n styleConfig={staticTableListStyleConfig}\n />\n </AccordionDetails>\n </Accordion>\n </Grid>\n </Box>\n\n {/* Main Area */}\n <Box className=\"flex flex-col space-y-4\">\n <CustomTextArea\n control={control}\n minRows={5}\n variant=\"outlined\"\n placeholder=\"Type your query here...\"\n id=\"query\"\n name=\"query\"\n className=\"mt-5\"\n sx={{ backgroundColor: \"background.paper\" }}\n errors={errors}\n margin=\"normal\"\n dataTestId=\"query-text-area\"\n onChange={(e) => {\n setValue(\"query\", e.target.value);\n if (e?.target?.value?.length > 0) {\n setDisabled(false);\n return;\n }\n setDisabled(true);\n }}\n />\n <Box className=\"flex flex-col md:flex-row md:items-center mb-4 gap-3\">\n <CustomTextField\n id=\"excelFileName\"\n name=\"excelFileName\"\n className=\"m-0 p-0\"\n control={control}\n placeholder=\"Enter File Name\"\n size=\"small\"\n fullWidth={false}\n dataTestId=\"enter-file-field\"\n />\n <Button\n variant=\"contained\"\n color=\"info\"\n onClick={handleDownloadExcel}\n data-testid=\"download-excel-button\"\n >\n {translate(\"Download Excel\")}\n </Button>\n <Box className=\"m-1 flex\">\n <Link onClick={() => handleFetchLockedQuery()} className=\"m-1\">\n <Typography variant=\"body2\" color=\"info\">\n {translate(\"Fetch Locked Queries\")}\n </Typography>\n </Link>\n <Typography variant=\"body2\" className=\"m-1\">\n |\n </Typography>\n <Link onClick={handlePopulateStateQuery} className=\"m-1\">\n <Typography variant=\"body2\" color=\"info\">\n {translate(\"Populate State Query\")}\n </Typography>\n </Link>\n </Box>\n\n <Button\n variant=\"contained\"\n color=\"success\"\n onClick={async () => {\n const queryValue = getValues(\"query\");\n setSelectedQuery(queryValue);\n\n if (queryValue?.toLowerCase().includes(\"where\")) {\n await handleRetrieveData(queryValue);\n return;\n }\n setModalIndex(1);\n }}\n data-testid=\"retrieve-data-button\"\n disabled={disabled}\n >\n {translate(\"Retrieve Data\")}\n </Button>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={async () => {\n const queryValue = getValues(\"query\");\n setSelectedQuery(queryValue);\n if (queryValue?.toLowerCase().includes(\"where\")) {\n await handleExecuteData(queryValue);\n return;\n }\n setModalIndex(2);\n }}\n data-testid=\"execute-button\"\n disabled={disabled}\n >\n {translate(\"Execute\")}\n </Button>\n </Box>\n {!!numberOfRows && (\n <Typography variant=\"body2\">\n {translate(\"Total rows fetched\")} :{\" \"}\n <strong> {numberOfRows}</strong>{\" \"}\n </Typography>\n )}\n {!!queryOutputData.length && (\n <Grid className=\"max-h-[80vh] overflow-x-auto mb-2\">\n <CustomizedTable\n className=\"min-w-[500px]\"\n columns={queryOutputColumns}\n actions={actions}\n tableData={queryOutputData}\n paginationConfig={staticQueryOutputPaginationConfig}\n dataTestId=\"query-output-table-customized\"\n styleConfig={staticQueryOutputStyleConfig}\n />\n </Grid>\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 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 dataTestId=\"modal\"\n />\n )}\n </Box>\n </Box>\n </QueryManagementSkeleton>\n );\n};\n\nexport default QueryManagement;\n"],"names":["getDataWithTimeout","params","api","getQueryBasedData","query","data","executeQuery","QueryManagementSkeleton","children","loading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","staticTableListPaginationConfig","staticTableListStyleConfig","staticQueryOutputPaginationConfig","staticQueryOutputStyleConfig","QueryManagement","useSkeleton","handleSelectedTable","row","queryType","setSelectedQuery","handleRetrieveData","handleSelectedQuery","setExpanded","processId","setProcessId","useState","selectedQuery","modalIndex","setModalIndex","tableListColumns","Button","queryHistoryColumns","queryOutputColumns","setQueryOutputColumns","queryOutputData","setQueryOutputData","isfetchLockedQuery","setisFetchLockedQuery","user","state","tableListData","setTableListData","filteredTableData","setFilteredTableData","queryHistoryData","setQueryHistoryData","actions","setActions","numberOfRows","populateStateQuery","killProcessQuery","fetchLockedQuery","translate","useTranslateProvider","setLoading","expanded","isCustomLoading","setisCustomLoading","isTableDataLoading","setisTableDataLoading","disabled","setDisabled","control","setValue","getValues","errors","useForm","useEffect","trackEvent","useTrackEvent","showToast","error","openKillProcessModal","index","columnNames","columns","column","fetchLimitedQueryHistory","handleExecuteData","handleDownloadExcel","queryUUID","queryValue","excelFileName","response","downloadExcel","blob","filename","blobData","blobDataSizeInKB","url","blobSizeInKB","a","handleFetchLockedQuery","handleKillProcess","handlePopulateStateQuery","queryHistorySearchKey","execute","dayjs","init","cur","fetchTableList","handleSearchKeyChange","value","handleSearchChange","useMemo","debounce","lowerCaseValue","filtered","_a","handleChange","panel","isExpanded","Box","Grid","Accordion","event","AccordionSummary","FontAwesomeIcon","faChevronDown","Typography","AccordionDetails","TextField","CustomizedTable","CustomTextField","CustomTextArea","_b","Link","CustomConfirmationModal"],"mappings":"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"}
|
|
@@ -1,410 +0,0 @@
|
|
|
1
|
-
import { jsxs as s, jsx as t, Fragment as E } from "react/jsx-runtime";
|
|
2
|
-
import { useState as d, useEffect as ne, Suspense as q, lazy as H } from "react";
|
|
3
|
-
import { Box as f, Card as L, Typography as c, Button as w, TextField as G, Switch as oe, Chip as M } from "@mui/material";
|
|
4
|
-
import { alpha as I } from "@mui/material/styles";
|
|
5
|
-
import { useTranslateProvider as ie } from "@/common/languageTranslator/TranslationContext";
|
|
6
|
-
import { api as p } from "@/common/interceptors/AxiosInterceptor";
|
|
7
|
-
import { getRoleList as R } from "@/common/services/GlobalApis.js";
|
|
8
|
-
import { showToast as h } from "@/common/toaster/toaster";
|
|
9
|
-
import { FontAwesomeIcon as ce } from "@fortawesome/react-fontawesome";
|
|
10
|
-
import { faTrash as de } from "@fortawesome/free-solid-svg-icons";
|
|
11
|
-
import me from "@/hooks/useTrackEvent";
|
|
12
|
-
import _ from "prop-types";
|
|
13
|
-
import { useSelector as J } from "react-redux";
|
|
14
|
-
import { getUseSkeleton as ue } from "@/store/reducers/SkeletonReducer";
|
|
15
|
-
const z = () => p.get("/role"), fe = (i) => p.delete(`/menuconfig/usermenuitem/${i}`), he = (i) => p.get(`/role/${i}`), Re = (i) => p.post("/role", { ...i }), pe = (i) => p.put(`role/?is_active=${i.state === "INACTIVE" ? "true" : "false"}`, {
|
|
16
|
-
...i
|
|
17
|
-
}), _e = (i, n) => p.post(`/menuconfig/assignnewfeature?roleId=${n}`, { ...i }), K = ({ children: i, isLoading: n = !0 }) => !J(ue) || !n ? i : /* @__PURE__ */ s("div", { className: "pt-6 relative h-[90vh]", children: [
|
|
18
|
-
/* @__PURE__ */ s("div", { className: "flex flex-row h-[80vh] ", children: [
|
|
19
|
-
/* @__PURE__ */ s("div", { className: "flex flex-col border border-gray-300 w-[20%] p-2 mr-3 rounded-md", children: [
|
|
20
|
-
" ",
|
|
21
|
-
/* @__PURE__ */ s("div", { className: "flex justify-between", children: [
|
|
22
|
-
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm w-23 h-[40px] mr-3" }),
|
|
23
|
-
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm w-40 h-[40px]" })
|
|
24
|
-
] }),
|
|
25
|
-
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-[50px]" }),
|
|
26
|
-
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-full" })
|
|
27
|
-
] }),
|
|
28
|
-
/* @__PURE__ */ s("div", { className: "flex flex-col border border-gray-300 w-[80%] p-2 rounded-md", children: [
|
|
29
|
-
/* @__PURE__ */ s("div", { className: "flex justify-between", children: [
|
|
30
|
-
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm w-24 h-[40px]" }),
|
|
31
|
-
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm w-21 h-[40px]" })
|
|
32
|
-
] }),
|
|
33
|
-
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-[50px]" }),
|
|
34
|
-
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-full" })
|
|
35
|
-
] })
|
|
36
|
-
] }),
|
|
37
|
-
/* @__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]" }) })
|
|
38
|
-
] });
|
|
39
|
-
K.propTypes = {
|
|
40
|
-
children: _.any,
|
|
41
|
-
loading: _.any,
|
|
42
|
-
isLoading: _.any
|
|
43
|
-
};
|
|
44
|
-
const ge = H(() => import("./AddFeatures-CkTu7sOI.js")), xe = H(() => import("./ManageRole-CuXmWQyp.js"));
|
|
45
|
-
function ve() {
|
|
46
|
-
var Y;
|
|
47
|
-
const { translate: i } = ie(), [n, x] = d(""), [l, v] = d(n[0]), [C, Q] = d(!1), [X, m] = d(!1), [$, j] = d(!1), [S, V] = d(0), [O, T] = d(""), [b, D] = d(""), W = me(), B = J((e) => e.Authenticate.user.roleId), [A, Z] = d([]), y = async (e = !1) => {
|
|
48
|
-
var a;
|
|
49
|
-
try {
|
|
50
|
-
m(!0);
|
|
51
|
-
const r = C ? z() : R();
|
|
52
|
-
let o, u = [];
|
|
53
|
-
if (B) {
|
|
54
|
-
const [{ data: g }, k] = await Promise.all([
|
|
55
|
-
r,
|
|
56
|
-
he(B)
|
|
57
|
-
]);
|
|
58
|
-
o = g, u = ((a = k == null ? void 0 : k.data) == null ? void 0 : a.roleIds) || [];
|
|
59
|
-
} else {
|
|
60
|
-
const { data: g } = await r;
|
|
61
|
-
o = g;
|
|
62
|
-
}
|
|
63
|
-
Z(u);
|
|
64
|
-
const F = u.length > 0 ? o.filter((g) => u.includes(g.id)) : o;
|
|
65
|
-
x(F), !e && F.length > 0 && v(F[0]);
|
|
66
|
-
} catch (r) {
|
|
67
|
-
console.error(r), h({ message: "Error in getting role data", type: "error" });
|
|
68
|
-
} finally {
|
|
69
|
-
m(!1);
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
ne(function() {
|
|
73
|
-
y();
|
|
74
|
-
}, []);
|
|
75
|
-
const ee = async (e) => {
|
|
76
|
-
let a = e.target.checked;
|
|
77
|
-
Q(e.target.checked);
|
|
78
|
-
try {
|
|
79
|
-
m((o) => !o);
|
|
80
|
-
let r;
|
|
81
|
-
a ? { data: r } = await z() : { data: r } = await R(), A && A.length > 0 && (r = r.filter(
|
|
82
|
-
(o) => A.includes(o.id)
|
|
83
|
-
)), x(r), v(r[0]), m((o) => !o), T("");
|
|
84
|
-
} catch (r) {
|
|
85
|
-
console.error(r), h({ message: "Error in getting role data", type: "error" }), m((o) => !o);
|
|
86
|
-
}
|
|
87
|
-
}, P = n ? n == null ? void 0 : n.filter(
|
|
88
|
-
(e) => e.name.toLowerCase().includes(O.toLowerCase())
|
|
89
|
-
) : [], te = (e) => {
|
|
90
|
-
if (!e) return "";
|
|
91
|
-
const a = new Date(Number(e)), r = String(a.getDate()).padStart(2, "0"), o = String(a.getMonth() + 1).padStart(2, "0"), u = a.getFullYear();
|
|
92
|
-
return `${r}/${o}/${u}`;
|
|
93
|
-
}, ae = async () => {
|
|
94
|
-
try {
|
|
95
|
-
const e = n == null ? void 0 : n.find((r) => r.id === l.id);
|
|
96
|
-
await pe(e), h({
|
|
97
|
-
message: `State succesfully changed from ${(e == null ? void 0 : e.state) === "INACTIVE" ? "inactive" : "active"} to ${(e == null ? void 0 : e.state) === "INACTIVE" ? "active" : "inactive"}`,
|
|
98
|
-
type: "success"
|
|
99
|
-
});
|
|
100
|
-
let a;
|
|
101
|
-
m((r) => !r), C ? a = await z() : a = await R(), x(a.data), v(a.data[0]), m((r) => !r);
|
|
102
|
-
} catch (e) {
|
|
103
|
-
console.error(e), h({ message: "Error in handle active", type: "error" }), m((a) => !a);
|
|
104
|
-
}
|
|
105
|
-
}, N = n ? (Y = n.find((e) => e.id === l.id)) == null ? void 0 : Y.assignedFeatureList.filter(
|
|
106
|
-
(e) => {
|
|
107
|
-
var a;
|
|
108
|
-
return (a = e.featureName) == null ? void 0 : a.toLowerCase().includes(b == null ? void 0 : b.toLowerCase());
|
|
109
|
-
}
|
|
110
|
-
).sort((e, a) => {
|
|
111
|
-
var r;
|
|
112
|
-
return (r = e.featureName) == null ? void 0 : r.localeCompare(a.featureName);
|
|
113
|
-
}) : [], re = async (e) => {
|
|
114
|
-
try {
|
|
115
|
-
await fe(e.userMenuItemId), await y(!0), D(""), h({ message: "Feature deleted successfully!", type: "success" });
|
|
116
|
-
} catch (a) {
|
|
117
|
-
h({ message: a, type: "error" });
|
|
118
|
-
}
|
|
119
|
-
}, U = (e) => {
|
|
120
|
-
V(e), W("button_click", {
|
|
121
|
-
button_name: `${e === 1 ? "add" : "edit"} role modal button`,
|
|
122
|
-
button_type: "navigate",
|
|
123
|
-
button_id: `roles-${e === 1 ? "add" : "edit"}-button`
|
|
124
|
-
});
|
|
125
|
-
}, se = () => {
|
|
126
|
-
y(), T("");
|
|
127
|
-
}, le = async () => {
|
|
128
|
-
try {
|
|
129
|
-
j(!0), await W("button_click", {
|
|
130
|
-
button_name: "add feature button",
|
|
131
|
-
button_type: "navigate",
|
|
132
|
-
button_id: "roles-addfeatures-button-add"
|
|
133
|
-
});
|
|
134
|
-
} catch (e) {
|
|
135
|
-
console.error(e);
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
return /* @__PURE__ */ t(K, { isLoading: X, children: /* @__PURE__ */ s(f, { className: "flex flex-col gap-4 p-4 min-[900px]:flex-row min-[900px]:h-[calc(100vh-80px)]", children: [
|
|
139
|
-
/* @__PURE__ */ s(
|
|
140
|
-
L,
|
|
141
|
-
{
|
|
142
|
-
variant: "outlined",
|
|
143
|
-
className: "w-full min-[900px]:w-[300px] flex flex-col p-4",
|
|
144
|
-
children: [
|
|
145
|
-
/* @__PURE__ */ s("div", { className: "flex justify-between items-center mb-3", children: [
|
|
146
|
-
/* @__PURE__ */ t(
|
|
147
|
-
c,
|
|
148
|
-
{
|
|
149
|
-
variant: "h6",
|
|
150
|
-
fontWeight: 600,
|
|
151
|
-
className: "text-customBlue",
|
|
152
|
-
children: "User Roles"
|
|
153
|
-
}
|
|
154
|
-
),
|
|
155
|
-
/* @__PURE__ */ t(
|
|
156
|
-
w,
|
|
157
|
-
{
|
|
158
|
-
size: "small",
|
|
159
|
-
variant: "contained",
|
|
160
|
-
color: "primary",
|
|
161
|
-
onClick: () => U(1),
|
|
162
|
-
"data-testid": "managerole-add-button",
|
|
163
|
-
children: i("+ Add Role")
|
|
164
|
-
}
|
|
165
|
-
)
|
|
166
|
-
] }),
|
|
167
|
-
/* @__PURE__ */ t(
|
|
168
|
-
G,
|
|
169
|
-
{
|
|
170
|
-
size: "small",
|
|
171
|
-
variant: "outlined",
|
|
172
|
-
placeholder: "Search roles...",
|
|
173
|
-
fullWidth: !0,
|
|
174
|
-
value: O,
|
|
175
|
-
onChange: (e) => T(e.target.value),
|
|
176
|
-
"data-testid": "listofroles-search-input"
|
|
177
|
-
}
|
|
178
|
-
),
|
|
179
|
-
/* @__PURE__ */ s("div", { className: "flex items-center gap-2 mt-3", children: [
|
|
180
|
-
/* @__PURE__ */ t(
|
|
181
|
-
oe,
|
|
182
|
-
{
|
|
183
|
-
size: "small",
|
|
184
|
-
checked: C,
|
|
185
|
-
onChange: ee
|
|
186
|
-
}
|
|
187
|
-
),
|
|
188
|
-
/* @__PURE__ */ t(c, { variant: "body2", children: "Include Inactive" })
|
|
189
|
-
] }),
|
|
190
|
-
/* @__PURE__ */ t("div", { className: "flex-1 overflow-y-auto mt-4", children: P.length > 0 && /* @__PURE__ */ t(E, { children: P.map((e) => /* @__PURE__ */ s(
|
|
191
|
-
L,
|
|
192
|
-
{
|
|
193
|
-
variant: "outlined",
|
|
194
|
-
onClick: () => v(e),
|
|
195
|
-
className: `p-3 cursor-pointer transition
|
|
196
|
-
${l.id === e.id ? "border-b-2" : "border-b-2 border-0"}`,
|
|
197
|
-
sx: l.id === e.id ? {
|
|
198
|
-
bgcolor: (a) => I(a.palette.primary.main, 0.08)
|
|
199
|
-
} : {},
|
|
200
|
-
children: [
|
|
201
|
-
/* @__PURE__ */ s(c, { fontWeight: 600, children: [
|
|
202
|
-
e.name,
|
|
203
|
-
" ",
|
|
204
|
-
(e == null ? void 0 : e.state) === "INACTIVE" && /* @__PURE__ */ t(M, { label: "INACTIVE", color: "disabled", size: "small" })
|
|
205
|
-
] }),
|
|
206
|
-
/* @__PURE__ */ s(c, { variant: "body2", color: "text.secondary", children: [
|
|
207
|
-
e.assignedFeatureList.length,
|
|
208
|
-
" Features"
|
|
209
|
-
] })
|
|
210
|
-
]
|
|
211
|
-
},
|
|
212
|
-
e.id
|
|
213
|
-
)) }) })
|
|
214
|
-
]
|
|
215
|
-
}
|
|
216
|
-
),
|
|
217
|
-
/* @__PURE__ */ s(
|
|
218
|
-
L,
|
|
219
|
-
{
|
|
220
|
-
variant: "outlined",
|
|
221
|
-
className: "w-full min-[900px]:flex-1 flex flex-col p-5",
|
|
222
|
-
children: [
|
|
223
|
-
/* @__PURE__ */ s("div", { className: "flex flex-col sm:flex-row justify-between items-start border-b pb-4 gap-4", children: [
|
|
224
|
-
/* @__PURE__ */ s("div", { className: "flex flex-col gap-1 w-full sm:w-auto", children: [
|
|
225
|
-
/* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
|
|
226
|
-
/* @__PURE__ */ t(
|
|
227
|
-
c,
|
|
228
|
-
{
|
|
229
|
-
variant: "h5",
|
|
230
|
-
fontWeight: 600,
|
|
231
|
-
className: "text-customBlue",
|
|
232
|
-
children: (l == null ? void 0 : l.name) || "Select Role"
|
|
233
|
-
}
|
|
234
|
-
),
|
|
235
|
-
(l == null ? void 0 : l.state) === "ACTIVE" && /* @__PURE__ */ t(M, { label: "ACTIVE", color: "success", size: "small" }),
|
|
236
|
-
(l == null ? void 0 : l.state) === "INACTIVE" && /* @__PURE__ */ t(M, { label: "INACTIVE", color: "disabled", size: "small" })
|
|
237
|
-
] }),
|
|
238
|
-
/* @__PURE__ */ s(
|
|
239
|
-
c,
|
|
240
|
-
{
|
|
241
|
-
variant: "body2",
|
|
242
|
-
color: "text.secondary",
|
|
243
|
-
className: "mt-1",
|
|
244
|
-
children: [
|
|
245
|
-
"Created on ",
|
|
246
|
-
te(l == null ? void 0 : l.createdOn)
|
|
247
|
-
]
|
|
248
|
-
}
|
|
249
|
-
)
|
|
250
|
-
] }),
|
|
251
|
-
/* @__PURE__ */ s("div", { className: "flex gap-2", children: [
|
|
252
|
-
/* @__PURE__ */ t(
|
|
253
|
-
w,
|
|
254
|
-
{
|
|
255
|
-
variant: "outlined",
|
|
256
|
-
size: "small",
|
|
257
|
-
onClick: () => ae(),
|
|
258
|
-
children: (l == null ? void 0 : l.state) === "ACTIVE" ? "Deactivate" : "Activate"
|
|
259
|
-
}
|
|
260
|
-
),
|
|
261
|
-
/* @__PURE__ */ t(
|
|
262
|
-
w,
|
|
263
|
-
{
|
|
264
|
-
variant: "contained",
|
|
265
|
-
size: "small",
|
|
266
|
-
onClick: () => U(2),
|
|
267
|
-
children: "✏️ Edit Role"
|
|
268
|
-
}
|
|
269
|
-
)
|
|
270
|
-
] })
|
|
271
|
-
] }),
|
|
272
|
-
/* @__PURE__ */ s("div", { className: "mt-5 flex flex-col flex-1 overflow-hidden", children: [
|
|
273
|
-
/* @__PURE__ */ s("div", { className: "flex flex-col sm:flex-row justify-between items-start sm:items-center mb-4 gap-4", children: [
|
|
274
|
-
/* @__PURE__ */ s("div", { className: "flex flex-row items-center gap-2 w-full sm:w-auto", children: [
|
|
275
|
-
/* @__PURE__ */ t(c, { fontWeight: 600, children: i("Assigned Features") }),
|
|
276
|
-
/* @__PURE__ */ s(c, { variant: "body2", color: "text.secondary", children: [
|
|
277
|
-
"(",
|
|
278
|
-
N.length,
|
|
279
|
-
" ",
|
|
280
|
-
i("features active for this role"),
|
|
281
|
-
")"
|
|
282
|
-
] })
|
|
283
|
-
] }),
|
|
284
|
-
/* @__PURE__ */ t(
|
|
285
|
-
G,
|
|
286
|
-
{
|
|
287
|
-
size: "small",
|
|
288
|
-
sx: { width: { xs: "100%", sm: "60%" } },
|
|
289
|
-
placeholder: "Search Feature Name",
|
|
290
|
-
variant: "outlined",
|
|
291
|
-
value: b,
|
|
292
|
-
onChange: (e) => D(e.target.value),
|
|
293
|
-
"data-testid": "assignedfeatures-search-input"
|
|
294
|
-
}
|
|
295
|
-
)
|
|
296
|
-
] }),
|
|
297
|
-
/* @__PURE__ */ s(f, { className: "overflow-x-auto w-full", children: [
|
|
298
|
-
/* @__PURE__ */ s(
|
|
299
|
-
f,
|
|
300
|
-
{
|
|
301
|
-
className: "grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-2 text-[15px] font-semibold border-b min-w-[500px]",
|
|
302
|
-
sx: {
|
|
303
|
-
color: "text.secondary",
|
|
304
|
-
bgcolor: (e) => I(e.palette.action.hover, 0.04)
|
|
305
|
-
},
|
|
306
|
-
children: [
|
|
307
|
-
/* @__PURE__ */ t("div", { children: i("FEATURE NAME") }),
|
|
308
|
-
/* @__PURE__ */ t("div", { className: "text-center", children: i("ACTIONS") })
|
|
309
|
-
]
|
|
310
|
-
}
|
|
311
|
-
),
|
|
312
|
-
/* @__PURE__ */ s(
|
|
313
|
-
f,
|
|
314
|
-
{
|
|
315
|
-
className: "h-[calc(100vh-440px)] overflow-y-auto min-w-[500px]",
|
|
316
|
-
sx: {
|
|
317
|
-
bgcolor: "background.paper"
|
|
318
|
-
},
|
|
319
|
-
children: [
|
|
320
|
-
N.length > 0 && /* @__PURE__ */ t(E, { children: N.map((e, a) => /* @__PURE__ */ s(
|
|
321
|
-
f,
|
|
322
|
-
{
|
|
323
|
-
className: "grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-3 items-center border-b last:border-b-0 transition",
|
|
324
|
-
sx: {
|
|
325
|
-
"&:hover": {
|
|
326
|
-
bgcolor: (r) => I(r.palette.action.hover, 0.04)
|
|
327
|
-
}
|
|
328
|
-
},
|
|
329
|
-
children: [
|
|
330
|
-
/* @__PURE__ */ t("div", { className: "flex flex-col", children: /* @__PURE__ */ t(c, { sx: { fontSize: "13px", fontWeight: 600 }, children: e.featureName }) }),
|
|
331
|
-
/* @__PURE__ */ t("div", { className: "flex justify-center", children: /* @__PURE__ */ t(
|
|
332
|
-
ce,
|
|
333
|
-
{
|
|
334
|
-
icon: de,
|
|
335
|
-
onClick: () => {
|
|
336
|
-
re(e);
|
|
337
|
-
},
|
|
338
|
-
color: "error",
|
|
339
|
-
className: "text-red-400 cursor-pointer",
|
|
340
|
-
"data-testid": `assignedfeatures-delete-icon-${a}`
|
|
341
|
-
}
|
|
342
|
-
) })
|
|
343
|
-
]
|
|
344
|
-
},
|
|
345
|
-
e.id
|
|
346
|
-
)) }),
|
|
347
|
-
N.length === 0 && /* @__PURE__ */ t(E, { children: /* @__PURE__ */ t(
|
|
348
|
-
c,
|
|
349
|
-
{
|
|
350
|
-
className: "p-4",
|
|
351
|
-
sx: { fontSize: "13px", fontStyle: "italic" },
|
|
352
|
-
children: "No Features assigned yet!"
|
|
353
|
-
}
|
|
354
|
-
) })
|
|
355
|
-
]
|
|
356
|
-
}
|
|
357
|
-
)
|
|
358
|
-
] })
|
|
359
|
-
] }),
|
|
360
|
-
/* @__PURE__ */ t(
|
|
361
|
-
f,
|
|
362
|
-
{
|
|
363
|
-
className: "border-t p-4",
|
|
364
|
-
sx: {
|
|
365
|
-
bgcolor: (e) => I(e.palette.primary.main, 0.06)
|
|
366
|
-
},
|
|
367
|
-
children: /* @__PURE__ */ t(w, { variant: "outlined", size: "small", onClick: le, children: "+ Add More Features" })
|
|
368
|
-
}
|
|
369
|
-
)
|
|
370
|
-
]
|
|
371
|
-
}
|
|
372
|
-
),
|
|
373
|
-
/* @__PURE__ */ t(q, { children: /* @__PURE__ */ t(
|
|
374
|
-
xe,
|
|
375
|
-
{
|
|
376
|
-
isUpdate: S !== 1,
|
|
377
|
-
selectedId: S === 2 ? l.id : null,
|
|
378
|
-
"data-testid": "roles-managerole-add-button",
|
|
379
|
-
open: S,
|
|
380
|
-
setOpen: V,
|
|
381
|
-
isRoleListModified: se
|
|
382
|
-
}
|
|
383
|
-
) }),
|
|
384
|
-
/* @__PURE__ */ t(q, { fallback: /* @__PURE__ */ t("div", { className: "animate-pulse w-80 h-20 " }), children: $ === !0 && /* @__PURE__ */ t(
|
|
385
|
-
ge,
|
|
386
|
-
{
|
|
387
|
-
open: $,
|
|
388
|
-
setOpenModal: j,
|
|
389
|
-
selectedId: l.id,
|
|
390
|
-
setData: () => y(!0),
|
|
391
|
-
assignedFeatureList: n ? (() => {
|
|
392
|
-
var e, a, r;
|
|
393
|
-
return (e = n == null ? void 0 : n.find((o) => (o == null ? void 0 : o.id) === l.id)) != null && e.assignedFeatureList ? (a = n == null ? void 0 : n.find((o) => (o == null ? void 0 : o.id) === l.id)) == null ? void 0 : a.assignedFeatureList : (r = n[0]) == null ? void 0 : r.assignedFeatureList;
|
|
394
|
-
})() : [],
|
|
395
|
-
"data-testid": "roles-addfeatures-component"
|
|
396
|
-
}
|
|
397
|
-
) })
|
|
398
|
-
] }) });
|
|
399
|
-
}
|
|
400
|
-
const ze = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
401
|
-
__proto__: null,
|
|
402
|
-
default: ve
|
|
403
|
-
}, Symbol.toStringTag, { value: "Module" }));
|
|
404
|
-
export {
|
|
405
|
-
ze as R,
|
|
406
|
-
Re as a,
|
|
407
|
-
he as g,
|
|
408
|
-
_e as p
|
|
409
|
-
};
|
|
410
|
-
//# sourceMappingURL=RoleManagement-C0feJCuq.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RoleManagement-C0feJCuq.js","sources":["../src/services/Roles.js","../src/views/Roles/Skeletons/RoleManagementSkeleton.jsx","../src/views/Roles/RoleManagement.jsx"],"sourcesContent":["import { api } from \"@/common/interceptors/AxiosInterceptor\";\n\nexport const getAllRoleList = () => api.get(\"/role\");\n\nexport const deleteRoleFeature = (id) =>\n api.delete(`/menuconfig/usermenuitem/${id}`);\n\nexport const getRoleById = (id) => api.get(`/role/${id}`);\n\nexport const postRole = (params) => api.post(\"/role\", { ...params });\n\nexport const ToggleState = (params) =>\n api.put(`role/?is_active=${params.state === \"INACTIVE\" ? \"true\" : \"false\"}`, {\n ...params,\n });\nexport const postNewFeature = (params, id) =>\n api.post(`/menuconfig/assignnewfeature?roleId=${id}`, { ...params });\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nconst RoleManagementSkeleton = ({ children, isLoading = true }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!isLoading) {\n return children;\n }\n\n return (\n <div className=\"pt-6 relative h-[90vh]\">\n {/* skleton for roles and add button */}\n\n <div className=\"flex flex-row h-[80vh] \">\n <div className=\"flex flex-col border border-gray-300 w-[20%] p-2 mr-3 rounded-md\">\n {\" \"}\n <div className=\"flex justify-between\">\n {/* skleton for list of roles and toogle roles */}\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-23 h-[40px] mr-3\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-40 h-[40px]\"></div>\n </div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-[50px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-full\"></div>\n </div>\n <div className=\"flex flex-col border border-gray-300 w-[80%] p-2 rounded-md\">\n <div className=\"flex justify-between\">\n {/* skleton for role name and options */}\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-24 h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-21 h-[40px]\"></div>\n </div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-[50px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-full\"></div>\n </div>\n </div>\n\n <div className=\"absolute bottom-20 right-[10px] \">\n <div className=\"bg-gray-300 animate-pulse rounded-full w-[40px] h-[40px]\"></div>\n </div>\n </div>\n );\n};\n\nRoleManagementSkeleton.propTypes = {\n children: PropTypes.any,\n loading: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\nexport default RoleManagementSkeleton;\n","import { Suspense, useEffect, useState, lazy } from \"react\";\nimport {\n Box,\n Card,\n Switch,\n TextField,\n Button,\n Chip,\n Typography,\n} from \"@mui/material\";\nimport { alpha } from \"@mui/material/styles\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport {\n getAllRoleList,\n ToggleState,\n deleteRoleFeature,\n getRoleById,\n} from \"../../services/Roles.js\";\nimport { getRoleList } from \"@/common/services/GlobalApis.js\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport RoleManagementSkeleton from \"./Skeletons/RoleManagementSkeleton.jsx\";\nimport { useSelector } from \"react-redux\";\nconst AddFeatures = lazy(() => import(\"./AddFeatures.jsx\"));\nconst ManageRole = lazy(() => import(\"./ManageRole.jsx\"));\n\nexport default function RoleManagement() {\n const { translate } = useTranslateProvider();\n const [Data, setData] = useState(\"\");\n const [selectedRole, setSelectedRole] = useState(Data[0]);\n const [includeInActive, setincludeInActive] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [openModal, setOpenModal] = useState(false);\n const [openManageRole, setOpenManageRole] = useState(0);\n const [searchText, setSearchText] = useState(\"\");\n const [searchQuery, setSearchQuery] = useState(\"\");\n const trackEvent = useTrackEvent();\n const currentLoogedInUserRoleId = useSelector((state) => state.Authenticate.user.roleId);\n const [allowedRoleIds, setallowedRoleIds] = useState([]);\n\n const getAllData = async (isPreserveRole = false) => {\n try {\n setIsLoading(true);\n const roleListPromise = includeInActive ? getAllRoleList() : getRoleList();\n let data, userRoleIds = [];\n if (currentLoogedInUserRoleId) {\n // Run both APIs in parallel\n const [{ data: roleData }, currRoleData] = await Promise.all([\n roleListPromise,\n getRoleById(currentLoogedInUserRoleId),\n ]);\n data = roleData;\n userRoleIds = currRoleData?.data?.roleIds || [];\n } else {\n // Only fetch role list\n const { data: roleData } = await roleListPromise;\n data = roleData;\n }\n setallowedRoleIds(userRoleIds);\n // ✅ Filter logic (keep only allowed roles)\n const filteredData =\n userRoleIds.length > 0\n ? data.filter((role) => userRoleIds.includes(role.id))\n : data; // fallback: show all if no roleIds\n setData(filteredData);\n if (!isPreserveRole && filteredData.length > 0) {\n setSelectedRole(filteredData[0]);\n }\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in getting role data\", type: \"error\" });\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(function () {\n getAllData();\n }, []);\n\n const handleCheckboxChange = async (event) => {\n let isChecked = event.target.checked;\n setincludeInActive(event.target.checked);\n try {\n setIsLoading((cur) => !cur);\n let data;\n if (isChecked) {\n ({ data } = await getAllRoleList());\n } else {\n ({ data } = await getRoleList());\n }\n if (allowedRoleIds && allowedRoleIds.length > 0) {\n data = data.filter(\n (role) => allowedRoleIds.includes(role.id)\n );\n }\n setData(data);\n setSelectedRole(data[0]);\n setIsLoading((cur) => !cur);\n setSearchText(\"\");\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in getting role data\", type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n const filterData = Data\n ? Data?.filter((feature) =>\n feature.name.toLowerCase().includes(searchText.toLowerCase())\n )\n : [];\n\n const formatDateDDMMYYYY = (timestamp) => {\n if (!timestamp) return \"\";\n const date = new Date(Number(timestamp));\n const day = String(date.getDate()).padStart(2, \"0\");\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const year = date.getFullYear();\n return `${day}/${month}/${year}`;\n };\n\n const handleToggleState = async () => {\n try {\n const payload = Data?.find((data) => data.id === selectedRole.id);\n await ToggleState(payload);\n showToast({\n message: `State succesfully changed from ${payload?.state === \"INACTIVE\" ? \"inactive\" : \"active\"} to ${payload?.state === \"INACTIVE\" ? \"active\" : \"inactive\"}`,\n type: \"success\",\n });\n let res;\n setIsLoading((cur) => !cur);\n if (includeInActive) {\n res = await getAllRoleList();\n } else {\n res = await getRoleList();\n }\n\n setData(res.data);\n setSelectedRole(res.data[0]);\n setIsLoading((cur) => !cur);\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in handle active\", type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n const sortedFilteredFeatures = Data\n ? Data.find((obj) => obj.id === selectedRole.id)\n ?.assignedFeatureList.filter((feature) =>\n feature.featureName\n ?.toLowerCase()\n .includes(searchQuery?.toLowerCase())\n )\n .sort((a, b) => a.featureName?.localeCompare(b.featureName))\n : [];\n\n const handleDeleteRoleFeature = async (feature) => {\n try {\n await deleteRoleFeature(feature.userMenuItemId);\n await getAllData(true);\n setSearchQuery(\"\");\n showToast({ message: \"Feature deleted successfully!\", type: \"success\" });\n } catch (error) {\n showToast({ message: error, type: \"error\" });\n }\n };\n\n const handleManageRoleModel = (index) => {\n setOpenManageRole(index);\n trackEvent(\"button_click\", {\n button_name: `${index === 1 ? \"add\" : \"edit\"} role modal button`,\n button_type: \"navigate\",\n button_id: `roles-${index === 1 ? \"add\" : \"edit\"}-button`,\n });\n };\n\n const isRoleListModified = () => {\n getAllData();\n setSearchText(\"\");\n };\n\n const handleOpen = async () => {\n try {\n setOpenModal(true);\n await trackEvent(\"button_click\", {\n button_name: \"add feature button\",\n button_type: \"navigate\",\n button_id: \"roles-addfeatures-button-add\",\n });\n } catch (error) {\n console.error(error);\n }\n };\n\n return (\n <RoleManagementSkeleton isLoading={isLoading}>\n <Box className=\"flex flex-col gap-4 p-4 min-[900px]:flex-row min-[900px]:h-[calc(100vh-80px)]\">\n <Card\n variant=\"outlined\"\n className=\"w-full min-[900px]:w-[300px] flex flex-col p-4\"\n >\n <div className=\"flex justify-between items-center mb-3\">\n <Typography\n variant=\"h6\"\n fontWeight={600}\n className=\"text-customBlue\"\n >\n User Roles\n </Typography>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => handleManageRoleModel(1)}\n data-testid=\"managerole-add-button\"\n >\n {translate(\"+ Add Role\")}\n </Button>\n </div>\n <TextField\n size=\"small\"\n variant=\"outlined\"\n placeholder=\"Search roles...\"\n fullWidth\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n data-testid=\"listofroles-search-input\"\n />\n <div className=\"flex items-center gap-2 mt-3\">\n <Switch\n size=\"small\"\n checked={includeInActive}\n onChange={handleCheckboxChange}\n />\n <Typography variant=\"body2\">Include Inactive</Typography>\n </div>\n <div className=\"flex-1 overflow-y-auto mt-4\">\n {filterData.length > 0 && (\n <>\n {filterData.map((role) => (\n <Card\n key={role.id}\n variant=\"outlined\"\n onClick={() => setSelectedRole(role)}\n className={`p-3 cursor-pointer transition\n ${selectedRole.id === role.id\n ? \"border-b-2\"\n : \"border-b-2 border-0\"\n }`}\n sx={\n selectedRole.id === role.id\n ? {\n bgcolor: (t) => alpha(t.palette.primary.main, 0.08),\n }\n : {}\n }\n >\n <Typography fontWeight={600}>\n {role.name}\n \n {role?.state === \"INACTIVE\" && (\n <Chip label=\"INACTIVE\" color=\"disabled\" size=\"small\" />\n )}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {role.assignedFeatureList.length} Features\n </Typography>\n </Card>\n ))}\n </>\n )}\n </div>\n </Card>\n <Card\n variant=\"outlined\"\n className=\"w-full min-[900px]:flex-1 flex flex-col p-5\"\n >\n <div className=\"flex flex-col sm:flex-row justify-between items-start border-b pb-4 gap-4\">\n <div className=\"flex flex-col gap-1 w-full sm:w-auto\">\n <div className=\"flex items-center gap-2\">\n <Typography\n variant=\"h5\"\n fontWeight={600}\n className=\"text-customBlue\"\n >\n {selectedRole?.name || \"Select Role\"}\n </Typography>\n {selectedRole?.state === \"ACTIVE\" && (\n <Chip label=\"ACTIVE\" color=\"success\" size=\"small\" />\n )}\n {selectedRole?.state === \"INACTIVE\" && (\n <Chip label=\"INACTIVE\" color=\"disabled\" size=\"small\" />\n )}\n </div>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n className=\"mt-1\"\n >\n Created on {formatDateDDMMYYYY(selectedRole?.createdOn)}\n </Typography>\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => handleToggleState(1)}\n >\n {selectedRole?.state === \"ACTIVE\" ? \"Deactivate\" : \"Activate\"}\n </Button>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={() => handleManageRoleModel(2)}\n >\n ✏️ Edit Role\n </Button>\n </div>\n </div>\n {/* ASSIGNED FEATURES */}\n <div className=\"mt-5 flex flex-col flex-1 overflow-hidden\">\n <div className=\"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-4 gap-4\">\n <div className=\"flex flex-row items-center gap-2 w-full sm:w-auto\">\n <Typography fontWeight={600}>{translate(\"Assigned Features\")}</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n ({sortedFilteredFeatures.length} {translate(\"features active for this role\")})\n </Typography>\n </div>\n <TextField\n size=\"small\"\n sx={{ width: { xs: \"100%\", sm: \"60%\" } }}\n placeholder=\"Search Feature Name\"\n variant=\"outlined\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n data-testid=\"assignedfeatures-search-input\"\n />\n </div>\n <Box className=\"overflow-x-auto w-full\">\n <Box\n className=\"grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-2 text-[15px] font-semibold border-b min-w-[500px]\"\n sx={{\n color: \"text.secondary\",\n bgcolor: (t) => alpha(t.palette.action.hover, 0.04),\n }}\n >\n <div>{translate(\"FEATURE NAME\")}</div>\n <div className=\"text-center\">{translate(\"ACTIONS\")}</div>\n </Box>\n <Box\n className=\"h-[calc(100vh-440px)] overflow-y-auto min-w-[500px]\"\n sx={{\n bgcolor: \"background.paper\",\n }}\n >\n {sortedFilteredFeatures.length > 0 && (\n <>\n {sortedFilteredFeatures.map((feature, index) => (\n <Box\n key={feature.id}\n className=\"grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-3 items-center border-b last:border-b-0 transition\"\n sx={{\n \"&:hover\": {\n bgcolor: (t) => alpha(t.palette.action.hover, 0.04),\n },\n }}\n >\n <div className=\"flex flex-col\">\n <Typography sx={{ fontSize: \"13px\", fontWeight: 600 }}>\n {feature.featureName}\n </Typography>\n </div>\n <div className=\"flex justify-center\">\n <FontAwesomeIcon\n icon={faTrash}\n onClick={() => {\n handleDeleteRoleFeature(feature);\n }}\n color=\"error\"\n className=\"text-red-400 cursor-pointer\"\n data-testid={`assignedfeatures-delete-icon-${index}`}\n />\n </div>\n </Box>\n ))}\n </>\n )}\n {sortedFilteredFeatures.length === 0 && (\n <>\n <Typography\n className=\"p-4\"\n sx={{ fontSize: \"13px\", fontStyle: \"italic\" }}\n >\n No Features assigned yet!\n </Typography>\n </>\n )}\n </Box>\n </Box>\n </div>\n <Box\n className=\"border-t p-4\"\n sx={{\n bgcolor: (t) => alpha(t.palette.primary.main, 0.06),\n }}\n >\n <Button variant=\"outlined\" size=\"small\" onClick={handleOpen}>\n + Add More Features\n </Button>\n </Box>\n </Card>\n <Suspense>\n <ManageRole\n isUpdate={openManageRole !== 1}\n selectedId={openManageRole === 2 ? selectedRole.id : null}\n data-testid=\"roles-managerole-add-button\"\n open={openManageRole}\n setOpen={setOpenManageRole}\n isRoleListModified={isRoleListModified}\n />\n </Suspense>\n <Suspense fallback={<div className=\"animate-pulse w-80 h-20 \"></div>}>\n {openModal === true && (\n <AddFeatures\n open={openModal}\n setOpenModal={setOpenModal}\n selectedId={selectedRole.id}\n setData={() => getAllData(true)}\n assignedFeatureList={\n Data\n ? (() =>\n Data?.find((data) => data?.id === selectedRole.id)\n ?.assignedFeatureList\n ? Data?.find((data) => data?.id === selectedRole.id)\n ?.assignedFeatureList\n : Data[0]?.assignedFeatureList)()\n : []\n }\n data-testid=\"roles-addfeatures-component\"\n />\n )}\n </Suspense>\n </Box>\n </RoleManagementSkeleton>\n );\n}\n"],"names":["getAllRoleList","api","deleteRoleFeature","id","getRoleById","postRole","params","ToggleState","postNewFeature","RoleManagementSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","AddFeatures","lazy","ManageRole","RoleManagement","translate","useTranslateProvider","Data","setData","useState","selectedRole","setSelectedRole","includeInActive","setincludeInActive","setIsLoading","openModal","setOpenModal","openManageRole","setOpenManageRole","searchText","setSearchText","searchQuery","setSearchQuery","trackEvent","useTrackEvent","currentLoogedInUserRoleId","state","allowedRoleIds","setallowedRoleIds","getAllData","isPreserveRole","roleListPromise","getRoleList","data","userRoleIds","roleData","currRoleData","_a","filteredData","role","error","showToast","useEffect","handleCheckboxChange","event","isChecked","cur","filterData","feature","formatDateDDMMYYYY","timestamp","date","day","month","year","handleToggleState","payload","res","sortedFilteredFeatures","obj","a","b","handleDeleteRoleFeature","handleManageRoleModel","index","isRoleListModified","handleOpen","Box","Card","Typography","Button","TextField","Switch","Fragment","t","alpha","Chip","FontAwesomeIcon","faTrash","Suspense","_b","_c"],"mappings":"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"}
|