@argusoft/medplat-core 1.0.31 → 1.0.32
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-DUgY6ewy.js → AccessRights-DBjTQA1-.js} +421 -424
- package/dist/AccessRights-DBjTQA1-.js.map +1 -0
- package/dist/{AddFeatures-D1sU8RjY.js → AddFeatures-COj4ZTIM.js} +2 -2
- package/dist/{AddFeatures-D1sU8RjY.js.map → AddFeatures-COj4ZTIM.js.map} +1 -1
- package/dist/AddMenuConfiguration-Creeib5X.js +11223 -0
- package/dist/AddMenuConfiguration-Creeib5X.js.map +1 -0
- package/dist/AddMenuConfiguration.css +1 -1
- package/dist/{BrandsPage-DMw2vT0u-BVhvhc6J.js → BrandsPage-CdcAvaml-ZtVTX6vX.js} +45 -45
- package/dist/{BrandsPage-DMw2vT0u-BVhvhc6J.js.map → BrandsPage-CdcAvaml-ZtVTX6vX.js.map} +1 -1
- package/dist/{CategoriesPage-D3ihx9Gi-CT58g0ry.js → CategoriesPage-BprQEYJw-CclreTv1.js} +43 -43
- package/dist/{CategoriesPage-D3ihx9Gi-CT58g0ry.js.map → CategoriesPage-BprQEYJw-CclreTv1.js.map} +1 -1
- package/dist/{ChangePasswordModalCore-lQ9GamH1.js → ChangePasswordModalCore-DZGOkbRY.js} +3 -3
- package/dist/{ChangePasswordModalCore-lQ9GamH1.js.map → ChangePasswordModalCore-DZGOkbRY.js.map} +1 -1
- package/dist/{ConditionConfig-BQBmBHaM.js → ConditionConfig-Bpm6OoV5.js} +3 -3
- package/dist/{ConditionConfig-BQBmBHaM.js.map → ConditionConfig-Bpm6OoV5.js.map} +1 -1
- package/dist/{DashboardPage-asr2XDRu-uOOlX9Vq.js → DashboardPage-CTiGSx71-CsYohJ5e.js} +29 -29
- package/dist/{DashboardPage-asr2XDRu-uOOlX9Vq.js.map → DashboardPage-CTiGSx71-CsYohJ5e.js.map} +1 -1
- package/dist/EntityManagement-BGwJGl9k.js +62 -0
- package/dist/EntityManagement-BGwJGl9k.js.map +1 -0
- package/dist/{EventConfigurations-CUPEN5BV.js → EventConfigurations-B-z7xHh_.js} +3 -3
- package/dist/{EventConfigurations-CUPEN5BV.js.map → EventConfigurations-B-z7xHh_.js.map} +1 -1
- package/dist/{EventsExceptionModal-BX-ArkBE.js → EventsExceptionModal-DafomIv6.js} +2 -2
- package/dist/{EventsExceptionModal-BX-ArkBE.js.map → EventsExceptionModal-DafomIv6.js.map} +1 -1
- package/dist/{EventsUi-D6O9S7BK.js → EventsUi-Dl_yckSA.js} +37 -32
- package/dist/EventsUi-Dl_yckSA.js.map +1 -0
- package/dist/FacilityPicker-BXa2VF7i-Dab_Jwa5.js +112 -0
- package/dist/FacilityPicker-BXa2VF7i-Dab_Jwa5.js.map +1 -0
- package/dist/{FeatureMenu-CHsBbw3W.js → FeatureMenu-Kc73yPHH.js} +2 -2
- package/dist/{FeatureMenu-CHsBbw3W.js.map → FeatureMenu-Kc73yPHH.js.map} +1 -1
- package/dist/{FhirServerList-iXBPkRVF.js → FhirServerList-CrIHMAxz.js} +19 -19
- package/dist/{FhirServerList-iXBPkRVF.js.map → FhirServerList-CrIHMAxz.js.map} +1 -1
- package/dist/{FhirServerProfile-CUOwC6Wb.js → FhirServerProfile-D3aYcpwY.js} +8 -8
- package/dist/{FhirServerProfile-CUOwC6Wb.js.map → FhirServerProfile-D3aYcpwY.js.map} +1 -1
- package/dist/{FhirServerWizard-DZI8Olku.js → FhirServerWizard-Db6Hm4bQ.js} +15 -15
- package/dist/{FhirServerWizard-DZI8Olku.js.map → FhirServerWizard-Db6Hm4bQ.js.map} +1 -1
- package/dist/{ImmunizationConfigurationBase-aUtx0JEe.js → ImmunizationConfigurationBase-lKsJZMak.js} +1342 -1301
- package/dist/ImmunizationConfigurationBase-lKsJZMak.js.map +1 -0
- package/dist/InventoryPage-JadYMCzU-CzJQfQ2A.js +1017 -0
- package/dist/InventoryPage-JadYMCzU-CzJQfQ2A.js.map +1 -0
- package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js +1344 -0
- package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js.map +1 -0
- package/dist/{ManageDynamicFeature-BU0I45dd.js → ManageDynamicFeature-CuyYfx_P.js} +104 -97
- package/dist/ManageDynamicFeature-CuyYfx_P.js.map +1 -0
- package/dist/{ManageEventConfiguration-DqW3krT6.js → ManageEventConfiguration-DqPbn3Oi.js} +5 -5
- package/dist/{ManageEventConfiguration-DqW3krT6.js.map → ManageEventConfiguration-DqPbn3Oi.js.map} +1 -1
- package/dist/ManageRole-CyfpySt9.js +981 -0
- package/dist/ManageRole-CyfpySt9.js.map +1 -0
- package/dist/{ManageUser-DZltBina.js → ManageUser-Dm0l833u.js} +172 -172
- package/dist/{ManageUser-DZltBina.js.map → ManageUser-Dm0l833u.js.map} +1 -1
- package/dist/{MemberProfileCard-D5CgkTdJ-D2NgDJl3.js → MemberProfileCard-01d_jz3w-DYHtbgMX.js} +37 -37
- package/dist/{MemberProfileCard-D5CgkTdJ-D2NgDJl3.js.map → MemberProfileCard-01d_jz3w-DYHtbgMX.js.map} +1 -1
- package/dist/MobileAnalytics-C9oc2yAo.js +18399 -0
- package/dist/MobileAnalytics-C9oc2yAo.js.map +1 -0
- package/dist/MobileMenuManagement-BmzTPXy7.js +231 -0
- package/dist/MobileMenuManagement-BmzTPXy7.js.map +1 -0
- package/dist/{MobileTypeEventConfigModal-CMcj7Ozp.js → MobileTypeEventConfigModal-DodU3beR.js} +3 -3
- package/dist/{MobileTypeEventConfigModal-CMcj7Ozp.js.map → MobileTypeEventConfigModal-DodU3beR.js.map} +1 -1
- package/dist/{NewServerManagement-Cxe0dV0O.js → NewServerManagement-BdayO78D.js} +368 -352
- package/dist/NewServerManagement-BdayO78D.js.map +1 -0
- package/dist/OtherTypeEventConfigModal-D_9S50aI.js +1414 -0
- package/dist/OtherTypeEventConfigModal-D_9S50aI.js.map +1 -0
- package/dist/{PaymentCreatePage-DfvSZ-kB-CckogYoe.js → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js} +56 -56
- package/dist/{PaymentCreatePage-DfvSZ-kB-CckogYoe.js.map → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js.map} +1 -1
- package/dist/{PaymentsPage-DMNjYWAJ-ChO9IXmk.js → PaymentsPage-CHieGNrn-BnYCtqHd.js} +38 -38
- package/dist/{PaymentsPage-DMNjYWAJ-ChO9IXmk.js.map → PaymentsPage-CHieGNrn-BnYCtqHd.js.map} +1 -1
- package/dist/{PermissionsModal-CCYkcKlC.js → PermissionsModal-Dxbkkrqe.js} +18 -18
- package/dist/PermissionsModal-Dxbkkrqe.js.map +1 -0
- package/dist/{PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js} +2 -2
- package/dist/{PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js.map → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js.map} +1 -1
- package/dist/PickupCreatePage-C7_67u_u-OId8-e2a.js +801 -0
- package/dist/PickupCreatePage-C7_67u_u-OId8-e2a.js.map +1 -0
- package/dist/{PickupsPage-D7zyioJB-bHKnARYw.js → PickupsPage-BWblMlic-CWkgeBw0.js} +122 -122
- package/dist/PickupsPage-BWblMlic-CWkgeBw0.js.map +1 -0
- package/dist/PmGuard-BvUUbU80-BpYNaDzl.js +641 -0
- package/dist/PmGuard-BvUUbU80-BpYNaDzl.js.map +1 -0
- package/dist/ProductEditPage-Dbq4vUAA-BoBmTPPL.js +1523 -0
- package/dist/ProductEditPage-Dbq4vUAA-BoBmTPPL.js.map +1 -0
- package/dist/{ProductsPage-DvNHIeZt-BoOOJJtk.js → ProductsPage-BI22nPb4-CQBjnc-n.js} +29 -29
- package/dist/{ProductsPage-DvNHIeZt-BoOOJJtk.js.map → ProductsPage-BI22nPb4-CQBjnc-n.js.map} +1 -1
- package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js +724 -0
- package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js.map +1 -0
- package/dist/{PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js → PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js} +446 -436
- package/dist/PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js.map +1 -0
- package/dist/{PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js} +55 -55
- package/dist/{PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js.map → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js.map} +1 -1
- package/dist/{PurchasesPage-DgL5T6BY-DePUuE9l.js → PurchasesPage-Djl1AqD_-DXeYFMrX.js} +61 -61
- package/dist/{PurchasesPage-DgL5T6BY-DePUuE9l.js.map → PurchasesPage-Djl1AqD_-DXeYFMrX.js.map} +1 -1
- package/dist/{RoleManagement-s8iNx2Mu.js → RoleManagement-DVYufwy-.js} +3 -3
- package/dist/{RoleManagement-s8iNx2Mu.js.map → RoleManagement-DVYufwy-.js.map} +1 -1
- package/dist/Roles-BoNGJhtR.js +19 -0
- package/dist/Roles-BoNGJhtR.js.map +1 -0
- package/dist/{SaleCreatePage-CZnIOydv-DKBw-qp7.js → SaleCreatePage-DHBLmlBr-BlgjVsq6.js} +33 -33
- package/dist/{SaleCreatePage-CZnIOydv-DKBw-qp7.js.map → SaleCreatePage-DHBLmlBr-BlgjVsq6.js.map} +1 -1
- package/dist/{SalesPage-DPIRrC_O-M8rqnK7z.js → SalesPage-eF9Yr42z-BQ9FlXC3.js} +34 -34
- package/dist/SalesPage-eF9Yr42z-BQ9FlXC3.js.map +1 -0
- package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js +741 -0
- package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js.map +1 -0
- package/dist/{StorageUnitsPage-BDRkdCjW-UF64rf7q.js → StorageUnitsPage-CTEVuemZ-B4osG74N.js} +213 -190
- package/dist/StorageUnitsPage-CTEVuemZ-B4osG74N.js.map +1 -0
- package/dist/{SubMenu-BdMTYtC1.js → SubMenu-OO2zhKiu.js} +2 -2
- package/dist/{SubMenu-BdMTYtC1.js.map → SubMenu-OO2zhKiu.js.map} +1 -1
- package/dist/{TableDetails-BtafRxXb.js → TableDetails-Cc40dEUs.js} +272 -267
- package/dist/TableDetails-Cc40dEUs.js.map +1 -0
- package/dist/{TableList-Dpo6dO7S.js → TableList-B5tX4wII.js} +316 -312
- package/dist/TableList-B5tX4wII.js.map +1 -0
- package/dist/{TransactionsPage-CqWTMNU8-Df6eGFDW.js → TransactionsPage-Zuu7sjID-B-ACzvd1.js} +185 -170
- package/dist/TransactionsPage-Zuu7sjID-B-ACzvd1.js.map +1 -0
- package/dist/TransferCreatePage-DlT0nCDj-B2SdPgYB.js +635 -0
- package/dist/TransferCreatePage-DlT0nCDj-B2SdPgYB.js.map +1 -0
- package/dist/TransfersPage-DqaSvHda-G2tFa5Jq.js +600 -0
- package/dist/TransfersPage-DqaSvHda-G2tFa5Jq.js.map +1 -0
- package/dist/{TypeConfiguration-JbRCN6GR.js → TypeConfiguration-EaFiOzRE.js} +3 -3
- package/dist/{TypeConfiguration-JbRCN6GR.js.map → TypeConfiguration-EaFiOzRE.js.map} +1 -1
- package/dist/UserList-Cf5B-o_1.js +1904 -0
- package/dist/UserList-Cf5B-o_1.js.map +1 -0
- package/dist/Users-MC7txo1V.js +43 -0
- package/dist/{Users-CsJ08Kjm.js.map → Users-MC7txo1V.js.map} +1 -1
- package/dist/VaccineEducation-T_UE57Ef.js +231 -0
- package/dist/VaccineEducation-T_UE57Ef.js.map +1 -0
- package/dist/VaccineEducation.css +1 -0
- package/dist/VaccineEducationConfigurator-CWc20_rv.js +50948 -0
- package/dist/VaccineEducationConfigurator-CWc20_rv.js.map +1 -0
- package/dist/VaccineEducationConfigurator.css +4 -0
- package/dist/VaccineEducationList-Ok7_5EFb.js +334 -0
- package/dist/VaccineEducationList-Ok7_5EFb.js.map +1 -0
- package/dist/VialsPage-LoDaUqVv-DmMXbK8j.js +457 -0
- package/dist/VialsPage-LoDaUqVv-DmMXbK8j.js.map +1 -0
- package/dist/{constants-DpXnLsAB-D6lN5cjK.js → constants-BTpJFQe_-CYPZIqQF.js} +160 -61
- package/dist/constants-BTpJFQe_-CYPZIqQF.js.map +1 -0
- package/dist/dashboardLayoutUtils--xUnoKPa.js +615 -0
- package/dist/dashboardLayoutUtils--xUnoKPa.js.map +1 -0
- package/dist/index-mfoqII2U.js +524 -0
- package/dist/index-mfoqII2U.js.map +1 -0
- package/dist/{index-D9YNFPn9.js → index-o8Pyt1Bt.js} +445 -439
- package/dist/index-o8Pyt1Bt.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +1 -1
- package/dist/{index.lib-ETRQOzvE.js → index.lib-BySa9-Z-.js} +302 -260
- package/dist/index.lib-BySa9-Z-.js.map +1 -0
- package/dist/listValueStore-5d4vNGQM-WclZ5nBG.js +43 -0
- package/dist/listValueStore-5d4vNGQM-WclZ5nBG.js.map +1 -0
- package/package.json +5 -1
- package/dist/AccessRights-DUgY6ewy.js.map +0 -1
- package/dist/AddMenuConfiguration-c6ZKiN0i.js +0 -8898
- package/dist/AddMenuConfiguration-c6ZKiN0i.js.map +0 -1
- package/dist/EntityManagement-CPQL6qBj.js +0 -50
- package/dist/EntityManagement-CPQL6qBj.js.map +0 -1
- package/dist/EventsUi-D6O9S7BK.js.map +0 -1
- package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js +0 -79
- package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-aUtx0JEe.js.map +0 -1
- package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js +0 -665
- package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js.map +0 -1
- package/dist/ManageDynamicFeature-BU0I45dd.js.map +0 -1
- package/dist/ManageRole-CNZBRKGU.js +0 -776
- package/dist/ManageRole-CNZBRKGU.js.map +0 -1
- package/dist/MobileAnalytics-BLOionG_.js +0 -17301
- package/dist/MobileAnalytics-BLOionG_.js.map +0 -1
- package/dist/MobileMenuManagement-68Wijb0X.js +0 -220
- package/dist/MobileMenuManagement-68Wijb0X.js.map +0 -1
- package/dist/NewServerManagement-Cxe0dV0O.js.map +0 -1
- package/dist/OtherTypeEventConfigModal-stNmuSv_.js +0 -1812
- package/dist/OtherTypeEventConfigModal-stNmuSv_.js.map +0 -1
- package/dist/PermissionsModal-CCYkcKlC.js.map +0 -1
- package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js +0 -783
- package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js.map +0 -1
- package/dist/PickupsPage-D7zyioJB-bHKnARYw.js.map +0 -1
- package/dist/PmGuard-BZE-y4In-D_pUm5MP.js +0 -599
- package/dist/PmGuard-BZE-y4In-D_pUm5MP.js.map +0 -1
- package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js +0 -1305
- package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js.map +0 -1
- package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js +0 -675
- package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js.map +0 -1
- package/dist/PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js.map +0 -1
- package/dist/Roles-BIyiic67.js +0 -14
- package/dist/Roles-BIyiic67.js.map +0 -1
- package/dist/SalesPage-DPIRrC_O-M8rqnK7z.js.map +0 -1
- package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js +0 -676
- package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js.map +0 -1
- package/dist/StorageUnitsPage-BDRkdCjW-UF64rf7q.js.map +0 -1
- package/dist/TableDetails-BtafRxXb.js.map +0 -1
- package/dist/TableList-Dpo6dO7S.js.map +0 -1
- package/dist/TransactionsPage-CqWTMNU8-Df6eGFDW.js.map +0 -1
- package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js +0 -315
- package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js.map +0 -1
- package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js +0 -476
- package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js.map +0 -1
- package/dist/UserList-L41Xw0Q6.js +0 -1129
- package/dist/UserList-L41Xw0Q6.js.map +0 -1
- package/dist/Users-CsJ08Kjm.js +0 -40
- package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js +0 -321
- package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js.map +0 -1
- package/dist/constants-DpXnLsAB-D6lN5cjK.js.map +0 -1
- package/dist/dashboardLayoutUtils-CJivzaU1.js +0 -408
- package/dist/dashboardLayoutUtils-CJivzaU1.js.map +0 -1
- package/dist/index-D9YNFPn9.js.map +0 -1
- package/dist/index.lib-ETRQOzvE.js.map +0 -1
- package/dist/listValueStore-BFQtDYIR-Bj0yX145.js +0 -36
- package/dist/listValueStore-BFQtDYIR-Bj0yX145.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-D9YNFPn9.js","sources":["../src/views/ActivityAnalytics/utils.js","../src/views/ActivityAnalytics/ActiveUserList.jsx","../src/views/ActivityAnalytics/UserActivityFilterForm.jsx","../src/views/ActivityAnalytics/UserActivityDetail.jsx","../src/views/ActivityAnalytics/index.jsx"],"sourcesContent":["import moment from 'moment';\n\n/**\n * Returns a human-readable \"time ago\" string.\n * @param {number|string|Date} timestamp \n * @returns {string}\n */\nexport const getTimeAgo = (timestamp) => {\n if (!timestamp) return 'N/A';\n \n const now = moment();\n const past = moment(timestamp);\n const duration = moment.duration(now.diff(past));\n\n const years = duration.years();\n const months = duration.months();\n const days = duration.days();\n const hours = duration.hours();\n const minutes = duration.minutes();\n const seconds = duration.seconds();\n\n if (years > 0) return `${years} year${years > 1 ? 's' : ''} ago`;\n if (months > 0) return `${months} month${months > 1 ? 's' : ''} ago`;\n if (days > 0) return `${days} day${days > 1 ? 's' : ''} ago`;\n \n let result = [];\n if (hours > 0) result.push(`${hours} hour${hours > 1 ? 's' : ''}`);\n if (minutes > 0) result.push(`${minutes} minute${minutes > 1 ? 's' : ''}`);\n if (seconds > 0 && hours === 0) result.push(`${seconds} second${seconds > 1 ? 's' : ''}`);\n\n if (result.length === 0) return 'Just now';\n return result.join(' ') + ' ago';\n};\n\n/**\n * Formats a timestamp into a readable date-time string.\n * @param {number|string|Date} timestamp \n * @returns {string}\n */\nexport const formatTimestamp = (timestamp) => {\n if (!timestamp) return 'N/A';\n return moment(timestamp).format('DD/MM/YYYY hh:mm:ss A');\n};\n","import React, { useState, useEffect } from 'react';\nimport { execute } from \"@/common/services/GlobalApis\";\nimport CustomizedTable from '@/views/custom-components/CustomizedTable/CustomizedTableV2';\nimport { Box, Button, Typography, TextField, IconButton, Tooltip } from '@mui/material';\nimport { useTheme, alpha } from '@mui/material/styles';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSync, faUser, faEye } from '@fortawesome/free-solid-svg-icons';\nimport { showToast } from '@/common/toaster/toaster.jsx';\nimport usePagination from '@/hooks/usePagination.js';\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { getTimeAgo, formatTimestamp } from './utils';\n\nexport default function ActiveUserList({ onUserSelect }) {\n const theme = useTheme();\n const [usersData, setUsersData] = useState([]);\n const [hasMore, setHasMore] = useState(true);\n const [isLoading, setIsLoading] = useState(false);\n const pageSize = 50;\n const { translate } = useTranslateProvider();\n const [refreshToggle, setRefreshToggle] = useState(false);\n const [manualSearchId, setManualSearchId] = useState(\"\");\n\n const handleManualSearch = () => {\n if (!manualSearchId.trim()) return;\n const searchId = parseInt(manualSearchId, 10);\n const existingUser = usersData.find(u => u.userId === searchId);\n onUserSelect(searchId, existingUser?.parsedAttributes);\n };\n\n const columns = [\n { field: 'Sr. No.', label: '#', align: 'left', width: '60px' },\n {\n field: 'userId',\n label: 'User Identity'.toUpperCase(),\n align: 'left',\n render: (row) => (\n <div className=\"flex items-center gap-2\">\n <div className=\"w-6 h-6 rounded-full bg-slate-100 dark:bg-slate-800 flex items-center justify-center\">\n <FontAwesomeIcon icon={faUser} className=\"text-slate-400 text-[10px]\" />\n </div>\n <Tooltip \n title={\n <div className=\"flex flex-col gap-1 text-xs\">\n <div><b>Username:</b> {row.parsedAttributes?.user_name || 'N/A'}</div>\n <div><b>Name:</b> {row.parsedAttributes?.name || 'N/A'}</div>\n <div><b>Role ID:</b> {row.parsedAttributes?.role_id || 'N/A'}</div>\n <div><b>Role Name:</b> {row.parsedAttributes?.role_name || 'N/A'}</div>\n <div><b>Role Code:</b> {row.parsedAttributes?.role_code || 'N/A'}</div>\n </div>\n }\n arrow placement=\"top\"\n >\n <div className=\"flex flex-col cursor-pointer\">\n <Typography className=\"text-sm font-black tracking-tight\" sx={{ color: theme.palette.text.primary }}>\n User ID: {row.userId}\n </Typography>\n <Typography variant=\"caption\" className=\"font-bold opacity-60 uppercase tracking-tighter\">\n {row.parsedAttributes?.user_name || 'System User'} {row.parsedAttributes?.name ? `• ${row.parsedAttributes.name}` : ''} {row.parsedAttributes?.role_code ? `(${row.parsedAttributes.role_code})` : ''}\n </Typography>\n </div>\n </Tooltip>\n </div>\n )\n },\n {\n field: 'systemInfo',\n label: 'System Info'.toUpperCase(),\n align: 'left',\n render: (row) => (\n <div className=\"flex flex-col max-w-[200px]\">\n <Typography variant=\"caption\" className=\"font-bold opacity-80\" sx={{ color: theme.palette.text.primary }}>\n IP: {row.parsedAttributes?.ip || 'N/A'}\n </Typography>\n <Tooltip title={row.parsedAttributes?.user_agent || 'Unknown Device'} arrow placement=\"top\">\n <Typography variant=\"caption\" className=\"truncate font-mono opacity-60 text-[10px]\">\n {row.parsedAttributes?.user_agent || 'Unknown Device'}\n </Typography>\n </Tooltip>\n </div>\n )\n },\n {\n field: 'lastActivityTimestamp',\n label: 'Last Active'.toUpperCase(),\n align: 'left',\n render: (row) => (\n <Tooltip title={formatTimestamp(row.lastActivityTimestamp)} arrow placement=\"top\">\n <Typography className=\"text-sm font-bold text-primary-main cursor-pointer\">\n {getTimeAgo(row.lastActivityTimestamp)}\n </Typography>\n </Tooltip>\n )\n },\n {\n field: 'ActionButtons',\n label: 'Actions'.toUpperCase(),\n align: 'left',\n render: (row) => (\n <Tooltip title=\"View Detailed Activity History\" arrow placement=\"top\">\n <IconButton\n onClick={() => onUserSelect(row.userId, row.parsedAttributes)}\n ref={(el) => {\n if (el) {\n el.style.setProperty('border-radius', '50%', 'important');\n }\n }}\n sx={{\n color: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n border: `1px solid ${theme.palette.primary.main}`,\n borderRadius: '50% !important',\n width: 36,\n height: 36,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginTop: '-4px', // Slightly raise to match symmetry with last active text\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n color: 'white',\n transform: 'scale(1.1)',\n },\n }}\n >\n <FontAwesomeIcon icon={faEye} className=\"text-base\" />\n </IconButton>\n </Tooltip>\n )\n }\n ];\n\n async function loadMoreData(pageParam, initialLoad) {\n try {\n if (initialLoad) setIsLoading(true);\n \n const params = {\n limit: pageParam.limit,\n offset: pageParam.offset || 0,\n // userId: manualSearchId || null\n };\n\n const response = await execute(\n {\n code: \"LIVE_USER_ACTIVITY\",\n parameters: params,\n },\n { showLoader: false }\n );\n \n const results = response?.data?.result || [];\n \n const data = results.map((item, index) => {\n let parsedAttrs = null;\n if (item.attributes) {\n try { parsedAttrs = JSON.parse(item.attributes); } catch(e) {}\n }\n return {\n ...item,\n parsedAttributes: parsedAttrs,\n index: (pageParam.offset || 0) + index + 1\n };\n });\n\n if (initialLoad) setIsLoading(false);\n return data;\n } catch (error) {\n showToast({ message: \"Failed to fetch active users\", type: \"error\" });\n setIsLoading(false);\n return [];\n }\n }\n\n const { data: pageData, fetchNextPage, hasNextPage } = usePagination({\n key: ['activeUsers', refreshToggle],\n queryFn: ({ pageParam }) => {\n const isInitial = !pageParam?.offset || pageParam?.offset === 0;\n return loadMoreData(pageParam, isInitial);\n },\n limit: pageSize,\n });\n\n useEffect(() => {\n const allUsers = pageData?.pages?.flat() || [];\n setHasMore(hasNextPage);\n setUsersData(allUsers);\n }, [pageData, hasNextPage]);\n\n const handleRefresh = () => {\n setRefreshToggle(prev => !prev);\n }\n\n return (\n <Box className=\"flex flex-col h-full w-full\">\n <Box className=\"flex flex-col md:flex-row justify-between items-start md:items-center p-5 border-b border-slate-200/60 dark:border-slate-800/60 gap-4\">\n <div className=\"flex flex-col\">\n <Typography variant=\"body2\" className=\"font-bold font-sans text-lg text-customBlue uppercase\">\n {translate ? translate(\"Live Activity\") : \"Live Activity\"}\n </Typography>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-widest\" sx={{ color: theme.palette.text.primary, opacity: 0.9 }}>\n Currently Active System Users\n </Typography>\n </div>\n \n <Box className=\"flex flex-wrap items-center gap-3 w-full md:w-auto ml-auto\">\n <TextField\n size=\"small\"\n placeholder=\"User ID lookup...\"\n value={manualSearchId}\n onChange={(e) => setManualSearchId(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleManualSearch()}\n sx={{\n width: { xs: '100%', md: '200px' },\n \"& .MuiInputBase-root\": {\n backgroundColor: theme.palette.background.paper,\n borderRadius: '12px',\n },\n }}\n />\n <Button \n variant=\"contained\" \n color=\"primary\" \n disableElevation \n onClick={handleManualSearch}\n className=\"rounded-xl font-black h-10 px-4 whitespace-nowrap\"\n size=\"small\"\n >\n Show Activity\n </Button>\n\n <div className=\"h-8 w-[1px] bg-slate-300 dark:bg-slate-700 mx-1 hidden md:block\"></div>\n\n <IconButton\n color=\"primary\"\n onClick={() => handleRefresh()}\n className=\"rounded-none border border-slate-200 dark:border-slate-800 shadow-sm\"\n sx={{\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n width: 40,\n height: 40,\n '&:hover': { backgroundColor: theme.palette.primary.main, color: 'white' }\n }}\n >\n <FontAwesomeIcon icon={faSync} className=\"text-sm\" />\n </IconButton>\n </Box>\n </Box>\n\n <Box \n className=\"flex-1 overflow-hidden\" \n sx={{ \n height: '100%',\n '& *:not(.MuiIconButton-root):not(.MuiIconButton-root *)': { borderRadius: '0px !important' }, // Kill every single curve locally except action buttons\n '& .MuiTableContainer-root': { height: '100% !important', maxHeight: '100% !important' }\n }}\n >\n <CustomizedTable\n id=\"active-user-list\"\n columns={columns}\n tableData={usersData}\n actions={null}\n styleConfig={{\n cellStyle: { padding: '8px 16px', height: 40, maxLines: 1 }\n }}\n paginationConfig={{\n pagination: true,\n paginationType: \"infinite-scroll\",\n rowsPerPageInTable: pageSize,\n hasMore: hasMore,\n loadMore: () => hasMore && fetchNextPage({ cancelRefetch: false }),\n }}\n isLoading={isLoading}\n emptyBoxText=\"Silence... No active users found at the moment.\"\n />\n </Box>\n </Box>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport {\n Box,\n Button,\n TextField,\n InputLabel,\n alpha,\n Tooltip,\n useTheme,\n MenuItem,\n Select,\n FormControl,\n Typography,\n} from \"@mui/material\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faSearch, faInfoCircle, faCalendar } from \"@fortawesome/free-solid-svg-icons\";\nimport { DateRange } from \"react-date-range\";\nimport \"react-date-range/dist/styles.css\";\nimport \"react-date-range/dist/theme/default.css\";\n\nexport default function UserActivityFilterForm({\n filter,\n onApply,\n handleOverlayState,\n}) {\n const { translate } = useTranslateProvider();\n const theme = useTheme();\n const isDark = theme.palette.mode === \"dark\";\n const [localFilter, setLocalFilter] = useState(filter);\n const [showCalendar, setShowCalendar] = useState(false);\n\n const [dateRange, setDateRange] = useState([\n {\n startDate: filter.startTime ? new Date(filter.startTime) : new Date(),\n endDate: filter.endTime ? new Date(filter.endTime) : new Date(),\n key: 'selection'\n }\n ]);\n\n useEffect(() => {\n setLocalFilter(filter);\n setDateRange([\n {\n startDate: filter.startTime ? new Date(filter.startTime) : new Date(),\n endDate: filter.endTime ? new Date(filter.endTime) : new Date(),\n key: 'selection'\n }\n ]);\n }, [filter]);\n\n const handleDateChange = (ranges) => {\n const { selection } = ranges;\n setDateRange([selection]);\n \n const startStr = selection.startDate ? formatDate(selection.startDate) : null;\n const endStr = selection.endDate ? formatDate(selection.endDate) : null;\n \n setLocalFilter(prev => ({\n ...prev,\n startTime: startStr,\n endTime: endStr\n }));\n };\n\n const formatDate = (date) => {\n if (!date) return null;\n const d = new Date(date);\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n };\n\n const getDisplayRange = () => {\n if (!localFilter.startTime && !localFilter.endTime) return \"Select date range\";\n const start = localFilter.startTime ? new Date(localFilter.startTime).toLocaleDateString() : \"\";\n const end = localFilter.endTime ? new Date(localFilter.endTime).toLocaleDateString() : \"\";\n return `${start} - ${end}`;\n };\n\n const handleInputChange = (field, value) => {\n setLocalFilter((prev) => ({ ...prev, [field]: value }));\n };\n\n const applyFilters = () => {\n onApply(localFilter);\n };\n\n const textFieldStyles = {\n \"& .MuiInputLabel-root\": {\n color: theme.palette.text.secondary, \n fontSize: \"0.85rem\",\n fontWeight: 500,\n transform: \"translate(0, -1.5px) scale(1)\", \n \"&.Mui-focused\": { color: theme.palette.primary.main },\n },\n \"& .MuiInputBase-root\": {\n backgroundColor: alpha(theme.palette.text.primary, 0.05),\n borderRadius: \"12px\",\n color: theme.palette.text.primary,\n marginTop: \"20px\",\n \"& fieldset\": { \n borderColor: alpha(theme.palette.text.primary, 0.1),\n borderRadius: \"12px\",\n },\n \"&:hover fieldset\": { borderColor: alpha(theme.palette.text.primary, 0.3) },\n \"&.Mui-focused fieldset\": { borderColor: theme.palette.primary.main, borderWidth: \"2px\" },\n },\n \"& .MuiInputBase-input\": {\n padding: \"10px 14px\",\n colorScheme: isDark ? \"dark\" : \"light\",\n }\n };\n\n return (\n <Box className=\"flex flex-col gap-6 p-6\">\n <Box className=\"flex flex-col gap-1.5 pt-1\">\n <Typography variant=\"caption\" sx={{ color: theme.palette.text.secondary, fontWeight: 500, fontSize: \"0.85rem\", transform: \"translate(0, -1.5px)\" }}>\n {translate(\"Date Range\")}\n </Typography>\n <Box \n onClick={() => setShowCalendar(!showCalendar)}\n className=\"flex items-center justify-between gap-2 px-3 py-2.5 rounded-xl cursor-pointer transition-all\" \n sx={{ \n backgroundColor: alpha(theme.palette.text.primary, 0.05), \n border: `1px solid ${alpha(theme.palette.text.primary, 0.1)}`,\n \"&:hover\": { borderColor: alpha(theme.palette.text.primary, 0.3) }\n }}\n >\n <Typography variant=\"body2\" sx={{ color: theme.palette.text.primary, fontSize: '0.875rem' }}>\n {getDisplayRange()}\n </Typography>\n <FontAwesomeIcon icon={faCalendar} className=\"opacity-50 text-sm\" />\n </Box>\n {showCalendar && (\n <Box \n className=\"mt-2 p-2 rounded-xl flex justify-center overflow-hidden border\"\n sx={{ \n backgroundColor: theme.palette.background.paper,\n borderColor: alpha(theme.palette.text.primary, 0.1),\n \"& .rdrCalendarWrapper\": {\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.text.primary,\n },\n \"& .rdrDateDisplayWrapper\": {\n backgroundColor: alpha(theme.palette.text.primary, 0.05),\n },\n \"& .rdrMonthAndYearWrapper\": {\n color: theme.palette.text.primary,\n },\n \"& .rdrMonthName\": {\n color: theme.palette.text.primary,\n },\n \"& .rdrDayNumber span\": {\n color: theme.palette.text.primary,\n },\n \"& .rdrDayDisabled\": {\n backgroundColor: 'transparent',\n \"& .rdrDayNumber span\": {\n color: alpha(theme.palette.text.primary, 0.25),\n }\n },\n \"& .rdrDayPassive\": {\n \"& .rdrDayNumber span\": {\n color: alpha(theme.palette.text.primary, 0.3),\n }\n }\n }}\n >\n <DateRange\n editableDateInputs={false}\n onChange={handleDateChange}\n moveRangeOnFirstSelection={false}\n ranges={dateRange}\n rangeColors={[theme.palette.primary.main]}\n />\n </Box>\n )}\n </Box>\n\n <Box className=\"flex flex-col gap-4 pt-2\">\n <TextField\n label={translate(\"Session ID\")}\n placeholder={translate(\"e.g. E561890...\")}\n value={localFilter.sessionId || \"\"}\n onChange={(e) => handleInputChange(\"sessionId\", e.target.value)}\n fullWidth\n size=\"small\"\n slotProps={{ inputLabel: { shrink: true } }}\n sx={textFieldStyles}\n />\n\n <FormControl fullWidth size=\"small\" sx={textFieldStyles}>\n <InputLabel shrink>{translate(\"HTTP Method\")}</InputLabel>\n <Select\n value={localFilter.httpMethod || \"\"}\n onChange={(e) => handleInputChange(\"httpMethod\", e.target.value)}\n label={translate(\"HTTP Method\")}\n displayEmpty\n >\n <MenuItem value=\"\">{translate(\"All Methods\")}</MenuItem>\n <MenuItem value=\"GET\">GET</MenuItem>\n <MenuItem value=\"POST\">POST</MenuItem>\n <MenuItem value=\"PUT\">PUT</MenuItem>\n <MenuItem value=\"DELETE\">DELETE</MenuItem>\n <MenuItem value=\"PATCH\">PATCH</MenuItem>\n </Select>\n </FormControl>\n\n <TextField\n label={translate(\"Resource Path\")}\n placeholder=\"/api/v1/...\"\n value={localFilter.resource || \"\"}\n onChange={(e) => handleInputChange(\"resource\", e.target.value)}\n fullWidth\n size=\"small\"\n slotProps={{ inputLabel: { shrink: true } }}\n sx={textFieldStyles}\n />\n\n <TextField\n label={translate(\"Response Code\")}\n placeholder=\"200\"\n value={localFilter.responseCode || \"\"}\n onChange={(e) => handleInputChange(\"responseCode\", e.target.value)}\n fullWidth\n size=\"small\"\n type=\"number\"\n slotProps={{ inputLabel: { shrink: true } }}\n sx={textFieldStyles}\n />\n </Box>\n\n <Box className=\"flex justify-stretch mt-4\">\n <Button \n variant=\"contained\" \n onClick={applyFilters} \n fullWidth\n startIcon={<FontAwesomeIcon icon={faSearch} />}\n sx={{ \n backgroundColor: theme.palette.primary.main, \n height: '45px',\n borderRadius: '12px',\n fontWeight: 'bold',\n textTransform: 'uppercase',\n letterSpacing: '1px',\n '&:hover': { backgroundColor: theme.palette.primary.dark } \n }}\n >\n {translate(\"Apply Filters\")}\n </Button>\n </Box>\n </Box>\n );\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { execute } from \"@/common/services/GlobalApis\";\nimport CustomizedTable from '@/views/custom-components/CustomizedTable/CustomizedTableV2';\nimport SideOverlay from \"@/views/custom-components/SideOverlay.jsx\";\nimport UserActivityFilterForm from \"./UserActivityFilterForm.jsx\";\nimport { Box, Button, TextField, Typography, InputAdornment, IconButton, CircularProgress, Tooltip, Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material';\nimport { useTheme, alpha } from '@mui/material/styles';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faArrowLeft, faSearch, faFilePdf, faFileExcel, faFilter, faSync, faChartLine, faInfo } from '@fortawesome/free-solid-svg-icons';\nimport { showToast } from '@/common/toaster/toaster.jsx';\nimport usePagination from '@/hooks/usePagination.js';\nimport * as XLSX from \"xlsx-js-style\";\nimport moment from 'moment';\nimport dayjs from 'dayjs';\nimport { getTimeAgo, formatTimestamp } from './utils';\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport vfs from '@/assets/fonts/vfs_fonts';\n\nexport default function UserActivityDetail({ selectedUserId, initialSessionId, initialAttributes, onBack }) {\n const theme = useTheme();\n const [usersData, setUsersData] = useState([]);\n const [hasMore, setHasMore] = useState(true);\n const [isLoading, setIsLoading] = useState(false);\n const pageSize = 50;\n \n const [currentUserId, setCurrentUserId] = useState(selectedUserId);\n const [searchInput, setSearchInput] = useState(selectedUserId?.toString() || \"\");\n const [overlayOpen, setOverlayOpen] = useState(false);\n const [refreshToggle, setRefreshToggle] = useState(false);\n \n const [sortConfig, setSortConfig] = useState({\n sortBy: \"timestamp\",\n sortOrder: \"desc\",\n });\n\n const [filter, setFilter] = useState({\n startTime: null,\n endTime: null,\n sessionId: initialSessionId || null,\n httpMethod: null,\n resource: null,\n responseCode: null,\n });\n\n const [infoModalOpen, setInfoModalOpen] = useState(false);\n\n const getResourceText = (resource) => {\n if (!resource) return '';\n if (resource === '/oauth/token' || resource === '/api/oauth/token') {\n return `${resource} (Login)`;\n } else if (resource === '/user/logout' || resource === '/api/user/logout') {\n return `${resource} (Logout)`;\n }\n return resource;\n };\n\n const displayAttributes = useMemo(() => {\n if (initialAttributes && (initialAttributes.user_agent || initialAttributes.userAgent || initialAttributes.ip)) {\n return initialAttributes;\n }\n if (usersData && usersData.length > 0) {\n const firstRow = usersData[0];\n if (firstRow.attributes) {\n try {\n return JSON.parse(firstRow.attributes);\n } catch (e) {}\n }\n }\n return initialAttributes || {};\n }, [initialAttributes, usersData]);\n\n useEffect(() => {\n setCurrentUserId(selectedUserId);\n setSearchInput(selectedUserId?.toString() || \"\");\n if (initialSessionId) {\n setFilter(prev => ({ ...prev, sessionId: initialSessionId }));\n }\n }, [selectedUserId, initialSessionId]);\n\n const handleSearch = () => {\n if (!searchInput.trim()) {\n showToast({ message: \"Please enter a valid User ID\", type: \"warning\"});\n return;\n }\n const parsedId = parseInt(searchInput, 10);\n if (isNaN(parsedId)) {\n showToast({ message: \"User ID must be a number\", type: \"warning\"});\n return;\n }\n setCurrentUserId(parsedId);\n };\n\n const handleRefresh = () => {\n setRefreshToggle(prev => !prev);\n };\n\n const handleSort = async (column) => {\n const newOrder =\n sortConfig.sortBy === column.field && sortConfig.sortOrder === \"asc\"\n ? \"desc\"\n : \"asc\";\n setSortConfig({ sortBy: column.field, sortOrder: newOrder });\n };\n\n const handleApplyFilters = (newFilter) => {\n setFilter(newFilter);\n setRefreshToggle(prev => !prev);\n setOverlayOpen(false);\n };\n\n const handleOverlayState = () => {\n setOverlayOpen(!overlayOpen);\n };\n\n const resetFilter = () => {\n setFilter({\n startTime: null,\n endTime: null,\n sessionId: null,\n httpMethod: null,\n resource: null,\n responseCode: null,\n });\n setOverlayOpen(false);\n };\n\n const columns = useMemo(() => {\n const baseColumns = [\n { field: 'Sr. No.', label: '#', align: 'left', width: '60px' },\n {\n field: 'timestamp',\n label: 'TIMESTAMP',\n sortable: true,\n sortOrder: sortConfig.sortBy === \"timestamp\" ? sortConfig.sortOrder : \"asc\",\n align: 'left',\n render: (row) => (\n <Tooltip title={getTimeAgo(row.timestamp)} arrow placement=\"top\">\n <div className=\"inline-flex flex-col cursor-pointer\">\n <Typography className=\"text-sm font-black\" sx={{ color: theme.palette.text.primary }}>\n {dayjs(row.timestamp).format(\"DD/MM/YYYY\")}\n </Typography>\n <Typography variant=\"caption\" className=\"font-bold text-primary-main opacity-80\">\n {dayjs(row.timestamp).format(\"hh:mm:ss A\")}\n </Typography>\n </div>\n </Tooltip>\n )\n }];\n\n if (!filter.sessionId) {\n baseColumns.push({\n field: 'session_id',\n label: 'SESSION ID',\n align: 'left',\n render: (row) => (\n <Typography variant=\"caption\" className=\"font-mono font-bold opacity-70\">\n {row.session_id || 'N/A'}\n </Typography>\n )\n });\n }\n\n baseColumns.push(\n {\n field: 'http_method',\n label: 'METHOD',\n sortable: true,\n sortOrder: sortConfig.sortBy === \"http_method\" ? sortConfig.sortOrder : \"asc\",\n align: 'left',\n render: (row) => (\n <Typography variant=\"caption\" className=\"font-black uppercase tracking-widest\" sx={{ color: theme.palette.text.primary }}>\n {row.http_method || 'GET'}\n </Typography>\n )\n },\n {\n field: 'resource',\n label: 'RESOURCE ACCESSED',\n sortable: true,\n sortOrder: sortConfig.sortBy === \"resource\" ? sortConfig.sortOrder : \"asc\",\n align: 'left',\n render: (row) => {\n const isLogin = row.resource === '/oauth/token' || row.resource === '/api/oauth/token';\n const isLogout = row.resource === '/user/logout' || row.resource === '/api/user/logout';\n const hasSuffix = isLogin || isLogout;\n const suffixText = isLogin ? ' (Login)' : ' (Logout)';\n const content = (\n <Box>\n <Typography variant=\"body2\" className=\"font-bold\" sx={{ color: theme.palette.text.primary }}>\n {row.resource}\n {hasSuffix && <span className=\"font-black text-primary-main ml-1\">{suffixText}</span>}\n </Typography>\n {row.query_params && (\n <Typography variant=\"caption\" className=\"block font-mono opacity-50 truncate max-w-md\">\n {row.query_params}\n </Typography>\n )}\n </Box>\n );\n return row.query_params ? (\n <Tooltip title={row.query_params} arrow placement=\"top\">\n {content}\n </Tooltip>\n ) : content;\n }\n },\n {\n field: 'response_code',\n label: 'STATUS',\n sortable: true,\n sortOrder: sortConfig.sortBy === \"response_code\" ? sortConfig.sortOrder : \"asc\",\n align: 'center',\n render: (row) => {\n const code = row.response_code || 200;\n const isSuccess = code >= 200 && code < 300;\n const color = isSuccess ? theme.palette.success.main : theme.palette.error.main;\n \n return (\n <div className=\"flex items-center justify-center\">\n <Box\n className=\"inline-flex items-center justify-center rounded-full text-[0.7rem] font-black px-3 py-1 border shadow-sm\"\n sx={{\n backgroundColor: alpha(color, 0.1),\n color: color,\n borderColor: alpha(color, 0.2),\n }}\n >\n <Box \n component=\"span\" \n className={`w-1.5 h-1.5 rounded-full mr-2 ${isSuccess ? 'bg-emerald-500 animate-pulse' : 'bg-red-500'}`}\n />\n {code}\n </Box>\n </div>\n )\n }\n });\n \n if (selectedUserId && !filter.sessionId) {\n baseColumns.push({\n field: 'Actions',\n label: 'Trace Session'.toUpperCase(),\n align: 'center',\n render: (row) => (\n <Tooltip title=\"Filter Activity Analytics by this Session ID\" arrow placement=\"top\">\n <IconButton \n onClick={() => setFilter(prev => ({ ...prev, sessionId: row.session_id }))}\n sx={{ color: theme.palette.secondary.main }}\n >\n <FontAwesomeIcon icon={faChartLine} className=\"text-base\" />\n </IconButton>\n </Tooltip>\n )\n });\n }\n\n return baseColumns;\n }, [theme, sortConfig, selectedUserId, filter.sessionId]);\n\n async function loadMoreData(pageParam, initialLoad) {\n try {\n if (!currentUserId && !filter.sessionId) return [];\n if (initialLoad) setIsLoading(true);\n \n const params = {\n limit: pageParam.limit,\n offset: pageParam.offset || 0,\n userId: currentUserId,\n startTime: filter.startTime ? dayjs(filter.startTime).startOf('day').valueOf() : null,\n endTime: filter.endTime ? dayjs(filter.endTime).endOf('day').valueOf() : null,\n sessionId: filter.sessionId || null,\n httpMethod: filter.httpMethod || null,\n resource: filter.resource || null,\n responseCode: filter.responseCode || null,\n sortBy: sortConfig.sortBy,\n sortOrder: sortConfig.sortOrder,\n };\n\n const response = await execute(\n {\n code: \"GET_USER_ACTIVITY_BY_ID\",\n parameters: params,\n },\n { showLoader: false }\n );\n\n const results = response?.data?.result || [];\n \n const formattedData = results.map((item, index) => ({\n ...item,\n index: (pageParam.offset || 0) + index + 1\n }));\n\n if (initialLoad) setIsLoading(false);\n return formattedData;\n } catch (error) {\n showToast({ message: \"Failed to fetch user activities\", type: \"error\" });\n setIsLoading(false);\n return [];\n }\n }\n\n const { data: pageData, fetchNextPage, hasNextPage } = usePagination({\n key: [\n 'userActivity', \n currentUserId, \n filter.startTime, \n filter.endTime, \n filter.sessionId, \n filter.httpMethod, \n filter.resource, \n filter.responseCode, \n sortConfig, \n refreshToggle\n ],\n queryFn: ({ pageParam }) => {\n const isInitial = !pageParam?.offset || pageParam?.offset === 0;\n return loadMoreData(pageParam, isInitial);\n },\n limit: pageSize,\n enabled: !!currentUserId || !!filter.sessionId\n });\n\n useEffect(() => {\n const allRecords = pageData?.pages?.flat() || [];\n setHasMore(allRecords.length > 0 ? hasNextPage : false);\n setUsersData(allRecords);\n }, [pageData, hasNextPage]);\n const handleExportPdf = async () => {\n try {\n if (usersData.length === 0) return;\n \n const formatParamsForPdf = (params) => {\n if (!params) return 'N/A';\n return params.split('&').map(line => {\n // Insert zero-width spaces every 15 characters to allow clean wrapping of long values\n return line.match(/.{1,15}/g)?.join('\\u200B') || line;\n }).join('\\n');\n };\n\n const showSessionCol = !filter.sessionId;\n const columns = [\"Date\", \"Time\"];\n if (showSessionCol) columns.push(\"Session ID\");\n columns.push(\"Method\", \"API url\", \"Params\", \"Status\");\n\n const exportData = usersData.map(row => {\n const rowData = {\n 'Date': dayjs(row.timestamp).format(\"DD/MM/YYYY\"),\n 'Time': dayjs(row.timestamp).format(\"hh:mm:ss A\"),\n 'Method': row.http_method || 'N/A',\n 'API url': getResourceText(row.resource),\n 'Params': formatParamsForPdf(row.query_params),\n 'Status': row.response_code || 'N/A'\n };\n if (showSessionCol) {\n rowData['Session ID'] = row.session_id || 'N/A';\n }\n return rowData;\n });\n\n const now = new Date();\n const fileName = `UserActivityDetail_${currentUserId || 'Session'}-${now.getDate()}-${now.getMonth()+1}-${now.getFullYear()}.pdf`;\n\n const pdfWidths = showSessionCol\n ? [20, 50, 55, 90, 35, '*', 130, 30]\n : [20, 55, 60, 35, '*', 140, 35];\n\n pdfMake.vfs = { ...vfs, ...pdfMake.vfs };\n pdfMake.addFonts({\n Roboto: {\n normal: 'Roboto-Regular.ttf',\n bold: 'Roboto-Medium.ttf',\n italics: 'Roboto-Regular.ttf',\n bolditalics: 'Roboto-Regular.ttf',\n },\n MuktaVaani: {\n normal: 'MuktaVaani-Regular.ttf',\n bold: 'MuktaVaani-Regular.ttf',\n italics: 'MuktaVaani-Regular.ttf',\n bolditalics: 'MuktaVaani-Regular.ttf',\n },\n });\n\n const isGujarati = (text) => /[\\u0A80-\\u0AFF]/.test(text);\n\n // Header content with small font sizes per user request\n const titleContent = [\n {\n text: \"USER ACTIVITY TRACE REPORT\",\n fontSize: 12,\n bold: true,\n alignment: 'center',\n margin: [0, 2],\n font: 'Roboto'\n },\n {\n text: `User ID: ${currentUserId || displayAttributes?.user_id || 'N/A'} | Username: ${displayAttributes?.user_name || 'N/A'}`,\n fontSize: 8.5,\n alignment: 'center',\n margin: [0, 1],\n font: 'Roboto'\n },\n {\n text: `Name: ${displayAttributes?.name || 'N/A'} | Role ID: ${displayAttributes?.role_id || 'N/A'} | Role Name: ${displayAttributes?.role_name || 'N/A'} | Role Code: ${displayAttributes?.role_code || 'N/A'}`,\n fontSize: 8.5,\n alignment: 'center',\n margin: [0, 1],\n font: 'Roboto'\n },\n {\n text: `IP Address: ${displayAttributes?.ip || 'N/A'} | Server Instance: ${window.location.hostname || 'N/A'}`,\n fontSize: 8.5,\n alignment: 'center',\n margin: [0, 1],\n font: 'Roboto'\n },\n {\n text: `User Agent: ${displayAttributes?.user_agent || displayAttributes?.userAgent || 'N/A'}` +\n (filter.sessionId ? ` | Session ID: ${filter.sessionId}` : ''),\n fontSize: 8,\n alignment: 'center',\n margin: [0, 1],\n font: 'Roboto'\n }\n ];\n\n const updatedColumns = ['S.No', ...columns];\n\n const rows = exportData.map((item, index) => {\n return [\n { text: index + 1, fontSize: 8 },\n ...columns.map((key) => {\n const value = item[key];\n const temp = value?.toString() || '';\n const isResourceBold = temp.includes('(Login)') || temp.includes('(Logout)');\n return {\n text: temp,\n fontSize: 8,\n bold: isResourceBold ? true : undefined,\n font: isGujarati(temp) ? 'MuktaVaani' : 'Roboto',\n };\n }),\n ];\n });\n\n const docDefinition = {\n pageOrientation: \"landscape\",\n content: [\n ...titleContent,\n {\n table: {\n headerRows: 1,\n widths: pdfWidths,\n body: [\n updatedColumns.map((col) => ({\n text: col,\n fillColor: '#243a50',\n color: '#ffffff',\n bold: true,\n fontSize: 8.5,\n })),\n ...rows,\n ],\n },\n layout: {\n fillColor: (rowIndex) => (rowIndex === 0 ? '#243a50' : null),\n hLineWidth: () => 0.1,\n vLineWidth: () => 0.1,\n },\n margin: [0, 8],\n },\n ],\n footer: (currentPage, pageCount) => {\n return {\n text: `Page ${currentPage} of ${pageCount} | User Activity Trace`,\n alignment: 'left',\n margin: [14, 0],\n fontSize: 7,\n font: 'Roboto',\n };\n },\n header: {\n text: `User Activity Trace (${usersData.length} records)`,\n alignment: 'left',\n margin: [14, 8],\n fontSize: 8,\n font: 'Roboto',\n },\n defaultStyle: {\n font: 'MuktaVaani',\n },\n };\n\n pdfMake.createPdf(docDefinition).download(fileName);\n } catch (err) {\n showToast({message: \"Error generating PDF\", type: \"error\"});\n }\n };\n\n const handleExportExcel = async () => {\n if (usersData.length === 0) return;\n \n const showSessionCol = !filter.sessionId;\n const excelHeaders = [\"Date\", \"Time\"];\n if (showSessionCol) excelHeaders.push(\"Session ID\");\n excelHeaders.push(\"Method\", \"Resource\", \"Params\", \"Status\");\n\n const wsData = [\n [\"USER ACTIVITY TRACE REPORT\"],\n [`User ID: ${currentUserId || displayAttributes?.user_id || 'N/A'}`],\n [`Username: ${displayAttributes?.user_name || 'N/A'}`],\n [`Name: ${displayAttributes?.name || 'N/A'}`],\n [`Role Name: ${displayAttributes?.role_name || 'N/A'} (Role Id: ${displayAttributes?.role_id || 'N/A'}, Role Code: ${displayAttributes?.role_code || 'N/A'})`],\n [`IP Address: ${displayAttributes?.ip || 'N/A'}`],\n [`User Agent: ${displayAttributes?.user_agent || displayAttributes?.userAgent || 'N/A'}`],\n ...(filter.sessionId ? [[`Session ID: ${filter.sessionId}`]] : []),\n [`Server Instance: ${window.location.hostname || 'N/A'}`],\n [], // blank row separator\n // Table headers\n excelHeaders\n ];\n\n usersData.forEach(row => {\n const rowData = [\n dayjs(row.timestamp).format(\"DD/MM/YYYY\"),\n dayjs(row.timestamp).format(\"hh:mm:ss A\"),\n ];\n if (showSessionCol) {\n rowData.push(row.session_id || 'N/A');\n }\n \n const resourceVal = getResourceText(row.resource);\n const isBold = resourceVal.includes('(Login)') || resourceVal.includes('(Logout)');\n const resourceCell = isBold \n ? { v: resourceVal, s: { font: { bold: true } } } \n : resourceVal;\n\n rowData.push(\n row.http_method || 'N/A',\n resourceCell,\n row.query_params || 'N/A',\n row.response_code || 'N/A'\n );\n wsData.push(rowData);\n });\n\n const ws = XLSX.utils.aoa_to_sheet(wsData);\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, \"UserActivityAnalytics\");\n XLSX.writeFile(wb, `UserActivity_${currentUserId || 'Session'}_${moment().format('YYYYMMDD')}.xlsx`);\n };\n\n return (\n <Box className=\"flex flex-col h-full w-full\">\n \n <Box className=\"flex flex-col md:flex-row justify-between items-start md:items-center p-6 border-b border-slate-200/60 dark:border-slate-800/60 gap-4\">\n \n <div className=\"flex items-center gap-4\">\n <IconButton \n onClick={onBack} \n size=\"medium\" \n sx={{ \n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n color: theme.palette.primary.main,\n '&:hover': { backgroundColor: theme.palette.primary.main, color: 'white' }\n }}\n >\n <FontAwesomeIcon icon={faArrowLeft} className=\"text-sm\" />\n </IconButton>\n <div className=\"flex flex-col\">\n <Typography variant=\"body2\" className=\"font-bold font-sans text-lg text-customBlue uppercase\">\n USER ACTIVITY LOGS\n </Typography>\n <div className=\"flex items-center mt-1.5 font-semibold text-[13px] text-slate-600 dark:text-slate-400\">\n <span className=\"flex items-center gap-1.5\">\n User ID: <span className=\"text-primary-main font-black\">{(currentUserId || displayAttributes.user_id || 'N/A')}</span>\n <Tooltip title=\"View User Info Details\" arrow placement=\"top\">\n <span\n ref={(node) => {\n if (node) {\n node.style.setProperty('border-radius', '50%', 'important');\n }\n }}\n onClick={() => setInfoModalOpen(true)}\n className=\"cursor-pointer inline-flex items-center justify-center\"\n style={{\n width: '15px',\n height: '15px',\n border: `1.5px solid ${theme.palette.primary.main}`,\n color: theme.palette.primary.main,\n fontSize: '8px',\n fontWeight: 'bold',\n lineHeight: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n verticalAlign: 'middle',\n }}\n >\n <FontAwesomeIcon icon={faInfo} />\n </span>\n </Tooltip>\n </span>\n </div>\n </div>\n </div>\n\n <Box className=\"flex flex-wrap items-center gap-3 ml-auto\">\n <TextField\n size=\"small\"\n placeholder=\"Search by User ID...\"\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleSearch()}\n sx={{\n width: { xs: '100%', md: '200px' },\n \"& .MuiInputBase-root\": {\n backgroundColor: theme.palette.background.paper,\n borderRadius: '12px',\n },\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton size=\"small\" onClick={handleSearch} color=\"primary\">\n <FontAwesomeIcon icon={faSearch} />\n </IconButton>\n </InputAdornment>\n )\n }}\n />\n\n <div className={`flex items-center rounded-2xl p-1 shadow-sm border ${theme.palette.mode === 'dark' ? \"bg-slate-900 border-slate-800\" : \"bg-white border-slate-200\"}`}>\n <button\n disabled={isLoading}\n onClick={handleExportPdf}\n className={`px-4 py-2 rounded-xl transition-all flex items-center gap-2 text-xs font-black uppercase tracking-wider ${theme.palette.mode === 'dark' ? \"text-slate-400 hover:text-slate-100 hover:bg-slate-800\" : \"text-slate-600 hover:text-red-600 hover:bg-slate-50\"}`}\n >\n <FontAwesomeIcon icon={faFilePdf} className=\"mr-1\" />\n Pdf\n </button>\n\n <button\n disabled={isLoading}\n onClick={handleExportExcel}\n className={`px-4 py-2 rounded-xl transition-all flex items-center gap-2 text-xs font-black uppercase tracking-wider ml-1 ${theme.palette.mode === 'dark' ? \"bg-slate-800 text-slate-100 hover:bg-slate-700\" : \"bg-[var(--color-tableHeader)] text-white hover:bg-[var(--color-tableHeader)]\"}`}\n >\n <FontAwesomeIcon icon={faFileExcel} className=\"mr-1\" />\n Excel\n </button>\n </div>\n\n <IconButton\n color=\"primary\"\n onClick={handleOverlayState}\n className=\"rounded-xl border border-slate-200 dark:border-slate-800 shadow-sm\"\n sx={{\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n width: 40,\n height: 40,\n '&:hover': { backgroundColor: theme.palette.primary.main, color: 'white' }\n }}\n >\n <FontAwesomeIcon icon={faFilter} className=\"text-sm\" />\n </IconButton>\n\n <IconButton\n color=\"primary\"\n onClick={handleRefresh}\n className=\"rounded-xl border border-slate-200 dark:border-slate-800 shadow-sm\"\n sx={{\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n width: 40,\n height: 40,\n '&:hover': { backgroundColor: theme.palette.primary.main, color: 'white' }\n }}\n >\n <FontAwesomeIcon icon={faSync} className=\"text-sm\" />\n </IconButton>\n </Box>\n </Box>\n\n <Box \n className=\"flex-1 overflow-hidden relative\"\n sx={{ \n height: '100%',\n '& *': { borderRadius: '0px !important' }, // Kill every curve inside this box\n '& .MuiTableContainer-root': { height: '100% !important', maxHeight: '100% !important' }\n }}\n >\n {(!currentUserId && !filter.sessionId) ? (\n <Box className=\"w-full h-full flex flex-col items-center justify-center space-y-4 opacity-50\">\n <FontAwesomeIcon icon={faSearch} className=\"text-5xl text-slate-300\" />\n <Typography variant=\"h6\" className=\"font-bold text-slate-400\">Search a User ID or Session to trace actions</Typography>\n </Box>\n ) : (\n <CustomizedTable\n id=\"user-activity-detail-list\"\n columns={columns}\n tableData={usersData}\n paginationConfig={{\n pagination: true,\n paginationType: \"infinite-scroll\",\n rowsPerPageInTable: pageSize,\n hasMore: hasMore,\n loadMore: () => hasMore && fetchNextPage({ cancelRefetch: false }),\n }}\n styleConfig={{\n cellStyle: { padding: '8px 16px', height: 40, maxLines: 1 }\n }}\n isLoading={isLoading}\n handleSort={handleSort}\n emptyBoxText=\"Activity for this User ID doesn't exist in our logs.\"\n getActions={() => []}\n />\n )}\n </Box>\n\n <SideOverlay\n title=\"Activity Filters\"\n resetButtonLabel=\"Reset\"\n onResetClick={resetFilter}\n FormBody={UserActivityFilterForm}\n handleOverlayState={handleOverlayState}\n overlayOpen={overlayOpen}\n dataTestId=\"user-activity-filter\"\n ModalProps={{\n sx: {\n '& .MuiDrawer-paper': {\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.text.primary,\n '& .p-2\\\\.5': { \n backgroundColor: theme.palette.background.paper,\n borderBottom: `1px solid ${theme.palette.divider}`,\n color: theme.palette.primary.main,\n fontWeight: 'bold',\n letterSpacing: '1px'\n }\n }\n }\n }}\n formProps={{\n filter,\n onApply: handleApplyFilters,\n handleOverlayState\n }}\n />\n\n {/* User Info Details Dialog */}\n <Dialog\n open={infoModalOpen}\n onClose={() => setInfoModalOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{\n sx: {\n borderRadius: '16px',\n boxShadow: '0 10px 30px rgba(0,0,0,0.15)',\n backgroundImage: 'none',\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.text.primary,\n }\n }}\n >\n <DialogTitle className=\"border-b border-slate-200 dark:border-slate-800 pb-3 flex justify-between items-center\">\n <Typography \n variant=\"h6\" \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 900 \n }}\n >\n User Information\n </Typography>\n </DialogTitle>\n <DialogContent className=\"pt-4 pb-6\" sx={{ color: theme.palette.text.primary }}>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"flex flex-col gap-0.5\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n User ID\n </span>\n <span \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800, \n fontSize: '14px' \n }}\n >\n {currentUserId || displayAttributes.user_id || 'N/A'}\n </span>\n </div>\n \n <div className=\"flex flex-col gap-0.5\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n Username\n </span>\n <span \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800, \n fontSize: '14px' \n }}\n >\n {displayAttributes.user_name || 'N/A'}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-0.5\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n Full Name\n </span>\n <span \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800, \n fontSize: '14px' \n }}\n >\n {displayAttributes.name || 'N/A'}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-0.5\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n Role Name\n </span>\n <span \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800, \n fontSize: '14px' \n }}\n >\n {displayAttributes.role_name || 'N/A'}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-0.5\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n Role ID\n </span>\n <span \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800, \n fontSize: '14px' \n }}\n >\n {displayAttributes.role_id || 'N/A'}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-0.5\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n Role Code\n </span>\n <span \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800, \n fontSize: '14px' \n }}\n >\n {displayAttributes.role_code || 'N/A'}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-0.5\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n IP Address\n </span>\n <span \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800, \n fontSize: '14px' \n }}\n >\n {displayAttributes.ip || 'N/A'}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-0.5\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n Server Instance\n </span>\n <span \n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800, \n fontSize: '14px' \n }}\n >\n {window.location.hostname || 'N/A'}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-0.5 md:col-span-2\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n User Agent\n </span>\n <span \n className=\"text-xs font-mono break-all leading-relaxed\"\n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800 \n }}\n >\n {displayAttributes.user_agent || displayAttributes.userAgent || 'N/A'}\n </span>\n </div>\n\n {(filter.sessionId || displayAttributes.session_id || displayAttributes.sessionId) && (\n <div className=\"flex flex-col gap-0.5 md:col-span-2\">\n <span \n style={{ \n color: theme.palette.text.secondary, \n fontWeight: 700, \n fontSize: '11.5px', \n textTransform: 'uppercase', \n letterSpacing: '0.05em' \n }}\n >\n Session ID\n </span>\n <span \n className=\"text-xs font-mono break-all\"\n style={{ \n color: theme.palette.text.primary, \n fontWeight: 800 \n }}\n >\n {filter.sessionId || displayAttributes.session_id || displayAttributes.sessionId}\n </span>\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions className=\"border-t border-slate-200 dark:border-slate-800 px-6 py-3\">\n <Button \n onClick={() => setInfoModalOpen(false)}\n variant=\"contained\"\n sx={{\n borderRadius: '8px',\n textTransform: 'none',\n }}\n >\n Close\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { Card, Typography, Box } from '@mui/material';\nimport { useTheme, alpha } from '@mui/material/styles';\nimport ActiveUserList from './ActiveUserList';\nimport UserActivityDetail from './UserActivityDetail';\n\nexport default function ActivityAnalytics() {\n const theme = useTheme();\n const location = useLocation();\n \n const [selectedUserId, setSelectedUserId] = useState(null);\n const [initialSessionId, setInitialSessionId] = useState(null);\n const [initialAttributes, setInitialAttributes] = useState(null);\n const [viewMode, setViewMode] = useState('list'); // 'list' or 'detail'\n\n useEffect(() => {\n // Check both react-router location and window.location for robustness\n const params = new URLSearchParams(location.search || window.location.hash.split('?')[1] || window.location.search);\n const sid = params.get('sessionId');\n const attrsStr = params.get('attributes');\n if (sid) {\n setInitialSessionId(sid);\n if (attrsStr) {\n try {\n setInitialAttributes(JSON.parse(decodeURIComponent(attrsStr)));\n } catch(e) {}\n }\n setViewMode('detail');\n }\n }, [location.search]);\n\n const handleUserSelect = (uid, attrs = null) => {\n setSelectedUserId(uid);\n setInitialSessionId(null);\n setInitialAttributes(attrs);\n setViewMode('detail');\n };\n\n const handleBack = () => {\n setSelectedUserId(null);\n setInitialSessionId(null);\n setInitialAttributes(null);\n // Clear the URL param without full reload, handling both hash and non-hash URLs\n const baseUrl = window.location.pathname + (window.location.hash ? window.location.hash.split('?')[0] : '');\n window.history.replaceState({}, '', baseUrl);\n setViewMode('list');\n };\n\n return (\n <Box \n id=\"activity-analytics-root\"\n className=\"w-full h-full flex flex-col p-4 bg-[var(--color-gray4)] dark:bg-[#0f172a]\"\n >\n <style>{`\n #activity-analytics-root *, \n #activity-analytics-root .MuiTableContainer-root, \n #activity-analytics-root .MuiPaper-root,\n #activity-analytics-root [class*=\"rounded-\"] { \n border-radius: 0px !important; \n }\n `}</style>\n <Box\n className=\"w-full h-full flex flex-col\"\n sx={{\n backgroundColor: theme.palette.mode === 'dark' ? '#0f172a' : 'var(--color-gray4)',\n }}\n >\n <Box className=\"flex-1 overflow-hidden\">\n {viewMode === 'list' ? (\n <ActiveUserList onUserSelect={handleUserSelect} />\n ) : (\n <UserActivityDetail\n selectedUserId={selectedUserId}\n initialSessionId={initialSessionId}\n initialAttributes={initialAttributes}\n onBack={handleBack}\n />\n )}\n </Box>\n </Box>\n </Box>\n );\n}\n"],"names":["getTimeAgo","timestamp","now","moment","past","duration","years","months","days","hours","minutes","seconds","result","formatTimestamp","ActiveUserList","onUserSelect","theme","useTheme","usersData","setUsersData","useState","hasMore","setHasMore","isLoading","setIsLoading","pageSize","translate","useTranslateProvider","refreshToggle","setRefreshToggle","manualSearchId","setManualSearchId","handleManualSearch","searchId","existingUser","u","columns","row","jsxs","jsx","FontAwesomeIcon","faUser","Tooltip","_a","_b","_c","_d","_e","Typography","_f","_g","_h","IconButton","el","alpha","faEye","loadMoreData","pageParam","initialLoad","params","response","execute","data","item","index","parsedAttrs","showToast","pageData","fetchNextPage","hasNextPage","usePagination","isInitial","useEffect","allUsers","handleRefresh","prev","Box","TextField","e","Button","faSync","CustomizedTable","UserActivityFilterForm","filter","onApply","handleOverlayState","isDark","localFilter","setLocalFilter","showCalendar","setShowCalendar","dateRange","setDateRange","handleDateChange","ranges","selection","startStr","formatDate","endStr","date","d","getDisplayRange","start","end","handleInputChange","field","value","applyFilters","textFieldStyles","faCalendar","DateRange","FormControl","InputLabel","Select","MenuItem","faSearch","UserActivityDetail","selectedUserId","initialSessionId","initialAttributes","onBack","currentUserId","setCurrentUserId","searchInput","setSearchInput","overlayOpen","setOverlayOpen","sortConfig","setSortConfig","setFilter","infoModalOpen","setInfoModalOpen","getResourceText","resource","displayAttributes","useMemo","firstRow","handleSearch","parsedId","handleSort","column","newOrder","handleApplyFilters","newFilter","resetFilter","baseColumns","dayjs","isLogin","isLogout","hasSuffix","suffixText","content","code","isSuccess","color","faChartLine","formattedData","allRecords","handleExportPdf","formatParamsForPdf","line","showSessionCol","exportData","rowData","fileName","pdfWidths","pdfMake","vfs","isGujarati","text","titleContent","updatedColumns","rows","key","temp","isResourceBold","docDefinition","col","rowIndex","currentPage","pageCount","handleExportExcel","excelHeaders","wsData","resourceVal","resourceCell","ws","XLSX.utils","wb","XLSX.writeFile","faArrowLeft","node","faInfo","InputAdornment","faFilePdf","faFileExcel","faFilter","SideOverlay","Dialog","DialogTitle","DialogContent","DialogActions","ActivityAnalytics","location","useLocation","setSelectedUserId","setInitialSessionId","setInitialAttributes","viewMode","setViewMode","sid","attrsStr","handleUserSelect","uid","attrs","handleBack","baseUrl"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.lib-ETRQOzvE.js","sources":["../routes/routes.jsx","../../app-shell/src/store/reducers/immunizationSlice.js","../src/views/ImmunizationConfiguration/utils/validationUtils.js","../src/views/ImmunizationConfiguration/service/ImmunizationUtil.js"],"sourcesContent":["import { lazy } from \"react\";\n\nconst VerifyRoute = lazy(\n () => import(\"@/views/feature-components/VerifyRoute.jsx\"),\n);\nconst Roles = lazy(() => import(\"../src/views/Roles/RoleManagement\"));\nconst QueryBuilder = lazy(\n () => import(\"../src/views/QueryBuilder/QueryBuilder\"),\n);\nconst UserList = lazy(() => import(\"../src/views/Users/UserList\"));\nconst ManageUser = lazy(() => import(\"../src/views/Users/ManageUser\"));\nconst QueryManagement = lazy(\n () => import(\"../src/views/QueryManagement/QueryManagement\"),\n);\nconst FeatureMenu = lazy(() => import(\"../src/views/Features/FeatureMenu\"));\nconst ActivityAnalytics = lazy(() => import(\"../src/views/ActivityAnalytics/index\"));\nconst NewServerManagement = lazy(\n () => import(\"../src/views/Features/NewServerManagement\"),\n);\nconst ManageDynamicFeature = lazy(\n () => import(\"../src/views/Features/ManageDynamicFeature\"),\n);\nconst SecurityAuditLogList = lazy(\n () => import(\"../src/views/SecurityAuditLog/SecurityAuditLogList\"),\n);\nconst EventConfigurations = lazy(\n () => import(\"../src/views/Events/EventConfigurations\"),\n);\nconst ManageEventConfiguration = lazy(\n () => import(\"../src/views/Events/ManageEventConfiguration\"),\n);\nconst EntityManagement = lazy(\n () => import('../src/views/Mobile/EntityManagement/EntityManagement.jsx')\n);\nconst MobileAnalytics = lazy(\n () => import('../src/views/Mobile/Analytics/MobileAnalytics.jsx')\n);\nconst MobileMenuManagement = lazy(\n () => import('../src/views/MobileMenuManagement/MobileMenuManagement')\n);\nconst AddMenuConfiguration = lazy(\n () => import('../src/views/MobileMenuManagement/AddMenuConfiguration')\n);\nconst ManageTranslation = lazy(\n () => import(\"../src/views/Translation/ManageTranslation\"),\n);\nconst WidgetList = lazy(\n () => import(\"../src/views/Widgets/WidgetList\")\n);\nconst NotificationList = lazy(\n () => import(\"../src/views/Notifications/NotificationList\"),\n);\nconst ImmunizationConfigurationsList = lazy(\n () => import(\"../src/views/Immunization/ImmunizationConfigurationsList\"),\n);\nconst ManageImmunization = lazy(\n () => import(\"../src/views/Immunization/manageImmunization\"),\n);\nconst ImmunizationConfiguration = lazy(\n () =>\n import(\"../src/views/ImmunizationConfiguration/ImmunizationConfigurationBase.jsx\"),\n);\nconst FhirServerList = lazy(\n () => import(\"../src/views/FhirResource/FhirServerList\"),\n);\nconst FhirServerWizard = lazy(\n () => import(\"../src/views/FhirResource/FhirServerWizard\"),\n);\nconst FhirServerProfile = lazy(\n () => import(\"../src/views/FhirResource/FhirServerProfile\"),\n);\nconst FhirRawResourceList = lazy(\n () => import(\"../src/views/FhirResource/FhirRawResourceList\"),\n);\n\nconst corecustom2Routes = [\n {\n path: \"medplat/manage/role\",\n element: (\n <VerifyRoute\n headerTitle={\"Roles\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/role\"\n component={Roles}\n />\n ),\n },\n {\n path: \"medplat/manage/query\",\n element: (\n <VerifyRoute\n headerTitle={\"Query Master\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/query\"\n component={QueryBuilder}\n />\n ),\n },\n {\n path: \"medplat/manage/users\",\n element: (\n <VerifyRoute\n headerTitle={\"Users\"}\n pageTitle={\"UserList\"}\n url=\"medplat/manage/users\"\n component={UserList}\n />\n ),\n },\n {\n path: \"medplat/manage/user\",\n element: (\n <VerifyRoute\n headerTitle={\"Users\"}\n pageTitle={\"ManageUser\"}\n url=\"medplat/manage/users\"\n component={ManageUser}\n />\n ),\n },\n {\n path: \"medplat/manage/user/:id\",\n element: (\n <VerifyRoute\n headerTitle={\"Users\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/users\"\n component={ManageUser}\n />\n ),\n },\n {\n path: \"medplat/querymanagement\",\n element: (\n <VerifyRoute\n headerTitle={\"Query Management\"}\n pageTitle={\"General\"}\n url=\"medplat/querymanagement\"\n component={QueryManagement}\n />\n ),\n },\n {\n path: \"medplat/manage/menu\",\n element: (\n <VerifyRoute\n headerTitle={\"Features\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/menu\"\n component={FeatureMenu}\n />\n ),\n },\n {\n path: \"medplat/manage/menu/addfeature\",\n element: (\n <VerifyRoute\n headerTitle={\"Features\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/menu\"\n component={ManageDynamicFeature}\n />\n ),\n },\n {\n path: \"medplat/manage/menu/addDynamicFeature\",\n element: (\n <VerifyRoute\n headerTitle={\"Features\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/menu\"\n component={ManageDynamicFeature}\n />\n ),\n },\n {\n path: \"medplat/notification/all\",\n element: (\n <VerifyRoute\n headerTitle={\"Event Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/notification/all\"\n component={EventConfigurations}\n />\n ),\n },\n {\n path: \"medplat/views/config\",\n element: (\n <VerifyRoute\n headerTitle={\"Event Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/notification\"\n component={ManageEventConfiguration}\n />\n ),\n },\n {\n path: \"medplat/views/config/:id\",\n element: (\n <VerifyRoute\n headerTitle={\"Event Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/notification\"\n component={ManageEventConfiguration}\n />\n ),\n },\n {\n path: \"medplat/admin/newServerManagement\",\n element: (\n <VerifyRoute\n headerTitle={\"Server Management\"}\n url=\"medplat/admin/newServerManagement\"\n component={NewServerManagement}\n />\n ),\n },\n {\n path: 'medplat/admin/mobileEntityManagement',\n element: (\n <VerifyRoute\n pageTitle={'General'}\n url=\"medplat/admin/mobileEntityManagement\"\n component={EntityManagement}\n headerTitle={'Mobile Database Management'}\n />\n ),\n },\n {\n path: 'medplat/admin/mobileAnalytics',\n element: (\n <VerifyRoute\n url=\"medplat/admin/mobileAnalytics\"\n component={MobileAnalytics}\n headerTitle={'Mobile Analytics'}\n />\n ),\n },\n {\n path: 'medplat/admin/mobileMenuManagement',\n element: (\n <VerifyRoute\n url=\"medplat/admin/mobileMenuManagement\"\n component={<MobileMenuManagement />}\n headerTitle={'Mobile Menu Management'}\n />\n ),\n },\n {\n path: 'medplat/admin/mobileMenuManagement/addMenuConfiguration',\n element: <AddMenuConfiguration />,\n },\n {\n path: \"medplat/manage/manageTranslation\",\n element: (\n <VerifyRoute\n headerTitle={\"Manage Translation\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/manageTranslation\"\n component={ManageTranslation}\n />\n ),\n },\n {\n path: \"medplat/manage/managewidgets\",\n element: (\n <VerifyRoute\n headerTitle={\"Widgets\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/manage-widgets\"\n component={WidgetList}\n />\n ),\n },\n {\n path: \"medplat/manage/notification\",\n element: (\n <VerifyRoute\n headerTitle={\"Notification Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/notification\"\n component={NotificationList}\n />\n ),\n },\n {\n path: \"medplat/manage/immunizationConfiguratorList\",\n element: (\n <VerifyRoute\n headerTitle={\"Immunizations\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/manageTranslation\"\n component={ImmunizationConfigurationsList}\n />\n ),\n },\n {\n path: \"medplat/manage/manageImmunization\",\n element: (\n <VerifyRoute\n headerTitle={\"Immunizations\"}\n pageTitle={\"General\"}\n url=\"medplat/training/question\"\n component={ManageImmunization}\n />\n ),\n },\n {\n path: \"medplat/manage/manageImmunization/:id\",\n element: (\n <VerifyRoute\n headerTitle={\"Immunizations\"}\n pageTitle={\"General\"}\n url=\"medplat/training/question\"\n component={ManageImmunization}\n />\n ),\n },\n {\n path: \"medplat/manage/immunizationConfiguration\",\n element: (\n <VerifyRoute\n headerTitle={\"Immunization Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/immunizationConfiguration\"\n component={ImmunizationConfiguration}\n />\n ),\n },\n {\n path: \"medplat/manage/securityAuditLogs\",\n element: (\n <VerifyRoute\n headerTitle={\"Security Audit Logs\"}\n pageTitle={\"Security Audit Logs\"}\n url=\"medplat/manage/securityAuditLogs\"\n component={SecurityAuditLogList}\n />\n ),\n },\n {\n path: \"medplat/manage/activityAnalytics\",\n element: (\n <VerifyRoute\n headerTitle={\"Activity Analytics\"}\n url=\"medplat/manage/activityAnalytics\"\n component={ActivityAnalytics}\n />\n ),\n },\n {\n path: \"medplat/admin/fhirResource\",\n element: (\n <VerifyRoute\n headerTitle={\"FHIR Sync\"}\n pageTitle={\"General\"}\n url=\"medplat/admin/fhirResource\"\n component={FhirServerList}\n />\n ),\n },\n {\n path: \"medplat/admin/fhirResource/new\",\n element: (\n <VerifyRoute\n headerTitle={\"Connect FHIR Server\"}\n pageTitle={\"General\"}\n url=\"medplat/admin/fhirResource\"\n component={FhirServerWizard}\n />\n ),\n },\n {\n path: \"medplat/admin/fhirResource/:serverId\",\n element: (\n <VerifyRoute\n headerTitle={\"FHIR Server\"}\n pageTitle={\"General\"}\n url=\"medplat/admin/fhirResource\"\n component={FhirServerProfile}\n />\n ),\n },\n {\n path: \"medplat/admin/fhirResource/:serverId/staging\",\n element: (\n <VerifyRoute\n headerTitle={\"FHIR Staging Inbox\"}\n pageTitle={\"General\"}\n url=\"medplat/admin/fhirResource\"\n component={FhirRawResourceList}\n />\n ),\n },\n];\n\nexport default corecustom2Routes;\n","import { createSlice } from '@reduxjs/toolkit';\n\nconst createInitialState = () => ({\n vaccines: [],\n selectedVaccineIds: [],\n views: [\n {\n id: 'landing',\n name: 'Dashboard',\n },\n {\n id: 'schedule-config',\n name: 'Schedule Config',\n },\n {\n id: 'summary',\n name: 'Configuration Summary',\n },\n ],\n currentViewId: 'summary',\n scheduledVaccines: [],\n baseDateMaster: [],\n recipientMaster: [],\n dbTablesMaster: [],\n filtersMaster: [],\n featureRights: {},\n isConfigLoaded: false,\n validationErrors: {},\n});\n\nconst initialState = createInitialState();\n\nconst upsertByIdOrCode = (items = [], incoming = {}) => {\n const matchIndex = items.findIndex(\n (item) =>\n (incoming.id !== undefined && item?.id === incoming.id) ||\n (incoming.code && item?.code === incoming.code),\n );\n\n if (matchIndex === -1) {\n return [...items, incoming];\n }\n\n return items.map((item, index) =>\n index === matchIndex\n ? {\n ...item,\n ...incoming,\n }\n : item,\n );\n};\n\nconst immunizationSlice = createSlice({\n name: 'immunization',\n initialState,\n reducers: {\n toggleVaccine: (state, action) => {\n const id = action.payload;\n if (!Array.isArray(state.selectedVaccineIds)) state.selectedVaccineIds = [];\n\n const index = state.selectedVaccineIds.indexOf(id);\n if (index > -1) {\n state.selectedVaccineIds.splice(index, 1);\n } else {\n state.selectedVaccineIds.push(id);\n }\n },\n setVaccines: (state, action) => {\n const vaccines = Array.isArray(action.payload) ? action.payload : [];\n state.vaccines = vaccines;\n if (state.selectedVaccineIds.length === 0) {\n state.selectedVaccineIds = vaccines\n .filter((vaccine) => vaccine.isActive)\n .map((vaccine) => vaccine.id);\n }\n },\n setSelectedVaccineIds: (state, action) => {\n state.selectedVaccineIds = action.payload;\n },\n addCustomVaccine: (state, action) => {\n const payload = action.payload || {};\n const {\n name,\n vaccine_name,\n disease,\n target_prevention,\n id,\n baseDateCode,\n base_date_code,\n recipientType,\n recipient_type,\n } = payload;\n const finalName = name || vaccine_name || 'Unnamed Vaccine';\n const finalCategory = disease || target_prevention || 'General';\n\n const vaccines = Array.isArray(state.vaccines) ? state.vaccines : [];\n const validIds = vaccines.map((v) => Number(v?.id)).filter((id) => !Number.isNaN(id));\n const nextId = validIds.length > 0 ? Math.max(...validIds) + 1 : 1;\n\n const finalId = id || nextId;\n const newVaccine = {\n id: finalId,\n name: finalName,\n category: finalCategory,\n doses: 0,\n doseType: 'FIXED',\n scheduleType: 'ROUTINE',\n doseDetails: {},\n regions: [],\n dependencies: [],\n isActive: payload.isActive !== undefined ? payload.isActive : false,\n baseDateCode: baseDateCode || base_date_code || null,\n recipientType: recipientType || recipient_type || '',\n };\n\n if (!Array.isArray(state.vaccines)) state.vaccines = [];\n state.vaccines.push(newVaccine);\n },\n setCurrentView: (state, action) => {\n state.currentViewId = action.payload;\n },\n updateScheduledVaccine: (state, action) => {\n const updatedVaccine = action.payload;\n const index = state.scheduledVaccines.findIndex((v) => v.id === updatedVaccine.id);\n if (index !== -1) {\n state.scheduledVaccines[index] = {\n ...state.scheduledVaccines[index],\n ...updatedVaccine,\n };\n } else {\n state.scheduledVaccines.push(updatedVaccine);\n }\n },\n setBaseDatesMaster: (state, action) => {\n state.baseDateMaster = action.payload;\n },\n setRecipientMaster: (state, action) => {\n state.recipientMaster = action.payload;\n },\n setDbTablesMaster: (state, action) => {\n state.dbTablesMaster = action.payload;\n },\n setFiltersMaster: (state, action) => {\n state.filtersMaster = action.payload;\n },\n upsertBaseDateMasterItem: (state, action) => {\n state.baseDateMaster = upsertByIdOrCode(state.baseDateMaster, action.payload);\n },\n upsertRecipientMasterItem: (state, action) => {\n state.recipientMaster = upsertByIdOrCode(state.recipientMaster, action.payload);\n },\n updateBaseDateMasterStatus: (state, action) => {\n const { code, is_active } = action.payload;\n state.baseDateMaster = state.baseDateMaster.map((item) =>\n item.code === code ? { ...item, is_active } : item,\n );\n },\n upsertFilterMasterItem: (state, action) => {\n state.filtersMaster = upsertByIdOrCode(state.filtersMaster, action.payload);\n },\n updateFilterMasterStatus: (state, action) => {\n const { code, is_active } = action.payload;\n state.filtersMaster = state.filtersMaster.map((item) =>\n item.code === code ? { ...item, is_active } : item,\n );\n },\n setFeatureRights: (state, action) => {\n state.featureRights = action.payload || {};\n },\n setImmunizationConfigLoaded: (state, action) => {\n state.isConfigLoaded = action.payload;\n },\n resetImmunizationState: () => createInitialState(),\n activateSelectedVaccines: (state) => {\n state.vaccines = state.vaccines.map((v) => ({\n ...v,\n isActive: state.selectedVaccineIds.includes(v.id),\n }));\n },\n setVaccineStatus: (state, action) => {\n const { vaccineId, status } = action.payload;\n const vIndex = state.vaccines.findIndex((v) => v.id === vaccineId);\n if (vIndex !== -1) {\n state.vaccines[vIndex].isActive = status;\n }\n\n if (!Array.isArray(state.selectedVaccineIds)) state.selectedVaccineIds = [];\n const sIndex = state.selectedVaccineIds.indexOf(vaccineId);\n if (status && sIndex === -1) {\n state.selectedVaccineIds.push(vaccineId);\n } else if (!status && sIndex !== -1) {\n state.selectedVaccineIds.splice(sIndex, 1);\n }\n },\n setValidationErrors: (state, action) => {\n const { vaccineId, errors } = action.payload;\n state.validationErrors[vaccineId] = errors;\n },\n clearValidationErrors: (state, action) => {\n const vaccineId = action.payload;\n if (vaccineId) {\n delete state.validationErrors[vaccineId];\n } else {\n state.validationErrors = {};\n }\n },\n },\n});\n\nexport const {\n toggleVaccine,\n setVaccines,\n addCustomVaccine,\n setCurrentView,\n updateScheduledVaccine,\n setBaseDatesMaster,\n setRecipientMaster,\n setDbTablesMaster,\n setFiltersMaster,\n upsertBaseDateMasterItem,\n upsertRecipientMasterItem,\n updateBaseDateMasterStatus,\n upsertFilterMasterItem,\n updateFilterMasterStatus,\n setFeatureRights,\n setImmunizationConfigLoaded,\n resetImmunizationState,\n activateSelectedVaccines,\n setSelectedVaccineIds,\n setValidationErrors,\n clearValidationErrors,\n setVaccineStatus,\n} = immunizationSlice.actions;\nexport default immunizationSlice.reducer;\n","export const getDays = (val) => {\n if (!val) return 0;\n if (typeof val === 'string' && val.toLowerCase() === 'birth') return 0;\n return Number.parseInt(val) || 0;\n};\n\nexport const getDaysVal = (val, unit) => {\n if (!val) return 0;\n if (typeof val === 'string' && val.toLowerCase() === 'birth') return 0;\n const num = Number.parseInt(val) || 0;\n if (unit === 'weeks') return num * 7;\n if (unit === 'months') return num * 30;\n if (unit === 'years') return num * 365;\n return num;\n};\n\nexport const isBlankDuration = (val) => val === undefined || val === null || String(val).trim() === '';\n\n// The unit dropdown value that stands in for an open-ended window. It is never\n// persisted — `eligibleTo === null` is the stored fact, and this is derived from it.\nexport const LIFELONG_UNIT = 'lifelong';\n\n// Distinguishes \"eligible for life\" (null) from \"not filled in yet\" (\"\" / undefined),\n// which still has to fail the required check.\nexport const isLifelong = (eligibleTo) => eligibleTo === null;\n\n// Marker used inside the overall-eligibility summary string. Must not contain \"to\",\n// which is what that string is split on for display.\nexport const LIFELONG_ELIGIBILITY = 'LIFELONG';\n\n// `windowInDays` is null for a lifelong dose, meaning there is no ceiling to check against.\nexport const validateOverdueWindow = (dose, perDoseUnits = {}, windowInDays) => {\n const errors = {};\n const hasFrom = !isBlankDuration(dose.overdueFrom);\n const hasTill = !isBlankDuration(dose.overdueTill);\n\n if (!hasFrom) {\n if (hasTill) {\n errors.overdueTill = 'Set Overdue From first';\n }\n return errors;\n }\n\n const fromInDays = getDaysVal(dose.overdueFrom, perDoseUnits.overdueFrom || 'days');\n const tillInDays = getDaysVal(dose.overdueTill, perDoseUnits.overdueTill || 'days');\n\n if (fromInDays <= 0) {\n errors.overdueFrom = 'Must be greater than 0';\n } else if (windowInDays > 0 && fromInDays >= windowInDays) {\n errors.overdueFrom = 'Must be within the eligibility window';\n }\n\n if (!hasTill) {\n errors.overdueTill = 'Overdue Till is required';\n } else if (tillInDays <= fromInDays) {\n errors.overdueTill = 'Must be greater than Overdue From';\n } else if (windowInDays > 0 && tillInDays > windowInDays) {\n errors.overdueTill = 'Must be within the eligibility window';\n }\n\n return errors;\n};\n\nexport const validateDoseDetails = (doseDetails, doseType, doseCount, durationUnits = {}) => {\n if (doseCount === 0) return null;\n const errors = [];\n const details = Array.isArray(doseDetails) ? doseDetails : [doseDetails];\n\n // Global fallback units (used for FIXED, or FLEXIBLE doses missing per-dose units)\n const globalEligibleFromUnit = durationUnits.eligibleFrom || 'days';\n const globalEligibleToUnit = durationUnits.eligibleTo || 'days';\n const globalIntervalUnit = durationUnits.interval || 'days';\n\n // Where the open-ended tail of the series begins, or -1 when nothing is lifelong.\n const firstLifelongIdx = details.findIndex((dose) => isLifelong(dose?.eligibleTo));\n\n details.forEach((dose, idx) => {\n // Use per-dose units if present (FLEXIBLE), otherwise fall back to global (FIXED)\n const perDoseUnits = dose.units || {};\n const eligibleFromUnit = perDoseUnits.eligibleFrom || globalEligibleFromUnit;\n const eligibleToUnit = perDoseUnits.eligibleTo || globalEligibleToUnit;\n const intervalUnit = perDoseUnits.interval || globalIntervalUnit;\n const doseErrors = {};\n const startInDays = getDaysVal(dose.eligibleFrom, eligibleFromUnit);\n const endInDays = getDaysVal(dose.eligibleTo, eligibleToUnit);\n const hasNoEnd = isLifelong(dose.eligibleTo);\n\n if ((dose.eligibleFrom === undefined || dose.eligibleFrom === null || dose.eligibleFrom === '') && idx !== 0) {\n doseErrors.eligibleFrom = 'Eligible From is required';\n }\n\n if (\n !hasNoEnd &&\n (dose.eligibleTo === undefined || dose.eligibleTo === '' || getDaysVal(dose.eligibleTo, eligibleToUnit) === 0)\n ) {\n doseErrors.eligibleTo = 'Eligible To is required';\n }\n\n const isLastFlexibleRow = doseType === 'FLEXIBLE' && idx === details.length - 1;\n\n const isIntervalRequired =\n (doseType === 'FIXED' && doseCount > 1) || (!isLastFlexibleRow && doseType === 'FLEXIBLE');\n\n if (isIntervalRequired) {\n const intervalVal = Number.parseInt(dose.interval) || 0;\n const intervalInDays = getDaysVal(dose.interval, intervalUnit);\n if (\n dose.interval === undefined ||\n dose.interval === null ||\n dose.interval === '' ||\n intervalVal === 0 ||\n dose.interval === '0 days'\n ) {\n doseErrors.interval = 'Interval is required';\n } else if (\n doseType === 'FIXED' &&\n doseCount > 1 &&\n // An open-ended window always has room for every dose.\n !hasNoEnd &&\n (doseCount - 1) * intervalInDays > endInDays - startInDays\n ) {\n doseErrors.interval = `Number of doses not possible in the window. Total interval exceeds available window (${endInDays - startInDays} days).`;\n }\n }\n\n if (!hasNoEnd && endInDays <= startInDays && dose.eligibleFrom && dose.eligibleTo) {\n doseErrors.eligibleTo = 'Must be strictly greater than ELIGIBLE FROM';\n }\n\n // Lifelong runs to the end of the series. A bounded dose sitting behind an open-ended one\n // can be pushed past its own window by an unbounded wait — the series then goes out of\n // scope and every dose after it is missed, so the vaccine can never be completed. The\n // dose table cascades this automatically; this catches configs saved before it existed.\n // Reported last so it wins over the required/ordering messages above, which describe the\n // same field but not the reason it cannot be filled in at all.\n if (doseType === 'FLEXIBLE' && !hasNoEnd && firstLifelongIdx !== -1 && idx > firstLifelongIdx) {\n doseErrors.eligibleTo = 'Doses after a lifelong dose must also be lifelong';\n }\n\n if (doseType === 'FLEXIBLE') {\n // A lifelong dose has no ceiling, so the overdue bounds are only checked against 0.\n Object.assign(doseErrors, validateOverdueWindow(dose, perDoseUnits, hasNoEnd ? null : endInDays - startInDays));\n }\n\n if (idx > 0 && doseType === 'FLEXIBLE') {\n const prevDose = details[idx - 1];\n const prevPerDoseUnits = prevDose.units || {};\n const prevFromUnit = prevPerDoseUnits.eligibleFrom || globalEligibleFromUnit;\n const prevIntervalUnit = prevPerDoseUnits.interval || globalIntervalUnit;\n const prevStartInDays = getDaysVal(prevDose.eligibleFrom, prevFromUnit);\n const prevIntervalDays = getDaysVal(prevDose.interval, prevIntervalUnit);\n if (startInDays < prevStartInDays + prevIntervalDays) {\n doseErrors.eligibleFrom = 'Must be greater than previous ELIGIBLE FROM and INTERVAL';\n }\n\n if (prevDose.isBooster && !dose.isBooster) {\n doseErrors.isBooster = 'A regular dose cannot follow a booster dose';\n }\n }\n\n if (Object.keys(doseErrors).length > 0) {\n errors[idx] = doseErrors;\n }\n });\n\n return errors.length > 0 ? errors : null;\n};\n\nexport const validateDependencies = (dependencies) => {\n const errors = [];\n const seenVaccines = new Set();\n\n dependencies.forEach((dep, idx) => {\n const depErrors = {};\n if (!dep.vaccine) {\n depErrors.vaccine = 'Vaccine selection is required';\n } else {\n if (seenVaccines.has(dep.vaccine)) {\n depErrors.vaccine = 'This vaccine is already added as a dependency';\n }\n seenVaccines.add(dep.vaccine);\n }\n\n const isMinEmpty = dep.minGap === '' || dep.minGap === null || dep.minGap === undefined;\n const isMaxEmpty = dep.maxGap === '' || dep.maxGap === null || dep.maxGap === undefined;\n\n const minGap = getDays(dep.minGap);\n const maxGap = getDays(dep.maxGap);\n\n if (dep.requirement === 'Should be given' || dep.requirement === 'Optional') {\n if (isMinEmpty) {\n depErrors.minGap = 'Gap cannot be empty';\n } else if (minGap <= 0) {\n depErrors.minGap = 'Must be greater than 0';\n }\n\n if (!isMinEmpty && !isMaxEmpty && minGap > 0 && maxGap > 0 && maxGap <= minGap) {\n depErrors.maxGap = 'Max gap must be greater than Min Gap';\n }\n } else {\n // For \"Should not be given\", values can be empty or zero.\n if (!isMinEmpty && minGap < 0) {\n depErrors.minGap = 'Gap cannot be negative';\n }\n if (!isMaxEmpty && maxGap < 0) {\n depErrors.maxGap = 'Gap cannot be negative';\n }\n }\n\n if (Object.keys(depErrors).length > 0) {\n errors[idx] = depErrors;\n }\n });\n\n return errors.some((e) => e && Object.keys(e).length > 0) ? errors : null;\n};\n\nexport const validateCodeSets = (codeSets) => {\n const errors = [];\n const seenTypes = new Set();\n\n (codeSets || []).forEach((cs, idx) => {\n const csErrors = {};\n if (!cs.type) {\n csErrors.type = 'Type is required';\n } else {\n if (seenTypes.has(cs.type)) {\n csErrors.type = 'This type is already added';\n }\n seenTypes.add(cs.type);\n }\n\n if (!cs.value || cs.value.trim() === '') {\n csErrors.value = 'Value is required';\n }\n\n if (Object.keys(csErrors).length > 0) {\n errors[idx] = csErrors;\n }\n });\n\n return errors.some((e) => e && Object.keys(e).length > 0) ? errors : null;\n};\n\n/**\n * The optional repeating booster on a FLEXIBLE schedule. Absent is valid — most vaccines have\n * none — so only a configured one is checked.\n */\n// The booster values carry their unit in the string — \"12 months\" — so the unit is taken\n// from the value itself rather than from a separate units object as a dose's would be.\nconst inDays = (val) => {\n const parts = String(val ?? '').trim().split(/\\s+/);\n return getDaysVal(val, parts.length > 1 ? parts[parts.length - 1] : 'days');\n};\n\nconst validateRecurringBooster = (vaccine) => {\n const booster = vaccine.recurringBooster;\n if (!booster || vaccine.doseType !== 'FLEXIBLE') {\n return null;\n }\n\n const errors = {};\n const from = Number.parseInt(booster.eligibleFrom, 10);\n const interval = Number.parseInt(booster.interval, 10);\n\n if (!(from >= 0)) {\n errors.eligibleFrom = 'Eligible From is required';\n }\n if (!(interval > 0)) {\n errors.interval = 'Interval must be greater than 0';\n }\n // Null is lifelong and always valid; a number has to leave room for at least one dose.\n if (!isLifelong(booster.eligibleTo)) {\n const to = Number.parseInt(booster.eligibleTo, 10);\n if (!(to > 0)) {\n errors.eligibleTo = 'Eligible To is required, or set it to No end';\n } else if (inDays(booster.eligibleTo) <= inDays(booster.eligibleFrom)) {\n errors.eligibleTo = 'Must be strictly greater than Eligible From';\n }\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n};\n\n/**\n * @param vaccine the draft being saved\n * @param includeSchedule whether this save rebuilds a product's schedule. False when no\n * product is open — a rename or a removal — where the panel's per-product fields are\n * leftovers from whatever was loaded last and validating them would block the save with\n * errors about a schedule nobody edited.\n */\nexport const validateVaccineForm = (vaccine, includeSchedule = true) => {\n const errors = {};\n\n if (!vaccine.name || vaccine.name.trim() === '') {\n errors.name = 'Vaccine Name is required';\n }\n\n if (!vaccine.recipientType) {\n errors.recipientType = 'Recipient Type is required';\n }\n\n if (!vaccine.baseDateCode) {\n errors.baseDateCode = 'Base Date is required';\n }\n\n const codeSetErrors = validateCodeSets(vaccine.codeSets || []);\n if (codeSetErrors) {\n errors.codeSets = codeSetErrors;\n }\n\n if (!includeSchedule) {\n return Object.keys(errors).length > 0 ? errors : null;\n }\n\n const isRecurring = vaccine.doseType === 'RECURRING';\n\n // A recurring schedule has no dose count by definition — the interval decides how many\n // doses there turn out to be, and that depends on the member.\n if (!isRecurring && (!vaccine.doses || vaccine.doses === 0)) {\n errors.doses = 'At least one dose is required';\n }\n\n // A recurring schedule is laid out as a single fixed-style row, so it validates as one dose\n // whatever `doses` happens to hold.\n const doseErrors = validateDoseDetails(\n vaccine.doseDetails,\n isRecurring ? 'FIXED' : vaccine.doseType,\n isRecurring ? 1 : vaccine.doses,\n vaccine.durationUnits\n );\n if (doseErrors) {\n errors.doseDetails = doseErrors;\n }\n\n // Without a repeat there is nothing to generate, so an interval of zero is the one value a\n // recurring schedule cannot hold: it would mean the same dose is available again the instant\n // it is given, forever.\n //\n // doseDetails holds a single dose as a bare object and several as an array — the same\n // duality validateDoseDetails normalises above. Reading [0] alone found nothing on the object\n // form, so the interval read as NaN and the error stood however large the number was.\n const recurringRow = Array.isArray(vaccine.doseDetails)\n ? vaccine.doseDetails[0]\n : vaccine.doseDetails;\n\n if (isRecurring && !(Number.parseInt(recurringRow?.interval, 10) > 0)) {\n errors.doseDetails = {\n ...(errors.doseDetails || {}),\n 0: { ...(errors.doseDetails?.[0] || {}), interval: 'Interval must be greater than 0' },\n };\n }\n\n const boosterErrors = validateRecurringBooster(vaccine);\n if (boosterErrors) {\n errors.recurringBooster = boosterErrors;\n }\n\n const depErrors = validateDependencies(vaccine.dependencies || []);\n if (depErrors) {\n errors.dependencies = depErrors;\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n};\n","import { execute, executeAll } from \"@/common/services/GlobalApis\";\nimport { api } from \"@/common/interceptors/AxiosInterceptor\";\nimport { LIFELONG_ELIGIBILITY, isLifelong } from \"../utils/validationUtils\";\n\nconst safeParseJson = (value, fallback) => {\n if (value == null) {\n return fallback;\n }\n\n if (typeof value !== \"string\") {\n return value;\n }\n\n try {\n return JSON.parse(value);\n } catch {\n return fallback;\n }\n};\n\nconst toStableId = (...parts) => parts.filter(Boolean).join(\"_\");\n\nconst normaliseEligibilityValue = (value) => {\n // Checked before the null branch below: a lifelong end is a real configured value,\n // not a missing one.\n if (isLifelong(value)) {\n return LIFELONG_ELIGIBILITY;\n }\n\n if (\n value === undefined ||\n value === \"\" ||\n value === \"N.A.\" ||\n value === \"null days\"\n ) {\n return \"N.A.\";\n }\n\n return value;\n};\n\nconst calculateOverallEligibility = (\n doseDetails,\n doseType = \"FLEXIBLE\",\n doses = 1,\n) => {\n // A recurring schedule has no dose count by definition, so the usual \"nothing configured\n // yet\" guard would read every one of them as N.A. Its window is the one thing it does have.\n const isRecurring = doseType === \"RECURRING\";\n\n if (doses === 0 && !isRecurring) {\n return \"N.A.\";\n }\n\n if (!doseDetails) {\n return \"N.A.\";\n }\n\n // One window rather than one per dose. Recurring is FIXED with the count taken away, and\n // both are held as a single row — sometimes a bare object, sometimes an array of one.\n if (doseType === \"FIXED\" || isRecurring) {\n const details = Array.isArray(doseDetails) ? doseDetails[0] : doseDetails;\n if (!details) {\n return \"N.A.\";\n }\n\n const eligibleFrom = normaliseEligibilityValue(details.eligibleFrom);\n const eligibleTo = normaliseEligibilityValue(details.eligibleTo);\n\n if (eligibleFrom === \"N.A.\" && eligibleTo === \"N.A.\") {\n return \"N.A.\";\n }\n\n return `${eligibleFrom} to ${eligibleTo}`;\n }\n\n if (!Array.isArray(doseDetails) || doseDetails.length === 0) {\n return \"N.A.\";\n }\n\n const first = normaliseEligibilityValue(doseDetails[0].eligibleFrom);\n const last = normaliseEligibilityValue(\n doseDetails[doseDetails.length - 1].eligibleTo,\n );\n\n if (first === \"N.A.\" && last === \"N.A.\") {\n return \"N.A.\";\n }\n\n return `${first} to ${last}`;\n};\n\nconst DEFAULT_DURATION_UNITS = {\n eligibleFrom: \"days\",\n eligibleTo: \"days\",\n interval: \"days\",\n};\n\n// A vaccine created but never configured has an empty `schedule`. The screen still needs\n// something to edit, so it gets the same shape a freshly migrated row would have.\nconst buildEmptyScheduleEntry = () => ({\n productId: null,\n noOfDoses: 0,\n doseType: \"FIXED\",\n doseEligibleFrom: undefined,\n doseEligibleTo: undefined,\n minGap: 0,\n durationUnits: { ...DEFAULT_DURATION_UNITS },\n dose: [],\n location: [],\n validations: [],\n});\n\n/**\n * Maps one element of the `schedule` column — the configuration for a single product — into\n * the shape the summary screen edits. With product management disabled there is exactly one\n * such entry, carrying productId null.\n */\nconst mapScheduleEntry = (entry, vaccineId, entryIndex) => {\n const doseTypeLower = String(entry.doseType || \"\").toLowerCase();\n // RECURRING is FIXED with the dose count taken away — one window and one interval — so it\n // is read into the same single-row shape and edited by the same controls.\n const isFixed =\n doseTypeLower === \"fixed\" ||\n doseTypeLower === \"na\" ||\n doseTypeLower === \"recurring\" ||\n !entry.doseType;\n\n const durationUnits = safeParseJson(entry.durationUnits, {\n ...DEFAULT_DURATION_UNITS,\n });\n\n // Not toStableId — it drops falsy parts, which would collapse entry 0 onto the bare id.\n const entryKey = `${vaccineId}s${entryIndex}`;\n\n const doseDetails = isFixed\n ? [\n {\n id: toStableId(\"fixed\", entryKey),\n eligibleFrom:\n entry.doseEligibleFrom !== undefined && entry.doseEligibleFrom !== null\n ? `${entry.doseEligibleFrom} ${durationUnits.eligibleFrom || \"days\"}`\n : \"\",\n // NULL is the stored form of a lifelong window — see the FLEXIBLE branch below.\n eligibleTo:\n entry.doseEligibleTo === null\n ? null\n : entry.doseEligibleTo !== undefined\n ? `${entry.doseEligibleTo} ${durationUnits.eligibleTo || \"days\"}`\n : \"\",\n interval: entry.minGap || 0,\n },\n ]\n : safeParseJson(entry.dose, []).map((dose, index) => {\n const perDoseUnits = {\n eligibleFrom:\n dose.eligible_from_unit || durationUnits.eligibleFrom || \"days\",\n eligibleTo:\n dose.eligible_to_unit || durationUnits.eligibleTo || \"days\",\n interval: dose.interval_unit || durationUnits.interval || \"days\",\n overdueFrom: dose.overdue_from_unit || \"days\",\n overdueTill: dose.overdue_till_unit || \"days\",\n };\n return {\n id: dose.id || toStableId(\"dose\", entryKey, index),\n isBooster:\n dose.isBooster === true ||\n dose.is_booster === true ||\n (typeof dose.dose === \"string\" &&\n dose.dose.toUpperCase().startsWith(\"B\")),\n alias: dose.alias || dose.booster_alias || \"\",\n eligibleFrom:\n dose.eligible_from !== undefined\n ? `${dose.eligible_from} ${perDoseUnits.eligibleFrom}`\n : \"\",\n // NULL is the stored form of a lifelong window; it must survive as null rather\n // than becoming the string \"null days\".\n eligibleTo:\n dose.eligible_to === null\n ? null\n : dose.eligible_to !== undefined\n ? `${dose.eligible_to} ${perDoseUnits.eligibleTo}`\n : \"\",\n overdueFrom:\n dose.overdue_from !== undefined && dose.overdue_from !== null\n ? `${dose.overdue_from} ${perDoseUnits.overdueFrom}`\n : \"\",\n overdueTill:\n dose.overdue_till !== undefined && dose.overdue_till !== null\n ? `${dose.overdue_till} ${perDoseUnits.overdueTill}`\n : \"\",\n interval: dose.min_gap || 0,\n units: perDoseUnits,\n };\n });\n\n const regions = safeParseJson(entry.location, [])\n .filter((location) => location && typeof location === \"object\")\n .map((location, index) => ({\n id: toStableId(\"region\", entryKey, index),\n locationId: location.locationId,\n locationIdArr: location.locationIdArr,\n locationList: location.locationList,\n fullPath: location.locationList?.replaceAll(\" => \", \" → \"),\n }));\n\n const dependencies = safeParseJson(entry.validations, []).map(\n (dependency, index) => ({\n id: toStableId(\"dep\", entryKey, index),\n vaccine: dependency.vaccine || \"\",\n requirement: dependency.requirement || \"Should be given\",\n minGap: Number.parseInt(dependency.minGap, 10) || 0,\n maxGap: Number.parseInt(dependency.maxGap, 10) || 0,\n message: dependency.message || \"\",\n }),\n );\n\n const doses = entry.noOfDoses || 0;\n const doseType = entry.doseType && entry.doseType !== \"NA\" ? entry.doseType : \"FIXED\";\n\n // The optional repeating tail on a FLEXIBLE schedule. Stored with its units alongside each\n // value; read back into the \"12 months\" strings the duration controls edit.\n const booster = entry.recurringBooster\n ? safeParseJson(entry.recurringBooster, null)\n : null;\n const recurringBooster =\n booster && booster.eligibleFrom !== undefined && booster.eligibleFrom !== null\n ? {\n eligibleFrom: `${booster.eligibleFrom} ${booster.eligibleFromUnit || \"days\"}`,\n // NULL is the stored form of a lifelong window, exactly as for a dose.\n eligibleTo:\n booster.eligibleTo === null || booster.eligibleTo === undefined\n ? null\n : `${booster.eligibleTo} ${booster.eligibleToUnit || \"days\"}`,\n interval: `${booster.interval ?? 0} ${booster.intervalUnit || \"days\"}`,\n }\n : null;\n\n return {\n productId: entry.productId ?? null,\n doses,\n doseType,\n doseDetails,\n durationUnits,\n recurringBooster,\n regions,\n dependencies,\n eligibility: calculateOverallEligibility(doseDetails, doseType, doses),\n };\n};\n\nconst mapImmunizationVaccineConfig = (vaccine) => {\n const parsedSchedule = safeParseJson(vaccine.schedule, []);\n const scheduleEntries =\n Array.isArray(parsedSchedule) && parsedSchedule.length > 0\n ? parsedSchedule\n : [buildEmptyScheduleEntry()];\n\n const productSchedules = scheduleEntries.map((entry, index) =>\n mapScheduleEntry(entry || {}, vaccine.id, index),\n );\n\n const parsedFilters = safeParseJson(vaccine.filters, []);\n const filters = Array.isArray(parsedFilters)\n ? parsedFilters\n : parsedFilters?.codes || [];\n\n const parsedCodeSets = safeParseJson(vaccine.code_sets, []);\n const codeSets = Array.isArray(parsedCodeSets) ? parsedCodeSets : [];\n\n // The first entry doubles as the vaccine's headline configuration. With product management\n // off it is the only one, so these top-level fields stay exactly what they always were.\n const [primarySchedule] = productSchedules;\n\n return {\n ...vaccine,\n name: vaccine.vaccine_name || vaccine.name || \"N.A.\",\n category:\n vaccine.target_prevention ||\n vaccine.disease ||\n vaccine.category ||\n \"N.A.\",\n productSchedules,\n doses: primarySchedule.doses,\n doseType: primarySchedule.doseType,\n doseDetails: primarySchedule.doseDetails,\n eligibility: primarySchedule.eligibility,\n isActive: vaccine.is_active !== undefined ? vaccine.is_active : true,\n // True while this vaccine has configuration saved but not yet published. Everything above\n // is already the draft's values — FETCH_IMMUNISATION_MASTER prefers the draft — so this is\n // the only thing telling the screen that what it is showing is not what members see.\n hasUnpublishedChanges: Boolean(vaccine.has_unpublished_changes),\n regions: primarySchedule.regions,\n dependencies: primarySchedule.dependencies,\n filters,\n codeSets,\n durationUnits: primarySchedule.durationUnits,\n baseDateCode: vaccine.base_date_code,\n recipientType: vaccine.recipient_type || \"\",\n scheduleType:\n vaccine.schedule_type === \"NON_ROUTINE\" ? \"NON_ROUTINE\" : \"ROUTINE\",\n };\n};\n\nconst getVaccines = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_MASTER\",\n parameters: {},\n });\n};\n\nconst getBaseDates = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_BASE_DATE\",\n parameters: {},\n });\n};\n\nconst getRecipients = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: {},\n });\n};\n\nconst getImmunizationReferenceData = () => {\n return executeAll([\n {\n code: \"FETCH_IMMUNISATION_BASE_DATE\",\n parameters: {},\n sequence: 1,\n },\n {\n code: \"GET_ALL_IMMUNISATION_FILTERS\",\n parameters: {},\n sequence: 2,\n },\n {\n code: \"FETCH_IMMUNISATION_MASTER\",\n parameters: {},\n sequence: 3,\n },\n {\n code: \"FETCH_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: {},\n sequence: 4,\n },\n ]);\n};\n\nconst addImmunization = (data) => {\n return execute({\n code: \"INSERT_IMMUNIZATION_MASTER\",\n parameters: data,\n });\n};\n\nconst updateImmunization = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_DOSE\",\n ...data,\n });\n};\n\nconst checkImmunizationConfigurationInitiation = (data) => {\n return execute({\n code: \"CHECK_IMMUNIZATION_CONFIGURATION_INITIATION\",\n ...data,\n });\n};\n\nconst updateVaccineStatus = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_STATUS\",\n ...data,\n });\n};\n\nconst updateVaccineStatusFromArray = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_STATUS_FOR_ARRAY\",\n ...data,\n });\n};\n\nconst updateImmunizationConfigurationInitiation = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_CONFIGURATION_INITIATION\",\n ...data,\n });\n};\n\nconst saveBaseDate = (data) => {\n return execute({\n code: \"SAVE_IMMUNISATION_BASE_DATE\",\n parameters: data,\n });\n};\n\nconst saveRecipient = (data) => {\n return execute({\n code: \"SAVE_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: data,\n });\n};\n\nconst updateRecipient = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: data,\n });\n};\n\nconst updateBaseDate = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_BASE_DATE\",\n parameters: data,\n });\n};\n\nconst getAllTablesAndColumns = () => {\n return execute({\n code: \"retrieve_all_tables_and_columns\",\n parameters: {},\n });\n};\n\nconst getFilters = () => {\n return execute({\n code: \"GET_ALL_IMMUNISATION_FILTERS\",\n parameters: {},\n });\n};\n\nconst addFilter = (data) => {\n return execute({\n code: \"ADD_IMMUNISATION_FILTER\",\n parameters: data,\n });\n};\n\nconst updateFilter = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_FILTER\",\n parameters: data,\n });\n};\n\nconst getImmunisationV2List = (data) => {\n return api.post(\"/medplatform/v2/immunisation/list\", data);\n};\n\nconst revalidateImmunisationV2List = (data) => {\n return api.post(\"/medplatform/v2/immunisation/revalidate\", data);\n};\n\n/**\n * Tells the configured reviewers that a vaccine's configuration was saved.\n *\n * Only the vaccine name and the list of change descriptions travel: the recipients come from\n * system configuration and the editor's name from the session, neither of which the browser\n * should be able to choose.\n */\nconst notifyConfigChange = (data) => {\n return api.post(\"/medplatform/v2/immunisation/config-change-notification\", data);\n};\n\nexport const ImmunizationUtil = {\n calculateOverallEligibility,\n mapImmunizationVaccineConfig,\n getVaccines,\n getBaseDates,\n getRecipients,\n getImmunizationReferenceData,\n addImmunization,\n updateImmunization,\n checkImmunizationConfigurationInitiation,\n updateVaccineStatus,\n updateVaccineStatusFromArray,\n updateImmunizationConfigurationInitiation,\n saveBaseDate,\n saveRecipient,\n updateRecipient,\n updateBaseDate,\n getAllTablesAndColumns,\n getFilters,\n addFilter,\n updateFilter,\n getImmunisationV2List,\n revalidateImmunisationV2List,\n notifyConfigChange,\n};\n"],"names":["VerifyRoute","lazy","Roles","QueryBuilder","n","UserList","ManageUser","QueryManagement","FeatureMenu","ActivityAnalytics","NewServerManagement","ManageDynamicFeature","SecurityAuditLogList","EventConfigurations","ManageEventConfiguration","EntityManagement","MobileAnalytics","MobileMenuManagement","AddMenuConfiguration","ManageTranslation","WidgetList","NotificationList","ImmunizationConfigurationsList","ManageImmunization","ImmunizationConfiguration","FhirServerList","FhirServerWizard","FhirServerProfile","FhirRawResourceList","corecustom2Routes","jsx","createInitialState","initialState","upsertByIdOrCode","items","incoming","matchIndex","item","index","immunizationSlice","createSlice","state","action","id","vaccines","vaccine","payload","name","vaccine_name","disease","target_prevention","baseDateCode","base_date_code","recipientType","recipient_type","finalName","finalCategory","validIds","v","nextId","newVaccine","updatedVaccine","code","is_active","vaccineId","status","vIndex","sIndex","errors","toggleVaccine","setVaccines","addCustomVaccine","setCurrentView","updateScheduledVaccine","setBaseDatesMaster","setRecipientMaster","setDbTablesMaster","setFiltersMaster","upsertBaseDateMasterItem","upsertRecipientMasterItem","updateBaseDateMasterStatus","upsertFilterMasterItem","updateFilterMasterStatus","setFeatureRights","setImmunizationConfigLoaded","resetImmunizationState","activateSelectedVaccines","setSelectedVaccineIds","setValidationErrors","clearValidationErrors","setVaccineStatus","immunizationSlice_default","getDays","val","getDaysVal","unit","num","isBlankDuration","LIFELONG_UNIT","isLifelong","eligibleTo","LIFELONG_ELIGIBILITY","validateOverdueWindow","dose","perDoseUnits","windowInDays","hasFrom","hasTill","fromInDays","tillInDays","validateDoseDetails","doseDetails","doseType","doseCount","durationUnits","details","globalEligibleFromUnit","globalEligibleToUnit","globalIntervalUnit","firstLifelongIdx","idx","eligibleFromUnit","eligibleToUnit","intervalUnit","doseErrors","startInDays","endInDays","hasNoEnd","isLastFlexibleRow","intervalVal","intervalInDays","prevDose","prevPerDoseUnits","prevFromUnit","prevIntervalUnit","prevStartInDays","prevIntervalDays","validateDependencies","dependencies","seenVaccines","dep","depErrors","isMinEmpty","isMaxEmpty","minGap","maxGap","e","validateCodeSets","codeSets","seenTypes","cs","csErrors","inDays","parts","validateRecurringBooster","booster","from","interval","validateVaccineForm","includeSchedule","codeSetErrors","isRecurring","recurringRow","_a","boosterErrors","safeParseJson","value","fallback","toStableId","normaliseEligibilityValue","calculateOverallEligibility","doses","eligibleFrom","first","last","DEFAULT_DURATION_UNITS","buildEmptyScheduleEntry","mapScheduleEntry","entry","entryIndex","doseTypeLower","isFixed","entryKey","regions","location","dependency","recurringBooster","mapImmunizationVaccineConfig","parsedSchedule","productSchedules","parsedFilters","filters","parsedCodeSets","primarySchedule","getVaccines","execute","getBaseDates","getRecipients","getImmunizationReferenceData","executeAll","addImmunization","data","updateImmunization","checkImmunizationConfigurationInitiation","updateVaccineStatus","updateVaccineStatusFromArray","updateImmunizationConfigurationInitiation","saveBaseDate","saveRecipient","updateRecipient","updateBaseDate","getAllTablesAndColumns","getFilters","addFilter","updateFilter","getImmunisationV2List","api","revalidateImmunisationV2List","notifyConfigChange","ImmunizationUtil"],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { i } from "./ImmunizationConfigurationBase-aUtx0JEe.js";
|
|
2
|
-
import { d as m, t as d, a as p, e as f } from "./constants-DpXnLsAB-D6lN5cjK.js";
|
|
3
|
-
import { useState as s, useEffect as h } from "react";
|
|
4
|
-
var l = null, r = null, o = /* @__PURE__ */ new Set();
|
|
5
|
-
function e(t, n) {
|
|
6
|
-
return !Array.isArray(t) || t.length === 0 ? n : t.map((a) => ({
|
|
7
|
-
value: a.code,
|
|
8
|
-
label: a.label || a.code
|
|
9
|
-
}));
|
|
10
|
-
}
|
|
11
|
-
function u(t) {
|
|
12
|
-
return {
|
|
13
|
-
productUnits: e(t == null ? void 0 : t[f], p),
|
|
14
|
-
storageUnitTypes: e(t == null ? void 0 : t[d], m),
|
|
15
|
-
loaded: t != null
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function c() {
|
|
19
|
-
o.forEach((t) => t(l));
|
|
20
|
-
}
|
|
21
|
-
async function y(t = !1) {
|
|
22
|
-
return !t && (l != null && l.loaded) ? l : (!t && r || (r = i([f, d]).then((n) => (l = u(n), r = null, c(), l)).catch((n) => {
|
|
23
|
-
throw r = null, l || (l = u(null), c()), n;
|
|
24
|
-
})), r);
|
|
25
|
-
}
|
|
26
|
-
function w() {
|
|
27
|
-
let [t, n] = s(l ?? u(null));
|
|
28
|
-
return h(() => (o.add(n), !(l != null && l.loaded) && !r ? y().catch(() => {
|
|
29
|
-
}) : l && n(l), () => {
|
|
30
|
-
o.delete(n);
|
|
31
|
-
}), []), t;
|
|
32
|
-
}
|
|
33
|
-
export {
|
|
34
|
-
w as m
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=listValueStore-BFQtDYIR-Bj0yX145.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"listValueStore-BFQtDYIR-Bj0yX145.js","sources":["../../productManagement/dist/listValueStore-BFQtDYIR.js"],"sourcesContent":["import { B as e } from \"./settingsStore-BHHOmcCP.js\";\nimport { a as t, i as n, o as r, s as i } from \"./constants-DpXnLsAB.js\";\nimport { useEffect as a, useState as o } from \"react\";\n//#region src/utils/listValueStore.js\nvar s = null, c = null, l = /* @__PURE__ */ new Set();\nfunction u(e, t) {\n\treturn !Array.isArray(e) || e.length === 0 ? t : e.map((e) => ({\n\t\tvalue: e.code,\n\t\tlabel: e.label || e.code\n\t}));\n}\nfunction d(e) {\n\treturn {\n\t\tproductUnits: u(e?.[r], n),\n\t\tstorageUnitTypes: u(e?.[i], t),\n\t\tloaded: e != null\n\t};\n}\nfunction f() {\n\tl.forEach((e) => e(s));\n}\nasync function p(t = !1) {\n\treturn !t && s?.loaded ? s : (!t && c || (c = e([r, i]).then((e) => (s = d(e), c = null, f(), s)).catch((e) => {\n\t\tthrow c = null, s || (s = d(null), f()), e;\n\t})), c);\n}\nfunction m() {\n\tlet [e, t] = o(s ?? d(null));\n\treturn a(() => (l.add(t), !s?.loaded && !c ? p().catch(() => {}) : s && t(s), () => {\n\t\tl.delete(t);\n\t}), []), e;\n}\n//#endregion\nexport { m as t };\n\n//# sourceMappingURL=listValueStore-BFQtDYIR.js.map"],"names":["s","c","l","u","e","t","d","r","n","i","f","p","m","o","a"],"mappings":";;;AAIA,IAAIA,IAAI,MAAMC,IAAI,MAAMC,IAAoB,oBAAI,IAAG;AACnD,SAASC,EAAEC,GAAGC,GAAG;AAChB,SAAO,CAAC,MAAM,QAAQD,CAAC,KAAKA,EAAE,WAAW,IAAIC,IAAID,EAAE,IAAI,CAACA,OAAO;AAAA,IAC9D,OAAOA,EAAE;AAAA,IACT,OAAOA,EAAE,SAASA,EAAE;AAAA,EACtB,EAAG;AACH;AACA,SAASE,EAAEF,GAAG;AACb,SAAO;AAAA,IACN,cAAcD,EAAEC,KAAAA,gBAAAA,EAAIG,IAAIC,CAAC;AAAA,IACzB,kBAAkBL,EAAEC,KAAAA,gBAAAA,EAAIK,IAAIJ,CAAC;AAAA,IAC7B,QAAQD,KAAK;AAAA,EACf;AACA;AACA,SAASM,IAAI;AACZ,EAAAR,EAAE,QAAQ,CAACE,MAAMA,EAAEJ,CAAC,CAAC;AACtB;AACA,eAAeW,EAAEN,IAAI,IAAI;AACxB,SAAO,CAACA,MAAKL,KAAA,QAAAA,EAAG,UAASA,KAAK,CAACK,KAAKJ,MAAMA,IAAIG,EAAE,CAACG,GAAGE,CAAC,CAAC,EAAE,KAAK,CAACL,OAAOJ,IAAIM,EAAEF,CAAC,GAAGH,IAAI,MAAMS,EAAC,GAAIV,EAAE,EAAE,MAAM,CAACI,MAAM;AAC9G,UAAMH,IAAI,MAAMD,MAAMA,IAAIM,EAAE,IAAI,GAAGI,EAAC,IAAKN;AAAA,EAC1C,CAAC,IAAIH;AACN;AACA,SAASW,IAAI;AACZ,MAAI,CAACR,GAAGC,CAAC,IAAIQ,EAAEb,KAAKM,EAAE,IAAI,CAAC;AAC3B,SAAOQ,EAAE,OAAOZ,EAAE,IAAIG,CAAC,GAAG,EAACL,KAAA,QAAAA,EAAG,WAAU,CAACC,IAAIU,IAAI,MAAM,MAAM;AAAA,EAAC,CAAC,IAAIX,KAAKK,EAAEL,CAAC,GAAG,MAAM;AACnF,IAAAE,EAAE,OAAOG,CAAC;AAAA,EACX,IAAI,CAAA,CAAE,GAAGD;AACV;"}
|