@argusoft/medplat-core 1.0.30 → 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-xrday-L1.js → AccessRights-DBjTQA1-.js} +395 -390
- 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-DmRW5bhm-Bk1szrjI.js → BrandsPage-CdcAvaml-ZtVTX6vX.js} +43 -43
- package/dist/{BrandsPage-DmRW5bhm-Bk1szrjI.js.map → BrandsPage-CdcAvaml-ZtVTX6vX.js.map} +1 -1
- package/dist/{CategoriesPage-BsS5IQh3-B03lWRY5.js → CategoriesPage-BprQEYJw-CclreTv1.js} +109 -102
- package/dist/CategoriesPage-BprQEYJw-CclreTv1.js.map +1 -0
- package/dist/{ChangePasswordModalCore-BPsJquTS.js → ChangePasswordModalCore-DZGOkbRY.js} +3 -3
- package/dist/{ChangePasswordModalCore-BPsJquTS.js.map → ChangePasswordModalCore-DZGOkbRY.js.map} +1 -1
- package/dist/ConditionConfig-Bpm6OoV5.js +408 -0
- package/dist/ConditionConfig-Bpm6OoV5.js.map +1 -0
- package/dist/{DashboardPage-C3bKc5na-sBd9Yqbi.js → DashboardPage-CTiGSx71-CsYohJ5e.js} +32 -32
- package/dist/{DashboardPage-C3bKc5na-sBd9Yqbi.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/EventConfig-BY2cgGyx.js +27 -0
- package/dist/{EventConfig-BmLemzX3.js.map → EventConfig-BY2cgGyx.js.map} +1 -1
- package/dist/EventConfigurations-B-z7xHh_.js +544 -0
- package/dist/EventConfigurations-B-z7xHh_.js.map +1 -0
- package/dist/EventConfigurations.css +1 -1
- package/dist/EventsExceptionModal-DafomIv6.js +188 -0
- package/dist/EventsExceptionModal-DafomIv6.js.map +1 -0
- package/dist/EventsUi-Dl_yckSA.js +263 -0
- 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-DYJmDt7q.js → FeatureMenu-Kc73yPHH.js} +9 -5
- package/dist/FeatureMenu-Kc73yPHH.js.map +1 -0
- package/dist/{FhirServerList-DuTwnngN.js → FhirServerList-CrIHMAxz.js} +16 -16
- package/dist/{FhirServerList-DuTwnngN.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/{GrantPermissionModal-BDN66Atn.js → GrantPermissionModal-D7iNZd0M.js} +54 -51
- package/dist/GrantPermissionModal-D7iNZd0M.js.map +1 -0
- package/dist/ImmunizationConfigurationBase-lKsJZMak.js +8060 -0
- 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-DqPbn3Oi.js +1216 -0
- package/dist/ManageEventConfiguration-DqPbn3Oi.js.map +1 -0
- package/dist/ManageEventConfiguration.css +1 -1
- package/dist/ManageRole-CyfpySt9.js +981 -0
- package/dist/ManageRole-CyfpySt9.js.map +1 -0
- package/dist/{ManageUser-DCFkUMV9.js → ManageUser-Dm0l833u.js} +286 -286
- package/dist/{ManageUser-DCFkUMV9.js.map → ManageUser-Dm0l833u.js.map} +1 -1
- package/dist/{MemberProfileCard-BdUNgHRB-VywqQdFF.js → MemberProfileCard-01d_jz3w-DYHtbgMX.js} +46 -46
- package/dist/{MemberProfileCard-BdUNgHRB-VywqQdFF.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-DodU3beR.js +752 -0
- package/dist/MobileTypeEventConfigModal-DodU3beR.js.map +1 -0
- 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-CIVe0P0p-25BQVpOX.js → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js} +58 -58
- package/dist/{PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js.map} +1 -1
- package/dist/{PaymentsPage-BvPe5Q9F-D2gfziwW.js → PaymentsPage-CHieGNrn-BnYCtqHd.js} +37 -37
- package/dist/{PaymentsPage-BvPe5Q9F-D2gfziwW.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-DHmcAG23-DL2p6IKJ.js → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js} +2 -2
- package/dist/{PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.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-Ctpghavs-CUp4uIZq.js → PickupsPage-BWblMlic-CWkgeBw0.js} +132 -132
- 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-CupVmOD4-D45a_hf-.js → ProductsPage-BI22nPb4-CQBjnc-n.js} +44 -43
- package/dist/ProductsPage-BI22nPb4-CQBjnc-n.js.map +1 -0
- package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js +724 -0
- package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js.map +1 -0
- package/dist/{PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js → PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js} +428 -418
- package/dist/PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js.map +1 -0
- package/dist/{PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js} +65 -65
- package/dist/{PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js.map} +1 -1
- package/dist/{PurchasesPage-It1GHiXl-eH4IsF_U.js → PurchasesPage-Djl1AqD_-DXeYFMrX.js} +55 -55
- package/dist/{PurchasesPage-It1GHiXl-eH4IsF_U.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-C9kFmTvm-B3Y0o4CX.js → SaleCreatePage-DHBLmlBr-BlgjVsq6.js} +39 -39
- package/dist/{SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map → SaleCreatePage-DHBLmlBr-BlgjVsq6.js.map} +1 -1
- package/dist/{SalesPage-D18DCseD-BxktGDRQ.js → SalesPage-eF9Yr42z-BQ9FlXC3.js} +61 -61
- package/dist/{SalesPage-D18DCseD-BxktGDRQ.js.map → SalesPage-eF9Yr42z-BQ9FlXC3.js.map} +1 -1
- package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js +741 -0
- package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js.map +1 -0
- package/dist/{ShowFlywayQuery-D1y_4A1u.js → ShowFlywayQuery-DIOUdYfG.js} +26 -19
- package/dist/{ShowFlywayQuery-D1y_4A1u.js.map → ShowFlywayQuery-DIOUdYfG.js.map} +1 -1
- package/dist/{StorageUnitsPage-7EqwuMOI-BwUso1Th.js → StorageUnitsPage-CTEVuemZ-B4osG74N.js} +253 -223
- package/dist/StorageUnitsPage-CTEVuemZ-B4osG74N.js.map +1 -0
- package/dist/{SubMenu-eEDhZUvh.js → SubMenu-OO2zhKiu.js} +5 -3
- package/dist/SubMenu-OO2zhKiu.js.map +1 -0
- 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-DrH53pVS-BkhIGB6C.js → TransactionsPage-Zuu7sjID-B-ACzvd1.js} +195 -180
- 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-EaFiOzRE.js +114 -0
- package/dist/TypeConfiguration-EaFiOzRE.js.map +1 -0
- 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-Bpc4Sazd.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-ClZJY2x1-MkSWn6TZ.js → constants-BTpJFQe_-CYPZIqQF.js} +166 -56
- 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-BySa9-Z-.js +936 -0
- 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-xrday-L1.js.map +0 -1
- package/dist/AddMenuConfiguration-e5BVXhmw.js +0 -8547
- package/dist/AddMenuConfiguration-e5BVXhmw.js.map +0 -1
- package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +0 -1
- package/dist/ConditionConfig-Ddz9halE.js +0 -395
- package/dist/ConditionConfig-Ddz9halE.js.map +0 -1
- package/dist/ConditionConfig.css +0 -1
- package/dist/EntityManagement-CPQL6qBj.js +0 -50
- package/dist/EntityManagement-CPQL6qBj.js.map +0 -1
- package/dist/EventConfig-BmLemzX3.js +0 -26
- package/dist/EventConfigurations-Bzh1qWXU.js +0 -450
- package/dist/EventConfigurations-Bzh1qWXU.js.map +0 -1
- package/dist/EventsExceptionModal-B2SRrnB1.js +0 -200
- package/dist/EventsExceptionModal-B2SRrnB1.js.map +0 -1
- package/dist/EventsSkeleton-BIcPks4T.js +0 -61
- package/dist/EventsSkeleton-BIcPks4T.js.map +0 -1
- package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +0 -79
- package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +0 -1
- package/dist/FeatureMenu-DYJmDt7q.js.map +0 -1
- package/dist/GrantPermissionModal-BDN66Atn.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +0 -7639
- package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +0 -1
- package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +0 -665
- package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +0 -1
- package/dist/ManageDynamicFeature-BU0I45dd.js.map +0 -1
- package/dist/ManageEventConfiguration-CoYcpjR9.js +0 -1085
- package/dist/ManageEventConfiguration-CoYcpjR9.js.map +0 -1
- package/dist/ManageRole-CNZBRKGU.js +0 -776
- package/dist/ManageRole-CNZBRKGU.js.map +0 -1
- package/dist/MobileAnalytics-pQoE8cG1.js +0 -16888
- package/dist/MobileAnalytics-pQoE8cG1.js.map +0 -1
- package/dist/MobileMenuManagement-Cf8IZlla.js +0 -108
- package/dist/MobileMenuManagement-Cf8IZlla.js.map +0 -1
- package/dist/MobileTypeEventConfigModal-BeveaX0C.js +0 -783
- package/dist/MobileTypeEventConfigModal-BeveaX0C.js.map +0 -1
- package/dist/NewServerManagement-Cxe0dV0O.js.map +0 -1
- package/dist/OtherTypeEventConfigModal-CM6VkdmY.js +0 -2046
- package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +0 -1
- package/dist/PermissionsModal-CCYkcKlC.js.map +0 -1
- package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +0 -783
- package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +0 -1
- package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +0 -1
- package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +0 -599
- package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +0 -1
- package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +0 -1302
- package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +0 -1
- package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +0 -1
- package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +0 -648
- package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +0 -1
- package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +0 -1
- package/dist/Roles-BIyiic67.js +0 -14
- package/dist/Roles-BIyiic67.js.map +0 -1
- package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +0 -747
- package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +0 -1
- package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +0 -1
- package/dist/SubMenu-eEDhZUvh.js.map +0 -1
- package/dist/TableDetails-BtafRxXb.js.map +0 -1
- package/dist/TableList-Dpo6dO7S.js.map +0 -1
- package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +0 -1
- package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +0 -315
- package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +0 -1
- package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +0 -476
- package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +0 -1
- package/dist/TypeConfiguration-3O6ABrK-.js +0 -117
- package/dist/TypeConfiguration-3O6ABrK-.js.map +0 -1
- package/dist/UserList-DgPxsnj2.js +0 -1129
- package/dist/UserList-DgPxsnj2.js.map +0 -1
- package/dist/Users-Bpc4Sazd.js +0 -41
- package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +0 -321
- package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +0 -1
- package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +0 -1
- package/dist/dashboardLayoutUtils-D1xCAxp3.js +0 -405
- package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +0 -1
- package/dist/index-D9YNFPn9.js.map +0 -1
- package/dist/index.lib-Dn8PMkeD.js +0 -862
- package/dist/index.lib-Dn8PMkeD.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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"}
|