@argusoft/medplat-core 1.0.31 → 1.0.33
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-BC43Jhml.js +1093 -0
- package/dist/AccessRights-BC43Jhml.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-CYT80CMH.js} +45 -45
- package/dist/{BrandsPage-DMw2vT0u-BVhvhc6J.js.map → BrandsPage-CdcAvaml-CYT80CMH.js.map} +1 -1
- package/dist/{CategoriesPage-D3ihx9Gi-CT58g0ry.js → CategoriesPage-BprQEYJw-BRAukJB1.js} +43 -43
- package/dist/{CategoriesPage-D3ihx9Gi-CT58g0ry.js.map → CategoriesPage-BprQEYJw-BRAukJB1.js.map} +1 -1
- package/dist/ChangePasswordModalCore-rypTxA2O.js +238 -0
- package/dist/ChangePasswordModalCore-rypTxA2O.js.map +1 -0
- 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-DX-TzGOH.js} +29 -29
- package/dist/{DashboardPage-asr2XDRu-uOOlX9Vq.js.map → DashboardPage-CTiGSx71-DX-TzGOH.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-D0JUIqLv.js +112 -0
- package/dist/FacilityPicker-BXa2VF7i-D0JUIqLv.js.map +1 -0
- package/dist/FaqList-CeDEuhU_.js +237 -0
- package/dist/FaqList-CeDEuhU_.js.map +1 -0
- package/dist/FaqSkeletons-hLCEcRr-.js +19 -0
- package/dist/FaqSkeletons-hLCEcRr-.js.map +1 -0
- package/dist/FaqView-sDzBVyXV.js +617 -0
- package/dist/FaqView-sDzBVyXV.js.map +1 -0
- package/dist/{FeatureMenu-CHsBbw3W.js → FeatureMenu-CaI-ZhSZ.js} +2 -2
- package/dist/{FeatureMenu-CHsBbw3W.js.map → FeatureMenu-CaI-ZhSZ.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-Clkk0-n6.js} +2638 -2577
- package/dist/ImmunizationConfigurationBase-Clkk0-n6.js.map +1 -0
- package/dist/InventoryPage-JadYMCzU-CWcCauMI.js +1017 -0
- package/dist/InventoryPage-JadYMCzU-CWcCauMI.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/ManageFaq-4cT6bntx.js +1583 -0
- package/dist/ManageFaq-4cT6bntx.js.map +1 -0
- package/dist/ManageFaq.css +1 -0
- package/dist/ManageRole-CyfpySt9.js +981 -0
- package/dist/ManageRole-CyfpySt9.js.map +1 -0
- package/dist/{ManageUser-DZltBina.js → ManageUser-DchUMAyC.js} +172 -172
- package/dist/{ManageUser-DZltBina.js.map → ManageUser-DchUMAyC.js.map} +1 -1
- package/dist/{MemberProfileCard-D5CgkTdJ-D2NgDJl3.js → MemberProfileCard-01d_jz3w-CQi_zu6x.js} +37 -37
- package/dist/{MemberProfileCard-D5CgkTdJ-D2NgDJl3.js.map → MemberProfileCard-01d_jz3w-CQi_zu6x.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-_98S21Sa.js} +56 -56
- package/dist/{PaymentCreatePage-DfvSZ-kB-CckogYoe.js.map → PaymentCreatePage-D6NZBUC3-_98S21Sa.js.map} +1 -1
- package/dist/{PaymentsPage-DMNjYWAJ-ChO9IXmk.js → PaymentsPage-CHieGNrn-ChCXEyck.js} +38 -38
- package/dist/{PaymentsPage-DMNjYWAJ-ChO9IXmk.js.map → PaymentsPage-CHieGNrn-ChCXEyck.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-BEtI5mIU.js} +2 -2
- package/dist/{PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js.map → PickupBatchLinesEditor-QPaqFtUO-BEtI5mIU.js.map} +1 -1
- package/dist/PickupCreatePage-C7_67u_u-DbDIZ1WC.js +801 -0
- package/dist/PickupCreatePage-C7_67u_u-DbDIZ1WC.js.map +1 -0
- package/dist/{PickupsPage-D7zyioJB-bHKnARYw.js → PickupsPage-BWblMlic-KehDMebm.js} +122 -122
- package/dist/PickupsPage-BWblMlic-KehDMebm.js.map +1 -0
- package/dist/PmGuard-BvUUbU80-DJipZoSg.js +641 -0
- package/dist/PmGuard-BvUUbU80-DJipZoSg.js.map +1 -0
- package/dist/ProductEditPage-Dbq4vUAA-DusAdAvm.js +1523 -0
- package/dist/ProductEditPage-Dbq4vUAA-DusAdAvm.js.map +1 -0
- package/dist/{ProductsPage-DvNHIeZt-BoOOJJtk.js → ProductsPage-BI22nPb4-D3GnWz34.js} +29 -29
- package/dist/{ProductsPage-DvNHIeZt-BoOOJJtk.js.map → ProductsPage-BI22nPb4-D3GnWz34.js.map} +1 -1
- package/dist/PurchaseCreatePage-C0EK9z4w-D4PlZsOH.js +724 -0
- package/dist/PurchaseCreatePage-C0EK9z4w-D4PlZsOH.js.map +1 -0
- package/dist/{PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js → PurchaseRequestDetailPage-DhBuOGHZ-CAmlL4fP.js} +446 -436
- package/dist/PurchaseRequestDetailPage-DhBuOGHZ-CAmlL4fP.js.map +1 -0
- package/dist/{PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js → PurchaseRequestsPage-Bj9HUMxb-BCAhEEkL.js} +55 -55
- package/dist/{PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js.map → PurchaseRequestsPage-Bj9HUMxb-BCAhEEkL.js.map} +1 -1
- package/dist/{PurchasesPage-DgL5T6BY-DePUuE9l.js → PurchasesPage-Djl1AqD_-DxBRFRDy.js} +61 -61
- package/dist/{PurchasesPage-DgL5T6BY-DePUuE9l.js.map → PurchasesPage-Djl1AqD_-DxBRFRDy.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-aEGmvJQq.js} +33 -33
- package/dist/{SaleCreatePage-CZnIOydv-DKBw-qp7.js.map → SaleCreatePage-DHBLmlBr-aEGmvJQq.js.map} +1 -1
- package/dist/{SalesPage-DPIRrC_O-M8rqnK7z.js → SalesPage-eF9Yr42z-CvOr82vo.js} +34 -34
- package/dist/SalesPage-eF9Yr42z-CvOr82vo.js.map +1 -0
- package/dist/SettingsPage-Cre-UE3r-CGTVp5Zw.js +741 -0
- package/dist/SettingsPage-Cre-UE3r-CGTVp5Zw.js.map +1 -0
- package/dist/{StorageUnitsPage-BDRkdCjW-UF64rf7q.js → StorageUnitsPage-CTEVuemZ-C7zkwKMz.js} +213 -190
- package/dist/StorageUnitsPage-CTEVuemZ-C7zkwKMz.js.map +1 -0
- package/dist/{SubMenu-BdMTYtC1.js → SubMenu-DZIhur09.js} +2 -2
- package/dist/{SubMenu-BdMTYtC1.js.map → SubMenu-DZIhur09.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-BDmUK7s1.js} +185 -170
- package/dist/TransactionsPage-Zuu7sjID-BDmUK7s1.js.map +1 -0
- package/dist/TransferCreatePage-DlT0nCDj-evHPJc99.js +635 -0
- package/dist/TransferCreatePage-DlT0nCDj-evHPJc99.js.map +1 -0
- package/dist/TransfersPage-DqaSvHda-DAUn5SSr.js +600 -0
- package/dist/TransfersPage-DqaSvHda-DAUn5SSr.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-DWkNNasF.js +231 -0
- package/dist/VaccineEducation-DWkNNasF.js.map +1 -0
- package/dist/VaccineEducation.css +1 -0
- package/dist/VaccineEducationConfigurator-BFCvu5Mw.js +1450 -0
- package/dist/VaccineEducationConfigurator-BFCvu5Mw.js.map +1 -0
- package/dist/VaccineEducationConfigurator.css +1 -0
- package/dist/VaccineEducationList-BxZHahCh.js +334 -0
- package/dist/VaccineEducationList-BxZHahCh.js.map +1 -0
- package/dist/VialsPage-LoDaUqVv-Dw00Zc06.js +457 -0
- package/dist/VialsPage-LoDaUqVv-Dw00Zc06.js.map +1 -0
- package/dist/ckeditor5-_x14lrzc.js +49590 -0
- package/dist/ckeditor5-_x14lrzc.js.map +1 -0
- package/dist/ckeditor5.css +4 -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/faqMedia-FDpje7v0.js +234 -0
- package/dist/faqMedia-FDpje7v0.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-QDEODnRT.js} +409 -327
- package/dist/index.lib-QDEODnRT.js.map +1 -0
- package/dist/listValueStore-5d4vNGQM-DB08drLf.js +43 -0
- package/dist/listValueStore-5d4vNGQM-DB08drLf.js.map +1 -0
- package/dist/proxy-C4gcRXzG.js +5265 -0
- package/dist/proxy-C4gcRXzG.js.map +1 -0
- package/package.json +7 -2
- package/dist/AccessRights-DUgY6ewy.js +0 -1031
- 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/ChangePasswordModalCore-lQ9GamH1.js +0 -5494
- package/dist/ChangePasswordModalCore-lQ9GamH1.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":"ImmunizationConfigurationBase-aUtx0JEe.js","sources":["../src/views/ImmunizationConfiguration/ImmunizationConfiguration.jsx","../src/views/ImmunizationConfiguration/components/VaccineCard.jsx","../src/views/ImmunizationConfiguration/components/AddCustomVaccineModal.jsx","../src/views/ImmunizationConfiguration/Skeletons/VaccineGridSkeleton.jsx","../src/views/ImmunizationConfiguration/ImmunizationScheduleConfiguration.jsx","../src/views/ImmunizationConfiguration/components/ConfigureBaseDateModal.jsx","../src/views/ImmunizationConfiguration/components/ConfigureFiltersModal.jsx","../src/views/ImmunizationConfiguration/components/ConfigureRecipientModal.jsx","../src/views/ImmunizationConfiguration/components/DoseDetailsTable.jsx","../../app-shell/src/common/services/LocationService.js","../../app-shell/src/common/services/LocationType.js","../src/views/ImmunizationConfiguration/components/GeographicalApplicability.jsx","../src/views/ImmunizationConfiguration/components/VaccineDependencies.jsx","../src/views/ImmunizationConfiguration/components/DoseSelector.jsx","../src/views/ImmunizationConfiguration/components/VaccineFilters.jsx","../src/views/ImmunizationConfiguration/components/VaccineCodeSets.jsx","../src/views/ImmunizationConfiguration/utils/summaryUtils.js","../src/views/ImmunizationConfiguration/utils/productScheduleUtils.js","../../productManagement/dist/settingsStore-BHHOmcCP.js","../../productManagement/dist/PmTable-CwKORZGg.js","../../productManagement/dist/index.js","../src/views/ImmunizationConfiguration/utils/configChangeSummary.js","../src/views/ImmunizationConfiguration/ImmunizationSummary.jsx","../src/views/ImmunizationConfiguration/ImmunizationConfigurationBase.jsx"],"sourcesContent":["import { useDispatch } from \"react-redux\";\nimport { setCurrentView } from \"@/store/reducers/immunizationSlice\";\nimport {\n Box,\n Typography,\n TextField,\n InputAdornment,\n Button,\n IconButton,\n Tooltip,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport PropTypes from \"prop-types\";\nimport {\n faSearch,\n faInfoCircle,\n faPlus,\n faArrowRight,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport \"./styles/ImmunizationConfiguration.scss\";\n\nconst TemplateCard = ({\n title,\n toolTipText,\n buttonText,\n icon,\n iconColor,\n iconBgColor,\n isCustom,\n onClick,\n}) => {\n return (\n <Box className={`template-card ${isCustom ? \"custom-card\" : \"\"}`}>\n <Box className=\"card-header\">\n <Box className=\"icon-wrapper\" style={{ backgroundColor: iconBgColor }}>\n <FontAwesomeIcon\n icon={icon}\n className=\"main-icon\"\n style={{ color: iconColor }}\n />\n </Box>\n <Tooltip arrow placement=\"right\" title={toolTipText}>\n <IconButton size=\"small\" className=\"info-btn\">\n <FontAwesomeIcon icon={faInfoCircle} />\n </IconButton>\n </Tooltip>\n </Box>\n\n <Typography className=\"card-title\">{title}</Typography>\n\n <Button\n fullWidth\n className={`card-btn ${isCustom ? \"primary-btn\" : \"secondary-btn\"}`}\n endIcon={<FontAwesomeIcon icon={faArrowRight} />}\n onClick={onClick}\n >\n {buttonText}\n </Button>\n </Box>\n );\n};\n\nTemplateCard.propTypes = {\n title: PropTypes.string.isRequired,\n toolTipText: PropTypes.string,\n buttonText: PropTypes.string.isRequired,\n icon: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n iconColor: PropTypes.string.isRequired,\n iconBgColor: PropTypes.string.isRequired,\n isCustom: PropTypes.bool,\n onClick: PropTypes.func,\n};\n\nTemplateCard.defaultProps = {\n isCustom: false,\n onClick: () => {},\n};\n\nconst ImmunizationConfiguration = () => {\n const dispatch = useDispatch();\n\n const handleOpenConfiguration = () => {\n dispatch(setCurrentView(\"schedule-config\"));\n };\n\n return (\n <Box className=\"immunization-landing\">\n <Box className=\"content-wrapper\">\n <Box className=\"header-text\">\n <Typography className=\"page-title\">\n Create Immunization Records Using Template\n </Typography>\n <Typography className=\"page-subtitle\">\n Select a pre-configured template or make your own, to configure your\n immunization records.\n </Typography>\n </Box>\n\n <Box className=\"search-filter-section\">\n <TextField\n fullWidth\n placeholder=\"Search templates, (e.g. WHO, Govt of India, ...)\"\n className=\"search-field\"\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faSearch} className=\"search-icon\" />\n </InputAdornment>\n ),\n }}\n />\n {/* <Button\n className=\"filter-button\"\n startIcon={<FontAwesomeIcon icon={faSlidersH} />}\n disabled={true}\n >\n Filters\n </Button> */}\n </Box>\n\n <Grid container spacing={{ xs: 2, md: 4 }} className=\"template-grid\">\n {/* <Grid size={{ xs: 12, sm: 12, md: 4 }}>\n <TemplateCard\n title=\"WHO Guidelines\"\n toolTipText=\"WHO Guidelines\"\n buttonText=\"Select Template\"\n icon={faGlobe}\n iconColor=\"#1C86F3\"\n iconBgColor=\"#E8F2FE\"\n />\n </Grid>\n <Grid size={{ xs: 12, sm: 12, md: 4 }}>\n <TemplateCard\n title=\"Govt. Of India\"\n toolTipText=\"Govt. Of India\"\n buttonText=\"Select Template\"\n icon={faBuilding}\n iconColor=\"#F18A37\"\n iconBgColor=\"#FEF3EA\"\n />\n </Grid> */}\n <Grid\n size={{ xs: 12, sm: 10, md: 6, lg: 5 }}\n className=\"custom-template-slot\"\n >\n <TemplateCard\n title=\"Custom Template\"\n toolTipText=\"Custom Template\"\n buttonText=\"Open Configuration\"\n icon={faPlus}\n iconColor=\"#4c5e70\"\n iconBgColor=\"#E7F7EF\"\n isCustom={true}\n onClick={handleOpenConfiguration}\n />\n </Grid>\n </Grid>\n </Box>\n </Box>\n );\n};\n\nexport default ImmunizationConfiguration;\n","import { Box, Typography } from '@mui/material';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSyringe, faPlus } from '@fortawesome/free-solid-svg-icons';\nimport PropTypes from 'prop-types';\n\nconst VaccineCard = ({ vaccine = {}, selected = false, onClick = () => {}, isCustom = false, disabled = false }) => {\n return (\n <Box\n className={`vaccine-card ${selected ? 'selected' : ''} ${\n isCustom ? 'custom-vaccine' : ''\n } ${disabled ? 'disabled' : ''}`}\n onClick={onClick}\n >\n <Box className=\"icon-container\">\n <FontAwesomeIcon icon={isCustom ? faPlus : faSyringe} />\n </Box>\n <Box className=\"text-container\">\n <Typography className=\"vaccine-name\">{isCustom ? 'ADD CUSTOM VACCINE' : vaccine.name}</Typography>\n {vaccine?.category && <Typography className=\"vaccine-cat\">{vaccine.category}</Typography>}\n </Box>\n </Box>\n );\n};\n\nVaccineCard.propTypes = {\n vaccine: PropTypes.shape({\n name: PropTypes.string,\n category: PropTypes.string,\n }),\n selected: PropTypes.bool,\n onClick: PropTypes.func,\n isCustom: PropTypes.bool,\n disabled: PropTypes.bool,\n};\n\nexport default VaccineCard;\n","import { useMemo, useRef, useState } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n TextField,\n InputAdornment,\n IconButton,\n Autocomplete,\n} from \"@mui/material\";\nimport { useSelector } from \"react-redux\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faSyringe,\n faTag,\n faShieldVirus,\n faUser,\n faCalendarDay,\n faBarcode,\n faPen,\n faRotateLeft,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { ImmunizationUtil } from \"../service/ImmunizationUtil\";\nimport PropTypes from \"prop-types\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst deriveVaccineCode = (name) =>\n String(name || \"\")\n .trim()\n .toUpperCase()\n .replace(/[^A-Z0-9\\s]/g, \"\")\n .replace(/\\s+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n\nconst sanitizeVaccineCode = (value) =>\n String(value || \"\")\n .toUpperCase()\n .replace(/[^A-Z0-9\\s_]/g, \"\")\n .replace(/\\s+/g, \"_\");\n\nconst normalizeCode = (code) =>\n String(code || \"\")\n .trim()\n .toUpperCase();\n\nconst AddCustomVaccineModal = ({ open, onClose, onAdd, isFromSummary }) => {\n const [vaccineName, setVaccineName] = useState(\"\");\n const [manualVaccineCode, setManualVaccineCode] = useState(null);\n const [disease, setDisease] = useState(\"\");\n const [recipientType, setRecipientType] = useState(\"\");\n const [baseDateCode, setBaseDateCode] = useState(null);\n const vaccineCodeInputRef = useRef(null);\n const [touched, setTouched] = useState({\n vaccineName: false,\n vaccineCode: false,\n disease: false,\n recipientType: false,\n baseDate: false,\n });\n\n const {\n vaccines = [],\n recipientMaster = [],\n baseDateMaster = [],\n } = useSelector((state) => state.immunization);\n\n const selectedRecipient = useMemo(\n () =>\n recipientMaster.find((recipient) => recipient.code === recipientType) ||\n null,\n [recipientMaster, recipientType],\n );\n\n const allowedBaseDateCodes = useMemo(() => {\n const config = selectedRecipient?.config;\n if (!config) return [];\n if (typeof config === \"object\") {\n return config.allowedBaseDates || [];\n }\n try {\n return JSON.parse(config).allowedBaseDates || [];\n } catch {\n return [];\n }\n }, [selectedRecipient]);\n\n const availableBaseDateOptions = useMemo(() => {\n const activeBaseDates = baseDateMaster.filter(\n (baseDate) => baseDate.is_active,\n );\n if (!recipientType) return [];\n\n const allowedCodeSet = new Set(\n allowedBaseDateCodes\n .map((code) =>\n String(code || \"\")\n .trim()\n .toLowerCase(),\n )\n .filter(Boolean),\n );\n\n return activeBaseDates.filter((baseDate) =>\n allowedCodeSet.has(\n String(baseDate.code || \"\")\n .trim()\n .toLowerCase(),\n ),\n );\n }, [allowedBaseDateCodes, baseDateMaster, recipientType]);\n\n const selectedBaseDate = useMemo(() => {\n if (baseDateCode === undefined || baseDateCode === null) return null;\n const normalizedCode = String(baseDateCode).trim().toLowerCase();\n return (\n availableBaseDateOptions.find(\n (baseDate) =>\n String(baseDate.code || \"\")\n .trim()\n .toLowerCase() === normalizedCode,\n ) || null\n );\n }, [availableBaseDateOptions, baseDateCode]);\n\n const isCodeManual = manualVaccineCode !== null;\n\n const vaccineCode = useMemo(\n () => (isCodeManual ? manualVaccineCode : deriveVaccineCode(vaccineName)),\n [isCodeManual, manualVaccineCode, vaccineName],\n );\n\n const trimmedVaccineCode = vaccineCode.trim();\n\n const isDuplicateVaccineCode = useMemo(() => {\n if (!trimmedVaccineCode || !baseDateCode) return false;\n const normalizedBaseDate = normalizeCode(baseDateCode);\n\n return vaccines.some((vaccine) => {\n const existingCode = vaccine?.vaccine_code\n ? normalizeCode(vaccine.vaccine_code)\n : deriveVaccineCode(vaccine?.vaccine_name);\n if (existingCode !== normalizeCode(trimmedVaccineCode)) return false;\n\n return (\n normalizeCode(vaccine?.base_date_code ?? vaccine?.baseDateCode) ===\n normalizedBaseDate\n );\n });\n }, [baseDateCode, trimmedVaccineCode, vaccines]);\n\n const isCodeMissing =\n (touched.vaccineCode || touched.vaccineName) && trimmedVaccineCode === \"\";\n\n const handleToggleCodeEdit = () => {\n if (isCodeManual) {\n setManualVaccineCode(null);\n return;\n }\n setManualVaccineCode(deriveVaccineCode(vaccineName));\n requestAnimationFrame(() => vaccineCodeInputRef.current?.focus());\n };\n\n const vaccineCodeHelperText = (() => {\n if (isDuplicateVaccineCode)\n return \"This vaccine code already exists for the selected base date. Edit it to make it unique.\";\n if (isCodeMissing) return \"Vaccine code is required\";\n if (isCodeManual) return \"Custom code — reset to follow the vaccine name\";\n return \"Generated from the vaccine name — edit to change\";\n })();\n\n const isFormValid =\n vaccineName.trim() !== \"\" &&\n trimmedVaccineCode !== \"\" &&\n disease.trim() !== \"\" &&\n !!recipientType &&\n !!baseDateCode &&\n !isDuplicateVaccineCode;\n\n const handleAdd = async () => {\n if (isDuplicateVaccineCode) {\n showToast({\n message: `Vaccine code \"${trimmedVaccineCode}\" already exists for the selected base date.`,\n type: \"error\",\n });\n setTouched((p) => ({ ...p, vaccineCode: true }));\n return;\n }\n\n if (isFormValid) {\n try {\n const payload = {\n vaccine_name: vaccineName,\n vaccine_code: trimmedVaccineCode,\n target_prevention: disease,\n baseDateCode,\n recipientType,\n };\n\n const response = await ImmunizationUtil.addImmunization(payload);\n\n if (response.data) {\n const resultObject = response.data?.result?.[0] || response.data;\n const vaccineId =\n resultObject?.id || response.data?.id || response.data?.sequence;\n\n if (isFromSummary) {\n try {\n await ImmunizationUtil.updateVaccineStatus({\n parameters: {\n vaccineId: vaccineId,\n status: true,\n },\n });\n } catch (err) {\n console.error(\"Failed to activate new vaccine:\", err);\n }\n }\n\n showToast({\n message: \"Vaccine added successfully!\",\n type: \"success\",\n });\n\n onAdd({\n ...payload,\n isActive: !!isFromSummary,\n ...(resultObject && typeof resultObject === \"object\"\n ? resultObject\n : {}),\n id: vaccineId || undefined,\n });\n\n handleReset();\n onClose();\n }\n } catch (error) {\n console.error(\"Error adding immunization:\", error);\n showToast({ message: \"Failed to add vaccine\", type: \"error\" });\n }\n } else {\n setTouched({\n vaccineName: true,\n vaccineCode: true,\n disease: true,\n recipientType: true,\n baseDate: true,\n });\n }\n };\n\n const handleReset = () => {\n setVaccineName(\"\");\n setManualVaccineCode(null);\n setDisease(\"\");\n setRecipientType(\"\");\n setBaseDateCode(null);\n setTouched({\n vaccineName: false,\n vaccineCode: false,\n disease: false,\n recipientType: false,\n baseDate: false,\n });\n };\n\n const handleCloseModal = () => {\n handleReset();\n onClose();\n };\n\n return (\n <Dialog\n open={open}\n onClose={handleCloseModal}\n maxWidth=\"xs\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: { borderRadius: \"18px\", padding: \"2px\" },\n }}\n >\n <DialogTitle className=\"dialog-header\">\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faSyringe} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">Add Custom Vaccine</Typography>\n <Typography className=\"subtitle\">\n Define a new immunization protocol\n </Typography>\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={handleCloseModal}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent className=\"dialog-content\">\n <Box className=\"input-group\">\n <Typography className=\"input-label\">Vaccine Name</Typography>\n <TextField\n fullWidth\n placeholder=\"e.g. Varicella\"\n value={vaccineName}\n onChange={(e) => setVaccineName(e.target.value)}\n onBlur={() => setTouched((p) => ({ ...p, vaccineName: true }))}\n error={touched.vaccineName && !vaccineName.trim()}\n helperText={\n touched.vaccineName && !vaccineName.trim()\n ? \"Vaccine name is required\"\n : \"\"\n }\n className=\"custom-textfield\"\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faTag} className=\"input-icon\" />\n </InputAdornment>\n ),\n },\n }}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\">Vaccine Code</Typography>\n <TextField\n fullWidth\n placeholder=\"Generated from vaccine name\"\n value={vaccineCode}\n inputRef={vaccineCodeInputRef}\n onChange={(e) =>\n setManualVaccineCode(sanitizeVaccineCode(e.target.value))\n }\n onBlur={() => setTouched((p) => ({ ...p, vaccineCode: true }))}\n error={isDuplicateVaccineCode || isCodeMissing}\n helperText={vaccineCodeHelperText}\n className={`custom-textfield${\n isCodeManual ? \"\" : \" read-only-textfield\"\n }`}\n slotProps={{\n input: {\n readOnly: !isCodeManual,\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faBarcode} className=\"input-icon\" />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n className=\"code-action-button\"\n aria-label={\n isCodeManual\n ? \"Reset vaccine code to the generated value\"\n : \"Edit vaccine code\"\n }\n title={\n isCodeManual\n ? \"Reset to generated code\"\n : \"Edit vaccine code\"\n }\n onClick={handleToggleCodeEdit}\n >\n <FontAwesomeIcon\n icon={isCodeManual ? faRotateLeft : faPen}\n />\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\">\n Target Disease/Prevention\n </Typography>\n <TextField\n fullWidth\n placeholder=\"e.g. Chickenpox\"\n value={disease}\n onChange={(e) => setDisease(e.target.value)}\n onBlur={() => setTouched((p) => ({ ...p, disease: true }))}\n error={touched.disease && !disease.trim()}\n helperText={\n touched.disease && !disease.trim()\n ? \"Target disease is required\"\n : \"\"\n }\n className=\"custom-textfield\"\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon\n icon={faShieldVirus}\n className=\"input-icon\"\n />\n </InputAdornment>\n ),\n },\n }}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\">Recipient Type</Typography>\n <Autocomplete\n options={recipientMaster}\n getOptionLabel={(option) => option?.name || \"\"}\n isOptionEqualToValue={(option, value) => option.code === value.code}\n value={selectedRecipient}\n onChange={(_, newValue) => {\n setRecipientType(newValue?.code || \"\");\n setBaseDateCode(null);\n }}\n onBlur={() => setTouched((p) => ({ ...p, recipientType: true }))}\n renderInput={(params) => (\n <TextField\n {...params}\n fullWidth\n placeholder=\"Select Recipient Type\"\n error={touched.recipientType && !recipientType}\n helperText={\n touched.recipientType && !recipientType\n ? \"Recipient type is required\"\n : \"\"\n }\n className=\"custom-textfield\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faUser} className=\"input-icon\" />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\">Base Date</Typography>\n <Autocomplete\n options={availableBaseDateOptions}\n disabled={!recipientType}\n getOptionLabel={(option) =>\n option?.name ||\n option?.label ||\n option?.base_name ||\n option?.code ||\n option?.id ||\n \"\"\n }\n isOptionEqualToValue={(option, value) =>\n String(option?.code || \"\")\n .trim()\n .toLowerCase() ===\n String(value?.code || \"\")\n .trim()\n .toLowerCase()\n }\n value={selectedBaseDate}\n onChange={(_, newValue) => setBaseDateCode(newValue?.code ?? null)}\n onBlur={() => setTouched((p) => ({ ...p, baseDate: true }))}\n renderInput={(params) => (\n <TextField\n {...params}\n fullWidth\n placeholder={\n recipientType\n ? \"Select Base Date\"\n : \"Select Recipient Type First\"\n }\n error={touched.baseDate && !baseDateCode}\n helperText={\n touched.baseDate && !baseDateCode\n ? recipientType\n ? \"Base date is required\"\n : \"Select recipient type first\"\n : \"\"\n }\n className=\"custom-textfield\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\">\n <FontAwesomeIcon\n icon={faCalendarDay}\n className=\"input-icon\"\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n />\n )}\n />\n </Box>\n </DialogContent>\n\n <DialogActions className=\"dialog-actions\">\n <Button\n onClick={handleAdd}\n className=\"add-btn\"\n fullWidth\n disabled={!isFormValid}\n >\n {isFromSummary ? \"Add to List\" : \"Add to Schedule\"}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nAddCustomVaccineModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onAdd: PropTypes.func.isRequired,\n isFromSummary: PropTypes.bool,\n};\n\nexport default AddCustomVaccineModal;\n","import PropTypes from \"prop-types\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\nimport { Box } from \"@mui/material\";\n\nexport const VaccineGridSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n\n if (!useSkeleton || !isLoading) {\n return children;\n }\n\n return (\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(6, 1fr)\",\n gap: 1,\n width: \"100%\",\n }}\n >\n {[...Array(12)].map((_, index) => (\n <Box\n key={index}\n sx={{\n height: \"100px\",\n backgroundColor: \"var(--color-gray4)\",\n borderRadius: \"16px\",\n border: \"1.5px solid #eaeaea\",\n animation: \"pulse 1.5s infinite ease-in-out\",\n \"@keyframes pulse\": {\n \"0%\": { opacity: 1 },\n \"50%\": { opacity: 0.5 },\n \"100%\": { opacity: 1 },\n },\n }}\n />\n ))}\n </Box>\n );\n};\n\nVaccineGridSkeleton.propTypes = {\n children: PropTypes.node,\n isLoading: PropTypes.bool,\n};\n\nexport default VaccineGridSkeleton;\n","import { useState, useEffect } from 'react';\nimport { Alert, Box, Typography, TextField, InputAdornment, Button } from '@mui/material';\nimport Grid from '@mui/material/Grid2';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSearch, faListCheck, faArrowRight, faCheckDouble } from '@fortawesome/free-solid-svg-icons';\nimport VaccineCard from './components/VaccineCard';\nimport AddCustomVaccineModal from './components/AddCustomVaccineModal';\nimport VaccineGridSkeleton from './Skeletons/VaccineGridSkeleton';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n toggleVaccine,\n addCustomVaccine,\n setCurrentView,\n activateSelectedVaccines,\n setSelectedVaccineIds,\n setVaccines,\n setImmunizationConfigLoaded,\n} from '@/store/reducers/immunizationSlice';\nimport { ImmunizationUtil } from './service/ImmunizationUtil';\nimport { showToast } from '@/common/toaster/toaster';\nimport './styles/ImmunizationScheduleConfiguration.scss';\n\nconst ImmunizationScheduleConfiguration = () => {\n const dispatch = useDispatch();\n const {\n vaccines,\n selectedVaccineIds,\n isConfigLoaded,\n featureRights: rights,\n } = useSelector((state) => state.immunization);\n\n const canAddVaccine = rights?.['create.admin.immunizationConfiguration.vaccine'];\n const [searchTerm, setSearchTerm] = useState('');\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isFetchingVaccines, setIsFetchingVaccines] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n useEffect(() => {\n if (!vaccines || vaccines.length === 0) {\n const fetchVaccines = async () => {\n try {\n setIsFetchingVaccines(true);\n const vaccinesResponse = await ImmunizationUtil.getVaccines();\n if (vaccinesResponse?.data?.result) {\n const mappedVaccines = vaccinesResponse.data.result.map(ImmunizationUtil.mapImmunizationVaccineConfig);\n dispatch(setVaccines(mappedVaccines));\n }\n } catch (vaccineErr) {\n console.warn('Could not fetch vaccines master:', vaccineErr);\n } finally {\n setIsFetchingVaccines(false);\n }\n };\n fetchVaccines();\n }\n }, [dispatch, vaccines]);\n\n const isLoading = (!isConfigLoaded || isFetchingVaccines || isSubmitting) && (!vaccines || vaccines.length === 0);\n\n const handleToggleVaccine = (id) => {\n if (!canAddVaccine) return;\n dispatch(toggleVaccine(id));\n };\n\n const handleAddCustomVaccine = (data) => {\n dispatch(addCustomVaccine(data));\n };\n\n const handleAddCustomVaccineClick = () => {\n if (!canAddVaccine) return;\n setIsModalOpen(true);\n };\n\n const handleToggleAll = () => {\n const allVisibleIds = filteredVaccines.filter((v) => v && v.id).map((v) => v.id);\n const areAllVisibleSelected =\n allVisibleIds.length > 0 && allVisibleIds.every((id) => (selectedVaccineIds || []).includes(id));\n\n if (areAllVisibleSelected) {\n const newSelectedIds = (selectedVaccineIds || []).filter((id) => !allVisibleIds.includes(id));\n dispatch(setSelectedVaccineIds(newSelectedIds));\n } else {\n const newSelectedIds = [...new Set([...(selectedVaccineIds || []), ...allVisibleIds])];\n dispatch(setSelectedVaccineIds(newSelectedIds));\n }\n };\n\n const handleSelectVaccines = async () => {\n try {\n setIsSubmitting(true);\n await ImmunizationUtil.updateImmunizationConfigurationInitiation();\n } catch (error) {\n showToast({\n message: error?.message || 'Failed to update vaccine initiation state',\n type: 'error',\n });\n return;\n }\n\n const activateIds = [];\n const deactivateIds = [];\n\n vaccines?.forEach((v) => {\n if (!v) return;\n\n const isNowSelected = selectedVaccineIds.includes(v.id);\n const wasActive = !!v.isActive;\n\n if (isNowSelected !== wasActive) {\n if (isNowSelected) activateIds.push(v.id);\n else deactivateIds.push(v.id);\n }\n });\n\n try {\n if (activateIds.length) {\n await ImmunizationUtil.updateVaccineStatusFromArray({\n parameters: {\n vaccineIds: activateIds.join(','),\n status: true,\n },\n });\n }\n\n if (deactivateIds.length) {\n await ImmunizationUtil.updateVaccineStatusFromArray({\n parameters: {\n vaccineIds: deactivateIds.join(','),\n status: false,\n },\n });\n }\n\n dispatch(activateSelectedVaccines());\n dispatch(setImmunizationConfigLoaded(false));\n\n dispatch(setCurrentView('summary'));\n } catch (error) {\n showToast({\n message: error?.message || 'Failed to update vaccine status',\n type: 'error',\n });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const allVaccines = vaccines || [];\n const activeSelectedIds = selectedVaccineIds || [];\n\n const filteredVaccines = allVaccines.filter(\n (v) => v && (v.name || '').toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n const allVisibleIds = filteredVaccines.filter((v) => v && v.id).map((v) => v.id);\n const areAllVisibleSelected = allVisibleIds.length > 0 && allVisibleIds.every((id) => activeSelectedIds.includes(id));\n return (\n <Box className=\"immunization-schedule-config\">\n <Box className=\"content-wrapper\">\n <Box sx={{ mb: 1 }}>\n {/* <Button\n startIcon={\n <FontAwesomeIcon\n icon={faArrowRight}\n style={{ transform: \"rotate(180deg)\" }}\n />\n }\n onClick={() => dispatch(setCurrentView(\"landing\"))}\n sx={{ color: 'var(--color-gray1)', fontWeight: 600, fontSize: \"12px\" }}\n >\n Back\n </Button> */}\n </Box>\n <Typography\n variant=\"h5\"\n align=\"center\"\n sx={{\n fontWeight: 800,\n mb: 1,\n color: 'var(--color-text)',\n fontSize: '28px',\n }}\n >\n Set Up Your Immunization Schedule\n </Typography>\n <Typography\n variant=\"body1\"\n align=\"center\"\n sx={{\n color: 'var(--color-gray1)',\n mb: 4,\n fontWeight: 500,\n display: 'block',\n fontSize: '16px',\n }}\n >\n Select one of the options below to start setting up your immunization schedule.\n </Typography>\n\n {!canAddVaccine && (\n <Alert severity=\"info\" sx={{ mb: 2, borderRadius: '12px' }}>\n You do not have permission to add vaccines, so this schedule cannot be set up from your account.\n </Alert>\n )}\n\n <Box className=\"main-config-card\">\n <Box className=\"section-header\">\n <Box className=\"title-group\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faListCheck} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">Select Vaccines</Typography>\n <Typography className=\"subtitle\">\n Start by selecting vaccines from the list. You can set up the schedule step by step.\n </Typography>\n </Box>\n </Box>\n\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Button\n variant=\"outlined\"\n onClick={handleToggleAll}\n disabled={filteredVaccines.length === 0 || !canAddVaccine}\n startIcon={<FontAwesomeIcon icon={faCheckDouble} />}\n sx={{\n color: 'var(--color-text)',\n borderColor: 'var(--color-primary)',\n fontWeight: 800,\n fontSize: '14px',\n padding: '6px 20px',\n height: '40px',\n borderRadius: '12px',\n textTransform: 'none',\n whiteSpace: 'nowrap',\n flexShrink: 0,\n '&:hover': {\n backgroundColor: 'rgba(17, 182, 102, 0.08)',\n borderColor: 'var(--color-primary)',\n },\n }}\n >\n {areAllVisibleSelected ? 'Unselect All' : 'Add All'}\n </Button>\n <Box className=\"search-box\">\n <TextField\n fullWidth\n placeholder=\"Search Vaccines...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faSearch} className=\"search-icon\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n </Box>\n </Box>\n\n <VaccineGridSkeleton isLoading={isLoading}>\n <Grid container spacing={1} className=\"vaccine-grid\">\n {filteredVaccines.map((vaccine) => (\n <Grid key={vaccine?.id}>\n <VaccineCard\n vaccine={vaccine}\n selected={activeSelectedIds.includes(vaccine?.id)}\n disabled={!canAddVaccine}\n onClick={() => handleToggleVaccine(vaccine?.id)}\n />\n </Grid>\n ))}\n <Grid>\n <VaccineCard isCustom={true} disabled={!canAddVaccine} onClick={handleAddCustomVaccineClick} />\n </Grid>\n </Grid>\n </VaccineGridSkeleton>\n\n <Box className=\"selection-info\">\n <Typography className=\"selected-count\">\n <span>{selectedVaccineIds.length}</span> vaccines selected\n </Typography>\n <Button\n className=\"select-btn\"\n disabled={selectedVaccineIds.length === 0 || isLoading || isSubmitting || !canAddVaccine}\n endIcon={<FontAwesomeIcon icon={faArrowRight} />}\n onClick={handleSelectVaccines}\n >\n SELECT VACCINES\n </Button>\n </Box>\n </Box>\n </Box>\n\n <AddCustomVaccineModal open={isModalOpen} onClose={() => setIsModalOpen(false)} onAdd={handleAddCustomVaccine} />\n </Box>\n );\n};\n\nexport default ImmunizationScheduleConfiguration;\n","import { useState, useEffect, useMemo } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Autocomplete,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faCalendarDay,\n faPlus,\n faArrowLeft,\n faDatabase,\n faColumns,\n faCode,\n faTag,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n setDbTablesMaster,\n upsertBaseDateMasterItem,\n updateBaseDateMasterStatus,\n} from \"@/store/reducers/immunizationSlice\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport { ImmunizationUtil } from \"../service/ImmunizationUtil\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst DATE_COLUMN_TYPE_KEYWORDS = [\"date\", \"timestamp\", \"datetime\"];\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: 'var(--color-gray1)',\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"var(--color-gray4)\",\n borderBottom: \"1.5px solid var(--color-gray4)\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"var(--color-gray4)\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"var(--color-gray3)\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-focused fieldset\": { borderColor: 'var(--color-primary)' },\n \"&.Mui-disabled fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"var(--color-gray4)\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: 'var(--color-text)',\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: 'var(--color-text)' },\n },\n};\n\nconst parseColumnInfo = (columnInfo) => {\n if (!columnInfo) return {};\n if (typeof columnInfo === \"object\") return columnInfo;\n try {\n return JSON.parse(columnInfo);\n } catch {\n return {};\n }\n};\n\nconst isDateTypeColumn = (dataType) => {\n const normalisedType = String(dataType || \"\").toLowerCase();\n return DATE_COLUMN_TYPE_KEYWORDS.some((keyword) =>\n normalisedType.includes(keyword),\n );\n};\n\nconst ConfigureBaseDateModal = ({\n open,\n onClose,\n startInAddMode = false,\n onSaved,\n}) => {\n const dispatch = useDispatch();\n const { baseDateMaster, vaccines, scheduledVaccines, dbTablesMaster } =\n useSelector((state) => state.immunization);\n\n const [isAdding, setIsAdding] = useState(false);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n\n const [usageWarning, setUsageWarning] = useState({\n open: false,\n bdName: \"\",\n usedIn: [],\n });\n\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [selectedTable, setSelectedTable] = useState(\"\");\n const [selectedColumn, setSelectedColumn] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setIsAdding(!!startInAddMode);\n resetForm();\n fetchTables();\n }\n }, [open, startInAddMode]);\n\n const fetchTables = async () => {\n if (dbTablesMaster?.length > 0) return;\n try {\n setLoading(true);\n const res = await ImmunizationUtil.getAllTablesAndColumns();\n if (res?.data?.result) {\n dispatch(setDbTablesMaster(res.data.result));\n }\n } catch (e) {\n console.error(\"Failed to fetch tables\", e);\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setSelectedTable(\"\");\n setSelectedColumn(\"\");\n };\n\n const availableColumns = useMemo(() => {\n if (!selectedTable) return [];\n const tableObj = dbTablesMaster.find((t) => t.tableName === selectedTable);\n const columnInfo = parseColumnInfo(tableObj?.columnInfo);\n\n return Object.entries(columnInfo)\n .filter(([, dataType]) => isDateTypeColumn(dataType))\n .map(([columnName]) => columnName)\n .sort((left, right) => left.localeCompare(right));\n }, [selectedTable, dbTablesMaster]);\n\n const availableTables = useMemo(() => {\n return [...(dbTablesMaster || [])].sort((left, right) =>\n left.tableName.localeCompare(right.tableName),\n );\n }, [dbTablesMaster]);\n\n const existingCodes = useMemo(\n () => baseDateMaster?.map((bd) => bd.code?.toLowerCase()) || [],\n [baseDateMaster],\n );\n\n const isCodeDuplicate =\n !!newCode && existingCodes.includes(newCode.trim().toLowerCase());\n\n const canSave =\n newName.trim() &&\n newCode.trim() &&\n !isCodeDuplicate &&\n selectedTable &&\n selectedColumn &&\n !saving;\n\n const handleSave = async () => {\n try {\n setSaving(true);\n const payload = {\n name: newName.trim(),\n code: newCode.trim(),\n rel_table: selectedTable,\n rel_column: selectedColumn,\n is_active: true,\n };\n\n const res = await ImmunizationUtil.saveBaseDate(payload);\n\n if (res?.data?.success !== false) {\n showToast({ message: \"Base Date added successfully\", type: \"success\" });\n const createdBaseDate = res?.data?.result?.[0] || {\n name: payload.name,\n code: payload.code,\n rel_table: payload.rel_table,\n rel_column: payload.rel_column,\n is_active: payload.is_active,\n };\n dispatch(upsertBaseDateMasterItem(createdBaseDate));\n onSaved?.(createdBaseDate);\n resetForm();\n if (startInAddMode) {\n onClose();\n } else {\n setIsAdding(false);\n }\n } else {\n throw new Error(\"Failed to save base date\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error saving base date\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n const handleStatusChange = async (bd, newStatus) => {\n if (!newStatus) {\n const usingVaccines = vaccines\n ?.filter((v) => {\n const scheduled = scheduledVaccines?.find((sv) => sv.id === v.id);\n const effectiveBaseDateCode = String(\n scheduled?.baseDateCode ?? v.baseDateCode ?? v.base_date_code ?? \"\",\n );\n const bdCode = String(bd.code || \"\");\n return effectiveBaseDateCode === bdCode && bdCode !== \"\";\n })\n .map((v) => v.vaccine_name || v.name);\n\n if (usingVaccines?.length > 0) {\n setUsageWarning({\n open: true,\n bdName: bd.name,\n usedIn: usingVaccines,\n });\n return;\n }\n }\n\n try {\n const payload = {\n code: bd.code,\n is_active: newStatus,\n };\n\n const res = await ImmunizationUtil.updateBaseDate(payload);\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Base Date ${newStatus ? \"activated\" : \"deactivated\"} successfully`,\n type: \"success\",\n });\n dispatch(\n updateBaseDateMasterStatus({\n code: bd.code,\n is_active: newStatus,\n }),\n );\n } else {\n throw new Error(\"Failed to update base date status\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error updating base date status\",\n type: \"error\",\n });\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"530px\",\n maxHeight: \"90vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faCalendarDay} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding ? \"Add New Base Date\" : \"Configure Base Date\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {baseDateMaster?.length || 0} base date\n {baseDateMaster?.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: 'var(--color-text)' }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"14px\",\n backgroundColor: \"var(--color-gray4)\",\n }}\n >\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Base Date Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"e.g., Member's Birth Date\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Base Date Code\n {isCodeDuplicate && (\n <Chip\n label=\"Duplicate\"\n size=\"small\"\n sx={{\n ml: 1,\n height: 18,\n fontSize: \"9px\",\n fontWeight: 700,\n backgroundColor: \"#fee2e2\",\n color: \"#dc2626\",\n }}\n />\n )}\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) =>\n setNewCode(e.target.value.toLowerCase().replace(/\\s+/g, \"_\"))\n }\n placeholder=\"e.g., dob\"\n error={isCodeDuplicate}\n helperText={isCodeDuplicate ? \"This code already exists.\" : \"\"}\n sx={modalFieldSx}\n />\n </Box>\n\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Related Table\n </Typography>\n <Autocomplete\n size=\"small\"\n fullWidth\n options={availableTables}\n value={\n availableTables.find(\n (table) => table.tableName === selectedTable,\n ) || null\n }\n onChange={(_, selectedOption) => {\n const nextTable = selectedOption?.tableName || \"\";\n setSelectedTable(nextTable);\n if (nextTable !== selectedTable) {\n setSelectedColumn(\"\");\n }\n }}\n getOptionLabel={(option) => option?.tableName || \"\"}\n isOptionEqualToValue={(option, value) =>\n option?.tableName === value?.tableName\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select Table\"\n placeholder=\"Search related table\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faColumns}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Related Column\n </Typography>\n <Autocomplete\n size=\"small\"\n fullWidth\n options={availableColumns}\n value={selectedColumn || null}\n disabled={!selectedTable}\n onChange={(_, selectedOption) =>\n setSelectedColumn(selectedOption || \"\")\n }\n noOptionsText={\n selectedTable\n ? \"No date-type columns available\"\n : \"Select a table first\"\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label={\n selectedTable ? \"Select Column\" : \"Select a table first\"\n }\n placeholder={\n selectedTable\n ? \"Search date-type column\"\n : \"Select a table first\"\n }\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n </Box>\n ) : baseDateMaster?.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"base dates table\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ ...modalHeaderCellSx, width: 40 }}>\n #\n </TableCell>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx}>Related Table</TableCell>\n <TableCell sx={modalHeaderCellSx}>Related Column</TableCell>\n <TableCell sx={modalHeaderCellSx}>Status</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {baseDateMaster.map((bd, index) => (\n <TableRow\n key={bd.id}\n sx={{\n \"&:hover\": { backgroundColor: \"var(--color-gray4)\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{ fontSize: \"13px\", color: 'var(--color-gray1)', py: 1.5 }}\n >\n {index + 1}\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: 'var(--color-text)',\n py: 1.5,\n }}\n >\n {bd.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: 'var(--color-text)',\n backgroundColor: \"var(--color-gray4)\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {bd.code}\n </Box>\n </TableCell>\n <TableCell\n sx={{ fontSize: \"13px\", color: 'var(--color-gray1)', py: 1.5 }}\n >\n {bd.rel_table}\n </TableCell>\n <TableCell\n sx={{ fontSize: \"13px\", color: 'var(--color-gray1)', py: 1.5 }}\n >\n {bd.rel_column}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <CustomSwitch\n checked={!!bd.is_active}\n onChange={(e) =>\n handleStatusChange(bd, e.target.checked)\n }\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: 'var(--color-gray1)',\n }}\n >\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: 'var(--color-gray1)' }}\n >\n No base dates configured yet.\n </Typography>\n <Typography variant=\"caption\" sx={{ color: \"var(--color-gray3)\" }}>\n Click “Add New” to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n resetForm();\n if (startInAddMode) {\n onClose();\n } else {\n setIsAdding(false);\n }\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon icon={faArrowLeft} style={{ fontSize: 11 }} />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={!canSave}\n >\n Save Base Date\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Base Date\n </Button>\n )}\n </DialogActions>\n\n <Dialog\n open={usageWarning.open}\n onClose={() => setUsageWarning({ ...usageWarning, open: false })}\n PaperProps={{ sx: { borderRadius: \"14px\", p: 1 } }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n pb: 1,\n }}\n >\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 800, fontSize: \"16px\", color: 'var(--color-text)' }}\n >\n Base Date in Use\n </Typography>\n <IconButton\n onClick={() => setUsageWarning({ ...usageWarning, open: false })}\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent>\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 2 }}>\n <strong>"{usageWarning.bdName}"</strong> is currently\n being used in the following vaccines:\n </Typography>\n <Box\n sx={{\n maxHeight: \"150px\",\n overflowY: \"auto\",\n bgcolor: \"var(--color-gray4)\",\n p: 1.5,\n borderRadius: \"8px\",\n border: \"1.5px solid var(--color-gray3)\",\n }}\n >\n {usageWarning.usedIn.map((name, idx) => (\n <Typography\n key={idx}\n variant=\"caption\"\n sx={{ display: \"block\", color: 'var(--color-text)', fontWeight: 600 }}\n >\n • {name}\n </Typography>\n ))}\n </Box>\n <Typography\n variant=\"body2\"\n sx={{ mt: 2, color: \"#ef4444\", fontWeight: 700 }}\n >\n To toggle it off, please ensure it's not used anywhere.\n </Typography>\n </Box>\n </DialogContent>\n </Dialog>\n </Dialog>\n );\n};\n\nConfigureBaseDateModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n startInAddMode: PropTypes.bool,\n onSaved: PropTypes.func,\n};\n\nexport default ConfigureBaseDateModal;\n","import { useState, useEffect, useMemo } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Tooltip,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faFilter,\n faPlus,\n faArrowLeft,\n faCode,\n faTag,\n faAlignLeft,\n faDatabase,\n faEdit,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n setFiltersMaster,\n upsertFilterMasterItem,\n updateFilterMasterStatus,\n} from \"@/store/reducers/immunizationSlice\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport { ImmunizationUtil } from \"../service/ImmunizationUtil\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst RESOURCE_ID_PLACEHOLDER = \"#resourceId#\";\nconst PLACEHOLDER_PATTERN = /#(\\w+)#/g;\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: 'var(--color-gray1)',\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"var(--color-gray4)\",\n borderBottom: \"1.5px solid var(--color-gray4)\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"var(--color-gray4)\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"var(--color-gray3)\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-focused fieldset\": { borderColor: 'var(--color-primary)' },\n \"&.Mui-disabled fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"var(--color-gray4)\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: 'var(--color-text)',\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: 'var(--color-text)' },\n },\n};\n\nconst ConfigureFiltersModal = ({ open, onClose }) => {\n const dispatch = useDispatch();\n const {\n filtersMaster: filtersList = [],\n vaccines,\n scheduledVaccines,\n } = useSelector((state) => state.immunization);\n\n const [isAdding, setIsAdding] = useState(false);\n const [editingFilter, setEditingFilter] = useState(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n\n const [usageWarning, setUsageWarning] = useState({\n open: false,\n filterName: \"\",\n usedIn: [],\n });\n\n // Form State\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [newDescription, setNewDescription] = useState(\"\");\n const [newQuery, setNewQuery] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setIsAdding(false);\n setEditingFilter(null);\n resetForm();\n fetchFilters();\n }\n }, [open]);\n\n const fetchFilters = async (forceRefetch = false) => {\n if (!forceRefetch && filtersList?.length > 0) return;\n try {\n setLoading(true);\n const res = await ImmunizationUtil.getFilters();\n if (res?.data?.result) {\n dispatch(setFiltersMaster(res.data.result));\n }\n } catch (e) {\n console.error(\"Failed to fetch filters\", e);\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setNewDescription(\"\");\n setNewQuery(\"\");\n setEditingFilter(null);\n };\n\n const handleEditClick = (filter) => {\n setEditingFilter(filter);\n setNewName(filter.name || \"\");\n setNewCode(filter.code || \"\");\n setNewDescription(filter.description || \"\");\n setNewQuery(filter.query || \"\");\n setIsAdding(true);\n };\n\n const existingCodes = useMemo(\n () => filtersList?.map((f) => f.code?.toLowerCase()) || [],\n [filtersList],\n );\n\n const isCodeDuplicate =\n !editingFilter &&\n !!newCode &&\n existingCodes.includes(newCode.trim().toLowerCase());\n\n const queryPlaceholders = useMemo(() => {\n return Array.from(\n new Set(\n [...newQuery.matchAll(PLACEHOLDER_PATTERN)].map((match) => match[1]),\n ),\n );\n }, [newQuery]);\n\n const hasResourceIdPlaceholder = queryPlaceholders.includes(\"resourceId\");\n const hasUnsupportedPlaceholders = queryPlaceholders.some(\n (placeholder) => placeholder !== \"resourceId\",\n );\n const queryPlaceholderError = !newQuery.trim()\n ? \"\"\n : !hasResourceIdPlaceholder\n ? `Query must include ${RESOURCE_ID_PLACEHOLDER}.`\n : hasUnsupportedPlaceholders\n ? `Only ${RESOURCE_ID_PLACEHOLDER} is allowed as a parameter.`\n : \"\";\n\n const canSave =\n newName.trim() &&\n newCode.trim() &&\n newDescription.trim() &&\n newQuery.trim() &&\n !queryPlaceholderError &&\n !isCodeDuplicate &&\n !saving;\n\n const handleSave = async () => {\n try {\n if (queryPlaceholderError) {\n throw new Error(queryPlaceholderError);\n }\n\n setSaving(true);\n const payload = {\n name: newName.trim(),\n code: newCode.trim(),\n description: newDescription.trim(),\n query: newQuery.trim(),\n is_active: editingFilter ? editingFilter.is_active : true, // Preserve status when editing\n };\n\n let res;\n if (editingFilter) {\n res = await ImmunizationUtil.updateFilter(payload);\n } else {\n res = await ImmunizationUtil.addFilter(payload);\n }\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Filter ${editingFilter ? \"updated\" : \"added\"} successfully`,\n type: \"success\",\n });\n const savedFilter = res?.data?.result?.[0] || {\n ...editingFilter,\n name: payload.name,\n code: payload.code,\n description: payload.description,\n query: payload.query,\n is_active: payload.is_active,\n };\n dispatch(upsertFilterMasterItem(savedFilter));\n resetForm();\n setIsAdding(false);\n } else {\n throw new Error(\"Failed to save filter\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error saving filter\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n const handleStatusChange = async (filter, newStatus) => {\n if (!newStatus) {\n const usingVaccines = vaccines\n ?.filter((v) => {\n const scheduled = scheduledVaccines?.find((sv) => sv.id === v.id);\n const currentFilters = scheduled?.filters || v.filters || [];\n return currentFilters.includes(filter.code);\n })\n .map((v) => v.vaccine_name || v.name);\n\n if (usingVaccines?.length > 0) {\n setUsageWarning({\n open: true,\n filterName: filter.name,\n usedIn: usingVaccines,\n });\n return;\n }\n }\n\n try {\n const payload = {\n ...filter, // Send all old info, but toggled\n is_active: newStatus,\n };\n\n const res = await ImmunizationUtil.updateFilter(payload);\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Filter ${newStatus ? \"activated\" : \"deactivated\"} successfully`,\n type: \"success\",\n });\n dispatch(\n updateFilterMasterStatus({\n code: filter.code,\n is_active: newStatus,\n }),\n );\n } else {\n throw new Error(\"Failed to update filter status\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error updating filter status\",\n type: \"error\",\n });\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"650px\",\n maxHeight: \"95vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faFilter} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding\n ? editingFilter\n ? \"Edit Filter\"\n : \"Add New Filter\"\n : \"Configure Filters\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {filtersList?.length || 0} filter\n {filtersList?.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: 'var(--color-text)' }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"14px\",\n backgroundColor: \"var(--color-gray4)\",\n }}\n >\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Filter Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"e.g., Eligibility Filter\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Filter Code\n {isCodeDuplicate && (\n <Chip\n label=\"Duplicate\"\n size=\"small\"\n sx={{\n ml: 1,\n height: 18,\n fontSize: \"9px\",\n fontWeight: 700,\n backgroundColor: \"#fee2e2\",\n color: \"#dc2626\",\n }}\n />\n )}\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) =>\n !editingFilter &&\n setNewCode(\n e.target.value.toLowerCase().replace(/\\s+/g, \"_\"),\n )\n }\n placeholder=\"e.g., check_eligibility\"\n disabled={!!editingFilter}\n error={isCodeDuplicate}\n helperText={\n isCodeDuplicate ? \"This code already exists.\" : \"\"\n }\n sx={modalFieldSx}\n />\n </Box>\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faAlignLeft}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Description\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n multiline\n rows={2}\n value={newDescription}\n onChange={(e) => setNewDescription(e.target.value)}\n placeholder=\"Describe the purpose of this filter...\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n SQL Query\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n multiline\n rows={5}\n value={newQuery}\n onChange={(e) => setNewQuery(e.target.value)}\n placeholder={\"SELECT EXISTS(...) AS result\"}\n error={!!queryPlaceholderError}\n helperText={queryPlaceholderError}\n sx={modalFieldSx}\n />\n <Typography\n variant=\"caption\"\n sx={{\n color: 'var(--color-gray1)',\n mt: 1,\n display: \"block\",\n lineHeight: 1.4,\n }}\n >\n <strong>Important:</strong> The query must return a{\" \"}\n <strong>boolean</strong> value whether the member passes the\n filter. Use only <code>{RESOURCE_ID_PLACEHOLDER}</code> as the\n parameter.\n </Typography>\n </Box>\n </Box>\n ) : filtersList?.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"filters table\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ ...modalHeaderCellSx, width: 40 }}>\n #\n </TableCell>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx}>Description</TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\">\n Status\n </TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\" width=\"60\">\n Edit\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filtersList.map((filter, index) => (\n <TableRow\n key={filter.id || filter.code}\n sx={{\n \"&:hover\": { backgroundColor: \"var(--color-gray4)\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{ fontSize: \"13px\", color: 'var(--color-gray1)', py: 1.5 }}\n >\n {index + 1}\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: 'var(--color-text)',\n py: 1.5,\n }}\n >\n {filter.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: 'var(--color-text)',\n backgroundColor: \"var(--color-gray4)\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {filter.code}\n </Box>\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n color: 'var(--color-gray1)',\n py: 1.5,\n maxWidth: 200,\n }}\n >\n <Tooltip title={filter.description || \"\"} placement=\"top\">\n <Typography\n variant=\"caption\"\n noWrap\n sx={{ display: \"block\" }}\n >\n {filter.description}\n </Typography>\n </Tooltip>\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <CustomSwitch\n checked={!!filter.is_active}\n onChange={(e) =>\n handleStatusChange(filter, e.target.checked)\n }\n />\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <IconButton\n size=\"small\"\n onClick={() => handleEditClick(filter)}\n sx={{\n color: 'var(--color-gray1)',\n \"&:hover\": { color: 'var(--color-text)' },\n }}\n >\n <FontAwesomeIcon\n icon={faEdit}\n style={{ fontSize: 13 }}\n />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: 'var(--color-gray1)',\n }}\n >\n <FontAwesomeIcon\n icon={faFilter}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: 'var(--color-gray1)' }}\n >\n No filters configured yet.\n </Typography>\n <Typography variant=\"caption\" sx={{ color: \"var(--color-gray3)\" }}>\n Click “Add New” to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n setIsAdding(false);\n resetForm();\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon icon={faArrowLeft} style={{ fontSize: 11 }} />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={!canSave}\n >\n {editingFilter ? \"Update Filter\" : \"Save Filter\"}\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Filter\n </Button>\n )}\n </DialogActions>\n\n <Dialog\n open={usageWarning.open}\n onClose={() => setUsageWarning({ ...usageWarning, open: false })}\n PaperProps={{ sx: { borderRadius: \"14px\", p: 1 } }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n pb: 1,\n }}\n >\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 800, fontSize: \"16px\", color: 'var(--color-text)' }}\n >\n Filter in Use\n </Typography>\n <IconButton\n onClick={() => setUsageWarning({ ...usageWarning, open: false })}\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent>\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 2 }}>\n <strong>"{usageWarning.filterName}"</strong> is\n currently being used in the following vaccines:\n </Typography>\n <Box\n sx={{\n maxHeight: \"150px\",\n overflowY: \"auto\",\n bgcolor: \"var(--color-gray4)\",\n p: 1.5,\n borderRadius: \"8px\",\n border: \"1.5px solid var(--color-gray3)\",\n }}\n >\n {usageWarning.usedIn.map((name, idx) => (\n <Typography\n key={idx}\n variant=\"caption\"\n sx={{ display: \"block\", color: 'var(--color-text)', fontWeight: 600 }}\n >\n • {name}\n </Typography>\n ))}\n </Box>\n <Typography\n variant=\"body2\"\n sx={{ mt: 2, color: \"#ef4444\", fontWeight: 700 }}\n >\n To deactivate this filter, please ensure it's removed from\n all vaccines first.\n </Typography>\n </Box>\n </DialogContent>\n </Dialog>\n </Dialog>\n );\n};\n\nConfigureFiltersModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default ConfigureFiltersModal;\n","import { useEffect, useMemo, useState, useCallback } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Autocomplete,\n} from \"@mui/material\";\nimport PostgresEditor from \"@/views/custom-components/PostgresEditor\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faUser,\n faPlus,\n faArrowLeft,\n faCode,\n faTag,\n faDatabase,\n faEdit,\n faMapMarkedAlt,\n faClockRotateLeft,\n faListCheck,\n faCalendarDay,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport { ImmunizationUtil } from \"../service/ImmunizationUtil\";\nimport {\n setRecipientMaster,\n upsertRecipientMasterItem,\n} from \"@/store/reducers/immunizationSlice\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport ConfigureBaseDateModal from \"./ConfigureBaseDateModal\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst RESOURCE_ID_PLACEHOLDER = \"#resourceId#\";\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: \"var(--color-gray1)\",\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"var(--color-gray4)\",\n borderBottom: \"1.5px solid var(--color-gray4)\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"var(--color-gray4)\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"var(--color-gray3)\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-focused fieldset\": { borderColor: \"var(--color-primary)\" },\n \"&.Mui-disabled fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"var(--color-gray4)\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: \"var(--color-text)\",\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: \"var(--color-text)\" },\n },\n};\n\nconst normaliseKeyValue = (value) => value?.trim().toLowerCase() || \"\";\n\nconst normaliseColumnName = (columnExpression) => {\n const cleaned = columnExpression.trim().replace(/,$/, \"\");\n const aliasMatch = cleaned.match(/\\s+as\\s+([a-zA-Z0-9_\"]+)$/i);\n if (aliasMatch) {\n return aliasMatch[1].replace(/\"/g, \"\");\n }\n\n const directAliasMatch = cleaned.match(/\\s+([a-zA-Z_][a-zA-Z0-9_]*)$/);\n if (\n directAliasMatch &&\n !/[)\\]]$/.test(cleaned.slice(0, cleaned.lastIndexOf(directAliasMatch[0])))\n ) {\n return directAliasMatch[1];\n }\n\n const lastPart = cleaned.split(\".\").pop() || cleaned;\n return lastPart.replace(/[\"'`]/g, \"\").trim();\n};\n\nconst splitSelectColumns = (selectPart) => {\n const columns = [];\n let current = \"\";\n let bracketDepth = 0;\n\n for (const char of selectPart) {\n if (char === \"(\") bracketDepth += 1;\n if (char === \")\") bracketDepth = Math.max(0, bracketDepth - 1);\n\n if (char === \",\" && bracketDepth === 0) {\n if (current.trim()) {\n columns.push(current.trim());\n }\n current = \"\";\n continue;\n }\n current += char;\n }\n\n if (current.trim()) {\n columns.push(current.trim());\n }\n\n return columns;\n};\n\nconst inferColumnsFromQueryText = (query) => {\n const match = query.match(/select\\s+([\\s\\S]+?)\\s+from\\s/i);\n if (!match?.[1]) {\n return [];\n }\n\n return splitSelectColumns(match[1])\n .map(normaliseColumnName)\n .filter(Boolean)\n .filter((value, index, arr) => arr.indexOf(value) === index);\n};\n\nconst parseRecipientConfig = (config) => {\n if (!config) return {};\n if (typeof config === \"object\") return config;\n try {\n return JSON.parse(config);\n } catch {\n return {};\n }\n};\n\nconst ConfigureRecipientModal = ({ open, onClose }) => {\n const dispatch = useDispatch();\n const { recipientMaster = [], baseDateMaster = [] } = useSelector(\n (state) => state.immunization,\n );\n\n const [isAdding, setIsAdding] = useState(false);\n const [editingRecipient, setEditingRecipient] = useState(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n const [isBaseDateModalOpen, setIsBaseDateModalOpen] = useState(false);\n\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [newQuery, setNewQuery] = useState(\"\");\n const [geographicalApplicability, setGeographicalApplicability] =\n useState(false);\n const [allowedBaseDates, setAllowedBaseDates] = useState([]);\n const [fetchTypeKeys, setFetchTypeKeys] = useState([]);\n const [locationKey, setLocationKey] = useState(\"\");\n const [historyKey, setHistoryKey] = useState(\"\");\n const [excludeVaccineKey, setExcludeVaccineKey] = useState(\"\");\n const [isQueryTouched, setIsQueryTouched] = useState(false);\n const [queryColumns, setQueryColumns] = useState([]);\n const [errors, setErrors] = useState({});\n\n useEffect(() => {\n if (open) {\n setIsAdding(false);\n setEditingRecipient(null);\n resetForm();\n fetchRecipients();\n }\n }, [open]);\n\n const fetchRecipients = async (forceRefetch = false) => {\n if (!forceRefetch && recipientMaster.length > 0) return;\n try {\n setLoading(true);\n const res = await ImmunizationUtil.getRecipients();\n if (res?.data?.result) {\n dispatch(setRecipientMaster(res.data.result));\n }\n } catch (error) {\n console.error(error);\n showToast({\n message: \"Failed to fetch recipients\",\n type: \"error\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setNewQuery(\"\");\n setGeographicalApplicability(false);\n setAllowedBaseDates([]);\n setFetchTypeKeys([]);\n setLocationKey(\"\");\n setHistoryKey(\"\");\n setExcludeVaccineKey(\"\");\n setEditingRecipient(null);\n setIsQueryTouched(false);\n setQueryColumns([]);\n setErrors({});\n };\n\n const validateRecipientForm = () => {\n const errors = {};\n\n if (!newName.trim()) {\n errors.name = \"Name is required\";\n }\n\n if (!normalizedCode) {\n errors.code = \"Code is required\";\n } else if (!editingRecipient && isCodeDuplicate) {\n errors.code = \"This code already exists\";\n }\n\n if (!newQuery.trim()) {\n errors.query = \"Query is required\";\n } else if (queryError) {\n errors.query = queryError;\n }\n\n if (!fetchTypeKeys.length) {\n errors.fetchTypeKeys = \"At least one fetch type key is required\";\n }\n\n if (!historyKey.trim()) {\n errors.historyKey = \"History key is required\";\n }\n\n if (!excludeVaccineKey.trim()) {\n errors.excludeVaccineKey = \"Exclude vaccine key is required\";\n }\n\n if (geographicalApplicability && !locationKey.trim()) {\n errors.locationKey = \"Location key is required\";\n }\n\n if (duplicateColumnUsageError) {\n errors.duplicateColumnUsage = duplicateColumnUsageError;\n }\n\n return errors;\n };\n\n const existingCodes = useMemo(\n () =>\n recipientMaster.map((item) => item.code?.toLowerCase()).filter(Boolean),\n [recipientMaster],\n );\n\n const normalizedCode = newCode.trim().replace(/\\s+/g, \"_\").toUpperCase();\n const isCodeDuplicate =\n !editingRecipient &&\n !!normalizedCode &&\n existingCodes.includes(normalizedCode.toLowerCase());\n\n const baseDateOptions = useMemo(\n () =>\n baseDateMaster\n .filter((item) => item.is_active)\n .map((item) => ({\n label: item.name,\n value: item.code,\n })),\n [baseDateMaster],\n );\n\n const queryColumnOptions = useMemo(() => queryColumns, [queryColumns]);\n\n const duplicateColumnUsageError = useMemo(() => {\n const usageMap = new Map();\n\n const registerUsage = (value, fieldLabel) => {\n const normalisedValue = normaliseKeyValue(value);\n if (!normalisedValue) return;\n\n const existingUsage = usageMap.get(normalisedValue);\n if (existingUsage) {\n return `${value} is already used in ${existingUsage}. Each column can only be used once across recipient keys.`;\n }\n\n usageMap.set(normalisedValue, fieldLabel);\n return \"\";\n };\n\n for (const fetchTypeKey of fetchTypeKeys) {\n const duplicateError = registerUsage(fetchTypeKey, \"Fetch Type Keys\");\n if (duplicateError) return duplicateError;\n }\n\n const historyKeyError = registerUsage(historyKey, \"History Key\");\n if (historyKeyError) return historyKeyError;\n\n const excludeVaccineKeyError = registerUsage(\n excludeVaccineKey,\n \"Exclude Vaccine Key\",\n );\n if (excludeVaccineKeyError) return excludeVaccineKeyError;\n\n const locationKeyError = registerUsage(locationKey, \"Location Key\");\n if (locationKeyError) return locationKeyError;\n\n return \"\";\n }, [fetchTypeKeys, historyKey, locationKey, excludeVaccineKey]);\n\n const getAvailableColumnOptions = useCallback(\n (currentValues = []) => {\n const currentValueSet = new Set(\n currentValues.map((value) => normaliseKeyValue(value)).filter(Boolean),\n );\n\n const reservedValues = new Set(\n [\n ...fetchTypeKeys,\n historyKey,\n excludeVaccineKey,\n geographicalApplicability ? locationKey : \"\",\n ]\n .map((value) => normaliseKeyValue(value))\n .filter(Boolean),\n );\n\n currentValueSet.forEach((value) => reservedValues.delete(value));\n\n return queryColumnOptions.filter((option) => {\n const normalisedOption = normaliseKeyValue(option);\n return !reservedValues.has(normalisedOption);\n });\n },\n [\n fetchTypeKeys,\n geographicalApplicability,\n historyKey,\n excludeVaccineKey,\n locationKey,\n queryColumnOptions,\n ],\n );\n\n const queryError = useMemo(() => {\n const q = newQuery.trim().toLowerCase();\n if (!q) return \"\";\n if (!q.startsWith(\"select\")) return \"Query must start with SELECT.\";\n const forbidden = [\n \"insert\",\n \"update\",\n \"delete\",\n \"drop\",\n \"truncate\",\n \"alter\",\n \"create\",\n ];\n const foundForbidden = forbidden.find((keyword) => {\n const regex = new RegExp(`\\\\b${keyword}\\\\b`, \"i\");\n return regex.test(q);\n });\n if (foundForbidden)\n return `Query contains forbidden keyword: ${foundForbidden.toUpperCase()}`;\n return \"\";\n }, [newQuery]);\n\n const loadColumnsFromQuery = (queryToPreview = newQuery) => {\n if (!queryToPreview.trim() || queryError) {\n setQueryColumns([]);\n return;\n }\n\n const discoveredColumns = inferColumnsFromQueryText(queryToPreview);\n setQueryColumns(discoveredColumns);\n };\n\n useEffect(() => {\n const timer = setTimeout(() => {\n if (newQuery) {\n loadColumnsFromQuery(newQuery);\n }\n }, 1000);\n return () => clearTimeout(timer);\n }, [newQuery]);\n\n const handleEditClick = (recipient) => {\n const config = parseRecipientConfig(recipient.config);\n setEditingRecipient(recipient);\n setIsAdding(true);\n setNewName(recipient.name || \"\");\n setNewCode(recipient.code || \"\");\n setNewQuery(config.query || \"\");\n setGeographicalApplicability(!!config.geographicalApplicability);\n setAllowedBaseDates(config.allowedBaseDates || []);\n setFetchTypeKeys(config.fetchTypeKeys || []);\n setLocationKey(config.locationKey || \"\");\n setHistoryKey(config.historyKey || \"\");\n setExcludeVaccineKey(config.excludeVaccineKey || \"\");\n setIsQueryTouched(false);\n };\n\n const handleSave = async () => {\n try {\n setIsQueryTouched(true);\n const errors = validateRecipientForm();\n setErrors(errors);\n\n if (Object.keys(errors).length > 0) {\n showToast({\n message: \"Please fix the validation errors before saving.\",\n type: \"error\",\n });\n return;\n }\n if (!editingRecipient && isCodeDuplicate) {\n showToast({\n message: \"Code must be unique. This code already exists.\",\n type: \"error\",\n });\n return;\n }\n\n if (queryError) {\n showToast({ message: queryError, type: \"error\" });\n return;\n }\n\n if (duplicateColumnUsageError) {\n showToast({ message: duplicateColumnUsageError, type: \"error\" });\n return;\n }\n\n const payload = {\n name: newName.trim(),\n code: editingRecipient?.code || normalizedCode,\n config: JSON.stringify({\n allowedBaseDates,\n geographicalApplicability,\n query: newQuery.trim(),\n fetchTypeKeys,\n locationKey: geographicalApplicability ? locationKey : \"\",\n historyKey,\n excludeVaccineKey,\n }),\n };\n\n setSaving(true);\n const res = editingRecipient\n ? await ImmunizationUtil.updateRecipient(payload)\n : await ImmunizationUtil.saveRecipient(payload);\n\n if (res?.data?.success === false) {\n throw new Error(\"Failed to save recipient\");\n }\n\n const savedRecipient = res?.data?.result?.[0] || {\n ...editingRecipient,\n name: payload.name,\n code: payload.code,\n config: parseRecipientConfig(payload.config),\n };\n\n dispatch(upsertRecipientMasterItem(savedRecipient));\n showToast({\n message: `Recipient ${editingRecipient ? \"updated\" : \"added\"} successfully`,\n type: \"success\",\n });\n resetForm();\n setIsAdding(false);\n } catch (error) {\n console.error(error);\n showToast({\n message: error?.message || \"Failed to save recipient\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"680px\",\n maxHeight: \"95vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faUser} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding\n ? editingRecipient\n ? \"Edit Recipient\"\n : \"Add New Recipient\"\n : \"Configure Recipient\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {recipientMaster.length || 0} recipient\n {recipientMaster.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: \"var(--color-text)\" }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"14px\",\n backgroundColor: \"var(--color-gray4)\",\n }}\n >\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => {\n const val = e.target.value;\n setNewName(val);\n\n setErrors((prev) => ({ ...prev, name: \"\" }));\n setErrors((prev) => ({ ...prev, code: \"\" }));\n\n if (!editingRecipient) {\n const generatedCode = val\n .trim()\n .replace(/\\s+/g, \"_\")\n .toUpperCase();\n setNewCode(generatedCode);\n }\n }}\n error={!!errors.name}\n helperText={errors.name}\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.5,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Code\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) => {\n if (!editingRecipient) {\n setNewCode(e.target.value);\n setErrors((prev) => ({ ...prev, code: \"\" }));\n }\n }}\n disabled={!!editingRecipient}\n error={!!errors.code}\n helperText={\n editingRecipient\n ? \"Code cannot be changed while editing.\"\n : errors.code || \"\"\n }\n sx={modalFieldSx}\n />\n </Box>\n </Box>\n\n <Box className=\"input-group\">\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Query\n </Typography>\n <Box\n sx={{\n border: !!errors.query\n ? \"1.5px solid #d32f2f\"\n : \"1.5px solid var(--color-gray3)\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n height: \"180px\",\n }}\n >\n <PostgresEditor\n defaultValue={newQuery}\n height=\"180px\"\n onChange={(value) => {\n setNewQuery(value);\n setErrors((prev) => ({ ...prev, query: \"\" }));\n }}\n />\n </Box>\n {errors.query && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: 0.5, ml: 1, display: \"block\" }}\n >\n {errors.query}\n </Typography>\n )}\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n p: 1.5,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"12px\",\n backgroundColor: \"var(--color-background2)\",\n }}\n >\n <Box>\n <Typography\n sx={{\n fontWeight: 700,\n fontSize: \"13px\",\n color: \"var(--color-text)\",\n }}\n >\n Geographical Applicability\n </Typography>\n <Typography\n sx={{ fontSize: \"12px\", color: \"var(--color-gray1)\" }}\n >\n Show location key only when recipient config needs\n geography.\n </Typography>\n </Box>\n <CustomSwitch\n checked={geographicalApplicability}\n onChange={(e) => {\n const checked = e.target.checked;\n setGeographicalApplicability(checked);\n if (!checked) {\n setLocationKey(\"\");\n }\n }}\n />\n </Box>\n\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\" }}>\n <Box className=\"input-group\" sx={{ flex: 1, minWidth: 250 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faListCheck}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Fetch Type Keys\n </Typography>\n <Autocomplete\n multiple\n freeSolo\n disableCloseOnSelect\n size=\"small\"\n options={getAvailableColumnOptions(fetchTypeKeys)}\n value={fetchTypeKeys}\n onChange={(_, newValue) => {\n const uniqueValues = [];\n const seenValues = new Set();\n\n newValue.forEach((value) => {\n const normalisedValue = normaliseKeyValue(value);\n if (\n !normalisedValue ||\n seenValues.has(normalisedValue)\n ) {\n return;\n }\n seenValues.add(normalisedValue);\n uniqueValues.push(value);\n });\n\n setFetchTypeKeys(uniqueValues);\n setErrors((prev) => ({\n ...prev,\n fetchTypeKeys: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n renderTags={(value, getTagProps) =>\n value.map((option, index) => (\n <Chip\n label={option}\n {...getTagProps({ index })}\n size=\"small\"\n />\n ))\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Fetch Type Keys\"\n placeholder=\"Select or type and press enter\"\n error={!!errors.fetchTypeKeys}\n helperText={errors.fetchTypeKeys}\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1, minWidth: 250 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faClockRotateLeft}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n History Key\n </Typography>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={getAvailableColumnOptions([historyKey])}\n value={historyKey}\n onChange={(_, newValue) => {\n setHistoryKey(newValue || \"\");\n setErrors((prev) => ({\n ...prev,\n historyKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n onInputChange={(_, newInputValue) => {\n setHistoryKey(newInputValue);\n setErrors((prev) => ({\n ...prev,\n historyKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"History Key\"\n placeholder=\"Select or type column name\"\n error={!!errors.historyKey}\n helperText={errors.historyKey}\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1, minWidth: 250 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faClockRotateLeft}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Exclude Vaccine Key\n </Typography>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={getAvailableColumnOptions([excludeVaccineKey])}\n value={excludeVaccineKey}\n onChange={(_, newValue) => {\n setExcludeVaccineKey(newValue || \"\");\n setErrors((prev) => ({\n ...prev,\n excludeVaccineKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n onInputChange={(_, newInputValue) => {\n setExcludeVaccineKey(newInputValue);\n setErrors((prev) => ({\n ...prev,\n excludeVaccineKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Exclude Vaccine Key\"\n placeholder=\"Select or type column name\"\n error={!!errors.excludeVaccineKey}\n helperText={errors.excludeVaccineKey}\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n\n {geographicalApplicability && (\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faMapMarkedAlt}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Location Key\n </Typography>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={getAvailableColumnOptions([locationKey])}\n value={locationKey}\n onChange={(_, newValue) => {\n setLocationKey(newValue || \"\");\n setErrors((prev) => ({\n ...prev,\n locationKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n onInputChange={(_, newInputValue) => {\n setLocationKey(newInputValue);\n setErrors((prev) => ({\n ...prev,\n locationKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Location Key\"\n placeholder=\"Select or type column name\"\n error={!!errors.locationKey}\n helperText={errors.locationKey}\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n )}\n\n {errors.duplicateColumnUsage && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: -1, ml: 1, display: \"block\" }}\n >\n {errors.duplicateColumnUsage}\n </Typography>\n )}\n\n <Box className=\"input-group\">\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: 1.5,\n mb: 0.8,\n flexWrap: \"wrap\",\n }}\n >\n <Typography className=\"input-label\" sx={{ mb: 0 }}>\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Allowed Base Dates\n </Typography>\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setIsBaseDateModalOpen(true)}\n sx={{\n textTransform: \"none\",\n fontWeight: 700,\n color: \"var(--color-text)\",\n p: 0,\n minWidth: 0,\n }}\n >\n + Add New Base Date\n </Button>\n </Box>\n <Autocomplete\n multiple\n disableCloseOnSelect\n size=\"small\"\n options={baseDateOptions}\n value={baseDateOptions.filter((option) =>\n allowedBaseDates.includes(option.value),\n )}\n onChange={(_, selectedOptions) =>\n setAllowedBaseDates(\n selectedOptions.map((item) => item.value),\n )\n }\n getOptionLabel={(option) => option.label}\n isOptionEqualToValue={(option, value) =>\n option.value === value.value\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select allowed base dates\"\n placeholder=\"Choose one or more\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n ) : recipientMaster.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"recipient table\">\n <TableHead>\n <TableRow>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\" width=\"60\">\n Edit\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {recipientMaster.map((recipient) => (\n <TableRow\n key={recipient.id || recipient.code}\n sx={{\n \"&:hover\": { backgroundColor: \"var(--color-gray4)\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: \"var(--color-text)\",\n py: 1.5,\n }}\n >\n {recipient.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: \"var(--color-text)\",\n backgroundColor: \"var(--color-gray4)\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {recipient.code}\n </Box>\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <IconButton\n size=\"small\"\n onClick={() => handleEditClick(recipient)}\n sx={{\n color: \"var(--color-gray1)\",\n \"&:hover\": { color: \"var(--color-text)\" },\n }}\n >\n <FontAwesomeIcon\n icon={faEdit}\n style={{ fontSize: 13 }}\n />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: \"var(--color-gray1)\",\n }}\n >\n <FontAwesomeIcon\n icon={faUser}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: \"var(--color-gray1)\" }}\n >\n No recipients configured yet.\n </Typography>\n <Typography\n variant=\"caption\"\n sx={{ color: \"var(--color-gray3)\" }}\n >\n Click “Add New” to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n resetForm();\n setIsAdding(false);\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon\n icon={faArrowLeft}\n style={{ fontSize: 11 }}\n />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={saving}\n >\n {editingRecipient ? \"Update Recipient\" : \"Save Recipient\"}\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Recipient\n </Button>\n )}\n </DialogActions>\n </Dialog>\n\n <ConfigureBaseDateModal\n open={isBaseDateModalOpen}\n onClose={() => setIsBaseDateModalOpen(false)}\n startInAddMode\n onSaved={(savedBaseDate) => {\n if (savedBaseDate?.code) {\n setAllowedBaseDates((prev) =>\n prev.includes(savedBaseDate.code)\n ? prev\n : [...prev, savedBaseDate.code],\n );\n }\n }}\n />\n </>\n );\n};\n\nConfigureRecipientModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default ConfigureRecipientModal;\n","import {\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n IconButton,\n Box,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Popover,\n Switch,\n Tooltip,\n Select,\n MenuItem,\n Checkbox,\n FormControlLabel,\n} from '@mui/material';\nimport React, { useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport PropTypes from 'prop-types';\nimport { faExclamationCircle, faPlus, faTrash } from '@fortawesome/free-solid-svg-icons';\nimport {\n LIFELONG_UNIT,\n getDaysVal,\n isBlankDuration,\n isLifelong,\n validateOverdueWindow,\n} from '../utils/validationUtils';\n\nconst UNIT_OPTIONS = [\n { value: 'days', label: 'days', short: 'D' },\n { value: 'weeks', label: 'weeks', short: 'W' },\n { value: 'months', label: 'months', short: 'M' },\n { value: 'years', label: 'years', short: 'Y' },\n];\n\n// Kept out of UNIT_OPTIONS so it is only offered where lifelong is actually allowed.\nconst LIFELONG_OPTION = { value: LIFELONG_UNIT, label: 'lifelong', short: '∞' };\n\nconst DEFAULT_DOSE_UNITS = {\n eligibleFrom: 'days',\n eligibleTo: 'days',\n interval: 'days',\n overdueFrom: 'days',\n overdueTill: 'days',\n};\n\nconst getUnitOption = (value) =>\n value === LIFELONG_UNIT ? LIFELONG_OPTION : UNIT_OPTIONS.find((option) => option.value === value) || UNIT_OPTIONS[0];\n\nconst UnitSelect = ({ value, onChange, compact = false, allowLifelong = false, disabled = false }) => {\n return (\n <Select\n size=\"small\"\n value={value}\n onChange={onChange}\n disabled={disabled}\n renderValue={(selected) => getUnitOption(selected).short}\n sx={{\n fontSize: '12px',\n height: '32px',\n bgcolor: '#f5f7fa',\n minWidth: compact ? '38px' : '50px',\n '& .MuiSelect-select': {\n paddingTop: '6px',\n paddingBottom: '6px',\n paddingLeft: compact ? '4px' : '6px',\n paddingRight: compact ? '16px' : '18px',\n },\n '& .MuiSelect-icon': {\n fontSize: '18px',\n right: compact ? '-1px' : '2px',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: '#d9e0e7',\n },\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: '#a6b9c7',\n },\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: '#11b666',\n },\n }}\n >\n {UNIT_OPTIONS.map((option) => (\n <MenuItem key={option.value} value={option.value} sx={{ fontSize: '12px' }}>\n {option.label}\n </MenuItem>\n ))}\n {allowLifelong && (\n <MenuItem value={LIFELONG_OPTION.value} sx={{ fontSize: '12px' }}>\n {LIFELONG_OPTION.label}\n </MenuItem>\n )}\n </Select>\n );\n};\n\nUnitSelect.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n compact: PropTypes.bool,\n allowLifelong: PropTypes.bool,\n disabled: PropTypes.bool,\n};\n\nconst getDays = (val) => {\n if (!val) return 0;\n if (typeof val === 'string' && val.toLowerCase() === 'birth') return 0;\n return parseInt(val) || 0;\n};\n\nconst DurationInput = ({\n defaultValue,\n error,\n onFieldUpdate,\n unit = 'days',\n onUnitChange,\n compact = false,\n allowEmpty = false,\n allowLifelong = false,\n disabled = false,\n placeholder,\n}) => {\n // `unit` already reads LIFELONG_UNIT when the value is null — see resolveUnitValue.\n const hasNoEnd = unit === LIFELONG_UNIT;\n const isEmpty = allowEmpty && isBlankDuration(defaultValue);\n const quantity = isEmpty ? '' : String(getDays(defaultValue));\n\n const handleQtyChange = (e) => {\n const rawValue = e.target.value;\n if (rawValue === '') {\n onFieldUpdate(allowEmpty ? '' : `0 ${unit}`);\n return;\n }\n\n const val = Math.max(0, parseInt(rawValue) || 0);\n onFieldUpdate(`${val} ${unit}`);\n };\n\n return (\n <Box sx={{ position: 'relative', mb: error ? 3.5 : 0 }}>\n <Box sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <TextField\n size=\"small\"\n type={hasNoEnd ? 'text' : 'number'}\n value={hasNoEnd ? 'No end' : quantity}\n onChange={handleQtyChange}\n disabled={hasNoEnd || disabled}\n placeholder={placeholder}\n inputProps={{ min: 0 }}\n className={`dose-input duration-qty ${error ? 'error-input' : ''}`}\n sx={{\n flex: 1,\n minWidth: compact ? '44px' : '70px',\n '& input::-webkit-outer-spin-button, & input::-webkit-inner-spin-button': {\n display: 'none',\n margin: 0,\n },\n '& input[type=number]': {\n MozAppearance: 'textfield',\n paddingLeft: '0px',\n paddingRight: '0px',\n ...(compact ? { textAlign: 'center' } : {}),\n },\n }}\n />\n <UnitSelect\n value={unit}\n compact={compact}\n allowLifelong={allowLifelong}\n disabled={disabled}\n onChange={(e) => onUnitChange(e.target.value)}\n />\n </Box>\n {error && (\n <Box className=\"error-msg\" sx={{ position: 'absolute', top: '100%', mt: 1, left: 0 }}>\n <FontAwesomeIcon icon={faExclamationCircle} />\n {error}\n </Box>\n )}\n </Box>\n );\n};\n\nDurationInput.propTypes = {\n defaultValue: PropTypes.string,\n error: PropTypes.string,\n onFieldUpdate: PropTypes.func.isRequired,\n unit: PropTypes.string,\n onUnitChange: PropTypes.func.isRequired,\n compact: PropTypes.bool,\n allowEmpty: PropTypes.bool,\n allowLifelong: PropTypes.bool,\n disabled: PropTypes.bool,\n placeholder: PropTypes.string,\n};\n\n// The dropdown shows lifelong purely because the stored value is null; the persisted unit\n// stays underneath so it survives the round-trip to the database.\nconst resolveUnitValue = (eligibleTo, unit) => (isLifelong(eligibleTo) ? LIFELONG_UNIT : unit || 'days');\n\n/**\n * The optional repeating tail on a FLEXIBLE schedule: boosters that recur on an interval for as\n * long as their window is open, with no fixed number of them.\n *\n * Deliberately three plain controls rather than a row of the table above. Those rows are a list\n * the admin numbers and edits; this is one rule that generates doses from what the member has\n * actually received, and it should not look like another dose to be filled in.\n */\nexport const RecurringBoosterFields = ({ value, onChange, disabled = false, errors = {} }) => {\n const enabled = Boolean(value);\n const booster = value || {};\n\n const update = (field, next) => onChange({ ...booster, [field]: next });\n\n const toggle = (on) =>\n onChange(\n on\n ? { eligibleFrom: '0 days', eligibleTo: null, interval: '0 days' }\n : null\n );\n\n return (\n <Box sx={{ mt: 2 }}>\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n checked={enabled}\n disabled={disabled}\n onChange={(e) => toggle(e.target.checked)}\n />\n }\n label={\n <Typography sx={{ fontSize: '12px', fontWeight: 700, color: 'var(--color-gray1)' }}>\n Repeating booster after this schedule\n </Typography>\n }\n sx={{ ml: 0 }}\n />\n {enabled && (\n <>\n <Typography\n variant=\"caption\"\n sx={{ display: 'block', color: 'var(--color-gray1)', mb: 1, fontStyle: 'italic' }}\n >\n Offered once every primary dose is given, then again after each interval until the\n window closes. Optional, so it appears on the timeline only after it is given.\n </Typography>\n <Box sx={{ display: 'flex', gap: 1.5, flexWrap: 'wrap' }}>\n {[\n { field: 'eligibleFrom', label: 'ELIGIBLE FROM', lifelong: false },\n { field: 'eligibleTo', label: 'ELIGIBLE TO', lifelong: true },\n { field: 'interval', label: 'INTERVAL', lifelong: false },\n ].map(({ field, label, lifelong }) => (\n <Box key={field}>\n <Typography\n variant=\"caption\"\n sx={{\n color: 'var(--color-text)',\n fontWeight: 800,\n fontSize: '11px',\n display: 'block',\n mb: '6px',\n }}\n >\n {label}\n </Typography>\n <DurationInput\n defaultValue={booster[field]}\n unit={\n lifelong\n ? resolveUnitValue(booster[field], getUnit(booster[field]))\n : getUnit(booster[field])\n }\n allowLifelong={lifelong}\n allowEmpty\n disabled={disabled}\n error={errors[field]}\n onFieldUpdate={(next) => update(field, next)}\n onUnitChange={(nextUnit) =>\n update(\n field,\n nextUnit === LIFELONG_UNIT\n ? null\n : `${getDays(booster[field]) || 0} ${nextUnit}`\n )\n }\n />\n </Box>\n ))}\n </Box>\n </>\n )}\n </Box>\n );\n};\n\nRecurringBoosterFields.propTypes = {\n value: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n errors: PropTypes.object,\n};\n\n/** \"12 months\" -> \"months\"; a blank or unitless value falls back to days. */\nconst getUnit = (val, fallback = 'days') => {\n const parts = String(val ?? '').trim().split(/\\s+/);\n return parts.length > 1 ? parts[parts.length - 1] : fallback;\n};\n\nconst DoseDetailsTable = ({\n doses = [],\n doseType = 'FIXED',\n doseCount = 0,\n durationUnits,\n onDurationUnitsUpdate = () => {},\n onUpdate,\n onDoseTypeChange,\n errors = [],\n}) => {\n const [deleteConfirmModal, setDeleteConfirmModal] = useState({\n open: false,\n index: null,\n });\n const safeDurationUnits = durationUnits || {\n eligibleFrom: 'days',\n eligibleTo: 'days',\n interval: 'days',\n };\n\n const [boosterAliasModal, setBoosterAliasModal] = useState({\n open: false,\n index: null,\n value: '',\n anchorEl: null,\n });\n\n const isRecurring = doseType === 'RECURRING';\n // A recurring schedule is laid out exactly like a fixed one — a single window and an\n // interval — so it reuses that table wholesale and only loses the type toggle above it.\n const isFixed = doseType === 'FIXED' || isRecurring;\n const durationColumnWidth = isFixed ? 180 : 96;\n const durationColumnSx = {\n px: isFixed ? 2.5 : 0.25,\n minWidth: durationColumnWidth,\n width: durationColumnWidth,\n };\n const compactNumberCellSx = {\n pl: isFixed ? 2.5 : 1,\n pr: isFixed ? 2.5 : 0.5,\n width: isFixed ? 56 : 34,\n };\n\n let safeDoses = [];\n // A recurring schedule is never counted, so gating its single row on a dose count would\n // leave the table empty and asking for a number that is never going to be chosen.\n if (isRecurring || doseCount > 0) {\n if (isFixed) {\n safeDoses =\n doses && typeof doses === 'object' && !Array.isArray(doses)\n ? [doses]\n : Array.isArray(doses) && doses.length > 0\n ? [doses[0]]\n : [];\n } else {\n const baseArray = Array.isArray(doses) ? doses : [];\n safeDoses = baseArray.slice(0, doseCount);\n }\n }\n\n // Where the open-ended tail of the series begins, or -1 when nothing is lifelong. Only that\n // first row is editable; the rows it cascades onto follow it — see handleDoseUnitChange.\n const lifelongFromIdx = safeDoses.findIndex((dose) => isLifelong(dose?.eligibleTo));\n\n const handleFieldChange = (idx, field, value) => {\n let sanitizedValue = value;\n if (field === 'interval') {\n sanitizedValue = value === '' ? '' : Math.max(0, parseInt(value) || 0);\n }\n\n if (isFixed) {\n const updatedDose = {\n ...(Array.isArray(doses) ? doses[0] : doses),\n [field]: sanitizedValue,\n };\n\n // If fixed dose and count is 1, interval must be 0\n if (doseCount === 1) {\n updatedDose.interval = 0;\n }\n\n onUpdate(updatedDose);\n } else {\n const baseArray = Array.isArray(doses) ? doses : [];\n const updatedDoses = baseArray.map((d, i) => {\n let newDose = { ...d };\n if (field === 'isBooster') {\n if (value && i >= idx) {\n newDose.isBooster = true;\n } else if (!value && i <= idx) {\n newDose.isBooster = false;\n delete newDose.alias;\n }\n } else if (i === idx) {\n if (field === 'alias' && !sanitizedValue) {\n delete newDose.alias;\n } else {\n newDose[field] = sanitizedValue;\n }\n }\n // Also ensure last dose in flexible mode has 0 interval in DTO\n if (i === baseArray.length - 1) {\n newDose.interval = 0;\n }\n return newDose;\n });\n onUpdate(updatedDoses);\n }\n };\n\n const handleFixedEligibleToUnitChange = (newUnit) => {\n const currentDose = Array.isArray(doses) ? doses[0] : doses;\n\n if (newUnit === LIFELONG_UNIT) {\n onUpdate({ ...currentDose, eligibleTo: null });\n return;\n }\n\n if (isLifelong(currentDose?.eligibleTo)) {\n onUpdate({ ...currentDose, eligibleTo: `0 ${newUnit}` });\n }\n onDurationUnitsUpdate({ ...safeDurationUnits, eligibleTo: newUnit });\n };\n\n // For FLEXIBLE: change the unit for a specific dose row\n const handleDoseUnitChange = (idx, unitField, newUnit) => {\n const baseArray = Array.isArray(doses) ? doses : [];\n\n // Lifelong always runs to the end of the series, so the row that switches it on switches\n // it on for every dose after it, and switching it off clears the same tail. Keeping the\n // open-ended region contiguous is what stops a bounded dose being stranded behind an\n // unbounded one, where an arbitrarily late previous dose pushes it past its own window\n // and takes the rest of the series down with it.\n const isLifelongToggle =\n unitField === 'eligibleTo' && (newUnit === LIFELONG_UNIT || isLifelong(baseArray[idx]?.eligibleTo));\n\n if (isLifelongToggle) {\n const turningOn = newUnit === LIFELONG_UNIT;\n onUpdate(\n baseArray.map((d, i) => {\n if (i < idx) return d;\n // Lifelong is not a real unit, so it never overwrites the stored one — that keeps\n // the original unit intact on the round-trip to the database.\n if (turningOn) return { ...d, eligibleTo: null };\n // Coming back from lifelong there is no quantity to preserve. Only the row that was\n // clicked adopts the chosen unit; the rows it had cascaded onto keep their own.\n const unit = i === idx ? newUnit : d?.units?.eligibleTo || 'days';\n return {\n ...d,\n units: { ...DEFAULT_DOSE_UNITS, ...(d.units || {}), eligibleTo: unit },\n eligibleTo: `0 ${unit}`,\n };\n })\n );\n return;\n }\n\n const updatedDoses = baseArray.map((d, i) => {\n if (i !== idx) return d;\n const prevUnits = d.units || DEFAULT_DOSE_UNITS;\n const newUnits = { ...prevUnits, [unitField]: newUnit };\n const updatedDose = { ...d, units: newUnits };\n\n // Re-write the string value with the new unit\n if (unitField === 'eligibleFrom') {\n const qty = parseInt(d.eligibleFrom) || 0;\n updatedDose.eligibleFrom = `${qty} ${newUnit}`;\n } else if (unitField === 'eligibleTo') {\n const qty = parseInt(d.eligibleTo) || 0;\n updatedDose.eligibleTo = `${qty} ${newUnit}`;\n } else if (unitField === 'overdueFrom' || unitField === 'overdueTill') {\n // Switching the unit of an unset optional bound must leave it unset.\n if (!isBlankDuration(d[unitField])) {\n updatedDose[unitField] = `${parseInt(d[unitField]) || 0} ${newUnit}`;\n }\n }\n return updatedDose;\n });\n onUpdate(updatedDoses);\n };\n\n const handleSaveBoosterAlias = () => {\n if (boosterAliasModal.index === null) {\n return;\n }\n\n handleFieldChange(boosterAliasModal.index, 'alias', boosterAliasModal.value.trim());\n setBoosterAliasModal({\n open: false,\n index: null,\n value: '',\n anchorEl: null,\n });\n };\n\n const confirmDeleteDose = () => {\n onUpdate(safeDoses.filter((_, i) => i !== deleteConfirmModal.index));\n setDeleteConfirmModal({ open: false, index: null });\n };\n\n return (\n <Box className=\"left-panel\">\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 2,\n flexWrap: 'wrap',\n mb: 2,\n }}\n >\n <Typography className=\"section-label\" sx={{ mb: 0 }}>\n {isRecurring ? 'REPEATING DOSE' : 'DOSE - WISE DETAILS'}\n </Typography>\n\n {/* Nothing to choose between: a recurring schedule has one window and one interval,\n which is neither a fixed course nor a set of per-dose windows. */}\n {!isRecurring && (\n <Box className=\"dose-type-toggle\">\n <Typography className=\"toggle-label\">Dose Type:</Typography>\n <Box className=\"toggle-container\">\n <Tooltip\n title=\"A single eligibility window applies to all doses, separated by the minimum interval.\"\n arrow\n placement=\"top\"\n >\n <Box\n className={`toggle-option ${doseType === 'FIXED' ? 'active' : ''}`}\n onClick={() => onDoseTypeChange('FIXED')}\n >\n Fixed\n </Box>\n </Tooltip>\n <Tooltip\n title=\"Each dose has its own independent eligibility window and minimum interval.\"\n arrow\n placement=\"top\"\n >\n <Box\n className={`toggle-option ${doseType === 'FLEXIBLE' ? 'active' : ''}`}\n onClick={() => onDoseTypeChange('FLEXIBLE')}\n >\n Flexible\n </Box>\n </Tooltip>\n </Box>\n </Box>\n )}\n </Box>\n <TableContainer className=\"dose-table\" sx={{ overflowX: 'auto', overflowY: 'visible' }}>\n <Table\n size=\"small\"\n sx={{\n minWidth: isFixed ? 720 : 626,\n '& .MuiTableCell-head': {\n paddingTop: '12px',\n paddingBottom: '12px',\n },\n }}\n >\n <colgroup>\n <col style={{ width: isFixed ? 56 : 34 }} />\n <col style={{ width: durationColumnWidth }} />\n <col style={{ width: durationColumnWidth }} />\n <col style={{ width: durationColumnWidth }} />\n {!isFixed && <col style={{ width: durationColumnWidth }} />}\n {!isFixed && <col style={{ width: durationColumnWidth }} />}\n {!isFixed && <col style={{ width: 60 }} />}\n {!isFixed && <col style={{ width: 44 }} />}\n </colgroup>\n <TableHead>\n <TableRow>\n <TableCell className=\"header-cell\" sx={compactNumberCellSx}>\n #\n </TableCell>\n <TableCell className=\"header-cell\" sx={durationColumnSx}>\n ELIGIBLE FROM\n </TableCell>\n <TableCell className=\"header-cell\" sx={durationColumnSx}>\n ELIGIBLE TO\n </TableCell>\n <TableCell className=\"header-cell\" sx={durationColumnSx}>\n INTERVAL\n </TableCell>\n {!isFixed && (\n <>\n <TableCell className=\"header-cell\" sx={durationColumnSx}>\n OVERDUE FROM\n </TableCell>\n <TableCell className=\"header-cell\" sx={durationColumnSx}>\n OVERDUE TILL\n </TableCell>\n <TableCell className=\"header-cell\" sx={{ px: 0.25, minWidth: 60, width: 60 }}>\n BOOSTER\n </TableCell>\n <TableCell\n className=\"header-cell\"\n sx={{\n px: 0.25,\n minWidth: 44,\n width: 44,\n textAlign: 'center',\n }}\n >\n ACTIONS\n </TableCell>\n </>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {safeDoses && safeDoses.length > 0 ? (\n safeDoses.map((dose, idx) => {\n const externalErrors = errors[idx] || {};\n const fromError = externalErrors.eligibleFrom;\n let toError = externalErrors.eligibleTo;\n const intervalError = externalErrors.interval;\n const fromUnit = isFixed\n ? safeDurationUnits.eligibleFrom || 'days'\n : dose?.units?.eligibleFrom || 'days';\n const toUnit = isFixed ? safeDurationUnits.eligibleTo || 'days' : dose?.units?.eligibleTo || 'days';\n\n const fromDays = getDaysVal(dose?.eligibleFrom, fromUnit);\n const toDays = getDaysVal(dose?.eligibleTo, toUnit);\n const hasNoEnd = isLifelong(dose?.eligibleTo);\n // Any dose can start the open-ended tail, but only the one that starts it owns\n // the control — the rest are locked to it so the tail stays contiguous.\n const isCascadedLifelong = !isFixed && lifelongFromIdx !== -1 && idx > lifelongFromIdx;\n\n if (!toError && !hasNoEnd && toDays > 0 && toDays <= fromDays) {\n toError = 'Must be strictly greater than Eligible From';\n }\n\n const liveOverdueErrors = isFixed\n ? {}\n : validateOverdueWindow(dose || {}, dose?.units || {}, hasNoEnd ? null : toDays - fromDays);\n const overdueFromError = externalErrors.overdueFrom || liveOverdueErrors.overdueFrom;\n const overdueTillError = externalErrors.overdueTill || liveOverdueErrors.overdueTill;\n return (\n <TableRow key={dose.id || idx}>\n <TableCell sx={compactNumberCellSx}>{idx + 1}</TableCell>\n <TableCell sx={durationColumnSx}>\n <DurationInput\n compact={!isFixed}\n defaultValue={dose?.eligibleFrom}\n error={fromError || dose?.error}\n unit={isFixed ? safeDurationUnits.eligibleFrom || 'days' : dose?.units?.eligibleFrom || 'days'}\n onUnitChange={(newUnit) =>\n isFixed\n ? onDurationUnitsUpdate({\n ...safeDurationUnits,\n eligibleFrom: newUnit,\n })\n : handleDoseUnitChange(idx, 'eligibleFrom', newUnit)\n }\n onFieldUpdate={(val) => handleFieldChange(idx, 'eligibleFrom', val)}\n />\n </TableCell>\n <TableCell sx={durationColumnSx}>\n <Tooltip\n title={\n isCascadedLifelong\n ? `Lifelong from dose ${lifelongFromIdx + 1} onwards. Change it there to edit this dose.`\n : ''\n }\n arrow\n placement=\"top\"\n >\n {/* Tooltip needs a live element to anchor to; a disabled input has no\n pointer events of its own. */}\n <Box>\n <DurationInput\n compact={!isFixed}\n defaultValue={dose?.eligibleTo}\n error={toError}\n allowLifelong\n disabled={isCascadedLifelong}\n unit={resolveUnitValue(\n dose?.eligibleTo,\n isFixed ? safeDurationUnits.eligibleTo : dose?.units?.eligibleTo\n )}\n onUnitChange={(newUnit) =>\n isFixed\n ? handleFixedEligibleToUnitChange(newUnit)\n : handleDoseUnitChange(idx, 'eligibleTo', newUnit)\n }\n onFieldUpdate={(val) => handleFieldChange(idx, 'eligibleTo', val)}\n />\n </Box>\n </Tooltip>\n </TableCell>\n <TableCell sx={durationColumnSx}>\n {(isFixed && doseCount === 1) || (!isFixed && idx === safeDoses.length - 1) ? (\n <Typography variant=\"body2\" sx={{ color: 'var(--color-gray1)', pl: 1 }}>\n N.A.\n </Typography>\n ) : (\n <Box\n sx={{\n position: 'relative',\n mb: intervalError ? 3.5 : 0,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n gap: 0.5,\n alignItems: 'center',\n }}\n >\n <TextField\n size=\"small\"\n type=\"number\"\n value={String(dose?.interval ?? 0)}\n inputProps={{ min: 0 }}\n onChange={(e) => handleFieldChange(idx, 'interval', e.target.value)}\n className={`dose-input ${intervalError ? 'error-input' : ''}`}\n sx={{\n flex: 1,\n minWidth: isFixed ? '70px' : '44px',\n '& input::-webkit-outer-spin-button, & input::-webkit-inner-spin-button': {\n display: 'none', // Hides spin arrows in Chrome, Safari, Edge, Opera\n margin: 0,\n },\n '& input[type=number]': {\n MozAppearance: 'textfield', // Hides spin arrows in Firefox\n ...(isFixed ? {} : { textAlign: 'center' }),\n },\n }}\n />\n <UnitSelect\n compact={!isFixed}\n value={isFixed ? safeDurationUnits.interval || 'days' : dose?.units?.interval || 'days'}\n onChange={(e) =>\n isFixed\n ? onDurationUnitsUpdate({\n ...safeDurationUnits,\n interval: e.target.value,\n })\n : handleDoseUnitChange(idx, 'interval', e.target.value)\n }\n />\n </Box>\n {intervalError && (\n <Box\n className=\"error-msg\"\n sx={{\n position: 'absolute',\n top: '100%',\n mt: 1,\n left: 0,\n }}\n >\n <FontAwesomeIcon icon={faExclamationCircle} />\n {intervalError}\n </Box>\n )}\n </Box>\n )}\n </TableCell>\n {!isFixed && (\n <>\n <TableCell sx={durationColumnSx}>\n <DurationInput\n compact\n allowEmpty\n placeholder=\"—\"\n defaultValue={dose?.overdueFrom}\n error={overdueFromError}\n unit={dose?.units?.overdueFrom || 'days'}\n onUnitChange={(newUnit) => handleDoseUnitChange(idx, 'overdueFrom', newUnit)}\n onFieldUpdate={(val) => handleFieldChange(idx, 'overdueFrom', val)}\n />\n </TableCell>\n <TableCell sx={durationColumnSx}>\n <DurationInput\n compact\n allowEmpty\n placeholder=\"—\"\n defaultValue={dose?.overdueTill}\n error={overdueTillError}\n unit={dose?.units?.overdueTill || 'days'}\n onUnitChange={(newUnit) => handleDoseUnitChange(idx, 'overdueTill', newUnit)}\n onFieldUpdate={(val) => handleFieldChange(idx, 'overdueTill', val)}\n />\n </TableCell>\n </>\n )}\n {!isFixed && (\n <TableCell sx={{ px: 0.25 }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 0.5,\n minWidth: 0,\n }}\n >\n <Switch\n size=\"small\"\n checked={!!dose?.isBooster}\n onChange={(e) => handleFieldChange(idx, 'isBooster', e.target.checked)}\n />\n {dose?.isBooster && (\n <Tooltip title=\"Add booster alias\" arrow placement=\"top\">\n <IconButton\n size=\"small\"\n sx={{\n width: 20,\n height: 20,\n bgcolor: dose?.alias ? '#e8f5ee' : '#f5f7fa',\n color: dose?.alias ? '#11b666' : '#657584',\n border: '1px solid',\n borderColor: dose?.alias ? '#b7e4cb' : '#d9e0e7',\n boxShadow: '0 1px 2px rgba(57, 77, 97, 0.12)',\n '&:hover': {\n bgcolor: dose?.alias ? '#d9efe4' : '#edf1f5',\n },\n }}\n onClick={(event) =>\n setBoosterAliasModal({\n open: true,\n index: idx,\n value: dose?.alias || '',\n anchorEl: event.currentTarget,\n })\n }\n >\n <FontAwesomeIcon icon={faPlus} fontSize={9} />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n {externalErrors.isBooster && (\n <Box className=\"error-msg\">\n <FontAwesomeIcon icon={faExclamationCircle} />\n {externalErrors.isBooster}\n </Box>\n )}\n </TableCell>\n )}\n {!isFixed && (\n <TableCell sx={{ px: 0.25, textAlign: 'center' }}>\n <IconButton\n size=\"small\"\n color=\"error\"\n onClick={() => setDeleteConfirmModal({ open: true, index: idx })}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </TableCell>\n )}\n </TableRow>\n );\n })\n ) : (\n <TableRow>\n <TableCell colSpan={isFixed ? 4 : 8} align=\"center\" sx={{ py: 3 }}>\n <Typography variant=\"body2\" sx={{ color: 'var(--color-gray1)' }}>\n {doseCount === 0\n ? isRecurring\n ? 'Set when this dose becomes available and how often it repeats.'\n : 'Please select number of doses to configure details.'\n : 'No doses configured for this vaccine.'}\n </Typography>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n\n <Popover\n open={boosterAliasModal.open}\n anchorEl={boosterAliasModal.anchorEl}\n onClose={() =>\n setBoosterAliasModal({\n open: false,\n index: null,\n value: '',\n anchorEl: null,\n })\n }\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'center',\n }}\n PaperProps={{\n sx: {\n borderRadius: '12px',\n p: 1.5,\n width: 260,\n boxShadow: '0 10px 24px rgba(57, 77, 97, 0.16)',\n border: '1px solid #e6ebf0',\n mt: 0.5,\n },\n }}\n >\n <Typography\n sx={{\n fontWeight: 800,\n color: 'var(--color-text)',\n fontSize: '13px',\n mb: 1,\n }}\n >\n Booster Alias\n </Typography>\n <Box>\n <Typography sx={{ color: 'var(--color-gray1)', mb: 1.25, fontSize: '12px' }}>\n Add an alias for this booster dose.\n </Typography>\n <TextField\n autoFocus\n fullWidth\n size=\"small\"\n label=\"Alias\"\n value={boosterAliasModal.value}\n onChange={(e) =>\n setBoosterAliasModal((prev) => ({\n ...prev,\n value: e.target.value,\n }))\n }\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 1, mt: 1.5 }}>\n <Button\n onClick={() =>\n setBoosterAliasModal({\n open: false,\n index: null,\n value: '',\n anchorEl: null,\n })\n }\n sx={{\n color: 'var(--color-gray1)',\n fontWeight: 700,\n minWidth: 0,\n px: 1,\n }}\n >\n CANCEL\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleSaveBoosterAlias}\n sx={{\n fontWeight: 700,\n borderRadius: '8px',\n bgcolor: '#11b666',\n minWidth: 0,\n px: 1.5,\n }}\n >\n SAVE\n </Button>\n </Box>\n </Popover>\n\n <Dialog\n open={deleteConfirmModal.open}\n onClose={() => setDeleteConfirmModal({ open: false, index: null })}\n PaperProps={{\n sx: { borderRadius: '12px', padding: '8px' },\n }}\n >\n <DialogTitle sx={{ fontWeight: 800, color: 'var(--color-text)' }}>Delete Dose?</DialogTitle>\n <DialogContent>\n <Typography sx={{ color: 'var(--color-gray1)', mb: 2, fontSize: '14px' }}>\n Are you sure you want to remove this dosage configuration?\n </Typography>\n </DialogContent>\n <DialogActions sx={{ p: 2 }}>\n <Button\n onClick={() => setDeleteConfirmModal({ open: false, index: null })}\n sx={{ color: 'var(--color-gray1)', fontWeight: 700 }}\n >\n CANCEL\n </Button>\n <Button\n variant=\"contained\"\n color=\"error\"\n onClick={confirmDeleteDose}\n sx={{ fontWeight: 700, borderRadius: '8px', bgcolor: '#f44336' }}\n >\n CONFIRM DELETE\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n};\n\nDoseDetailsTable.propTypes = {\n doses: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n isBooster: PropTypes.bool,\n eligibleFrom: PropTypes.string,\n eligibleTo: PropTypes.string,\n interval: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n alias: PropTypes.string,\n error: PropTypes.string,\n })\n ),\n PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n isBooster: PropTypes.bool,\n eligibleFrom: PropTypes.string,\n eligibleTo: PropTypes.string,\n overdueFrom: PropTypes.string,\n overdueTill: PropTypes.string,\n interval: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n alias: PropTypes.string,\n error: PropTypes.string,\n }),\n ]),\n doseType: PropTypes.string,\n doseCount: PropTypes.number,\n durationUnits: PropTypes.shape({\n eligibleFrom: PropTypes.string,\n eligibleTo: PropTypes.string,\n interval: PropTypes.string,\n }),\n onDurationUnitsUpdate: PropTypes.func,\n onUpdate: PropTypes.func.isRequired,\n onDoseTypeChange: PropTypes.func.isRequired,\n errors: PropTypes.array,\n};\n\nexport default DoseDetailsTable;\n","import { api } from '@/common/interceptors/AxiosInterceptor';\nimport { showToast } from '@/common/toaster/toaster';\n\nexport const retrieveNextLevel = async (locationIds, level, fetchAccordingToUserAOI, languagePreference) => {\n const ids = Array.isArray(locationIds) ? locationIds : [locationIds];\n\n const params = {\n level,\n fetchAccordingToUserAOI,\n languagePreference,\n };\n if (ids.length) {\n params.locationIds = ids.join(',');\n params.locationId = ids[0];\n }\n try {\n const res = await api.get('/location/hierarchy', { params, showLoader: false });\n return res.data;\n } catch (error) {\n console.error(error);\n showToast({ type: 'error', message: 'Can not fetch next level locations' });\n }\n};\n\nexport const getParent = async (locationId, languagePreference) => {\n try {\n const res = await api.get('/location/parent', {\n params: { languagePreference, locationId },\n showLoader: false,\n });\n return res.data;\n } catch (error) {\n console.error(error);\n showToast({ type: 'error', message: 'Can not fetch parent details' });\n }\n};\n\nexport const createOrUpdate = async (location) => {\n await api.post('/location', location);\n};\n\nexport const retrieveNextLevelOfGivenLocationId = async (locationId) => {\n const res = await api.get('/location/childlocations', { params: { locationId } });\n return res.data;\n};\n\nexport const retrieveById = async (locationId) => {\n const res = await api.get('/location/byid', { params: { location_id: locationId } });\n return res.data;\n};\n\nexport const retrieveLocationByRoleId = (roleId) => api.get('/location/byroleid', { params: { role_id: roleId } });\n","import { api } from '@/common/interceptors/AxiosInterceptor';\n\nexport const retriveLocationType = (params, config) => api.get('/location/locationtypes', { params, ...config });\n\nexport const createLocationType = (data) =>\n api.post('/resource/getdata', { code: 'create_location_type', parameters: data });\n\nexport const getLocationTypeById = (data) =>\n api.post('/resource/getdata', { code: 'retrieve_location_type_by_id', parameters: data });\n\nexport const updateLocationType = (data) =>\n api.post('/resource/getdata', { code: 'update_location_type', parameters: data });\n\nexport const toggleLocationTypeStatus = (data) =>\n api.post('/resource/getdata', { code: 'toggle_location_type_status', parameters: data });\n","import React, { useState, useRef } from \"react\";\nimport {\n Box,\n Typography,\n IconButton,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Select,\n MenuItem,\n CircularProgress,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport PropTypes from \"prop-types\";\nimport { faEdit, faTrash, faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport { useSelector } from \"react-redux\";\nimport { retrieveNextLevel } from \"../../../../../app-shell/src/common/services/LocationService\";\nimport { retriveLocationType } from \"../../../../../app-shell/src/common/services/LocationType\";\n\nconst GeographicalApplicability = ({ regions = [], onUpdate }) => {\n const { userWithToken: loggedInUser } = useSelector(\n (state) => state.Authenticate,\n );\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [loadingLevels, setLoadingLevels] = useState({});\n\n const [activeLevels, setActiveLevels] = useState([]);\n const [levelOptions, setLevelOptions] = useState({});\n const [selections, setSelections] = useState({});\n const [editingId, setEditingId] = useState(null);\n\n const fetchingRef = useRef(false);\n\n const hydrateOptions = async (selectionMap, levels = activeLevels) => {\n if (!selectionMap || !levels || levels.length === 0) return;\n for (let i = 0; i < levels.length - 1; i++) {\n const currentType = levels[i];\n if (!currentType) continue;\n const currentKey = String(currentType.id || currentType.name);\n const selectedId = selectionMap[currentKey]?.id;\n\n if (selectedId) {\n const nextType = levels[i + 1];\n const nextKey = String(nextType.id || nextType.name);\n await fetchLevelData(selectedId, nextType.level, nextKey);\n } else {\n break;\n }\n }\n };\n\n const fetchMetadata = async (initialSelectionMap = null) => {\n if (fetchingRef.current) return;\n fetchingRef.current = true;\n setLoading(true);\n try {\n const resp = await retriveLocationType({}, { showLoader: false });\n if (resp?.data) {\n const sorted = resp.data\n .filter((l) => l.isActive)\n .sort((a, b) => a.level - b.level);\n\n const groupedMap = new Map();\n sorted.forEach((l) => {\n if (!groupedMap.has(l.level)) {\n groupedMap.set(l.level, {\n id: String(l.id || l.name),\n level: l.level,\n name: l.name,\n types: [l],\n });\n } else {\n const group = groupedMap.get(l.level);\n group.id += \"_\" + String(l.id || l.name);\n group.name += \" / \" + l.name;\n group.types.push(l);\n }\n });\n const groupedLevelsList = Array.from(groupedMap.values());\n setActiveLevels(groupedLevelsList);\n\n const initSels = {};\n const initOpts = {};\n groupedLevelsList.forEach((l) => {\n const key = String(l.id);\n initSels[key] = { id: \"\", name: \"\" };\n initOpts[key] = [];\n });\n\n if (groupedLevelsList.length > 0) {\n const lang = loggedInUser?.languagePreference || \"en\";\n const firstLevelNum = groupedLevelsList[0].level;\n const firstLevelResp = await retrieveNextLevel(\n [],\n firstLevelNum,\n false,\n lang,\n );\n\n if (firstLevelResp && Array.isArray(firstLevelResp)) {\n firstLevelResp.forEach((cluster) => {\n const clusterLevel = cluster.level;\n const matchingGroup = groupedLevelsList.find(\n (t) => t.level === clusterLevel,\n );\n\n if (matchingGroup) {\n const key = String(matchingGroup.id);\n const newOpts = (cluster.locationDetails || [])\n .filter((loc) => loc.id && loc.name)\n .map((loc) => ({ id: String(loc.id), name: loc.name }));\n\n initOpts[key] = [...(initOpts[key] || []), ...newOpts];\n }\n });\n }\n }\n\n if (initialSelectionMap) {\n setSelections(initialSelectionMap);\n setLevelOptions(initOpts);\n await hydrateOptions(initialSelectionMap, groupedLevelsList);\n } else {\n setSelections(initSels);\n setLevelOptions(initOpts);\n }\n }\n } catch (err) {\n console.error(\"GeographicalApplicability: Metadata fetch failed\", err);\n } finally {\n setLoading(false);\n fetchingRef.current = false;\n }\n };\n\n const fetchLevelData = async (parentId, targetLevelNum, targetTypeKey) => {\n try {\n setLoadingLevels((prev) => ({ ...prev, [targetTypeKey]: true }));\n const lang = loggedInUser?.languagePreference || \"en\";\n const locationIds = parentId ? [parentId] : [];\n const response = await retrieveNextLevel(\n locationIds,\n targetLevelNum,\n false,\n lang,\n );\n\n if (response && Array.isArray(response)) {\n setLevelOptions((prev) => {\n const next = { ...prev };\n next[targetTypeKey] = [];\n response.forEach((cluster) => {\n const clusterLevel = cluster.level;\n\n const matchingGroup = activeLevels.find(\n (t) => t.level === clusterLevel,\n );\n\n if (matchingGroup && String(matchingGroup.id) === targetTypeKey) {\n const key = String(matchingGroup.id);\n const newOpts = (cluster.locationDetails || [])\n .filter((loc) => loc.id && loc.name)\n .map((loc) => ({ id: String(loc.id), name: loc.name }));\n next[key] = [...(next[key] || []), ...newOpts];\n }\n });\n return next;\n });\n }\n } catch (error) {\n console.error(`Error fetching level ${targetLevelNum}:`, error);\n } finally {\n setLoadingLevels((prev) => ({ ...prev, [targetTypeKey]: false }));\n }\n };\n\n const scrollRef = useRef(null);\n\n React.useEffect(() => {\n if (isModalOpen && scrollRef.current) {\n setTimeout(() => {\n scrollRef.current.scrollTo({\n top: scrollRef.current.scrollHeight,\n behavior: \"smooth\",\n });\n }, 100);\n }\n }, [selections, isModalOpen]);\n\n const reconstructFromIds = async (locationIdArr) => {\n if (!locationIdArr || locationIdArr.length === 0) return;\n setLoading(true);\n try {\n let levels = activeLevels;\n let currentOpts = { ...levelOptions };\n\n if (levels.length === 0) {\n const resp = await retriveLocationType({}, { showLoader: false });\n if (resp?.data) {\n const sorted = resp.data\n .filter((l) => l.isActive)\n .sort((a, b) => a.level - b.level);\n\n const groupedMap = new Map();\n sorted.forEach((l) => {\n if (!groupedMap.has(l.level)) {\n groupedMap.set(l.level, {\n id: String(l.id || l.name),\n level: l.level,\n name: l.name,\n types: [l],\n });\n } else {\n const group = groupedMap.get(l.level);\n group.id += \"_\" + String(l.id || l.name);\n group.name += \" / \" + l.name;\n group.types.push(l);\n }\n });\n levels = Array.from(groupedMap.values());\n setActiveLevels(levels);\n }\n }\n\n if (levels.length === 0) {\n setLoading(false);\n return;\n }\n\n const newSels = {};\n let parentId = null;\n const lang = loggedInUser?.languagePreference || \"en\";\n\n for (let i = 0; i < locationIdArr.length; i++) {\n const targetId = String(locationIdArr[i]);\n const currentType = levels[i];\n if (!currentType) break;\n\n const key = String(currentType.id || currentType.name);\n const targetLevelNum = currentType.level;\n const locationIds = parentId ? [parentId] : [];\n\n const response = await retrieveNextLevel(\n locationIds,\n targetLevelNum,\n false,\n lang,\n );\n\n if (response && Array.isArray(response)) {\n let clusterOptions = [];\n response.forEach((cluster) => {\n const clusterLevel = cluster.level;\n const matchingGroup = levels.find((t) => t.level === clusterLevel);\n\n if (matchingGroup && String(matchingGroup.id) === key) {\n const newOpts = (cluster.locationDetails || [])\n .filter((loc) => loc.id && loc.name)\n .map((loc) => ({ id: String(loc.id), name: loc.name }));\n clusterOptions = [...clusterOptions, ...newOpts];\n }\n });\n\n currentOpts[key] = clusterOptions;\n const matchedOpt = clusterOptions.find(\n (o) => String(o.id) === targetId,\n );\n if (matchedOpt) {\n newSels[key] = { id: matchedOpt.id, name: matchedOpt.name };\n parentId = matchedOpt.id;\n } else {\n break;\n }\n } else {\n break;\n }\n }\n\n levels.forEach((l) => {\n const k = String(l.id || l.name);\n if (!newSels[k]) newSels[k] = { id: \"\", name: \"\" };\n if (!currentOpts[k]) currentOpts[k] = [];\n });\n\n setLevelOptions(currentOpts);\n setSelections(newSels);\n } catch (err) {\n console.error(\"Error reconstructing from IDs:\", err);\n } finally {\n setLoading(false);\n }\n };\n\n const handleOpen = (region = null) => {\n setIsModalOpen(true);\n if (region) {\n setEditingId(region.id);\n if (region.selectionMap && Object.keys(region.selectionMap).length > 0) {\n if (activeLevels.length === 0) {\n fetchMetadata(region.selectionMap);\n } else {\n setSelections(region.selectionMap);\n hydrateOptions(region.selectionMap);\n }\n } else if (region.locationIdArr) {\n reconstructFromIds(region.locationIdArr);\n }\n } else {\n setEditingId(null);\n if (activeLevels.length === 0) {\n fetchMetadata();\n } else {\n const initSels = {};\n activeLevels.forEach((l) => {\n initSels[String(l.id || l.name)] = { id: \"\", name: \"\" };\n });\n setSelections(initSels);\n }\n }\n };\n\n const handleClose = () => {\n setIsModalOpen(false);\n setEditingId(null);\n setSelections((prev) => {\n const reset = { ...prev };\n activeLevels.forEach((l) => {\n reset[String(l.id || l.name)] = { id: \"\", name: \"\" };\n });\n return reset;\n });\n };\n\n const handleAddLocation = () => {\n const activeLevelKeys = activeLevels.map((l) => String(l.id || l.name));\n const selectedEntries = activeLevelKeys\n .map((key) => selections[key])\n .filter((sel) => sel?.id && sel?.name);\n\n if (selectedEntries.length === 0) return;\n\n const locationId = Number.parseInt(selectedEntries.at(-1).id);\n const locationIdArr = selectedEntries.map((sel) =>\n Number.parseInt(sel.id, 10),\n );\n const locationList = selectedEntries.map((sel) => sel.name).join(\" => \");\n const fullPath = selectedEntries.map((sel) => sel.name).join(\" → \");\n\n const isRelated = (p1, p2) =>\n p1 === p2 || p1.startsWith(p2 + \" → \") || p2.startsWith(p1 + \" → \");\n\n const filteredRegions = regions.filter(\n (r) => r.id !== editingId && !isRelated(r.fullPath, fullPath),\n );\n\n const newRegion = {\n id: editingId || Date.now(),\n locationId: locationId,\n locationIdArr: locationIdArr,\n locationList: locationList,\n fullPath: fullPath,\n selectionMap: { ...selections },\n };\n\n onUpdate([...filteredRegions, newRegion]);\n handleClose();\n };\n\n const handleChange = (typeObj) => async (e) => {\n const typeId = String(typeObj.id || typeObj.name);\n const selectedId = String(e.target.value);\n\n if (!selectedId) return;\n\n const currentOptions = levelOptions[typeId] || [];\n const selectedOption = currentOptions.find(\n (opt) => String(opt.id) === selectedId,\n );\n\n setSelections((prev) => {\n const next = { ...prev };\n next[typeId] = { id: selectedId, name: selectedOption?.name || \"\" };\n\n const currentIndex = activeLevels.findIndex(\n (l) => String(l.id || l.name) === typeId,\n );\n for (let i = currentIndex + 1; i < activeLevels.length; i++) {\n const childKey = String(activeLevels[i].id || activeLevels[i].name);\n next[childKey] = { id: \"\", name: \"\" };\n }\n return next;\n });\n\n const currentIndex = activeLevels.findIndex(\n (l) => String(l.id || l.name) === typeId,\n );\n if (currentIndex + 1 < activeLevels.length) {\n const nextType = activeLevels[currentIndex + 1];\n const nextKey = String(nextType.id || nextType.name);\n\n setLevelOptions((prev) => {\n const nextOpts = { ...prev };\n for (let i = currentIndex + 1; i < activeLevels.length; i++) {\n nextOpts[String(activeLevels[i].id || activeLevels[i].name)] = [];\n }\n return nextOpts;\n });\n\n fetchLevelData(selectedId, nextType.level, nextKey);\n }\n };\n\n const renderDropdown = (levelObj, index) => {\n const typeId = String(levelObj.id || levelObj.name);\n const label = `Select ${levelObj.name}`;\n\n const isVisible =\n index === 0 ||\n (activeLevels &&\n activeLevels[index - 1] &&\n selections &&\n !!selections[\n String(activeLevels[index - 1].id || activeLevels[index - 1].name)\n ]?.id);\n\n if (!isVisible) return null;\n\n const isLoading = loadingLevels[typeId] || (index === 0 && loading);\n const options = levelOptions[typeId] || [];\n\n return (\n <Box sx={{ mb: 1.5 }} key={typeId}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 600,\n mb: 0.5,\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n color: \"#333\",\n }}\n >\n {label} {index === 0 && <span style={{ color: \"red\" }}>*</span>}\n {isLoading && <CircularProgress size={12} />}\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={selections[typeId]?.id || \"\"}\n onChange={handleChange(levelObj)}\n displayEmpty\n disabled={isLoading}\n sx={{\n borderRadius: \"6px\",\n bgcolor: 'var(--color-background2)',\n \"& .MuiSelect-select\": { py: 0.75 },\n }}\n >\n <MenuItem value=\"\" disabled>\n {label}\n </MenuItem>\n {options.map((opt) => (\n <MenuItem key={opt.id} value={String(opt.id)}>\n {opt.name}\n </MenuItem>\n ))}\n </Select>\n </Box>\n );\n };\n\n return (\n <Box className=\"region-section\">\n <Box className=\"side-card\">\n <Box className=\"card-header\">\n <Typography\n className=\"section-label\"\n sx={{\n color: 'var(--color-text)',\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n }}\n >\n GEOGRAPHICAL APPLICABILITY\n </Typography>\n <Typography\n className=\"add-link\"\n onClick={() => handleOpen()}\n sx={{ cursor: \"pointer\" }}\n >\n + ADD REGION\n </Typography>\n </Box>\n {regions.map((region, idx) => (\n <Box key={region.id || idx} className=\"region-item\">\n <Typography className=\"region-path\">{region.fullPath}</Typography>\n <Box className=\"region-actions\">\n <IconButton\n size=\"small\"\n color=\"inherit\"\n onClick={() => handleOpen(region)}\n >\n <FontAwesomeIcon icon={faEdit} />\n </IconButton>\n <IconButton\n className=\"delete\"\n size=\"small\"\n onClick={() => onUpdate(regions.filter((_, i) => i !== idx))}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n </Box>\n ))}\n {regions.length === 0 && (\n <Box\n className=\"dependency-hint\"\n sx={{\n p: 2,\n textAlign: \"center\",\n border: \"1px dashed var(--color-gray3)\",\n borderRadius: \"8px\",\n color: 'var(--color-gray1)',\n }}\n >\n Click "+ ADD REGION" to add GEOGRAPHICAL APPLICABILITY.\n </Box>\n )}\n </Box>\n\n <Dialog\n open={isModalOpen}\n onClose={handleClose}\n fullWidth\n maxWidth=\"sm\"\n PaperProps={{\n sx: { borderRadius: \"10px\" },\n }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n borderBottom: \"1px solid #eee\",\n mb: 0.5,\n py: 1.5,\n }}\n >\n <Typography sx={{ fontWeight: 700, fontSize: \"15px\" }}>\n {editingId\n ? \"Edit Geographical Location\"\n : \"Add Geographical Location\"}\n </Typography>\n <IconButton onClick={handleClose} size=\"small\">\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent ref={scrollRef} sx={{ mt: 0.5, py: 1 }}>\n {activeLevels.map((level, idx) => renderDropdown(level, idx))}\n {loading && activeLevels.length === 0 && (\n <Box sx={{ display: \"flex\", justifyContent: \"center\", p: 3 }}>\n <CircularProgress size={24} />\n </Box>\n )}\n </DialogContent>\n <DialogActions sx={{ p: 2, pt: 0.5 }}>\n <Button\n variant=\"contained\"\n fullWidth\n onClick={handleAddLocation}\n disabled={\n !activeLevels.length ||\n !selections[String(activeLevels[0].id || activeLevels[0].name)]\n ?.id\n }\n sx={{\n bgcolor: 'var(--color-tableHeader)',\n textTransform: \"none\",\n fontWeight: 700,\n borderRadius: \"20px\",\n py: 0.75,\n fontSize: \"13px\",\n \"&:hover\": { bgcolor: 'var(--color-tableHeader)' },\n }}\n >\n {editingId ? \"UPDATE LOCATION\" : \"ADD LOCATION\"}\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n};\n\nGeographicalApplicability.propTypes = {\n regions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n fullPath: PropTypes.string,\n locationId: PropTypes.number,\n locationIdArr: PropTypes.arrayOf(PropTypes.number),\n locationList: PropTypes.string,\n }),\n ),\n onUpdate: PropTypes.func.isRequired,\n};\n\nexport default GeographicalApplicability;\n","import {\n Box,\n Typography,\n Select,\n MenuItem,\n IconButton,\n TextField,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\n\nconst requiredLabelStyle = {\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"var(--color-text)\",\n fontSize: \"12px\",\n \"&::after\": {\n content: '\" *\"',\n color: \"var(--color-text)\",\n fontWeight: \"bold\",\n },\n};\n\nconst VaccineDependencies = ({\n dependencies = [],\n onUpdate,\n vaccineOptions = [],\n errors = [],\n}) => {\n const handleAddField = () => {\n const newDep = {\n id: Date.now(),\n vaccine: \"\",\n requirement: \"Should be given\",\n minGap: 0,\n maxGap: 0,\n };\n onUpdate([...dependencies, newDep]);\n };\n\n const handleDelete = (idx) => {\n onUpdate(dependencies.filter((_, i) => i !== idx));\n };\n\n const handleInputChange = (idx, field, value) => {\n const updated = dependencies.map((dep, i) => {\n if (i === idx) {\n if (field === \"requirement\") {\n return { ...dep, [field]: value, minGap: 0, maxGap: 0 };\n }\n return { ...dep, [field]: value };\n }\n return dep;\n });\n onUpdate(updated);\n };\n\n return (\n <Box className=\"dependency-section\">\n <Box className=\"side-card dependency-item\" sx={{ overflow: \"visible\" }}>\n <Box className=\"card-header\">\n <Typography\n className=\"section-label\"\n sx={{\n color: \"var(--color-text)\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n }}\n >\n VACCINE DEPENDENCIES\n </Typography>\n <Typography\n className=\"add-link\"\n onClick={handleAddField}\n sx={{ cursor: \"pointer\" }}\n >\n + ADD DEPENDENCY\n </Typography>\n </Box>\n\n {dependencies.map((dep, idx) => {\n const depErrors = (Array.isArray(errors) ? errors[idx] : {}) || {};\n return (\n <Box\n key={dep.id || idx}\n sx={{\n mb: 2,\n pb: 1.5,\n borderBottom: \"1px solid var(--color-gray4)\",\n \"&:last-child\": { borderBottom: \"none\", mb: 0, pb: 0 },\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n gap: 1.25,\n alignItems: \"flex-start\",\n mb: 1.25,\n flexWrap: \"wrap\",\n }}\n >\n <Box sx={{ flex: 1.5 }}>\n <Typography variant=\"caption\" sx={requiredLabelStyle}>\n Select Vaccines\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={dep.vaccine}\n onChange={(e) =>\n handleInputChange(idx, \"vaccine\", e.target.value)\n }\n displayEmpty\n sx={{\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n }}\n >\n <MenuItem value=\"\" disabled>\n Select some options\n </MenuItem>\n {vaccineOptions.map((v) => (\n <MenuItem key={v.id} value={v.vaccine_code}>\n {v.name}\n </MenuItem>\n ))}\n </Select>\n {depErrors.vaccine && (\n <Typography\n variant=\"caption\"\n sx={{ color: \"#d32f2f\", fontSize: \"0.75rem\", mt: 0.5 }}\n >\n {depErrors.vaccine}\n </Typography>\n )}\n </Box>\n\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"caption\" sx={requiredLabelStyle}>\n Requirement\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={dep.requirement}\n onChange={(e) =>\n handleInputChange(idx, \"requirement\", e.target.value)\n }\n sx={{\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n }}\n >\n <MenuItem value=\"Should be given\">Should be given</MenuItem>\n <MenuItem value=\"Should not be given\">\n Should not be given\n </MenuItem>\n <MenuItem value=\"Optional\">Optional</MenuItem>\n </Select>\n </Box>\n\n {(dep.requirement === \"Should be given\" ||\n dep.requirement === \"Optional\") && (\n <>\n <Box sx={{ width: 100 }}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"#333\",\n fontSize: \"10px\",\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n Min Gap (In Days)\n </Typography>\n <TextField\n size=\"small\"\n type=\"number\"\n value={dep.minGap}\n onChange={(e) =>\n handleInputChange(idx, \"minGap\", e.target.value)\n }\n error={!!depErrors.minGap}\n helperText={depErrors.minGap}\n inputProps={{ min: 0 }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n height: \"37px\",\n },\n \"& .MuiFormHelperText-root\": {\n position: \"absolute\",\n top: \"100%\",\n left: 0,\n width: \"220px\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n },\n }}\n />\n </Box>\n\n <Box sx={{ width: 100, position: \"relative\" }}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"#333\",\n fontSize: \"10px\",\n }}\n >\n Max Gap (In Days)\n </Typography>\n <TextField\n size=\"small\"\n type=\"number\"\n value={dep.maxGap}\n onChange={(e) =>\n handleInputChange(idx, \"maxGap\", e.target.value)\n }\n error={!!depErrors.maxGap}\n helperText={depErrors.maxGap}\n inputProps={{ min: 0 }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n height: \"37px\",\n },\n \"& .MuiFormHelperText-root\": {\n position: \"absolute\",\n top: \"100%\",\n right: 0,\n width: \"220px\",\n wordWrap: \"break-word\",\n textAlign: \"right\",\n },\n }}\n />\n </Box>\n </>\n )}\n <IconButton\n color=\"error\"\n size=\"small\"\n sx={{\n mt: 3,\n \"&:hover\": { bgcolor: \"rgba(244, 67, 54, 0.08)\" },\n }}\n onClick={() => handleDelete(idx)}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n </Box>\n );\n })}\n\n {dependencies.length === 0 && (\n <Box\n className=\"dependency-hint\"\n sx={{\n p: 2,\n textAlign: \"center\",\n border: \"1px dashed var(--color-gray3)\",\n borderRadius: \"8px\",\n color: \"var(--color-gray1)\",\n }}\n >\n Click "+ ADD DEPENDENCY" to add validations.\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n\nVaccineDependencies.propTypes = {\n dependencies: PropTypes.array,\n onUpdate: PropTypes.func.isRequired,\n vaccineOptions: PropTypes.array,\n errors: PropTypes.array,\n};\n\nexport default VaccineDependencies;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Box,\n Select,\n MenuItem,\n Typography,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n} from \"@mui/material\";\nimport { isLifelong } from \"../utils/validationUtils\";\n\nconst DoseSelector = ({\n vaccineId,\n currentDoses,\n currentDoseDetails,\n maxDoses,\n onChange,\n disabled = false,\n}) => {\n const [decreaseConfirmModal, setDecreaseConfirmModal] = React.useState({\n open: false,\n newCount: 0,\n dosesToDelete: [],\n });\n\n const handleDoseChange = (e) => {\n const newDoseCount = e.target.value;\n const isArray = Array.isArray(currentDoseDetails);\n\n if (!isArray) {\n onChange(vaccineId, newDoseCount, currentDoseDetails);\n return;\n }\n\n const updatedDoseDetails = [...(currentDoseDetails || [])];\n\n if (newDoseCount > updatedDoseDetails.length) {\n for (let i = updatedDoseDetails.length; i < newDoseCount; i++) {\n updatedDoseDetails.push({\n id: `new_${Date.now()}_${i}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n overdueFrom: \"\",\n overdueTill: \"\",\n interval: 0,\n });\n }\n onChange(vaccineId, newDoseCount, updatedDoseDetails);\n } else if (newDoseCount < updatedDoseDetails.length) {\n const dosesToDelete = updatedDoseDetails.slice(newDoseCount);\n setDecreaseConfirmModal({\n open: true,\n newCount: newDoseCount,\n dosesToDelete,\n });\n }\n };\n\n const confirmDoseDecrease = () => {\n const { newCount } = decreaseConfirmModal;\n const isArray = Array.isArray(currentDoseDetails);\n const updatedDoseDetails = isArray\n ? (currentDoseDetails || []).slice(0, newCount)\n : currentDoseDetails;\n\n onChange(vaccineId, newCount, updatedDoseDetails);\n setDecreaseConfirmModal({ open: false, newCount: 0, dosesToDelete: [] });\n };\n\n return (\n <>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Select\n size=\"small\"\n value={currentDoses}\n onChange={handleDoseChange}\n disabled={disabled}\n sx={{ minWidth: 80, bgcolor: \"var(--color-background2)\" }}\n MenuProps={{\n PaperProps: {\n style: {\n maxHeight: 150,\n },\n },\n }}\n >\n {[0, ...Array.from({ length: maxDoses }, (_, i) => i + 1)].map(\n (val) => (\n <MenuItem\n key={val}\n value={val}\n sx={val === 0 ? { display: \"none\" } : {}}\n >\n {val}\n </MenuItem>\n ),\n )}\n </Select>\n <span>{currentDoses > 1 ? \"Doses\" : \"Dose\"}</span>\n </Box>\n\n <Dialog\n open={decreaseConfirmModal.open}\n onClose={() =>\n setDecreaseConfirmModal({ ...decreaseConfirmModal, open: false })\n }\n PaperProps={{\n sx: { borderRadius: \"12px\", padding: \"8px\" },\n }}\n >\n <DialogTitle sx={{ fontWeight: 800, color: \"var(--color-text)\" }}>\n Delete Dosages?\n </DialogTitle>\n <DialogContent>\n <Typography\n sx={{ color: \"var(--color-gray1)\", mb: 2, fontSize: \"14px\" }}\n >\n Reducing the number of doses will delete the following dosage\n configurations.\n </Typography>\n <Box\n sx={{\n bgcolor: \"#fff5f5\",\n border: \"1px solid #ffe3e3\",\n borderRadius: \"8px\",\n p: 1.5,\n }}\n >\n <Typography\n variant=\"caption\"\n sx={{\n color: \"#f44336\",\n fontWeight: 700,\n mb: 1,\n display: \"block\",\n }}\n >\n DOSAGES TO BE REMOVED:\n </Typography>\n {decreaseConfirmModal.dosesToDelete.map((dose, idx) => (\n <Typography\n key={dose.id}\n sx={{\n fontSize: \"12px\",\n color: \"var(--color-text)\",\n fontWeight: 600,\n }}\n >\n • Dose {decreaseConfirmModal.newCount + idx + 1}:{\" \"}\n {dose.eligibleFrom || \"Not set\"} to{\" \"}\n {isLifelong(dose.eligibleTo)\n ? \"Lifelong\"\n : dose.eligibleTo || \"Not set\"}\n </Typography>\n ))}\n </Box>\n </DialogContent>\n <DialogActions sx={{ p: 2 }}>\n <Button\n onClick={() =>\n setDecreaseConfirmModal({ ...decreaseConfirmModal, open: false })\n }\n sx={{ color: \"var(--color-gray1)\", fontWeight: 700 }}\n >\n CANCEL\n </Button>\n <Button\n variant=\"contained\"\n color=\"error\"\n onClick={confirmDoseDecrease}\n sx={{ fontWeight: 700, borderRadius: \"8px\", bgcolor: \"#f44336\" }}\n >\n CONFIRM DELETE\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nDoseSelector.propTypes = {\n vaccineId: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n .isRequired,\n currentDoses: PropTypes.number.isRequired,\n currentDoseDetails: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.object),\n PropTypes.object,\n ]),\n maxDoses: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n};\n\nexport default DoseSelector;\n","import {\n Box,\n Typography,\n TextField,\n InputAdornment,\n Autocomplete,\n Chip,\n Checkbox,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faFilter } from \"@fortawesome/free-solid-svg-icons\";\nimport { useSelector } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n\nconst VaccineFilters = ({ filters = [], onUpdate }) => {\n const { filtersMaster = [] } = useSelector((state) => state.immunization);\n\n const activeFilters = filtersMaster.filter((f) => f.is_active);\n\n const selectedOptions = activeFilters.filter((f) =>\n filters.some(\n (code) => (typeof code === \"string\" ? code : code.code) === f.code,\n ),\n );\n\n const normalizedFilters = filters.map((f) =>\n typeof f === \"string\" ? f : f.code,\n );\n\n return (\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: 'var(--color-text)',\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n VACCINE FILTERS\n </Typography>\n\n <Autocomplete\n multiple\n options={activeFilters}\n disableCloseOnSelect\n getOptionLabel={(option) => option.name || option.code || \"\"}\n value={selectedOptions}\n onChange={(event, newValue) => {\n onUpdate(newValue.map((val) => val.code));\n }}\n renderOption={(props, option, { selected }) => (\n <li {...props} style={{ fontSize: \"13px\", padding: \"8px 12px\" }}>\n <Checkbox\n size=\"small\"\n style={{ marginRight: 8 }}\n checked={selected}\n sx={{\n p: 0,\n color: \"var(--color-gray3)\",\n \"&.Mui-checked\": { color: 'var(--color-text)' },\n }}\n />\n <Box>\n <Typography sx={{ fontSize: \"13px\", fontWeight: 600 }}>\n {option.name}\n </Typography>\n </Box>\n </li>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder={normalizedFilters.length === 0 ? \"Select Filters\" : \"\"}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\" sx={{ pl: 1 }}>\n <FontAwesomeIcon\n icon={faFilter}\n style={{ color: 'var(--color-gray1)', fontSize: \"12px\" }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: 'var(--color-background2)',\n \"& fieldset\": { borderColor: \"var(--color-gray3)\" },\n },\n }}\n />\n )}\n renderTags={(tagValue, getTagProps) =>\n tagValue.map((option, index) => (\n <Chip\n label={option.name}\n {...getTagProps({ index })}\n size=\"small\"\n key={option.code}\n sx={{\n height: 20,\n fontSize: \"10px\",\n backgroundColor: \"var(--color-gray4)\",\n fontWeight: 600,\n borderRadius: \"4px\",\n }}\n />\n ))\n }\n />\n </Box>\n );\n};\n\nVaccineFilters.propTypes = {\n filters: PropTypes.array,\n onUpdate: PropTypes.func.isRequired,\n};\n\nexport default VaccineFilters;\n","import {\n Box,\n Typography,\n Select,\n MenuItem,\n IconButton,\n TextField,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\n\nconst CODE_SET_OPTIONS = [\"CVX\", \"MVX\", \"SNOMED-CT\"];\n\nconst requiredLabelStyle = {\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"var(--color-text)\",\n fontSize: \"12px\",\n \"&::after\": {\n content: '\" *\"',\n color: \"var(--color-text)\",\n fontWeight: \"bold\",\n },\n};\n\nconst VaccineCodeSets = ({ codeSets = [], onUpdate, errors = [] }) => {\n const handleAddField = () => {\n const newCodeSet = {\n type: \"\",\n value: \"\",\n };\n onUpdate([...codeSets, newCodeSet]);\n };\n\n const handleDelete = (idx) => {\n onUpdate(codeSets.filter((_, i) => i !== idx));\n };\n\n const handleInputChange = (idx, field, value) => {\n const updated = codeSets.map((cs, i) => {\n if (i === idx) {\n return { ...cs, [field]: value };\n }\n return cs;\n });\n onUpdate(updated);\n };\n\n return (\n <Box className=\"dependency-section\" sx={{ mt: 2 }}>\n <Box className=\"side-card dependency-item\" sx={{ overflow: \"visible\" }}>\n <Box className=\"card-header\">\n <Typography\n className=\"section-label\"\n sx={{\n color: \"#394d61\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n }}\n >\n CODE SETS\n </Typography>\n <Typography\n className=\"add-link\"\n onClick={handleAddField}\n sx={{ cursor: \"pointer\" }}\n >\n + ADD CODE SET\n </Typography>\n </Box>\n\n {codeSets.map((cs, idx) => {\n const csErrors = (Array.isArray(errors) ? errors[idx] : {}) || {};\n const selectedTypes = new Set(\n codeSets\n .filter((item, i) => i !== idx && item.type)\n .map((item) => item.type),\n );\n\n return (\n <Box\n key={idx}\n sx={{\n mb: 2,\n pb: 1.5,\n borderBottom: \"1px solid #f0f0f0\",\n \"&:last-child\": { borderBottom: \"none\", mb: 0, pb: 0 },\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n gap: 1.25,\n alignItems: \"flex-start\",\n mb: 1.25,\n flexWrap: \"wrap\",\n }}\n >\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"caption\" sx={requiredLabelStyle}>\n Select Code Set Type\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={cs.type}\n onChange={(e) =>\n handleInputChange(idx, \"type\", e.target.value)\n }\n displayEmpty\n sx={{ borderRadius: \"6px\", bgcolor: \"#fff\" }}\n >\n <MenuItem value=\"\" disabled>\n Select type\n </MenuItem>\n {CODE_SET_OPTIONS.map((opt) => (\n <MenuItem\n key={opt}\n value={opt}\n disabled={selectedTypes.has(opt)}\n >\n {opt}\n </MenuItem>\n ))}\n </Select>\n {csErrors.type && (\n <Typography\n variant=\"caption\"\n sx={{\n color: \"#d32f2f\",\n fontSize: \"0.75rem\",\n mt: 0.5,\n display: \"block\",\n }}\n >\n {csErrors.type}\n </Typography>\n )}\n </Box>\n\n {cs.type && (\n <Box sx={{ flex: 1.5 }}>\n <Typography variant=\"caption\" sx={requiredLabelStyle}>\n Code Value\n </Typography>\n <TextField\n size=\"small\"\n fullWidth\n value={cs.value}\n placeholder={`Enter ${cs.type} value`}\n onChange={(e) =>\n handleInputChange(idx, \"value\", e.target.value)\n }\n error={!!csErrors.value}\n helperText={csErrors.value}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"#fff\",\n },\n }}\n />\n </Box>\n )}\n\n <IconButton\n color=\"error\"\n size=\"small\"\n sx={{\n mt: 3,\n \"&:hover\": { bgcolor: \"rgba(244, 67, 54, 0.08)\" },\n }}\n onClick={() => handleDelete(idx)}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n </Box>\n );\n })}\n\n {codeSets.length === 0 && (\n <Box\n className=\"dependency-hint\"\n sx={{\n p: 2,\n textAlign: \"center\",\n border: \"1px dashed var(--color-gray3)\",\n borderRadius: \"8px\",\n color: \"var(--color-gray1)\",\n }}\n >\n Click "+ ADD CODE SET" to add interoperability code sets.\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n\nVaccineCodeSets.propTypes = {\n codeSets: PropTypes.array,\n onUpdate: PropTypes.func.isRequired,\n errors: PropTypes.array,\n};\n\nexport default VaccineCodeSets;\n","import { ImmunizationUtil } from \"../service/ImmunizationUtil\";\n\nexport const getInitialSummaryVaccineData = ({\n vaccineId,\n vaccines,\n scheduledVaccines,\n}) => {\n const base = vaccines.find((v) => v.id === vaccineId);\n const scheduled = scheduledVaccines.find((sv) => sv.id === vaccineId);\n const doseType = base?.doseType || \"FIXED\";\n\n const data = scheduled\n ? { ...scheduled }\n : {\n id: base?.id || vaccineId,\n name: base?.name || \"N.A.\",\n // Products are linked to a vaccine by code, so it has to survive into the display\n // object — this whitelist is the only thing standing between the two.\n vaccine_code: base?.vaccine_code || \"\",\n productSchedules: base?.productSchedules || [],\n doses: base?.doses || 0,\n eligibility: base?.eligibility || \"N.A.\",\n doseDetails:\n doseType === \"FIXED\" && Array.isArray(base?.doseDetails)\n ? base.doseDetails[0] || {}\n : base?.doseDetails || (doseType === \"FIXED\" ? {} : []),\n regions: base?.regions || [],\n dependencies: base?.dependencies || [],\n isActive: base?.isActive !== undefined ? base.isActive : true,\n // Whether this row's configuration is saved but not yet published to members.\n hasUnpublishedChanges: base?.hasUnpublishedChanges || false,\n doseType,\n baseDateCode: base?.baseDateCode || null,\n recipientType: base?.recipientType || \"\",\n scheduleType: base?.scheduleType || \"ROUTINE\",\n filters: base?.filters || [],\n filterMessage: base?.filterMessage || \"\",\n codeSets: base?.codeSets || [],\n durationUnits: base?.durationUnits || {},\n };\n\n return {\n ...data,\n durationUnits: data?.durationUnits || {\n eligibleFrom: \"days\",\n eligibleTo: \"days\",\n interval: \"days\",\n },\n eligibility: ImmunizationUtil.calculateOverallEligibility(\n data?.doseDetails,\n data?.doseType,\n data?.doses,\n ),\n };\n};\n\nexport const buildDisplayVaccines = ({\n vaccines,\n editedVaccines,\n scheduledVaccines,\n showInactive,\n}) =>\n vaccines\n .map(\n (v) =>\n editedVaccines[v.id] ||\n getInitialSummaryVaccineData({\n vaccineId: v.id,\n vaccines,\n scheduledVaccines,\n }),\n )\n .filter((v) => (showInactive ? true : v.isActive))\n .sort((a, b) => {\n if (b.isActive !== a.isActive) {\n return Number(b.isActive) - Number(a.isActive);\n }\n\n const nameA = a.name || \"\";\n const nameB = b.name || \"\";\n return nameA.localeCompare(nameB);\n });\n\nexport const getAllowedBaseDateCodesForRecipient = (\n recipientMaster,\n recipientType,\n) => {\n const selectedRecipient = recipientMaster.find(\n (recipient) => recipient.code === recipientType,\n );\n const config = selectedRecipient?.config;\n if (!config) return [];\n if (typeof config === \"object\") {\n return config.allowedBaseDates || [];\n }\n try {\n return JSON.parse(config).allowedBaseDates || [];\n } catch {\n return [];\n }\n};\n","import { ImmunizationUtil } from '../service/ImmunizationUtil';\nimport { isLifelong } from './validationUtils';\n\nexport const VACCINES_CATEGORY_CODE = 'VACCINES';\n\nconst DEFAULT_DURATION_UNITS = {\n eligibleFrom: 'days',\n eligibleTo: 'days',\n interval: 'days',\n};\n\n/**\n * The products that can supply a vaccine.\n *\n * A vaccine maps to several products on purpose — a 10-dose vial, a 20-dose vial and a\n * different brand are three separate products of the same antigen — joined by nothing more\n * than a matching code string on both sides.\n */\nexport const getLinkedProducts = (pmProducts, vaccineCode) => {\n const code = String(vaccineCode || '').trim();\n if (!code) return [];\n\n return (pmProducts || [])\n .filter(\n (product) =>\n product.categoryCode === VACCINES_CATEGORY_CODE &&\n product.isActive &&\n String(product.vaccineConfig?.vaccineCode || '').trim() === code\n )\n .sort((a, b) => String(a.name || '').localeCompare(String(b.name || '')));\n};\n\n/** A product's schedule entry within a draft, or undefined when it has none yet. */\nexport const findProductSchedule = (draft, productId) =>\n (draft?.productSchedules || []).find((schedule) => (schedule.productId ?? null) === (productId ?? null));\n\nexport const hasProductSchedule = (draft, productId) => Boolean(findProductSchedule(draft, productId));\n\n/** A blank per-product configuration, used when a product is selected for the first time. */\nexport const buildEmptyProductSchedule = (productId, doseType = 'FIXED') => ({\n productId: productId ?? null,\n // A recurring schedule has no dose count; a fixed one starts at none chosen.\n doses: doseType === 'RECURRING' ? 0 : 0,\n doseType,\n // One blank row for a recurring schedule — its single window and interval. Without it the\n // dose table has nothing to render and falls back to asking for a dose count that will\n // never be chosen.\n doseDetails: doseType === 'RECURRING' ? [{ eligibleFrom: '', eligibleTo: '', interval: 0 }] : {},\n durationUnits: { ...DEFAULT_DURATION_UNITS },\n recurringBooster: null,\n regions: [],\n dependencies: [],\n eligibility: 'N.A.',\n});\n\n/**\n * Drops every product's schedule, leaving the vaccine unconfigured.\n *\n * Used when a vaccine switches between a counted schedule and a recurring one. That changes\n * what a schedule *is* rather than one of its values, so nothing carries over: a fixed\n * course's dose count is meaningless without doses, and a flexible schedule's per-dose windows\n * have nowhere to go.\n *\n * They are removed rather than kept as blanks because the panel edits one product at a time\n * while a save writes the whole array. Blank entries would go out alongside the one product\n * the admin actually reconfigured — each a recurring schedule with no window and a zero\n * interval, stored as though someone had chosen it. With the entries gone every product reads\n * as unconfigured and has to be picked and saved in its own turn, which is how a product\n * schedule is configured in the first place.\n */\nexport const clearProductSchedules = (draft) => ({\n ...draft,\n productSchedules: [],\n});\n\n// The fields the editing panel works on directly. They are the per-product half of a\n// vaccine's configuration; everything else on the draft (name, base date, recipient,\n// filters, code sets, schedule type) belongs to the vaccine as a whole.\nconst PER_PRODUCT_FIELDS = [\n 'doses',\n 'doseType',\n 'doseDetails',\n 'durationUnits',\n 'recurringBooster',\n 'regions',\n 'dependencies',\n];\n\nconst pickPerProductFields = (source) =>\n PER_PRODUCT_FIELDS.reduce((picked, field) => ({ ...picked, [field]: source[field] }), {});\n\n/**\n * Writes whatever the panel currently holds back into the selected product's entry.\n *\n * The editing components all read and write the draft's top-level fields, so the panel edits\n * one product at a time in place and this folds the result back into the array. Called before\n * switching products and before saving.\n */\nexport const flushDraftIntoSchedules = (draft, productId) => {\n const schedules = draft?.productSchedules || [];\n const updated = {\n ...buildEmptyProductSchedule(productId),\n ...pickPerProductFields(draft),\n productId: productId ?? null,\n eligibility: ImmunizationUtil.calculateOverallEligibility(draft.doseDetails, draft.doseType, draft.doses),\n };\n\n const existingIndex = schedules.findIndex(\n (schedule) => (schedule.productId ?? null) === (productId ?? null)\n );\n if (existingIndex === -1) {\n return [...schedules, updated];\n }\n return schedules.map((schedule, index) => (index === existingIndex ? updated : schedule));\n};\n\n/**\n * Loads a product's entry into the draft's top-level fields so the panel edits that product.\n * A product with no entry yet starts from a blank configuration.\n */\nexport const loadScheduleIntoDraft = (draft, productId) => {\n // A product with no entry starts blank in the vaccine's own dose type. Defaulting to FIXED\n // here would quietly undo a recurring vaccine the moment its first product was picked.\n const schedule =\n findProductSchedule(draft, productId) ||\n buildEmptyProductSchedule(productId, draft?.doseType === 'RECURRING' ? 'RECURRING' : 'FIXED');\n return {\n ...draft,\n ...pickPerProductFields(schedule),\n eligibility: schedule.eligibility,\n };\n};\n\n/**\n * A stable string for the parts of a schedule an admin actually sets.\n *\n * Built from a fixed field list rather than stringifying the object, so it does not depend on\n * key order, and it leaves out `eligibility` — that is derived from the fields above it and\n * would only ever restate what they already say.\n */\nconst scheduleFingerprint = (schedule) =>\n JSON.stringify(PER_PRODUCT_FIELDS.map((field) => schedule?.[field] ?? null));\n\n/**\n * Whether the panel holds unsaved work for one product.\n *\n * A product with no stored entry is compared against a blank rather than against nothing,\n * because opening a product loads a blank into the panel — without that, merely selecting an\n * unconfigured product would read as configuring it, and an empty schedule would follow the\n * next save into the database.\n */\nexport const isProductScheduleDirty = (draft, stored, productId) => {\n const doseType = draft?.doseType === 'RECURRING' ? 'RECURRING' : 'FIXED';\n const edited = findProductSchedule(\n { productSchedules: flushDraftIntoSchedules(draft, productId) },\n productId\n );\n const before =\n findProductSchedule(stored, productId) || buildEmptyProductSchedule(productId, doseType);\n\n return scheduleFingerprint(edited) !== scheduleFingerprint(before);\n};\n\nexport const removeProductSchedule = (draft, productId) => ({\n ...draft,\n productSchedules: (draft?.productSchedules || []).filter(\n (schedule) => (schedule.productId ?? null) !== (productId ?? null)\n ),\n});\n\nconst helperGetDays = (val) => {\n if (!val) return 0;\n if (typeof val === 'string' && val.toLowerCase() === 'birth') return 0;\n return Number.parseInt(val) || 0;\n};\n\nconst helperGetOptionalDays = (val) => {\n if (val === undefined || val === null || String(val).trim() === '') {\n return null;\n }\n return helperGetDays(val);\n};\n\n// A lifelong window is stored as null — the one value the engine reads as \"no upper bound\".\n// 0 would mean \"expires on the base date\".\nconst helperGetEligibleTo = (val) => (isLifelong(val) ? null : helperGetDays(val));\n\nconst isBlank = (val) => val === undefined || val === null || String(val).trim() === '';\n\n// \"12 months\" -> \"months\". The amount and its unit travel together through the editor and are\n// split apart only here, on the way into storage.\nconst helperGetUnit = (val, fallback = 'days') => {\n const parts = String(val ?? '').trim().split(/\\s+/);\n return parts.length > 1 ? parts[parts.length - 1] : fallback;\n};\n\n/**\n * The repeating booster tail, or null when none is configured. Carries its own units rather\n * than borrowing durationUnits, which on a FLEXIBLE schedule describes nothing — that schedule\n * keeps its units per dose.\n */\nconst buildRecurringBooster = (schedule) => {\n const booster = schedule.recurringBooster;\n if (!booster || isBlank(booster.eligibleFrom) || !helperGetDays(booster.interval)) {\n return null;\n }\n return {\n eligibleFrom: helperGetDays(booster.eligibleFrom),\n eligibleFromUnit: helperGetUnit(booster.eligibleFrom),\n eligibleTo: helperGetEligibleTo(booster.eligibleTo),\n eligibleToUnit: helperGetUnit(booster.eligibleTo),\n interval: helperGetDays(booster.interval),\n intervalUnit: helperGetUnit(booster.interval),\n };\n};\n\nconst buildDoseRows = (schedule) => {\n // Per-dose rows exist only on a FLEXIBLE schedule. A FIXED course and a RECURRING one each\n // carry a single window and interval, already written above as doseEligibleFrom/To and\n // minGap, and their doseDetails is the bare object the dose table hands back for a\n // one-row schedule rather than an array — there is nothing here to walk.\n if (schedule.doseType !== 'FLEXIBLE') return [];\n\n let regularCount = 0;\n let boosterCount = 0;\n return (schedule.doseDetails || []).map((dose, idx, arr) => {\n let doseLabel;\n if (dose.isBooster) {\n boosterCount++;\n doseLabel = `B${boosterCount}`;\n } else {\n regularCount++;\n doseLabel = regularCount;\n }\n return {\n dose: doseLabel,\n is_booster: !!dose.isBooster,\n ...(dose.isBooster && dose.alias ? { alias: dose.alias.trim() } : {}),\n eligible_from: helperGetDays(dose.eligibleFrom),\n eligible_to: helperGetEligibleTo(dose.eligibleTo),\n overdue_from: helperGetOptionalDays(dose.overdueFrom),\n overdue_till: helperGetOptionalDays(dose.overdueTill),\n min_gap: idx === arr.length - 1 ? 0 : Number.parseInt(dose.interval) || 0,\n eligible_from_unit: dose.units?.eligibleFrom || 'days',\n eligible_to_unit: dose.units?.eligibleTo || 'days',\n interval_unit: dose.units?.interval || 'days',\n overdue_from_unit: dose.units?.overdueFrom || 'days',\n overdue_till_unit: dose.units?.overdueTill || 'days',\n };\n });\n};\n\nconst firstFixedDose = (doseDetails) => (Array.isArray(doseDetails) ? doseDetails[0] : doseDetails) || {};\n\n/**\n * Serialises one product's configuration into an element of the `schedule` jsonb column.\n * The inner key names mirror the columns this replaced, so the evaluator reuses the same\n * parsers it always did.\n */\nexport const buildSchedulePayloadEntry = (schedule) => {\n const isRecurring = schedule.doseType === 'RECURRING';\n // Both write the single window-and-interval shape; they differ only in whether a dose count\n // bounds it.\n const isFixed = schedule.doseType === 'FIXED' || isRecurring;\n const fixedDose = firstFixedDose(schedule.doseDetails);\n\n return {\n productId: schedule.productId ?? null,\n // Null, not 0: a recurring schedule has no total, and 0 would read as \"no doses at all\".\n noOfDoses: isRecurring ? null : schedule.doses,\n doseType: schedule.doseType,\n doseEligibleFrom: isFixed ? helperGetDays(fixedDose.eligibleFrom) : null,\n doseEligibleTo: isFixed ? helperGetEligibleTo(fixedDose.eligibleTo) : null,\n // The interval is what makes a recurring schedule repeat, so it is always written; for\n // FIXED it only means anything once there is a dose to follow.\n minGap: isRecurring\n ? helperGetDays(fixedDose.interval)\n : isFixed\n ? schedule.doses > 1\n ? helperGetDays(fixedDose.interval)\n : 0\n : null,\n durationUnits: isFixed ? schedule.durationUnits || { ...DEFAULT_DURATION_UNITS } : null,\n recurringBooster: schedule.doseType === 'FLEXIBLE' ? buildRecurringBooster(schedule) : null,\n dose: buildDoseRows(schedule),\n location: (schedule.regions || []).map((region) => ({\n locationId: region.locationId,\n locationIdArr: region.locationIdArr,\n locationList: region.locationList,\n })),\n validations: (schedule.dependencies || []).map((dependency) => ({\n vaccine: dependency.vaccine,\n requirement: dependency.requirement,\n minGap: Number.parseInt(dependency.minGap) || 0,\n maxGap: Number.parseInt(dependency.maxGap) || 0,\n })),\n };\n};\n","import { useEffect as e, useState as t } from \"react\";\nimport { api as n } from \"@/common/interceptors/AxiosInterceptor\";\nimport { execute as r } from \"@/common/services/QueryBuilder.js\";\nimport { currencyCodeForCountry as i } from \"@/common/constants/countries\";\n//#region src/services/pmApi.js\nvar a = \"/pm\";\nasync function o() {\n\treturn (await n.get(`${a}/settings`)).data;\n}\nasync function ee(e) {\n\treturn (await n.put(`${a}/settings`, e)).data;\n}\nasync function te() {\n\treturn (await n.get(`${a}/settings/member-query`)).data?.query ?? \"\";\n}\nasync function ne(e) {\n\treturn (await n.post(`${a}/settings/member-query/validate`, { query: e })).data?.columns ?? [];\n}\nasync function re() {\n\treturn (await n.get(`${a}/settings/document-modules`)).data ?? [];\n}\nasync function ie(e) {\n\tlet t = e?.length ? { fieldKeys: e.join(\",\") } : {};\n\treturn (await n.get(`${a}/list-values`, { params: t })).data ?? {};\n}\nasync function ae() {\n\treturn ((await r({\n\t\tcode: \"FETCH_IMMUNISATION_MASTER\",\n\t\tparameters: {}\n\t}, { showLoader: !1 }))?.data?.result ?? []).map((e) => ({\n\t\tid: e.id,\n\t\tvaccineCode: e.vaccine_code,\n\t\tvaccineName: e.vaccine_name\n\t}));\n}\nasync function s(e, t = !1) {\n\tlet r = {};\n\treturn e && (r.lastModifiedDate = e), t && (r.includeInactive = !0), (await n.get(`${a}/categories`, { params: r })).data ?? [];\n}\nasync function c(e) {\n\treturn (await n.post(`${a}/categories`, e)).data;\n}\nasync function l(e, t = !1) {\n\tlet r = {};\n\treturn e && (r.lastModifiedDate = e), t && (r.includeInactive = !0), (await n.get(`${a}/brands`, { params: r })).data ?? [];\n}\nasync function u(e) {\n\treturn (await n.post(`${a}/brands`, e)).data;\n}\nasync function d(e, t = !1) {\n\tlet r = {};\n\treturn e && (r.lastModifiedDate = e), t && (r.includeInactive = !0), (await n.get(`${a}/products`, { params: r })).data ?? [];\n}\nasync function f(e) {\n\treturn (await n.get(`${a}/products/${e}`)).data;\n}\nasync function p(e) {\n\treturn (await n.post(`${a}/products`, e)).data;\n}\nasync function m(e, t) {\n\tlet r = new FormData();\n\treturn e.forEach((e) => r.append(\"files\", e)), t.forEach((e) => r.append(\"uuids\", e)), (await n.post(`${a}/products/upload-images`, r, { headers: { \"Content-Type\": \"multipart/form-data\" } })).data ?? [];\n}\nasync function h(e) {\n\treturn (await n.get(`${a}/products/images/${e}`, { responseType: \"blob\" })).data;\n}\nasync function g({ facilityId: e, activeOnly: t = !1 } = {}) {\n\tlet r = { activeOnly: t };\n\treturn e && (r.facilityId = e), (await n.get(`${a}/storage-units`, { params: r })).data ?? [];\n}\nasync function _(e) {\n\treturn (await n.post(`${a}/storage-units`, e)).data;\n}\nasync function v(e, t) {\n\treturn (await n.post(`${a}/storage-units/${e}/temperature/evaluate`, { temperatureCelsius: t })).data;\n}\nasync function y(e, t) {\n\treturn (await n.post(`${a}/storage-units/${e}/temperature`, t)).data;\n}\nasync function b() {\n\treturn (await n.get(`${a}/facilities`)).data ?? [];\n}\nasync function x(e) {\n\tlet t = (e ?? []).filter(Boolean);\n\treturn t.length === 0 ? [] : (await n.get(`${a}/facilities/by-ids`, { params: { ids: t.join(\",\") } })).data ?? [];\n}\nasync function S(e) {\n\tif (!e) return null;\n\ttry {\n\t\treturn (await n.get(`${a}/members/${e}`)).data ?? null;\n\t} catch (e) {\n\t\tif (e?.response?.status === 404) return null;\n\t\tthrow e;\n\t}\n}\nasync function C(e) {\n\tlet t = (e ?? []).filter(Boolean);\n\treturn t.length === 0 ? [] : (await n.get(`${a}/members/by-ids`, { params: { ids: t.join(\",\") } })).data ?? [];\n}\nasync function w() {\n\treturn (await n.get(`${a}/inventory/dues/by-member`)).data ?? [];\n}\nasync function T(e) {\n\treturn (await n.get(`${a}/inventory/dues/by-member/${e}`)).data;\n}\nasync function E() {\n\treturn (await n.get(`${a}/inventory/batches`)).data ?? [];\n}\nasync function D() {\n\treturn (await n.get(`${a}/inventory/vials/open`)).data ?? [];\n}\nasync function O(e) {\n\treturn (await n.get(`${a}/inventory/vials/by-product/${e}`)).data ?? [];\n}\nasync function k(e = 0, t = 25) {\n\treturn (await n.get(`${a}/inventory/purchases`, { params: {\n\t\tpage: e,\n\t\tsize: t\n\t} })).data ?? [];\n}\nasync function A(e = 0, t = 25) {\n\treturn (await n.get(`${a}/inventory/sales`, { params: {\n\t\tpage: e,\n\t\tsize: t\n\t} })).data ?? [];\n}\nasync function j(e = 0, t = 25) {\n\treturn (await n.get(`${a}/inventory/payments`, { params: {\n\t\tpage: e,\n\t\tsize: t\n\t} })).data ?? [];\n}\nasync function M(e = 0, t = 50) {\n\treturn (await n.get(`${a}/inventory/transactions`, { params: {\n\t\tpage: e,\n\t\tsize: t\n\t} })).data?.content ?? [];\n}\nasync function N(e = {}) {\n\tlet { types: t, ...r } = e;\n\treturn (await n.get(`${a}/inventory/transactions`, {\n\t\tparams: {\n\t\t\t...r,\n\t\t\ttypes: Array.isArray(t) ? t : void 0\n\t\t},\n\t\tparamsSerializer: { serialize: (e) => {\n\t\t\tlet t = new URLSearchParams();\n\t\t\treturn Object.entries(e).forEach(([e, n]) => {\n\t\t\t\tn == null || n === \"\" || (Array.isArray(n) ? n.forEach((n) => t.append(e, n)) : t.append(e, n));\n\t\t\t}), t.toString();\n\t\t} }\n\t})).data ?? {\n\t\tcontent: [],\n\t\ttotalElements: 0,\n\t\ttotalPages: 0,\n\t\tpage: 0,\n\t\tsize: 50\n\t};\n}\nasync function P(e) {\n\treturn (await n.post(`${a}/inventory/purchase`, e)).data;\n}\nasync function F(e) {\n\treturn (await n.post(`${a}/inventory/transfer`, e)).data;\n}\nasync function I(e, t) {\n\treturn (await n.post(`${a}/inventory/transfer/${e}/confirm`, t ?? {})).data;\n}\nasync function L(e, t) {\n\treturn (await n.post(`${a}/inventory/transfer/${e}/cancel`, t ?? {})).data;\n}\nasync function R() {\n\treturn (await n.get(`${a}/inventory/transfers`)).data ?? [];\n}\nasync function z(e) {\n\treturn (await n.post(`${a}/inventory/pickup`, e)).data;\n}\nasync function B(e, t) {\n\treturn (await n.post(`${a}/inventory/pickup/${e}/return`, t)).data;\n}\nasync function V(e, t) {\n\treturn (await n.post(`${a}/inventory/pickup/${e}/topup`, t)).data;\n}\nasync function H() {\n\treturn (await n.get(`${a}/inventory/pickups`)).data ?? [];\n}\nasync function oe() {\n\treturn (await n.get(`${a}/inventory/pickups/mine/open`)).data ?? [];\n}\nasync function U(e) {\n\treturn (await n.get(`${a}/inventory/pickups/assignable-users/${e}`)).data ?? [];\n}\nasync function W(e) {\n\treturn (await n.post(`${a}/inventory/purchase-request`, e)).data;\n}\nasync function G() {\n\treturn (await n.get(`${a}/inventory/purchase-requests/mine`)).data ?? [];\n}\nasync function K() {\n\treturn (await n.get(`${a}/inventory/purchase-requests/approvals`)).data ?? [];\n}\nasync function q(e) {\n\treturn (await n.get(`${a}/inventory/purchase-requests/${e}`)).data;\n}\nasync function se(e, t) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/decision`, t)).data;\n}\nasync function ce(e) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/cancel`)).data;\n}\nasync function le(e, t) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/ship`, t ?? {})).data;\n}\nasync function ue(e, t) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/receive`, t ?? {})).data;\n}\nasync function de(e, t) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/correct`, t)).data;\n}\nasync function fe(e) {\n\treturn (await n.post(`${a}/inventory/sale`, e)).data;\n}\nasync function pe(e) {\n\treturn (await n.post(`${a}/inventory/payment`, e)).data;\n}\nasync function me(e) {\n\treturn (await n.post(`${a}/inventory/vial/close`, e)).data;\n}\nasync function he(e) {\n\treturn (await n.post(`${a}/inventory/batch/quarantine`, e)).data;\n}\nasync function ge(e) {\n\treturn (await n.post(`${a}/inventory/batch/wastage`, e)).data;\n}\nasync function _e(e) {\n\treturn (await n.post(`${a}/inventory/batch/unquarantine`, e)).data;\n}\nvar ve = Object.fromEntries([\n\t{\n\t\tcode: \"INR\",\n\t\tsymbol: \"₹\",\n\t\tname: \"Indian Rupee\"\n\t},\n\t{\n\t\tcode: \"USD\",\n\t\tsymbol: \"$\",\n\t\tname: \"US Dollar\"\n\t},\n\t{\n\t\tcode: \"EUR\",\n\t\tsymbol: \"€\",\n\t\tname: \"Euro\"\n\t},\n\t{\n\t\tcode: \"GBP\",\n\t\tsymbol: \"£\",\n\t\tname: \"British Pound\"\n\t},\n\t{\n\t\tcode: \"JPY\",\n\t\tsymbol: \"¥\",\n\t\tname: \"Japanese Yen\"\n\t},\n\t{\n\t\tcode: \"CNY\",\n\t\tsymbol: \"¥\",\n\t\tname: \"Chinese Yuan\"\n\t},\n\t{\n\t\tcode: \"KRW\",\n\t\tsymbol: \"₩\",\n\t\tname: \"South Korean Won\"\n\t},\n\t{\n\t\tcode: \"THB\",\n\t\tsymbol: \"฿\",\n\t\tname: \"Thai Baht\"\n\t},\n\t{\n\t\tcode: \"VND\",\n\t\tsymbol: \"₫\",\n\t\tname: \"Vietnamese Dong\"\n\t},\n\t{\n\t\tcode: \"NGN\",\n\t\tsymbol: \"₦\",\n\t\tname: \"Nigerian Naira\"\n\t},\n\t{\n\t\tcode: \"BDT\",\n\t\tsymbol: \"৳\",\n\t\tname: \"Bangladeshi Taka\"\n\t},\n\t{\n\t\tcode: \"PKR\",\n\t\tsymbol: \"₨\",\n\t\tname: \"Pakistani Rupee\"\n\t},\n\t{\n\t\tcode: \"LKR\",\n\t\tsymbol: \"₨\",\n\t\tname: \"Sri Lankan Rupee\"\n\t},\n\t{\n\t\tcode: \"NPR\",\n\t\tsymbol: \"₨\",\n\t\tname: \"Nepalese Rupee\"\n\t},\n\t{\n\t\tcode: \"AUD\",\n\t\tsymbol: \"A$\",\n\t\tname: \"Australian Dollar\"\n\t},\n\t{\n\t\tcode: \"CAD\",\n\t\tsymbol: \"C$\",\n\t\tname: \"Canadian Dollar\"\n\t},\n\t{\n\t\tcode: \"CHF\",\n\t\tsymbol: \"Fr\",\n\t\tname: \"Swiss Franc\"\n\t},\n\t{\n\t\tcode: \"SGD\",\n\t\tsymbol: \"S$\",\n\t\tname: \"Singapore Dollar\"\n\t},\n\t{\n\t\tcode: \"HKD\",\n\t\tsymbol: \"HK$\",\n\t\tname: \"Hong Kong Dollar\"\n\t},\n\t{\n\t\tcode: \"MYR\",\n\t\tsymbol: \"RM\",\n\t\tname: \"Malaysian Ringgit\"\n\t},\n\t{\n\t\tcode: \"AED\",\n\t\tsymbol: \"د.إ\",\n\t\tname: \"UAE Dirham\"\n\t},\n\t{\n\t\tcode: \"SAR\",\n\t\tsymbol: \"﷼\",\n\t\tname: \"Saudi Riyal\"\n\t},\n\t{\n\t\tcode: \"ZAR\",\n\t\tsymbol: \"R\",\n\t\tname: \"South African Rand\"\n\t},\n\t{\n\t\tcode: \"BRL\",\n\t\tsymbol: \"R$\",\n\t\tname: \"Brazilian Real\"\n\t},\n\t{\n\t\tcode: \"MXN\",\n\t\tsymbol: \"MX$\",\n\t\tname: \"Mexican Peso\"\n\t},\n\t{\n\t\tcode: \"KES\",\n\t\tsymbol: \"KSh\",\n\t\tname: \"Kenyan Shilling\"\n\t},\n\t{\n\t\tcode: \"GHS\",\n\t\tsymbol: \"GH₵\",\n\t\tname: \"Ghanaian Cedi\"\n\t},\n\t{\n\t\tcode: \"EGP\",\n\t\tsymbol: \"E£\",\n\t\tname: \"Egyptian Pound\"\n\t},\n\t{\n\t\tcode: \"PHP\",\n\t\tsymbol: \"₱\",\n\t\tname: \"Philippine Peso\"\n\t},\n\t{\n\t\tcode: \"IDR\",\n\t\tsymbol: \"Rp\",\n\t\tname: \"Indonesian Rupiah\"\n\t},\n\t{\n\t\tcode: \"TRY\",\n\t\tsymbol: \"₺\",\n\t\tname: \"Turkish Lira\"\n\t},\n\t{\n\t\tcode: \"RUB\",\n\t\tsymbol: \"₽\",\n\t\tname: \"Russian Ruble\"\n\t}\n].map((e) => [e.code, e]));\nfunction ye(e) {\n\treturn e ? ve[e]?.symbol ?? e : \"₹\";\n}\n//#endregion\n//#region src/utils/settingsStore.js\nvar be = {\n\tmemberIdColumn: null,\n\tmemberIdentifierColumn: null,\n\tmemberFamilyIdColumn: null,\n\tmemberNameColumn: null,\n\tmemberDobColumn: null,\n\tcountryCode: \"IN\",\n\tcurrencyCode: \"INR\",\n\tmanagePurchaseAmounts: !0,\n\tmanageSales: !0,\n\tallowPersonalPurchase: !0,\n\tallowFacilityPurchase: !0,\n\trequirePurchaseConfirmation: !1,\n\tallowGroupSessions: !1,\n\tdocumentModule: null\n}, J = null, Y = null, X = /* @__PURE__ */ new Set();\nfunction Z(e) {\n\tlet t = {\n\t\t...be,\n\t\t...e ?? {}\n\t};\n\treturn t.currencyCode = i(t.countryCode), t.managePurchaseAmounts = t.managePurchaseAmounts !== !1, t.manageSales = t.manageSales !== !1, t.allowPersonalPurchase = t.allowPersonalPurchase !== !1, t.allowFacilityPurchase = t.allowFacilityPurchase !== !1, t.requirePurchaseConfirmation = t.requirePurchaseConfirmation === !0, t.allowGroupSessions = t.allowGroupSessions === !0, t.documentModule = t.documentModule || null, t;\n}\nfunction Q() {\n\tX.forEach((e) => e(J));\n}\nasync function $(e = !1) {\n\treturn !e && J ? J : (!e && Y || (Y = o().then((e) => (J = Z(e), Y = null, Q(), J)).catch((e) => {\n\t\tthrow Y = null, J || (J = Z(null), Q()), e;\n\t})), Y);\n}\nfunction xe(e) {\n\tJ = Z(e), Q();\n}\nfunction Se() {\n\tlet [n, r] = t(J ?? Z(null));\n\treturn e(() => (X.add(r), !J && !Y ? $().catch(() => {}) : J && r(J), () => {\n\t\tX.delete(r);\n\t}), []), n;\n}\n//#endregion\nexport { le as $, K as A, ie as B, te as C, q as D, d as E, oe as F, O as G, A as H, G as I, N as J, y as K, D as L, E as M, re as N, o as O, b as P, V as Q, j as R, S, f as T, M as U, k as V, R as W, z as X, ue as Y, B as Z, s as _, ce as a, c as at, T as b, I as c, _ as ct, P as d, F as et, fe as f, l as g, h, ye as i, u as it, U as j, g as k, de as l, ne as lt, v as m, xe as n, _e as nt, L as o, p as ot, se as p, he as q, Se as r, m as rt, me as s, ee as st, $ as t, W as tt, pe as u, ge as ut, x as v, C as w, w as x, ae as y, H as z };\n\n//# sourceMappingURL=settingsStore-BHHOmcCP.js.map","import { i as e, r as t } from \"./settingsStore-BHHOmcCP.js\";\nimport { useEffect as n, useState as r } from \"react\";\nimport { Fragment as i, jsx as a, jsxs as o } from \"react/jsx-runtime\";\nimport s from \"prop-types\";\nimport { Autocomplete as c, Box as l, Card as u, CardContent as d, Stack as f, Table as p, TableCell as m, TableContainer as h, TableRow as g, TextField as _, Typography as v } from \"@mui/material\";\nimport { createRoot as y } from \"react-dom/client\";\nimport { alpha as b, useTheme as x } from \"@mui/material/styles\";\n//#region src/utils/pmToast.jsx\nvar S = [], C = /* @__PURE__ */ new Set(), w = 0, T = null, E = {\n\tsuccess: {\n\t\taccent: \"#16a34a\",\n\t\tbg: \"#f0fdf4\",\n\t\tglyph: \"✓\"\n\t},\n\terror: {\n\t\taccent: \"#dc2626\",\n\t\tbg: \"#fef2f2\",\n\t\tglyph: \"✕\"\n\t},\n\twarning: {\n\t\taccent: \"#d97706\",\n\t\tbg: \"#fffbeb\",\n\t\tglyph: \"!\"\n\t},\n\tinfo: {\n\t\taccent: \"#2563eb\",\n\t\tbg: \"#eff6ff\",\n\t\tglyph: \"i\"\n\t}\n};\nfunction D() {\n\tC.forEach((e) => e(S.slice()));\n}\nfunction O(e) {\n\tS = S.filter((t) => t.id !== e), D();\n}\nfunction k({ message: e, type: t = \"info\", duration: n = 2500 } = {}) {\n\tA();\n\tlet r = ++w;\n\treturn S = [...S, {\n\t\tid: r,\n\t\tmessage: e,\n\t\ttype: E[t] ? t : \"info\",\n\t\tduration: n\n\t}], D(), r;\n}\nfunction A() {\n\tif (T || typeof document > \"u\") return;\n\tlet e = document.createElement(\"div\");\n\te.setAttribute(\"data-pm-toast-root\", \"\"), document.body.appendChild(e), T = y(e), T.render(/* @__PURE__ */ a(L, {}));\n}\nvar j = \"\\n@keyframes pmtoast-in { from { opacity: 0; transform: translateY(-32px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\\n@keyframes pmtoast-out { from { opacity: 1; transform: translateY(0) scale(1); } to { opacity: 0; transform: translateY(-18px) scale(0.97); } }\\n@keyframes pmtoast-shrink { from { transform: scaleX(1); } to { transform: scaleX(0); } }\\n\", M = {\n\tposition: \"fixed\",\n\ttop: 0,\n\tleft: 0,\n\tright: 0,\n\tzIndex: 21e3,\n\tpadding: \"28px 16px 0\",\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\talignItems: \"center\",\n\tgap: 12,\n\tpointerEvents: \"none\"\n}, N = {\n\tposition: \"relative\",\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tgap: 16,\n\tminWidth: 360,\n\tmaxWidth: 540,\n\tpadding: \"20px 22px\",\n\tbackground: \"#ffffff\",\n\tborderRadius: 16,\n\toverflow: \"hidden\",\n\tborder: \"1px solid rgba(15,23,42,0.06)\",\n\tboxShadow: \"0 24px 60px rgba(2,6,23,0.26)\",\n\tfontFamily: \"inherit\"\n}, P = {\n\twidth: 40,\n\theight: 40,\n\tborderRadius: \"50%\",\n\tflex: \"none\",\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tfontWeight: 800,\n\tfontSize: 22\n}, F = {\n\tborder: \"none\",\n\tbackground: \"transparent\",\n\tcursor: \"pointer\",\n\tcolor: \"#94a3b8\",\n\tfontSize: 15,\n\tlineHeight: 1,\n\tpadding: 6,\n\tflex: \"none\"\n}, I = {\n\tposition: \"absolute\",\n\tleft: 0,\n\tright: 0,\n\tbottom: 0,\n\theight: 4,\n\tbackground: \"rgba(15,23,42,0.06)\"\n};\nfunction L() {\n\tlet [e, t] = r(S.slice());\n\treturn n(() => (C.add(t), t(S.slice()), () => C.delete(t)), []), /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a(\"style\", { children: j }), /* @__PURE__ */ a(\"div\", {\n\t\tstyle: M,\n\t\tchildren: e.map((e) => /* @__PURE__ */ a(R, {\n\t\t\ttoast: e,\n\t\t\tonClose: () => O(e.id)\n\t\t}, e.id))\n\t})] });\n}\nfunction R({ toast: e, onClose: t }) {\n\tlet [n, i] = r(!1), [s, c] = r(!1), l = E[e.type] || E.info;\n\tfunction u() {\n\t\ts || (c(!0), setTimeout(t, 180));\n\t}\n\treturn /* @__PURE__ */ o(\"div\", {\n\t\trole: \"status\",\n\t\tonMouseEnter: () => i(!0),\n\t\tonMouseLeave: () => i(!1),\n\t\tstyle: {\n\t\t\t...N,\n\t\t\tpointerEvents: \"auto\",\n\t\t\tanimation: s ? \"pmtoast-out 180ms ease forwards\" : \"pmtoast-in 320ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards\"\n\t\t},\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ a(\"div\", {\n\t\t\t\tstyle: {\n\t\t\t\t\t...P,\n\t\t\t\t\tcolor: l.accent,\n\t\t\t\t\tbackground: l.bg\n\t\t\t\t},\n\t\t\t\tchildren: l.glyph\n\t\t\t}),\n\t\t\t/* @__PURE__ */ a(\"div\", {\n\t\t\t\tstyle: {\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t\tfontSize: 15.5,\n\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\tcolor: \"#0f172a\",\n\t\t\t\t\tlineHeight: 1.4\n\t\t\t\t},\n\t\t\t\tchildren: e.message\n\t\t\t}),\n\t\t\t/* @__PURE__ */ a(\"button\", {\n\t\t\t\ttype: \"button\",\n\t\t\t\t\"aria-label\": \"Dismiss\",\n\t\t\t\tonClick: u,\n\t\t\t\tstyle: F,\n\t\t\t\tchildren: \"✕\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ a(\"div\", {\n\t\t\t\tstyle: I,\n\t\t\t\tchildren: /* @__PURE__ */ a(\"div\", {\n\t\t\t\t\tonAnimationEnd: u,\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\tbackground: l.accent,\n\t\t\t\t\t\ttransformOrigin: \"left\",\n\t\t\t\t\t\tanimation: `pmtoast-shrink ${e.duration}ms linear forwards`,\n\t\t\t\t\t\tanimationPlayState: n ? \"paused\" : \"running\"\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/components/PmTable.jsx\nfunction z({ children: e, dense: t = !1, sx: n = {}, ...r }) {\n\tlet i = x();\n\treturn /* @__PURE__ */ a(h, {\n\t\tsx: {\n\t\t\tborderRadius: 1.5,\n\t\t\tborder: `1px solid ${b(i.palette.divider, .55)}`,\n\t\t\tbackgroundColor: i.palette.background.paper,\n\t\t\toverflow: \"auto\",\n\t\t\t...n\n\t\t},\n\t\tchildren: /* @__PURE__ */ a(p, {\n\t\t\tsize: t ? \"small\" : \"medium\",\n\t\t\t...r,\n\t\t\tsx: {\n\t\t\t\t\"& thead .MuiTableRow-root\": { background: `linear-gradient(180deg, ${b(i.palette.grey[50], 1)} 0%, ${b(i.palette.grey[100], 1)} 100%)` },\n\t\t\t\t\"& thead .MuiTableCell-root\": {\n\t\t\t\t\tfontWeight: 800,\n\t\t\t\t\tfontSize: \"0.7rem\",\n\t\t\t\t\ttextTransform: \"uppercase\",\n\t\t\t\t\tletterSpacing: \"0.65px\",\n\t\t\t\t\tcolor: i.palette.text.secondary,\n\t\t\t\t\tborderBottom: `1px solid ${i.palette.divider}`,\n\t\t\t\t\tpy: 1.25,\n\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\tposition: \"sticky\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tzIndex: 1\n\t\t\t\t},\n\t\t\t\t\"& tbody .MuiTableRow-root\": { transition: \"background-color 140ms ease\" },\n\t\t\t\t\"& tbody .MuiTableRow-root:hover\": { backgroundColor: b(i.palette.primary.main, .04) },\n\t\t\t\t\"& tbody .MuiTableCell-root\": {\n\t\t\t\t\tpy: 1.4,\n\t\t\t\t\tborderBottom: `1px solid ${b(i.palette.divider, .5)}`,\n\t\t\t\t\tverticalAlign: \"middle\"\n\t\t\t\t},\n\t\t\t\t\"& tbody .MuiTableRow-root:last-of-type .MuiTableCell-root\": { borderBottom: \"none\" }\n\t\t\t},\n\t\t\tchildren: e\n\t\t})\n\t});\n}\nz.propTypes = {\n\tchildren: s.node,\n\tdense: s.bool,\n\tsx: s.object\n};\nfunction B({ eyebrow: e, title: t, subtitle: n, actions: r, toolbar: i, children: s, sx: c = {} }) {\n\treturn /* @__PURE__ */ a(u, {\n\t\tsx: {\n\t\t\tborderRadius: 1.5,\n\t\t\tborder: \"1px solid\",\n\t\t\tborderColor: \"divider\",\n\t\t\tboxShadow: \"0 12px 32px rgba(15, 23, 42, 0.045)\",\n\t\t\toverflow: \"hidden\",\n\t\t\t...c\n\t\t},\n\t\tchildren: /* @__PURE__ */ o(d, {\n\t\t\tsx: {\n\t\t\t\tp: 0,\n\t\t\t\t\"&:last-child\": { pb: 0 }\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\tt || r ? /* @__PURE__ */ a(l, {\n\t\t\t\t\tsx: {\n\t\t\t\t\t\tpx: 2.5,\n\t\t\t\t\t\tpt: 2,\n\t\t\t\t\t\tpb: 1.5\n\t\t\t\t\t},\n\t\t\t\t\tchildren: /* @__PURE__ */ o(f, {\n\t\t\t\t\t\tdirection: {\n\t\t\t\t\t\t\txs: \"column\",\n\t\t\t\t\t\t\tmd: \"row\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\talignItems: {\n\t\t\t\t\t\t\txs: \"flex-start\",\n\t\t\t\t\t\t\tmd: \"center\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspacing: 1.5,\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ o(l, {\n\t\t\t\t\t\t\tsx: { minWidth: 0 },\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\te ? /* @__PURE__ */ a(v, {\n\t\t\t\t\t\t\t\t\tvariant: \"overline\",\n\t\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\t\t\t\t\tfontWeight: 800,\n\t\t\t\t\t\t\t\t\t\tletterSpacing: 1,\n\t\t\t\t\t\t\t\t\t\tlineHeight: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tchildren: e\n\t\t\t\t\t\t\t\t}) : null,\n\t\t\t\t\t\t\t\tt ? /* @__PURE__ */ a(v, {\n\t\t\t\t\t\t\t\t\tvariant: \"h6\",\n\t\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\t\tfontWeight: 800,\n\t\t\t\t\t\t\t\t\t\tlineHeight: 1.2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tchildren: t\n\t\t\t\t\t\t\t\t}) : null,\n\t\t\t\t\t\t\t\tn ? /* @__PURE__ */ a(v, {\n\t\t\t\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\t\t\t\tchildren: n\n\t\t\t\t\t\t\t\t}) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}), r ? /* @__PURE__ */ a(l, { children: r }) : null]\n\t\t\t\t\t})\n\t\t\t\t}) : null,\n\t\t\t\ti ? /* @__PURE__ */ a(l, {\n\t\t\t\t\tsx: {\n\t\t\t\t\t\tpx: 2.5,\n\t\t\t\t\t\tpb: 1.5\n\t\t\t\t\t},\n\t\t\t\t\tchildren: i\n\t\t\t\t}) : null,\n\t\t\t\t/* @__PURE__ */ a(l, {\n\t\t\t\t\tsx: {\n\t\t\t\t\t\tp: 2.5,\n\t\t\t\t\t\tpt: t || i ? 0 : 2.5\n\t\t\t\t\t},\n\t\t\t\t\tchildren: s\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\nB.propTypes = {\n\teyebrow: s.node,\n\ttitle: s.node,\n\tsubtitle: s.node,\n\tactions: s.node,\n\ttoolbar: s.node,\n\tchildren: s.node,\n\tsx: s.object\n};\nfunction V({ colSpan: e, title: t, hint: n, icon: r, action: i }) {\n\treturn /* @__PURE__ */ a(g, {\n\t\thover: !1,\n\t\tchildren: /* @__PURE__ */ a(m, {\n\t\t\tcolSpan: e,\n\t\t\tsx: {\n\t\t\t\tpy: 5,\n\t\t\t\ttextAlign: \"center\",\n\t\t\t\tborderBottom: \"none !important\"\n\t\t\t},\n\t\t\tchildren: /* @__PURE__ */ o(f, {\n\t\t\t\talignItems: \"center\",\n\t\t\t\tspacing: 1.25,\n\t\t\t\tchildren: [\n\t\t\t\t\tr ? /* @__PURE__ */ a(r, { sx: {\n\t\t\t\t\t\tfontSize: 44,\n\t\t\t\t\t\tcolor: \"text.disabled\",\n\t\t\t\t\t\topacity: .7\n\t\t\t\t\t} }) : null,\n\t\t\t\t\t/* @__PURE__ */ a(v, {\n\t\t\t\t\t\tvariant: \"body2\",\n\t\t\t\t\t\tsx: { fontWeight: 700 },\n\t\t\t\t\t\tchildren: t\n\t\t\t\t\t}),\n\t\t\t\t\tn ? /* @__PURE__ */ a(v, {\n\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\tsx: { maxWidth: 360 },\n\t\t\t\t\t\tchildren: n\n\t\t\t\t\t}) : null,\n\t\t\t\t\ti ? /* @__PURE__ */ a(l, { children: i }) : null\n\t\t\t\t]\n\t\t\t})\n\t\t})\n\t});\n}\nV.propTypes = {\n\tcolSpan: s.number.isRequired,\n\ttitle: s.node,\n\thint: s.node,\n\ticon: s.elementType,\n\taction: s.node\n};\nfunction H({ value: n, fallback: r = \"—\", size: i = \"normal\", tone: s, bold: c = !0, prefix: u, sx: d = {} }) {\n\tlet f = x(), p = t(), m = u ?? e(p?.currencyCode);\n\tif (n == null || n === \"\") return /* @__PURE__ */ a(l, {\n\t\tcomponent: \"span\",\n\t\tsx: {\n\t\t\tcolor: \"text.disabled\",\n\t\t\tfontVariantNumeric: \"tabular-nums\"\n\t\t},\n\t\tchildren: r\n\t});\n\tlet h = Number(n);\n\tif (Number.isNaN(h)) return /* @__PURE__ */ a(l, {\n\t\tcomponent: \"span\",\n\t\tsx: {\n\t\t\tcolor: \"text.disabled\",\n\t\t\tfontVariantNumeric: \"tabular-nums\"\n\t\t},\n\t\tchildren: r\n\t});\n\tlet g = s === \"warning\" ? f.palette.warning.dark : s === \"success\" ? f.palette.success.dark : s === \"error\" ? f.palette.error.dark : s === \"muted\" ? f.palette.text.secondary : \"inherit\";\n\treturn /* @__PURE__ */ o(l, {\n\t\tcomponent: \"span\",\n\t\tsx: {\n\t\t\tfontWeight: c ? i === \"big\" ? 800 : 700 : 500,\n\t\t\tfontSize: i === \"big\" ? \"1.05rem\" : \"inherit\",\n\t\t\tfontVariantNumeric: \"tabular-nums\",\n\t\t\tcolor: g,\n\t\t\t...d\n\t\t},\n\t\tchildren: [m, h.toFixed(2)]\n\t});\n}\nH.propTypes = {\n\tvalue: s.oneOfType([s.string, s.number]),\n\tfallback: s.node,\n\tsize: s.oneOf([\"normal\", \"big\"]),\n\ttone: s.oneOf([\n\t\t\"warning\",\n\t\t\"success\",\n\t\t\"error\",\n\t\t\"muted\"\n\t]),\n\tbold: s.bool,\n\tprefix: s.string,\n\tsx: s.object\n};\nfunction U({ id: e }) {\n\treturn /* @__PURE__ */ o(l, {\n\t\tcomponent: \"span\",\n\t\tsx: {\n\t\t\tdisplay: \"inline-flex\",\n\t\t\talignItems: \"center\",\n\t\t\tpx: .85,\n\t\t\tpy: .25,\n\t\t\tborderRadius: 1,\n\t\t\tbackgroundColor: \"grey.100\",\n\t\t\tcolor: \"text.secondary\",\n\t\t\tfontFamily: \"monospace\",\n\t\t\tfontSize: \"0.72rem\",\n\t\t\tfontWeight: 700,\n\t\t\tletterSpacing: .4,\n\t\t\tlineHeight: 1.5\n\t\t},\n\t\tchildren: [\"#\", e]\n\t});\n}\nU.propTypes = { id: s.oneOfType([s.string, s.number]) };\nfunction W({ message: e, value: t, max: n }) {\n\tlet r = (t ?? \"\").length, i = Math.max(0, n - r);\n\treturn /* @__PURE__ */ o(l, {\n\t\tcomponent: \"span\",\n\t\tsx: {\n\t\t\tdisplay: \"flex\",\n\t\t\twidth: \"100%\",\n\t\t\tgap: 1\n\t\t},\n\t\tchildren: [/* @__PURE__ */ a(l, {\n\t\t\tcomponent: \"span\",\n\t\t\tsx: { flexGrow: 1 },\n\t\t\tchildren: e || \"\"\n\t\t}), /* @__PURE__ */ o(l, {\n\t\t\tcomponent: \"span\",\n\t\t\tsx: {\n\t\t\t\tflexShrink: 0,\n\t\t\t\tfontVariantNumeric: \"tabular-nums\",\n\t\t\t\tcolor: \"text.secondary\"\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\ti,\n\t\t\t\t\"/\",\n\t\t\t\tn\n\t\t\t]\n\t\t})]\n\t});\n}\nW.propTypes = {\n\tmessage: s.node,\n\tvalue: s.string,\n\tmax: s.number.isRequired\n};\nfunction G({ label: e, value: t, onChange: n, onBlur: r, options: i, required: o = !1, disabled: s = !1, error: l = !1, helperText: u = \"\", fullWidth: d = !0, size: f = \"small\", noOptionsText: p, getOptionDisabled: m, sx: h = {} }) {\n\treturn /* @__PURE__ */ a(c, {\n\t\tsize: f,\n\t\tfullWidth: d,\n\t\tdisabled: s,\n\t\toptions: i,\n\t\tvalue: i.find((e) => e.value === t) ?? null,\n\t\tonChange: (e, t) => n(t ? t.value : \"\"),\n\t\tgetOptionLabel: (e) => e?.label ?? \"\",\n\t\tgetOptionDisabled: m,\n\t\tisOptionEqualToValue: (e, t) => e?.value === t?.value,\n\t\tdisableClearable: o,\n\t\tnoOptionsText: p,\n\t\tsx: h,\n\t\trenderInput: (t) => /* @__PURE__ */ a(_, {\n\t\t\t...t,\n\t\t\tlabel: e,\n\t\t\trequired: o,\n\t\t\terror: l,\n\t\t\thelperText: u,\n\t\t\tonBlur: r\n\t\t})\n\t});\n}\nG.propTypes = {\n\tlabel: s.node,\n\tvalue: s.any,\n\tonChange: s.func.isRequired,\n\tonBlur: s.func,\n\toptions: s.arrayOf(s.shape({\n\t\tvalue: s.any,\n\t\tlabel: s.node\n\t})).isRequired,\n\trequired: s.bool,\n\tdisabled: s.bool,\n\terror: s.bool,\n\thelperText: s.node,\n\tfullWidth: s.bool,\n\tsize: s.string,\n\tnoOptionsText: s.node,\n\tgetOptionDisabled: s.func,\n\tsx: s.object\n};\nfunction K({ eyebrow: e, title: t, hint: n, children: r, sx: i = {} }) {\n\treturn /* @__PURE__ */ o(l, {\n\t\tsx: i,\n\t\tchildren: [e || t || n ? /* @__PURE__ */ o(l, {\n\t\t\tsx: { mb: 1.75 },\n\t\t\tchildren: [\n\t\t\t\te ? /* @__PURE__ */ a(v, {\n\t\t\t\t\tvariant: \"overline\",\n\t\t\t\t\tsx: {\n\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\tfontWeight: 800,\n\t\t\t\t\t\tletterSpacing: 1,\n\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\tdisplay: \"block\"\n\t\t\t\t\t},\n\t\t\t\t\tchildren: e\n\t\t\t\t}) : null,\n\t\t\t\tt ? /* @__PURE__ */ a(v, {\n\t\t\t\t\tvariant: \"h6\",\n\t\t\t\t\tsx: {\n\t\t\t\t\t\tfontWeight: 800,\n\t\t\t\t\t\tlineHeight: 1.25\n\t\t\t\t\t},\n\t\t\t\t\tchildren: t\n\t\t\t\t}) : null,\n\t\t\t\tn ? /* @__PURE__ */ a(v, {\n\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\tsx: {\n\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\tmt: .5\n\t\t\t\t\t},\n\t\t\t\t\tchildren: n\n\t\t\t\t}) : null\n\t\t\t]\n\t\t}) : null, r]\n\t});\n}\nK.propTypes = {\n\teyebrow: s.node,\n\ttitle: s.node,\n\thint: s.node,\n\tchildren: s.node,\n\tsx: s.object\n};\n//#endregion\nexport { U as a, B as c, H as i, k as l, W as n, G as o, K as r, z as s, V as t };\n\n//# sourceMappingURL=PmTable-CwKORZGg.js.map","import { E as e, F as t, G as n, L as r, M as i, P as a, r as o } from \"./settingsStore-BHHOmcCP.js\";\nimport { l as s, o as c } from \"./PmTable-CwKORZGg.js\";\nimport { D as ee } from \"./constants-DpXnLsAB.js\";\nimport { n as l, r as u, t as te } from \"./format-UOyOu75i.js\";\nimport { m as d, t as ne, u as re } from \"./validation-BzlHnL-r.js\";\nimport { t as ie } from \"./useFieldErrors-hDG8ox_x.js\";\nimport { lazy as f, useEffect as p, useMemo as m, useRef as ae, useState as h } from \"react\";\nimport { Fragment as g, jsx as _, jsxs as v } from \"react/jsx-runtime\";\nimport y from \"prop-types\";\nimport { Alert as b, Box as x, Button as S, Chip as C, Dialog as w, DialogActions as oe, DialogContent as se, DialogTitle as ce, LinearProgress as le, Radio as ue, Stack as de, Table as fe, TableBody as pe, TableCell as T, TableContainer as me, TableHead as he, TableRow as E, TextField as ge, Typography as D } from \"@mui/material\";\nimport _e from \"@mui/icons-material/VaccinesRounded\";\nimport ve from \"@mui/icons-material/EventBusyRounded\";\n//#region routes/routes.jsx\nvar ye = f(() => import(\"@/views/feature-components/VerifyRoute.jsx\")), O = f(() => import(\"./DashboardPage-asr2XDRu.js\")), k = f(() => import(\"./CategoriesPage-D3ihx9Gi.js\")), A = f(() => import(\"./BrandsPage-DMw2vT0u.js\")), j = f(() => import(\"./ProductsPage-DvNHIeZt.js\")), M = f(() => import(\"./ProductEditPage-BVlVUCtD.js\")), N = f(() => import(\"./StorageUnitsPage-BDRkdCjW.js\")), P = f(() => import(\"./InventoryPage-DOotGZrj.js\")), F = f(() => import(\"./PurchasesPage-DgL5T6BY.js\")), I = f(() => import(\"./PurchaseCreatePage-Cq_i9snz.js\")), be = f(() => import(\"./PurchaseRequestsPage-DS9i4o0-.js\")), L = f(() => import(\"./PurchaseRequestDetailPage-CA9KFOfE.js\")), xe = f(() => import(\"./PickupsPage-D7zyioJB.js\")), R = f(() => import(\"./PickupCreatePage-B4O_-vE5.js\")), Se = f(() => import(\"./TransfersPage-CGrRFaBF.js\")), z = f(() => import(\"./TransferCreatePage-DF7FZaTJ.js\")), B = f(() => import(\"./SalesPage-DPIRrC_O.js\")), V = f(() => import(\"./SaleCreatePage-CZnIOydv.js\")), Ce = f(() => import(\"./PaymentsPage-DMNjYWAJ.js\")), H = f(() => import(\"./PaymentCreatePage-DfvSZ-kB.js\")), we = f(() => import(\"./VialsPage-rvvXjgZG.js\")), U = f(() => import(\"./TransactionsPage-CqWTMNU8.js\")), W = f(() => import(\"./SettingsPage-BC_R6Z-Q.js\")), G = \"Product Management\";\nfunction K(e, t, n = \"General\") {\n\treturn {\n\t\tpath: e,\n\t\telement: /* @__PURE__ */ _(ye, {\n\t\t\theaderTitle: G,\n\t\t\tpageTitle: n,\n\t\t\turl: \"medplat/manage/pm\",\n\t\t\tcomponent: t\n\t\t})\n\t};\n}\nvar q = [\n\tK(\"medplat/manage/pm\", O, \"Dashboard\"),\n\tK(\"medplat/manage/pm/categories\", k, \"Categories\"),\n\tK(\"medplat/manage/pm/brands\", A, \"Brands\"),\n\tK(\"medplat/manage/pm/products\", j, \"Products\"),\n\tK(\"medplat/manage/pm/products/:productId\", M, \"Product\"),\n\tK(\"medplat/manage/pm/storage-units\", N, \"Storage Units\"),\n\tK(\"medplat/manage/pm/inventory\", P, \"Inventory\"),\n\tK(\"medplat/manage/pm/purchases\", F, \"Purchases\"),\n\tK(\"medplat/manage/pm/purchases/new\", I, \"New Purchase\"),\n\tK(\"medplat/manage/pm/purchase-requests\", be, \"Purchase Requests\"),\n\tK(\"medplat/manage/pm/purchase-requests/:requestId\", L, \"Purchase Request\"),\n\tK(\"medplat/manage/pm/pickups\", xe, \"Pickups\"),\n\tK(\"medplat/manage/pm/pickups/new\", R, \"New Pickup\"),\n\tK(\"medplat/manage/pm/transfers\", Se, \"Transfers\"),\n\tK(\"medplat/manage/pm/transfers/new\", z, \"New Transfer\"),\n\tK(\"medplat/manage/pm/sales\", B, \"Sales\"),\n\tK(\"medplat/manage/pm/sales/new\", V, \"New Sale\"),\n\tK(\"medplat/manage/pm/sales/new/:memberId\", V, \"New Sale\"),\n\tK(\"medplat/manage/pm/payments\", Ce, \"Payments\"),\n\tK(\"medplat/manage/pm/payments/new\", H, \"Collect Payment\"),\n\tK(\"medplat/manage/pm/payments/new/:memberId\", H, \"Collect Payment\"),\n\tK(\"medplat/manage/pm/vials\", we, \"Open Vials\"),\n\tK(\"medplat/manage/pm/transactions\", U, \"Stock Ledger\"),\n\tK(\"medplat/manage/pm/settings\", W, \"Settings\")\n];\n//#endregion\n//#region src/utils/ageProfiles.js\nfunction J(e, t, n) {\n\tif (!e) return null;\n\tlet r = new Date(e), i = t ? new Date(t) : /* @__PURE__ */ new Date();\n\tif (Number.isNaN(r.getTime()) || Number.isNaN(i.getTime())) return null;\n\tif (i < r) return -1;\n\tlet a = Math.floor((i - r) / 864e5);\n\tswitch (n) {\n\t\tcase \"DAYS\": return a;\n\t\tcase \"WEEKS\": return Math.floor(a / 7);\n\t\tcase \"MONTHS\": {\n\t\t\tlet e = (i.getFullYear() - r.getFullYear()) * 12 + (i.getMonth() - r.getMonth());\n\t\t\treturn i.getDate() < r.getDate() && --e, e;\n\t\t}\n\t\tcase \"YEARS\": {\n\t\t\tlet e = i.getFullYear() - r.getFullYear(), t = i.getMonth() - r.getMonth();\n\t\t\treturn (t < 0 || t === 0 && i.getDate() < r.getDate()) && --e, e;\n\t\t}\n\t\tdefault: return null;\n\t}\n}\nfunction Te(e, t) {\n\tif (!e) return \"\";\n\tlet n = J(e, t, \"YEARS\");\n\tif (n == null || n < 0) return \"\";\n\tif (n >= 2) {\n\t\tlet r = J(e, t, \"MONTHS\") - n * 12;\n\t\treturn `${n} year${n === 1 ? \"\" : \"s\"}${r > 0 ? ` ${r} month${r === 1 ? \"\" : \"s\"}` : \"\"}`;\n\t}\n\tlet r = J(e, t, \"MONTHS\");\n\tif (r >= 1) return `${r} month${r === 1 ? \"\" : \"s\"}`;\n\tlet i = J(e, t, \"DAYS\");\n\treturn `${i} day${i === 1 ? \"\" : \"s\"}`;\n}\nfunction Ee(e) {\n\tlet t = (e.fromUnit || \"YEARS\").toLowerCase(), n = `${e.fromAge} ${t}`;\n\tif (e.toAge == null || e.toAge === \"\") return `${n}+`;\n\tlet r = (e.toUnit || e.fromUnit || \"YEARS\").toLowerCase();\n\treturn `${n} – ${e.toAge} ${r}`;\n}\nfunction De(e) {\n\tlet t = (e ?? []).map(Ee);\n\treturn t.length ? t.join(\", \") : \"\";\n}\nfunction Oe(e, t, n) {\n\tlet r = e?.profiles ?? [];\n\tif (r.length === 0) return {\n\t\tprofile: null,\n\t\treason: \"not-configured\"\n\t};\n\tif (!t) return {\n\t\tprofile: null,\n\t\treason: \"no-date\"\n\t};\n\tfor (let e of r) {\n\t\tlet r = Number(e.fromAge), i = J(t, n, e.fromUnit);\n\t\tif (!(i == null || i < 0 || i < r)) {\n\t\t\tif (e.toAge != null && e.toAge !== \"\") {\n\t\t\t\tlet r = Number(e.toAge), i = J(t, n, e.toUnit || e.fromUnit);\n\t\t\t\tif (i == null || i >= r) continue;\n\t\t\t}\n\t\t\treturn { profile: e };\n\t\t}\n\t}\n\treturn {\n\t\tprofile: null,\n\t\treason: \"no-match\"\n\t};\n}\nfunction ke(e, t, n) {\n\tlet r = e?.vaccineConfig;\n\tif (!r) return {\n\t\tstatus: \"applicable\",\n\t\tprofile: null,\n\t\tprofiles: []\n\t};\n\tlet i = r.profiles ?? [], a = Oe(r, t, n);\n\treturn a.profile ? {\n\t\tstatus: \"applicable\",\n\t\tprofile: a.profile,\n\t\tprofiles: i\n\t} : {\n\t\tstatus: a.reason,\n\t\tprofile: null,\n\t\tprofiles: i\n\t};\n}\n//#endregion\n//#region src/components/ProductAdministrationDialog.jsx\nfunction Ae(e) {\n\tlet t = e.expiresAt ? new Date(e.expiresAt).getTime() : Infinity, n = Infinity;\n\tif (e.batchExpiryDate) {\n\t\tlet t = new Date(e.batchExpiryDate);\n\t\tt.setHours(23, 59, 59, 999), n = t.getTime();\n\t}\n\treturn Math.min(t, n);\n}\nfunction je(e) {\n\treturn e.expiryDate ? new Date(e.expiryDate).getTime() : Infinity;\n}\nfunction Me(e, { facilityIds: t, sessionIds: n, sessionOpen: r, allowPersonalPurchase: i }) {\n\treturn e.ownerType === \"FACILITY\" ? !r && t.has(e.ownerId) : e.ownerType === \"SESSION\" ? n.has(e.ownerId) : (e.sourceType ?? e.batchSourceType) !== \"PURCHASE\" || i;\n}\nfunction Ne(e, t, n) {\n\treturn `${e} ${e === 1 ? t : n ?? `${t}s`}`;\n}\nvar Pe = {\n\tstep: \"product\",\n\tmode: \"use-existing\",\n\tproductId: \"\",\n\townerType: \"\",\n\townerId: \"\",\n\tpersonalSource: \"\",\n\tallVials: [],\n\tallBatches: [],\n\tsources: [],\n\tvialCandidates: [],\n\tbatchCandidates: [],\n\tselectedVialId: \"\",\n\tselectedBatchId: \"\",\n\tvolumeMl: \"\",\n\tloading: !1\n};\nfunction Fe({ open: f, candidateProductIds: y, onConfirm: ye, onCancel: O, patientReferenceDate: k, administrationDate: A }) {\n\tlet j = Array.isArray(y), M = j ? y.join(\",\") : \"\", N = j && y.length === 1 ? y[0] : \"\", [P, F] = h(Pe), [I, be] = h([]), [L, xe] = h([]), [R, Se] = h([]), [z, B] = h([]), [V, Ce] = h([]), [H, we] = h(!1), U = ie(), W = o()?.allowPersonalPurchase !== !1;\n\tp(() => {\n\t\tif (f) {\n\t\t\tU.reset(), F({\n\t\t\t\t...Pe,\n\t\t\t\tproductId: N\n\t\t\t}), B([]);\n\t\t\tasync function n() {\n\t\t\t\twe(!0);\n\t\t\t\ttry {\n\t\t\t\t\tlet [n, o, s, c, ee] = await Promise.all([\n\t\t\t\t\t\te(),\n\t\t\t\t\t\ti(),\n\t\t\t\t\t\ta().catch(() => []),\n\t\t\t\t\t\tt().catch(() => []),\n\t\t\t\t\t\tr().catch(() => [])\n\t\t\t\t\t]);\n\t\t\t\t\tbe(n), xe(o), Se(s), B(c), Ce(ee);\n\t\t\t\t} catch (e) {\n\t\t\t\t\ts({\n\t\t\t\t\t\tmessage: e?.message || \"Failed to load metadata\",\n\t\t\t\t\t\ttype: \"error\"\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\twe(!1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tn();\n\t\t}\n\t}, [f, M]), p(() => {\n\t\tf && N && F((e) => ({\n\t\t\t...e,\n\t\t\tproductId: N\n\t\t}));\n\t}, [f, N]);\n\tlet G = m(() => z.find(ee) ?? null, [z]), K = m(() => new Set(R.map((e) => e.id)), [R]), q = m(() => {\n\t\tlet e = I.filter((e) => e.categoryCode === \"VACCINES\" && e.isActive).sort((e, t) => e.name.localeCompare(t.name));\n\t\tif (j) {\n\t\t\tlet t = new Set(y);\n\t\t\treturn e.filter((e) => t.has(e.id));\n\t\t}\n\t\treturn e;\n\t}, [\n\t\tI,\n\t\tj,\n\t\tM\n\t]), J = m(() => {\n\t\tlet e = {\n\t\t\tfacilityIds: K,\n\t\t\tsessionIds: new Set(z.map((e) => e.id)),\n\t\t\tsessionOpen: z.length > 0,\n\t\t\tallowPersonalPurchase: W\n\t\t};\n\t\treturn q.map((t) => {\n\t\t\tlet n = ke(t.id).filter((t) => Me(t, e)), r = n.reduce((e, t) => e + Number(t.qtyRemaining ?? 0), 0), i = V.filter((n) => n.productId === t.id && n.status === \"OPEN\" && !n.expired && Number(n.volumeRemainingMl) > 0 && Me(n, e)).length, a = [];\n\t\t\tr > 0 && a.push(`${Ne(r, \"unit\")} in ${Ne(n.length, \"batch\", \"batches\")}`), i > 0 && a.push(Ne(i, \"open vial\"));\n\t\t\tlet o = t.vaccineConfig?.vaccineCode ? ` · ${t.vaccineConfig.vaccineCode}` : \"\";\n\t\t\treturn {\n\t\t\t\tvalue: t.id,\n\t\t\t\tlabel: `${t.name}${o} · ${a.length ? a.join(\", \") : \"no stock\"}`,\n\t\t\t\toutOfStock: a.length === 0\n\t\t\t};\n\t\t});\n\t}, [\n\t\tq,\n\t\tL,\n\t\tV,\n\t\tK,\n\t\tz,\n\t\tW\n\t]), De = j && q.length === 0;\n\tfunction ke(e, t = L) {\n\t\tlet n = (/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0);\n\t\treturn t.filter((t) => t.productId === e && t.qtyRemaining > 0 && !t.isQuarantined && (!t.expiryDate || new Date(t.expiryDate).getTime() >= n)).sort((e, t) => je(e) - je(t));\n\t}\n\tfunction Fe(e, t, n, r, i) {\n\t\tif (!n) return {\n\t\t\tvials: [],\n\t\t\tbatches: []\n\t\t};\n\t\tlet a = n === \"USER\" && i ? i === \"OUTREACH\" ? \"PICKUP\" : \"PURCHASE\" : null;\n\t\treturn {\n\t\t\tvials: e.filter((e) => e.ownerType === n && (n === \"USER\" ? !a || e.batchSourceType === a : e.ownerId === r)),\n\t\t\tbatches: t.filter((e) => e.ownerType === n && (n === \"USER\" ? !a || e.sourceType === a : e.ownerId === r))\n\t\t};\n\t}\n\tfunction Ie(e, t) {\n\t\tif (!e) return { volumeMl: \"\" };\n\t\tlet n = t?.unit !== \"DROPS\" && !!e.singleDose, r = Oe(e, k, A);\n\t\treturn r.profile ? { volumeMl: n ? e.vialVolumeMl ?? \"\" : r.profile.doseAmount ?? \"\" } : { volumeMl: \"\" };\n\t}\n\tlet Le = ae(!1);\n\tp(() => {\n\t\tf || (Le.current = !1);\n\t}, [f, M]), p(() => {\n\t\t!f || !N || Le.current || H || G || P.step !== \"product\" || P.productId !== N || (Le.current = !0, Re());\n\t}, [\n\t\tf,\n\t\tN,\n\t\tH,\n\t\tG,\n\t\tP.step,\n\t\tP.productId\n\t]);\n\tasync function Re() {\n\t\tif (!P.productId) {\n\t\t\tU.markAllTouched();\n\t\t\treturn;\n\t\t}\n\t\tif (!G) {\n\t\t\tF((e) => ({\n\t\t\t\t...e,\n\t\t\t\tloading: !0\n\t\t\t}));\n\t\t\ttry {\n\t\t\t\tlet [e, r, o, s] = await Promise.all([\n\t\t\t\t\tn(P.productId),\n\t\t\t\t\ti().catch(() => L),\n\t\t\t\t\ta().catch(() => R),\n\t\t\t\t\tt().catch(() => z)\n\t\t\t\t]);\n\t\t\t\tif (xe(r), Se(o), B(s), s.some(ee)) {\n\t\t\t\t\tF((e) => ({\n\t\t\t\t\t\t...e,\n\t\t\t\t\t\tloading: !1\n\t\t\t\t\t}));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet c = {\n\t\t\t\t\tfacilityIds: new Set(o.map((e) => e.id)),\n\t\t\t\t\tsessionIds: new Set(s.map((e) => e.id)),\n\t\t\t\t\tsessionOpen: s.length > 0,\n\t\t\t\t\tallowPersonalPurchase: W\n\t\t\t\t}, l = (e) => Me(e, c), u = e.filter(l), te = Date.now(), d = u.filter((e) => e.status === \"OPEN\" && !e.expired && Ae(e) > te && Number(e.volumeRemainingMl) > 0).sort((e, t) => Ae(e) - Ae(t)), ne = u.reduce((e, t) => (t.status === \"OPEN\" && (e[t.batchId] = (e[t.batchId] || 0) + 1), e), {}), re = I.find((e) => e.id === P.productId), ie = re?.vaccineConfig, f = ie?.maxConcurrentOpenVials ?? 2, p = ke(P.productId, r).filter(l).filter((e) => (ne[e.id] || 0) < f), m = /* @__PURE__ */ new Set(), ae = [];\n\t\t\t\tfunction h(e, t, n, r = \"\") {\n\t\t\t\t\tlet i = `${e}::${t ?? \"\"}::${r ?? \"\"}`;\n\t\t\t\t\tm.has(i) || (m.add(i), ae.push({\n\t\t\t\t\t\tkey: i,\n\t\t\t\t\t\townerType: e,\n\t\t\t\t\t\townerId: t ?? null,\n\t\t\t\t\t\tpersonalSource: r || null,\n\t\t\t\t\t\tlabel: n\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t\t(d.some((e) => e.ownerType === \"USER\" && e.batchSourceType === \"PICKUP\") || p.some((e) => e.ownerType === \"USER\" && e.sourceType === \"PICKUP\")) && h(\"USER\", null, \"Personal (Outreach)\", \"OUTREACH\");\n\t\t\t\tlet g = d.some((e) => e.ownerType === \"USER\" && e.batchSourceType === \"PURCHASE\") || p.some((e) => e.ownerType === \"USER\" && e.sourceType === \"PURCHASE\");\n\t\t\t\tW && g && h(\"USER\", null, \"Personal (Purchase)\", \"PURCHASE\");\n\t\t\t\tlet _ = /* @__PURE__ */ new Set();\n\t\t\t\td.forEach((e) => {\n\t\t\t\t\te.ownerType === \"FACILITY\" && e.ownerId && _.add(e.ownerId);\n\t\t\t\t}), p.forEach((e) => {\n\t\t\t\t\te.ownerType === \"FACILITY\" && e.ownerId && _.add(e.ownerId);\n\t\t\t\t}), _.forEach((e) => {\n\t\t\t\t\th(\"FACILITY\", e, `Facility — ${o.find((t) => t.id === e)?.name ?? e}`);\n\t\t\t\t});\n\t\t\t\tlet v = /* @__PURE__ */ new Set();\n\t\t\t\td.forEach((e) => {\n\t\t\t\t\te.ownerType === \"SESSION\" && e.ownerId && v.add(e.ownerId);\n\t\t\t\t}), p.forEach((e) => {\n\t\t\t\t\te.ownerType === \"SESSION\" && e.ownerId && v.add(e.ownerId);\n\t\t\t\t}), v.forEach((e) => {\n\t\t\t\t\th(\"SESSION\", e, `Session — ${s.find((t) => t.id === e)?.sessionName ?? \"Group\"}`);\n\t\t\t\t});\n\t\t\t\tlet y = ae, b = y.length === 1 ? y[0] : null, x = b?.ownerType ?? \"\", S = b?.ownerId ?? \"\", C = b?.personalSource ?? \"\", w = Fe(d, p, x, S, C), oe = w.vials.length > 0 ? \"use-existing\" : \"open-new\";\n\t\t\t\tF((e) => ({\n\t\t\t\t\t...e,\n\t\t\t\t\tloading: !1,\n\t\t\t\t\tstep: \"select\",\n\t\t\t\t\tmode: oe,\n\t\t\t\t\townerType: x,\n\t\t\t\t\townerId: S,\n\t\t\t\t\tpersonalSource: C,\n\t\t\t\t\tallVials: d,\n\t\t\t\t\tallBatches: p,\n\t\t\t\t\tsources: y,\n\t\t\t\t\tvialCandidates: w.vials,\n\t\t\t\t\tbatchCandidates: w.batches,\n\t\t\t\t\tselectedVialId: w.vials[0]?.id ?? \"\",\n\t\t\t\t\tselectedBatchId: w.batches[0]?.id ?? \"\",\n\t\t\t\t\t...Ie(ie, re)\n\t\t\t\t}));\n\t\t\t} catch (e) {\n\t\t\t\tF((e) => ({\n\t\t\t\t\t...e,\n\t\t\t\t\tloading: !1\n\t\t\t\t})), s({\n\t\t\t\t\tmessage: e?.message ?? \"Failed to load vials\",\n\t\t\t\t\ttype: \"error\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tfunction ze(e) {\n\t\tlet t = P.sources.find((t) => t.key === e);\n\t\tif (!t) return;\n\t\tlet n = Fe(P.allVials, P.allBatches, t.ownerType, t.ownerId, t.personalSource), r = I.find((e) => e.id === P.productId), i = r?.vaccineConfig, a = n.vials.length > 0 ? \"use-existing\" : \"open-new\";\n\t\tF((e) => ({\n\t\t\t...e,\n\t\t\townerType: t.ownerType,\n\t\t\townerId: t.ownerId ?? \"\",\n\t\t\tpersonalSource: t.personalSource ?? \"\",\n\t\t\tmode: a,\n\t\t\tvialCandidates: n.vials,\n\t\t\tbatchCandidates: n.batches,\n\t\t\tselectedVialId: n.vials[0]?.id ?? \"\",\n\t\t\tselectedBatchId: n.batches[0]?.id ?? \"\",\n\t\t\t...Ie(i, r)\n\t\t}));\n\t}\n\tfunction Be(e) {\n\t\tF((t) => ({\n\t\t\t...t,\n\t\t\tmode: e\n\t\t}));\n\t}\n\tlet Y = P.vialCandidates.find((e) => e.id === P.selectedVialId), Ve = P.batchCandidates.find((e) => e.id === P.selectedBatchId), He = I.find((e) => e.id === P.productId), X = He?.vaccineConfig, Z = He?.unit === \"DROPS\" ? \"drops\" : \"ml\", Ue = Z !== \"drops\" && !!X?.singleDose, We = m(() => X ? Oe(X, k, A) : null, [\n\t\tX,\n\t\tk,\n\t\tA\n\t]), Q = We?.profile ?? null, Ge = m(() => Te(k, A), [k, A]), $ = (() => {\n\t\tif (P.step === \"product\") return { productId: d(P.productId, \"Vaccine\") };\n\t\tlet e = (e) => Z === \"drops\" ? String(Math.round(e)) : e.toFixed(2), t = {\n\t\t\townerType: d(P.ownerType, \"Source\"),\n\t\t\tvolumeMl: re(P.volumeMl, \"Dose\", { required: !0 })\n\t\t};\n\t\tif (P.mode === \"use-existing\") {\n\t\t\tif (t.selectedVialId = d(P.selectedVialId, \"Vial\"), !t.volumeMl && Y) {\n\t\t\t\tlet n = Number(P.volumeMl), r = Number(Y.volumeRemainingMl);\n\t\t\t\tn > r && (t.volumeMl = P.batchCandidates.length > 0 ? `Only ${e(r)} ${Z} left in this vial — open another vial instead.` : `Only ${e(r)} ${Z} left in this vial.`);\n\t\t\t}\n\t\t} else if (t.selectedBatchId = d(P.selectedBatchId, \"Batch\"), !t.volumeMl && X?.vialVolumeMl) {\n\t\t\tlet n = Number(P.volumeMl), r = Number(X.vialVolumeMl);\n\t\t\tn > r && (t.volumeMl = `A fresh vial holds ${e(r)} ${Z}`);\n\t\t}\n\t\treturn t;\n\t})(), Ke = ne($);\n\tfunction qe() {\n\t\tif (!Ke) {\n\t\t\tU.markAllTouched();\n\t\t\treturn;\n\t\t}\n\t\tif (G) return;\n\t\tif (P.ownerType === \"FACILITY\" && !K.has(P.ownerId)) {\n\t\t\ts({\n\t\t\t\tmessage: \"You are no longer assigned to that facility. Pick another source.\",\n\t\t\t\ttype: \"error\"\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tlet e = {\n\t\t\tproductId: P.productId,\n\t\t\townerType: P.ownerType,\n\t\t\townerId: (P.ownerType === \"FACILITY\" || P.ownerType === \"SESSION\") && P.ownerId || null,\n\t\t\tpersonalSource: P.ownerType === \"USER\" && P.personalSource || null,\n\t\t\tvolumeMl: Number(P.volumeMl),\n\t\t\tmeasureUnit: Z,\n\t\t\tdoseLabel: Ue ? \"Single dose\" : Q ? Q.label || Ee(Q) : null\n\t\t};\n\t\tP.mode === \"use-existing\" ? (e.openVialId = Y.id, e.batchId = Y.batchId) : (e.batchId = Ve.id, e.openVialId = null), ye(e);\n\t}\n\tfunction Je() {\n\t\tF((e) => ({\n\t\t\t...e,\n\t\t\tstep: \"product\",\n\t\t\tvialCandidates: [],\n\t\t\tbatchCandidates: [],\n\t\t\tsources: []\n\t\t}));\n\t}\n\treturn /* @__PURE__ */ v(w, {\n\t\topen: f,\n\t\tonClose: O,\n\t\tfullWidth: !0,\n\t\tmaxWidth: \"md\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ _(ce, { children: G ? \"Administer Vaccine — Session Time Is Over\" : P.step === \"product\" ? \"Administer Vaccine — Select Vaccine\" : P.mode === \"use-existing\" ? \"Administer Vaccine — Select Open Vial\" : \"Administer Vaccine — Open & Administer\" }),\n\t\t\t/* @__PURE__ */ v(se, {\n\t\t\t\tdividers: !0,\n\t\t\t\tchildren: [H ? /* @__PURE__ */ _(le, {}) : null, G ? /* @__PURE__ */ v(x, {\n\t\t\t\t\tsx: { mt: 1 },\n\t\t\t\t\tchildren: [/* @__PURE__ */ v(b, {\n\t\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\t\ticon: /* @__PURE__ */ _(ve, {}),\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ _(D, {\n\t\t\t\t\t\t\t\tvariant: \"subtitle2\",\n\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\t\t\t\tmb: .5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tchildren: \"Session time is over\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ v(D, {\n\t\t\t\t\t\t\t\tvariant: \"body2\",\n\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\tG.sessionName || \"This session\",\n\t\t\t\t\t\t\t\t\tG.sessionSite ? ` at ${G.sessionSite}` : \"\",\n\t\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t\t\"was scheduled from\",\n\t\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t\tl(G.sessionStartTime),\n\t\t\t\t\t\t\t\t\t\" to\",\n\t\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t\tl(G.sessionExpectedEndTime),\n\t\t\t\t\t\t\t\t\t\".\"\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ _(D, {\n\t\t\t\t\t\t\t\tvariant: \"body2\",\n\t\t\t\t\t\t\t\tsx: { mt: 1 },\n\t\t\t\t\t\t\t\tchildren: G.isCreator ? \"End the session and record what is coming back before you administer any more doses.\" : `Ask ${G.userName || \"the person who created it\"} to end this session before you administer any more doses.`\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}), G.isCreator ? /* @__PURE__ */ _(D, {\n\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\tmt: 1.5\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: \"Sessions are ended from Product Management, under Pickups.\"\n\t\t\t\t\t}) : null]\n\t\t\t\t}) : P.step === \"product\" ? /* @__PURE__ */ v(x, {\n\t\t\t\t\tsx: { mt: 1 },\n\t\t\t\t\tchildren: [De ? /* @__PURE__ */ _(b, {\n\t\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\t\tsx: { mb: 2 },\n\t\t\t\t\t\tchildren: \"No product is linked to this vaccine. Administration cannot proceed.\"\n\t\t\t\t\t}) : null, /* @__PURE__ */ _(c, {\n\t\t\t\t\t\tlabel: \"Vaccine\",\n\t\t\t\t\t\trequired: !0,\n\t\t\t\t\t\tvalue: P.productId,\n\t\t\t\t\t\tonChange: (e) => F({\n\t\t\t\t\t\t\t...P,\n\t\t\t\t\t\t\tproductId: e\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tonBlur: U.onBlur(\"productId\"),\n\t\t\t\t\t\terror: U.show(\"productId\") && !!$.productId,\n\t\t\t\t\t\toptions: J,\n\t\t\t\t\t\tgetOptionDisabled: (e) => e.outOfStock,\n\t\t\t\t\t\tnoOptionsText: \"No active vaccine products\",\n\t\t\t\t\t\thelperText: U.show(\"productId\") && $.productId ? $.productId : q.length > 1 ? \"This vaccine is stocked as more than one product. Pick the one you are holding.\" : \"Open vials for this vaccine will be shown next. If none are open, a fresh vial can be opened on the same screen.\"\n\t\t\t\t\t})]\n\t\t\t\t}) : /* @__PURE__ */ v(de, {\n\t\t\t\t\tspacing: 2,\n\t\t\t\t\tsx: { pt: 1 },\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\tP.loading ? /* @__PURE__ */ _(le, {}) : null,\n\t\t\t\t\t\tP.sources.length === 0 ? /* @__PURE__ */ _(b, {\n\t\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t\t\tchildren: \"No stock available for this vaccine — neither in your personal stock nor at an assigned facility.\"\n\t\t\t\t\t\t}) : P.sources.length > 1 ? /* @__PURE__ */ _(c, {\n\t\t\t\t\t\t\tlabel: \"Administer from\",\n\t\t\t\t\t\t\trequired: !0,\n\t\t\t\t\t\t\tvalue: P.ownerType ? `${P.ownerType}::${P.ownerId ?? \"\"}::${P.personalSource ?? \"\"}` : \"\",\n\t\t\t\t\t\t\tonChange: (e) => ze(e),\n\t\t\t\t\t\t\tonBlur: U.onBlur(\"ownerType\"),\n\t\t\t\t\t\t\terror: U.show(\"ownerType\") && !!$.ownerType,\n\t\t\t\t\t\t\toptions: P.sources.map((e) => ({\n\t\t\t\t\t\t\t\tvalue: e.key,\n\t\t\t\t\t\t\t\tlabel: e.label\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\thelperText: U.show(\"ownerType\") && $.ownerType ? $.ownerType : \"Personal (outreach), personal (purchase) and facility stock are separate vial pools — pick which one this dose comes from.\"\n\t\t\t\t\t\t}) : /* @__PURE__ */ v(b, {\n\t\t\t\t\t\t\tseverity: \"info\",\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\"Administering from\",\n\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(\"strong\", { children: P.sources[0]?.label }),\n\t\t\t\t\t\t\t\t\".\"\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\tlet e = null;\n\t\t\t\t\t\t\tif (P.ownerType === \"USER\" && P.personalSource === \"OUTREACH\" ? e = z.find((e) => e.sessionType !== \"GROUP\") || z[0] : P.ownerType === \"SESSION\" && (e = z.find((e) => e.id === P.ownerId)), !e) return null;\n\t\t\t\t\t\t\tlet t = e.sessionType === \"GROUP\";\n\t\t\t\t\t\t\treturn /* @__PURE__ */ v(x, {\n\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\tp: 1.5,\n\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\tborder: \"1px solid\",\n\t\t\t\t\t\t\t\t\tborderColor: \"divider\",\n\t\t\t\t\t\t\t\t\tbgcolor: (e) => e.palette.action.hover\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(D, {\n\t\t\t\t\t\t\t\t\t\tvariant: \"overline\",\n\t\t\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: 800,\n\t\t\t\t\t\t\t\t\t\t\tletterSpacing: .6,\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tchildren: t ? \"Group session\" : \"Outreach session\"\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(D, {\n\t\t\t\t\t\t\t\t\t\tvariant: \"body2\",\n\t\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\t\tchildren: e.sessionName || \"—\"\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tt && (e.members ?? []).length > 0 ? /* @__PURE__ */ v(D, {\n\t\t\t\t\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\t\t\t\t\tsx: { display: \"block\" },\n\t\t\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\t\te.members.length,\n\t\t\t\t\t\t\t\t\t\t\t\" member\",\n\t\t\t\t\t\t\t\t\t\t\te.members.length === 1 ? \"\" : \"s\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}) : null,\n\t\t\t\t\t\t\t\t\te.sessionSite ? /* @__PURE__ */ v(D, {\n\t\t\t\t\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\t\t\t\t\tsx: { display: \"block\" },\n\t\t\t\t\t\t\t\t\t\tchildren: [\"Site: \", e.sessionSite]\n\t\t\t\t\t\t\t\t\t}) : null,\n\t\t\t\t\t\t\t\t\t/* @__PURE__ */ v(D, {\n\t\t\t\t\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\t\t\t\t\tsx: { display: \"block\" },\n\t\t\t\t\t\t\t\t\t\tchildren: [e.sessionStartTime ? l(e.sessionStartTime) : \"—\", e.sessionExpectedEndTime ? ` → ${l(e.sessionExpectedEndTime)}` : \"\"]\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\te.sessionDescription ? /* @__PURE__ */ _(D, {\n\t\t\t\t\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\t\t\t\t\tmt: .5,\n\t\t\t\t\t\t\t\t\t\t\twhiteSpace: \"pre-wrap\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tchildren: e.sessionDescription\n\t\t\t\t\t\t\t\t\t}) : null\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(),\n\t\t\t\t\t\tP.mode === \"use-existing\" ? /* @__PURE__ */ v(g, { children: [P.ownerType ? (() => {\n\t\t\t\t\t\t\tlet e = Number(P.volumeMl), t = !Number.isNaN(e) && e > 0 && P.vialCandidates.some((t) => Number(t.volumeRemainingMl) >= e);\n\t\t\t\t\t\t\treturn /* @__PURE__ */ _(b, {\n\t\t\t\t\t\t\t\tseverity: \"info\",\n\t\t\t\t\t\t\t\taction: t ? null : /* @__PURE__ */ _(S, {\n\t\t\t\t\t\t\t\t\tcolor: \"inherit\",\n\t\t\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\t\t\tonClick: () => Be(\"open-new\"),\n\t\t\t\t\t\t\t\t\tchildren: \"Open another vial instead\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tchildren: t ? \"Pick an open vial — earliest-expiry-first is preselected. An existing vial can hold the requested dose, so no new vial is needed.\" : \"Pick an open vial — earliest-expiry-first is preselected. The requested dose does not fit in any open vial; you can open another vial from stock.\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})() : /* @__PURE__ */ _(b, {\n\t\t\t\t\t\t\tseverity: \"info\",\n\t\t\t\t\t\t\tchildren: \"Pick an administration source above to see the available open vials.\"\n\t\t\t\t\t\t}), /* @__PURE__ */ _(me, { children: /* @__PURE__ */ v(fe, {\n\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ _(he, { children: /* @__PURE__ */ v(E, { children: [\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\tchildren: \"Lot\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\tchildren: \"Vial expires\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\tchildren: \"Batch expires\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ v(T, {\n\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\talign: \"right\",\n\t\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\t\"Remaining (\",\n\t\t\t\t\t\t\t\t\t\tZ,\n\t\t\t\t\t\t\t\t\t\t\")\"\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t] }) }), /* @__PURE__ */ _(pe, { children: P.vialCandidates.length === 0 ? /* @__PURE__ */ _(E, { children: /* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\tcolSpan: 5,\n\t\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\t\tpy: 4,\n\t\t\t\t\t\t\t\t\ttextAlign: \"center\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ v(de, {\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\tspacing: 1,\n\t\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(_e, { sx: {\n\t\t\t\t\t\t\t\t\t\t\tfontSize: 36,\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"text.disabled\",\n\t\t\t\t\t\t\t\t\t\t\topacity: .7\n\t\t\t\t\t\t\t\t\t\t} }),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(D, {\n\t\t\t\t\t\t\t\t\t\t\tvariant: \"body2\",\n\t\t\t\t\t\t\t\t\t\t\tsx: { fontWeight: 700 },\n\t\t\t\t\t\t\t\t\t\t\tchildren: \"No usable open vials for this vaccine\"\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tP.batchCandidates.length > 0 ? /* @__PURE__ */ _(S, {\n\t\t\t\t\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\t\t\t\t\tvariant: \"outlined\",\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => Be(\"open-new\"),\n\t\t\t\t\t\t\t\t\t\t\tchildren: \"Open a new vial instead\"\n\t\t\t\t\t\t\t\t\t\t}) : /* @__PURE__ */ _(D, {\n\t\t\t\t\t\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\t\t\t\t\t\tchildren: \"No stock available either — receive a purchase first.\"\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}) }) : P.vialCandidates.map((e, t) => {\n\t\t\t\t\t\t\t\tlet n = P.selectedVialId === e.id;\n\t\t\t\t\t\t\t\treturn /* @__PURE__ */ v(E, {\n\t\t\t\t\t\t\t\t\thover: !0,\n\t\t\t\t\t\t\t\t\tselected: n,\n\t\t\t\t\t\t\t\t\tonClick: () => F({\n\t\t\t\t\t\t\t\t\t\t...P,\n\t\t\t\t\t\t\t\t\t\tselectedVialId: e.id\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tsx: { cursor: \"pointer\" },\n\t\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\t\t\tpadding: \"checkbox\",\n\t\t\t\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ _(ue, { checked: n })\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ v(T, {\n\t\t\t\t\t\t\t\t\t\t\tsx: { fontFamily: \"monospace\" },\n\t\t\t\t\t\t\t\t\t\t\tchildren: [e.lotNumber || \"—\", t === 0 ? /* @__PURE__ */ _(C, {\n\t\t\t\t\t\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary\",\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Use first\",\n\t\t\t\t\t\t\t\t\t\t\t\tsx: { ml: 1 }\n\t\t\t\t\t\t\t\t\t\t\t}) : null]\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, { children: l(e.expiresAt) }),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, { children: e.batchExpiryDate ? te(e.batchExpiryDate) : \"—\" }),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ v(T, {\n\t\t\t\t\t\t\t\t\t\t\talign: \"right\",\n\t\t\t\t\t\t\t\t\t\t\tsx: { fontWeight: 700 },\n\t\t\t\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\t\t\tu(e.volumeRemainingMl),\n\t\t\t\t\t\t\t\t\t\t\t\t\" /\",\n\t\t\t\t\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t\t\t\t\tu(e.volumeTotalMl)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}, e.id);\n\t\t\t\t\t\t\t}) })]\n\t\t\t\t\t\t}) })] }) : /* @__PURE__ */ _(g, { children: P.ownerType ? P.batchCandidates.length === 0 ? /* @__PURE__ */ _(b, {\n\t\t\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\t\t\taction: P.vialCandidates.length > 0 ? /* @__PURE__ */ _(S, {\n\t\t\t\t\t\t\t\tcolor: \"inherit\",\n\t\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\t\tonClick: () => Be(\"use-existing\"),\n\t\t\t\t\t\t\t\tchildren: \"Use an open vial\"\n\t\t\t\t\t\t\t}) : null,\n\t\t\t\t\t\t\tchildren: \"No batches available — every batch is either out of stock, expired, or already at the maximum concurrent open vials. Receive a purchase or finish the open vials first.\"\n\t\t\t\t\t\t}) : /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _(b, {\n\t\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t\t\taction: P.vialCandidates.length > 0 ? /* @__PURE__ */ _(S, {\n\t\t\t\t\t\t\t\tcolor: \"inherit\",\n\t\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\t\tonClick: () => Be(\"use-existing\"),\n\t\t\t\t\t\t\t\tchildren: \"Use an open vial instead\"\n\t\t\t\t\t\t\t}) : null,\n\t\t\t\t\t\t\tchildren: P.vialCandidates.length > 0 ? \"Opening a new vial from stock. Existing open vials are still available if the dose fits.\" : \"No open vials for this vaccine. A new vial will be opened from the selected batch and the dose recorded in one step.\"\n\t\t\t\t\t\t}), /* @__PURE__ */ _(me, { children: /* @__PURE__ */ v(fe, {\n\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ _(he, { children: /* @__PURE__ */ v(E, { children: [\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\tchildren: \"Lot\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\tchildren: \"Batch expires\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\talign: \"right\",\n\t\t\t\t\t\t\t\t\tchildren: \"Qty available\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\tsx: { fontWeight: 800 },\n\t\t\t\t\t\t\t\t\tchildren: \"Storage\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t] }) }), /* @__PURE__ */ _(pe, { children: P.batchCandidates.map((e, t) => {\n\t\t\t\t\t\t\t\tlet n = P.selectedBatchId === e.id;\n\t\t\t\t\t\t\t\treturn /* @__PURE__ */ v(E, {\n\t\t\t\t\t\t\t\t\thover: !0,\n\t\t\t\t\t\t\t\t\tselected: n,\n\t\t\t\t\t\t\t\t\tonClick: () => F({\n\t\t\t\t\t\t\t\t\t\t...P,\n\t\t\t\t\t\t\t\t\t\tselectedBatchId: e.id\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tsx: { cursor: \"pointer\" },\n\t\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\t\t\tpadding: \"checkbox\",\n\t\t\t\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ _(ue, { checked: n })\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ v(T, {\n\t\t\t\t\t\t\t\t\t\t\tsx: { fontFamily: \"monospace\" },\n\t\t\t\t\t\t\t\t\t\t\tchildren: [e.lotNumber || \"—\", t === 0 ? /* @__PURE__ */ _(C, {\n\t\t\t\t\t\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary\",\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Use first\",\n\t\t\t\t\t\t\t\t\t\t\t\tsx: { ml: 1 }\n\t\t\t\t\t\t\t\t\t\t\t}) : null]\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, { children: e.expiryDate ? te(e.expiryDate) : \"—\" }),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, {\n\t\t\t\t\t\t\t\t\t\t\talign: \"right\",\n\t\t\t\t\t\t\t\t\t\t\tsx: { fontWeight: 700 },\n\t\t\t\t\t\t\t\t\t\t\tchildren: e.qtyRemaining\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t/* @__PURE__ */ _(T, { children: e.storageUnitName || \"—\" })\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}, e.id);\n\t\t\t\t\t\t\t}) })]\n\t\t\t\t\t\t}) })] }) : /* @__PURE__ */ _(b, {\n\t\t\t\t\t\t\tseverity: \"info\",\n\t\t\t\t\t\t\tchildren: \"Pick an administration source above to see the available batches.\"\n\t\t\t\t\t\t}) }),\n\t\t\t\t\t\tP.mode === \"use-existing\" && Y || P.mode === \"open-new\" && Ve ? /* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(D, {\n\t\t\t\t\t\t\tvariant: \"body2\",\n\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\t\t\tmb: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: \"Dose\"\n\t\t\t\t\t\t}), Q ? /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _(ge, {\n\t\t\t\t\t\t\tlabel: `Dose (${Z})`,\n\t\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\t\tdisabled: !0,\n\t\t\t\t\t\t\tvalue: P.volumeMl,\n\t\t\t\t\t\t\thelperText: Ue ? \"Single dose vial — the whole vial is one dose.\" : \"\",\n\t\t\t\t\t\t\tsx: { maxWidth: 280 }\n\t\t\t\t\t\t}), /* @__PURE__ */ v(D, {\n\t\t\t\t\t\t\tvariant: \"caption\",\n\t\t\t\t\t\t\tcolor: \"text.secondary\",\n\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\t\tmt: .75\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\"Patient age \",\n\t\t\t\t\t\t\t\tGe || \"—\",\n\t\t\t\t\t\t\t\tQ.label ? ` · ${Q.label}` : ` · ${Ee(Q)}`,\n\t\t\t\t\t\t\t\tUe ? \"\" : \" — dose selected automatically.\"\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t})] }) : We?.reason === \"not-configured\" ? /* @__PURE__ */ _(b, {\n\t\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t\t\tchildren: \"No age range has been set up for this product yet. Ask an administrator to add one. Administration is blocked.\"\n\t\t\t\t\t\t}) : We?.reason === \"no-date\" ? /* @__PURE__ */ _(b, {\n\t\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t\t\tchildren: \"This vaccine is given by age, but no reference date (such as date of birth) is available. Administration is blocked.\"\n\t\t\t\t\t\t}) : /* @__PURE__ */ v(b, {\n\t\t\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\"This product is not applicable for a patient aged \",\n\t\t\t\t\t\t\t\tGe || \"this age\",\n\t\t\t\t\t\t\t\t\". Administration is blocked.\"\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t})] }) : null\n\t\t\t\t\t]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ _(oe, { children: G ? /* @__PURE__ */ _(S, {\n\t\t\t\tvariant: \"contained\",\n\t\t\t\tonClick: O,\n\t\t\t\tchildren: \"Close\"\n\t\t\t}) : /* @__PURE__ */ v(g, { children: [\n\t\t\t\t/* @__PURE__ */ _(S, {\n\t\t\t\t\tonClick: O,\n\t\t\t\t\tchildren: \"Cancel\"\n\t\t\t\t}),\n\t\t\t\tP.step === \"select\" && !N ? /* @__PURE__ */ _(S, {\n\t\t\t\t\tonClick: Je,\n\t\t\t\t\tchildren: \"Back\"\n\t\t\t\t}) : null,\n\t\t\t\tP.step === \"product\" ? /* @__PURE__ */ _(S, {\n\t\t\t\t\tvariant: \"contained\",\n\t\t\t\t\tdisabled: !P.productId || P.loading || De,\n\t\t\t\t\tonClick: () => void Re(),\n\t\t\t\t\tchildren: \"Next\"\n\t\t\t\t}) : /* @__PURE__ */ _(S, {\n\t\t\t\t\tvariant: \"contained\",\n\t\t\t\t\tdisabled: !Ke || P.loading,\n\t\t\t\t\tonClick: qe,\n\t\t\t\t\tchildren: P.mode === \"use-existing\" ? \"Administer\" : \"Open & Administer\"\n\t\t\t\t})\n\t\t\t] }) })\n\t\t]\n\t});\n}\nFe.propTypes = {\n\topen: y.bool.isRequired,\n\tcandidateProductIds: y.arrayOf(y.string),\n\tonConfirm: y.func.isRequired,\n\tonCancel: y.func.isRequired,\n\tpatientReferenceDate: y.oneOfType([\n\t\ty.object,\n\t\ty.string,\n\t\ty.number\n\t]),\n\tadministrationDate: y.oneOfType([\n\t\ty.object,\n\t\ty.string,\n\t\ty.number\n\t])\n};\n//#endregion\nexport { Fe as ProductAdministrationDialog, Te as describeAge, e as getProducts, a as listFacilities, Oe as matchAgeProfile, Ee as profileRangeLabel, De as profileRangesLabel, ke as resolveApplicability, q as routes };\n\n//# sourceMappingURL=index.js.map","/**\n * Works out what an admin actually changed, so the notification mail can say so.\n *\n * This lives in the browser because the browser is the only place that holds both sides of an\n * edit — the configuration it loaded and the one it is saving. Reconstructing it on the server\n * would mean keeping a change log in the database purely to describe changes, which is exactly\n * what this avoids.\n *\n * The summaries are deliberately coarse. Their job is to tell a reviewer which vaccine was\n * touched and roughly where, so they know whether to go and look. Dose-level detail would make\n * the mail unreadable and still would not be enough to review from.\n */\n\nconst SCHEDULE_TYPE_LABELS = {\n ROUTINE: 'Routine',\n NON_ROUTINE: 'Non-Routine',\n};\n\nconst labelOrValue = (map, value) => map[value] || value;\n\nconst isMeaningfullyEqual = (before, after) =>\n JSON.stringify(before ?? null) === JSON.stringify(after ?? null);\n\nconst describeValue = (value) => {\n if (value === null || value === undefined || value === '') return '(not set)';\n return String(value);\n};\n\nconst describeScalar = (lines, label, before, after) => {\n if (String(before ?? '') === String(after ?? '')) return;\n lines.push(`${label}: ${describeValue(before)} → ${describeValue(after)}`);\n};\n\n/**\n * Reports the schedule per product, because that is the unit an admin edits: they pick a\n * product and configure its doses. A vaccine with three products whose second product's windows\n * moved should say which one, not just \"schedule updated\".\n */\nconst summariseProductSchedules = (beforeList, afterList, productNameById) => {\n const lines = [];\n\n // Product management off: the single entry carries productId null, and the empty-string key\n // keeps it distinct from a real product id.\n const index = (list) =>\n new Map(\n (list || []).map((entry) => [\n entry?.productId == null ? '' : String(entry.productId),\n entry,\n ]),\n );\n\n const before = index(beforeList);\n const after = index(afterList);\n\n const productIds = new Set([...after.keys(), ...before.keys()]);\n\n productIds.forEach((productId) => {\n const suffix = productId\n ? ` for product: ${productNameById?.[productId] || productId}`\n : '';\n const existedBefore = before.has(productId);\n const existsAfter = after.has(productId);\n\n if (existsAfter && !existedBefore) {\n lines.push(`Schedule added${suffix}`);\n } else if (existedBefore && !existsAfter) {\n lines.push(`Schedule removed${suffix}`);\n } else if (!isMeaningfullyEqual(before.get(productId), after.get(productId))) {\n lines.push(`Schedule updated${suffix}`);\n }\n });\n\n return lines;\n};\n\n/**\n * @param before the vaccine's configuration as it was loaded\n * @param after the configuration being saved\n * @param productNameById map of product id to display name, for readable schedule lines\n * @returns an array of one-line descriptions; empty when nothing meaningful changed\n */\nexport const buildConfigChangeSummary = (before, after, productNameById = {}) => {\n if (!after) return [];\n if (!before) return ['Vaccine configured for the first time'];\n\n const lines = [];\n\n describeScalar(lines, 'Vaccine name', before.name, after.name);\n describeScalar(lines, 'Base date', before.baseDateCode, after.baseDateCode);\n describeScalar(lines, 'Recipient', before.recipientType, after.recipientType);\n describeScalar(\n lines,\n 'Schedule type',\n labelOrValue(SCHEDULE_TYPE_LABELS, before.scheduleType),\n labelOrValue(SCHEDULE_TYPE_LABELS, after.scheduleType),\n );\n\n if (Boolean(before.isActive) !== Boolean(after.isActive)) {\n lines.push(\n `Status: ${before.isActive ? 'Active' : 'Inactive'} → ${after.isActive ? 'Active' : 'Inactive'}`,\n );\n }\n\n if (!isMeaningfullyEqual(before.filters, after.filters)) {\n lines.push('Eligibility filters updated');\n }\n if (!isMeaningfullyEqual(before.codeSets, after.codeSets)) {\n lines.push('Code sets updated');\n }\n\n lines.push(\n ...summariseProductSchedules(\n before.productSchedules,\n after.productSchedules,\n productNameById,\n ),\n );\n\n return lines;\n};\n","import React, {\n useState,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Box,\n Chip,\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n IconButton,\n Collapse,\n TextField,\n Button,\n Autocomplete,\n InputAdornment,\n Checkbox,\n FormControlLabel,\n Tooltip,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n} from \"@mui/material\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faChevronUp,\n faArrowRight,\n faChevronDown,\n faPlus,\n faCalendarDay,\n faFilter,\n faUser,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n updateScheduledVaccine,\n setValidationErrors,\n clearValidationErrors,\n addCustomVaccine,\n setVaccineStatus,\n setVaccines,\n} from \"@/store/reducers/immunizationSlice\";\nimport AddCustomVaccineModal from \"./components/AddCustomVaccineModal\";\nimport ConfigureBaseDateModal from \"./components/ConfigureBaseDateModal\";\nimport ConfigureFiltersModal from \"./components/ConfigureFiltersModal\";\nimport ConfigureRecipientModal from \"./components/ConfigureRecipientModal\";\nimport DoseDetailsTable, {\n RecurringBoosterFields,\n} from \"./components/DoseDetailsTable\";\nimport GeographicalApplicability from \"./components/GeographicalApplicability\";\nimport VaccineDependencies from \"./components/VaccineDependencies\";\nimport DoseSelector from \"./components/DoseSelector\";\nimport VaccineFilters from \"./components/VaccineFilters\";\nimport VaccineCodeSets from \"./components/VaccineCodeSets\";\nimport {\n buildDisplayVaccines,\n getAllowedBaseDateCodesForRecipient,\n getInitialSummaryVaccineData,\n} from \"./utils/summaryUtils\";\nimport {\n buildSchedulePayloadEntry,\n flushDraftIntoSchedules,\n getLinkedProducts,\n hasProductSchedule,\n isProductScheduleDirty,\n loadScheduleIntoDraft,\n removeProductSchedule,\n clearProductSchedules,\n} from \"./utils/productScheduleUtils\";\nimport { ImmunizationUtil } from \"./service/ImmunizationUtil\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport useIsProductManagementEnabled from \"@/common/hooks/useIsProductManagementEnabled\";\nimport { getProducts } from \"@argusoft/medplat-product-management\";\nimport {\n LIFELONG_ELIGIBILITY,\n isLifelong,\n validateVaccineForm,\n} from \"./utils/validationUtils\";\nimport { buildConfigChangeSummary } from \"./utils/configChangeSummary\";\nimport \"./styles/ImmunizationSummary.scss\";\n\nconst MAX_DOSES = 10;\n\n// Routine vaccines are part of the standard schedule for everyone. Non-routine ones are\n// offered only when the situation calls for them (an outbreak, a specific exposure), get\n// their own tab in the form, and stay off the schedule timeline until the first dose is given.\nconst SCHEDULE_TYPE_ROUTINE = \"ROUTINE\";\nconst SCHEDULE_TYPE_NON_ROUTINE = \"NON_ROUTINE\";\n// A dose that repeats on an interval for as long as its window is open, with no dose count.\n// Not a third choice alongside FIXED and FLEXIBLE — it replaces that choice entirely, because\n// there are no per-dose windows to lay out.\nconst DOSE_TYPE_RECURRING = \"RECURRING\";\n\nconst formatEligibilityPart = (part) => {\n if (!part) return \"N.A.\";\n const trimmed = part.trim();\n if (trimmed === LIFELONG_ELIGIBILITY) return \"Lifelong\";\n if (trimmed === \"N.A.\" || trimmed === \"null days\" || trimmed === \"\")\n return \"N.A.\";\n\n const unitMatch = trimmed.match(/^(\\d+)\\s*(days?|weeks?|months?|years?)$/i);\n if (unitMatch) {\n const qty = parseInt(unitMatch[1]);\n const unit = unitMatch[2].toLowerCase();\n if (qty === 0) return \"From Start\";\n if (unit.startsWith(\"year\"))\n return `${qty} ${qty === 1 ? \"Year\" : \"Years\"}`;\n if (unit.startsWith(\"month\"))\n return `${qty} ${qty === 1 ? \"Month\" : \"Months\"}`;\n if (unit.startsWith(\"week\"))\n return `${qty} ${qty === 1 ? \"Week\" : \"Weeks\"}`;\n return `${qty} ${qty === 1 ? \"Day\" : \"Days\"}`;\n }\n};\n\n/**\n * The `schedule` array a save would write.\n *\n * The panel's per-product fields are folded back in only when the save is actually about a\n * schedule — `shouldFlush`. A save with no product open (a rename, or a removal) carries the\n * array exactly as it stands, so it cannot write the panel's leftovers into the entry with a\n * null product id, which is the row product management ignores.\n */\nconst buildScheduleArray = (draft, selectedProductId, shouldFlush) =>\n shouldFlush\n ? flushDraftIntoSchedules(draft, selectedProductId)\n : draft.productSchedules || [];\n\n/**\n * Builds the save payload for a vaccine.\n *\n * The per-product half of the configuration goes out as a single `schedule` array; only the\n * entry the panel was editing is rebuilt from the draft, every other product's entry is\n * carried through untouched. The vaccine-level fields — name, base date, recipient, filters,\n * code sets, schedule type — travel as they always did.\n */\nconst prepareVaccinePayload = (draft, selectedProductId, shouldFlush) => {\n const productSchedules = buildScheduleArray(draft, selectedProductId, shouldFlush);\n\n const filtersJSON = JSON.stringify(draft.filters || []);\n\n const codeSetsArray = JSON.stringify(\n (draft.codeSets || []).map((cs) => ({\n type: cs.type,\n value: cs.value,\n })),\n );\n\n return {\n parameters: {\n vaccineId: draft.id,\n vaccineName: draft.name,\n schedule: JSON.stringify(productSchedules.map(buildSchedulePayloadEntry)),\n status: draft.isActive,\n filters: filtersJSON,\n codeSets: codeSetsArray,\n baseDateCode: draft.baseDateCode,\n recipientType: draft.recipientType,\n scheduleType: draft.scheduleType || SCHEDULE_TYPE_ROUTINE,\n },\n };\n};\n\n// Beyond this the collapsed row grows tall enough to swamp the table, so the rest are\n// summarised as a count.\nconst MAX_COLLAPSED_PRODUCTS = 3;\n\nconst EligibilityText = ({ eligibility }) =>\n eligibility\n ? eligibility.split(\"to\").map((part, i) => (\n <React.Fragment key={`eligibility_${i}`}>\n {i === 0 ? (\n <strong>{formatEligibilityPart(part)}</strong>\n ) : (\n <>\n {\" to \"}\n <strong>{formatEligibilityPart(part)}</strong>\n </>\n )}\n </React.Fragment>\n ))\n : \"N.A.\";\n\n/**\n * The repeating tail's window, phrased as the \"X to Y\" string EligibilityText parses. A null\n * upper bound is stored for a window that never closes, exactly as it is for a dose.\n */\nconst recurringBoosterWindow = (booster) =>\n `${booster.eligibleFrom} to ${booster.eligibleTo ?? LIFELONG_ELIGIBILITY}`;\n\n/**\n * The collapsed row's view of a vaccine's schedule.\n *\n * With product management on a vaccine carries one schedule per product, so each gets its own\n * line naming the product; with it off there is a single unnamed schedule and the line is just\n * the dose count and window. Either way the dose count and eligibility belong to a schedule\n * rather than to the vaccine, which is why they read as one column instead of two.\n */\nconst ScheduleSummaryCell = ({\n vaccine,\n productsById,\n isProductManagementEnabled,\n}) => {\n const schedules = (vaccine.productSchedules || []).filter((schedule) =>\n isProductManagementEnabled\n ? Boolean(schedule.productId)\n : (schedule.productId ?? null) === null,\n );\n // A schedule with no doses has nothing to say yet, whichever mode we are in — except a\n // recurring one, which never has a dose count and is configured as soon as it exists.\n const configured = schedules.filter(\n (schedule) =>\n schedule.doses > 0 || schedule.doseType === DOSE_TYPE_RECURRING,\n );\n\n if (!configured.length) {\n return (\n <Typography\n sx={{\n fontSize: \"12px\",\n fontStyle: \"italic\",\n color: \"var(--color-gray1)\",\n }}\n >\n {isProductManagementEnabled\n ? \"Not configured — no product schedules yet\"\n : \"Not configured — no schedule yet\"}\n </Typography>\n );\n }\n\n const visible = configured.slice(0, MAX_COLLAPSED_PRODUCTS);\n const hiddenCount = configured.length - visible.length;\n\n return (\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 0.5 }}>\n {visible.map((schedule, index) => (\n <Box\n key={schedule.productId ?? `schedule_${index}`}\n sx={{\n display: \"flex\",\n alignItems: \"baseline\",\n gap: 1,\n flexWrap: \"wrap\",\n }}\n >\n {schedule.productId && (\n <Typography sx={{ fontSize: \"12px\", fontWeight: 700 }}>\n {productsById[schedule.productId]?.name || schedule.productId}\n </Typography>\n )}\n <Typography sx={{ fontSize: \"11px\", color: \"var(--color-gray1)\" }}>\n {schedule.doseType === DOSE_TYPE_RECURRING\n ? \"Recurring\"\n : `${schedule.doses} ${schedule.doses === 1 ? \"Dose\" : \"Doses\"}`}\n {\" · \"}\n <EligibilityText eligibility={schedule.eligibility} />\n {/* The tail carries its own window, and it is the part that differs: a vaccine\n whose boosters repeat to the end of life reads exactly like one that stops\n unless the second window is shown next to the first. Saying only that a\n booster exists left the reader to expand the row to find out anything. */}\n {schedule.recurringBooster && (\n <>\n {\" + Recurring booster · \"}\n <EligibilityText\n eligibility={recurringBoosterWindow(schedule.recurringBooster)}\n />\n </>\n )}\n </Typography>\n </Box>\n ))}\n {hiddenCount > 0 && (\n <Chip\n label={`+${hiddenCount} more`}\n size=\"small\"\n sx={{\n alignSelf: \"flex-start\",\n height: \"18px\",\n fontSize: \"10px\",\n fontWeight: 700,\n backgroundColor: \"rgba(57, 77, 97, 0.1)\",\n \"& .MuiChip-label\": { px: \"8px\" },\n }}\n />\n )}\n </Box>\n );\n};\n\nScheduleSummaryCell.propTypes = {\n vaccine: PropTypes.shape({\n productSchedules: PropTypes.arrayOf(PropTypes.object),\n }).isRequired,\n productsById: PropTypes.objectOf(PropTypes.object).isRequired,\n isProductManagementEnabled: PropTypes.bool,\n};\n\nEligibilityText.propTypes = {\n eligibility: PropTypes.string,\n};\n\n// Lifelong runs to the end of the series: once a dose is open-ended, so is every dose after\n// it. Re-applied whenever the dose list is rebuilt, because adding a dose after a lifelong one\n// — or loading a config saved before the cascade existed — would otherwise strand a bounded\n// dose behind an unbounded one, which the evaluator can only resolve as OUT_OF_SCOPE.\nconst applyLifelongCascade = (doseDetails, doseType) => {\n if (doseType !== \"FLEXIBLE\" || !Array.isArray(doseDetails))\n return doseDetails;\n\n const firstLifelongIdx = doseDetails.findIndex((dose) =>\n isLifelong(dose?.eligibleTo),\n );\n if (firstLifelongIdx === -1) return doseDetails;\n\n return doseDetails.map((dose, idx) =>\n idx > firstLifelongIdx ? { ...dose, eligibleTo: null } : dose,\n );\n};\n\n/**\n * Shown after a configuration save.\n *\n * A save no longer changes what anyone sees — it writes a draft, and the schedule members are\n * given still comes from the last published version. That is a big enough departure from what\n * \"Saved\" used to mean that it warrants stopping the admin rather than a toast they may not\n * read.\n */\nconst SavedNotLiveModal = ({ open, onClose }) => (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"xs\"\n fullWidth\n PaperProps={{ sx: { borderRadius: \"12px\", p: 1 } }}\n >\n <DialogTitle sx={{ fontWeight: 800, color: \"var(--color-text)\" }}>\n Configuration Saved Successfully\n </DialogTitle>\n <DialogContent>\n <Typography sx={{ color: \"var(--color-gray1)\", fontSize: \"14px\" }}>\n Your changes are saved, but not yet live. Our system is applying the\n updates—they will be published soon!\n </Typography>\n </DialogContent>\n <DialogActions sx={{ p: 2 }}>\n <Button\n variant=\"contained\"\n onClick={onClose}\n autoFocus\n sx={{ fontWeight: 700, borderRadius: \"8px\", bgcolor: \"#11b666\" }}\n >\n OKAY\n </Button>\n </DialogActions>\n </Dialog>\n);\n\nSavedNotLiveModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n};\n\n/**\n * Wraps the parts of the expanded panel that edit configuration, greying them out and taking\n * them out of reach for a viewer without the update right.\n *\n * There are several of these rather than one around the whole panel because a native disabled\n * fieldset disables every control inside it and nothing can opt a descendant back in — no\n * styling, no prop. The product selector has to sit outside a guard to stay usable, and it sits\n * in the middle of the left panel, so the guard is split around it.\n */\nconst EditGuard = ({ disabled, className, children }) => (\n <Box\n component=\"fieldset\"\n disabled={disabled}\n className={className}\n sx={{\n border: 0,\n p: 0,\n m: 0,\n minInlineSize: 0,\n ...(disabled ? { pointerEvents: \"none\", opacity: 0.7 } : {}),\n }}\n >\n {children}\n </Box>\n);\n\nEditGuard.propTypes = {\n disabled: PropTypes.bool,\n className: PropTypes.string,\n children: PropTypes.node,\n};\n\nconst ImmunizationSummary = () => {\n const dispatch = useDispatch();\n const {\n scheduledVaccines,\n vaccines,\n validationErrors,\n featureRights: rights,\n recipientMaster,\n baseDateMaster,\n } = useSelector((state) => state.immunization);\n const [expandedRowId, setExpandedRowId] = useState(null);\n const [showInactive, setShowInactive] = useState(false);\n const { isProductManagementEnabled } = useIsProductManagementEnabled();\n const [pmProducts, setPmProducts] = useState([]);\n // Which product's schedule the expanded panel is editing. Null means none picked yet, which\n // is how an expanded row starts; with product management off it stays null and refers to the\n // vaccine's single unmigrated entry.\n const [selectedProductByVaccine, setSelectedProductByVaccine] = useState({});\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isBaseDateModalOpen, setIsBaseDateModalOpen] = useState(false);\n const [isFiltersModalOpen, setIsFiltersModalOpen] = useState(false);\n const [isRecipientModalOpen, setIsRecipientModalOpen] = useState(false);\n const [editedVaccines, setEditedVaccines] = useState({});\n\n const hasFilterRight =\n rights?.[\"update.admin.immunizationConfiguration.filter\"];\n const hasRecipientRight =\n rights?.[\"update.admin.immunizationConfiguration.recipient\"];\n const canAddVaccine =\n rights?.[\"create.admin.immunizationConfiguration.vaccine\"];\n const canEditVaccine =\n rights?.[\"update.admin.immunizationConfiguration.vaccine\"];\n // Raised after any save that writes a draft, config or status alike — both leave the\n // published schedule untouched, so both need to say so.\n const [savedNotLiveOpen, setSavedNotLiveOpen] = useState(false);\n\n const [statusConfirmation, setStatusConfirmation] = useState({\n open: false,\n vaccineId: null,\n newStatus: null,\n });\n\n // Unsaved work the admin is about to walk away from. `scope` says how much is at stake:\n // \"product\" is one product's schedule, left behind by changing the product dropdown;\n // \"vaccine\" is everything on the panel, left behind by collapsing the row or opening another.\n const [discardConfirmation, setDiscardConfirmation] = useState({\n open: false,\n scope: null,\n vaccineId: null,\n nextProductId: null,\n nextVaccineId: null,\n });\n\n const [noFixedDosesConfirmation, setNoFixedDosesConfirmation] = useState({\n open: false,\n vaccineId: null,\n enabling: false,\n productCount: 0,\n });\n\n const [doseTypeConfirmation, setDoseTypeConfirmation] = useState({\n open: false,\n vaccineId: null,\n newDoseType: null,\n });\n\n useEffect(() => {\n if (!isProductManagementEnabled) return;\n\n async function loadProducts() {\n try {\n setPmProducts((await getProducts()) || []);\n } catch (err) {\n console.error(\n \"Failed to load products for vaccine schedule configuration:\",\n err,\n );\n }\n }\n void loadProducts();\n }, [isProductManagementEnabled]);\n\n // The panel grows downwards off the bottom of the viewport, so expanding a vaccine or\n // picking a product leaves the save button below the fold and the admin has to go hunting\n // for it. Bringing the footer into view once the panel has laid out keeps it in reach.\n const expansionFooterRef = useRef(null);\n const revealExpansionFooter = useCallback(() => {\n // Two frames: the first lets Collapse finish measuring, the second runs once the new\n // height is painted, so the footer is where we think it is before scrolling to it.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n expansionFooterRef.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"end\",\n });\n });\n });\n }, []);\n\n const toggleExpand = useCallback(\n (id) => {\n const isExpanding = expandedRowId !== id;\n setExpandedRowId((prev) => (prev === id ? null : id));\n if (isExpanding) {\n dispatch(clearValidationErrors(id));\n // An opening panel shows no schedule until a product is picked, so the dropdown\n // always starts empty rather than inheriting the last row's selection.\n setSelectedProductByVaccine((prev) => ({ ...prev, [id]: null }));\n }\n },\n [expandedRowId, dispatch],\n );\n\n const getInitialVaccineData = useCallback(\n (vaccineId) =>\n getInitialSummaryVaccineData({\n vaccineId,\n vaccines,\n scheduledVaccines,\n }),\n [vaccines, scheduledVaccines],\n );\n\n const updateEditedVaccine = useCallback(\n (vaccineId, updater, shouldClearErrors = true) => {\n setEditedVaccines((prev) => {\n const currentData = prev[vaccineId] || getInitialVaccineData(vaccineId);\n const nextData =\n typeof updater === \"function\" ? updater(currentData) : updater;\n\n return {\n ...prev,\n [vaccineId]: nextData,\n };\n });\n\n if (shouldClearErrors) {\n dispatch(clearValidationErrors(vaccineId));\n }\n },\n [dispatch, getInitialVaccineData],\n );\n\n const handleUpdateDoseState = useCallback(\n (vaccineId, newDoseCount, updatedDoseDetails, doseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const finalDoseDetails =\n newDoseCount === 0\n ? doseType === \"FIXED\"\n ? {}\n : []\n : applyLifelongCascade(updatedDoseDetails, doseType);\n\n return {\n ...currentData,\n doses: newDoseCount,\n doseDetails: finalDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(\n finalDoseDetails,\n doseType,\n newDoseCount,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseDetails = useCallback(\n (vaccineId, updatedDoseDetails, doseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const newDoseCount =\n doseType === \"FLEXIBLE\"\n ? updatedDoseDetails.length\n : currentData.doses;\n const finalDoseDetails = applyLifelongCascade(\n updatedDoseDetails,\n doseType,\n );\n\n return {\n ...currentData,\n doses: newDoseCount,\n doseDetails: finalDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(\n finalDoseDetails,\n doseType,\n newDoseCount,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateRegions = useCallback(\n (vaccineId, updatedRegions) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n regions: updatedRegions,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDependencies = useCallback(\n (vaccineId, updatedDependencies) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n dependencies: updatedDependencies,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateName = useCallback(\n (vaccineId, newName) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n name: newName,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateFilters = useCallback(\n (vaccineId, updatedFilters) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n filters: updatedFilters,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseType = useCallback(\n (vaccineId, newDoseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n if (currentData.doseType === newDoseType) return currentData;\n\n let updatedDoseDetails;\n\n if (newDoseType === \"FIXED\") {\n updatedDoseDetails = Array.isArray(currentData.doseDetails)\n ? currentData.doseDetails[0] || {\n id: `fixed_${Date.now()}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n interval: 0,\n }\n : currentData.doseDetails;\n } else {\n updatedDoseDetails = Array.isArray(currentData.doseDetails)\n ? [...currentData.doseDetails]\n : [\n currentData.doseDetails || {\n id: `new_flex_${Date.now()}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n overdueFrom: \"\",\n overdueTill: \"\",\n interval: 0,\n },\n ];\n\n const targetCount = currentData.doses || 1;\n if (updatedDoseDetails.length < targetCount) {\n for (let i = updatedDoseDetails.length; i < targetCount; i++) {\n updatedDoseDetails.push({\n id: `new_flex_${Date.now()}_${i}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n overdueFrom: \"\",\n overdueTill: \"\",\n interval: 0,\n });\n }\n }\n }\n\n const finalDoseDetails = applyLifelongCascade(\n updatedDoseDetails,\n newDoseType,\n );\n\n return {\n ...currentData,\n doseType: newDoseType,\n doseDetails: finalDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(\n finalDoseDetails,\n newDoseType,\n currentData.doses,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseTypeRequested = useCallback(\n (vaccineId, newDoseType) => {\n const current =\n editedVaccines[vaccineId] || getInitialVaccineData(vaccineId);\n if (current.doseType === newDoseType) return;\n\n setDoseTypeConfirmation({\n open: true,\n vaccineId,\n newDoseType,\n });\n },\n [editedVaccines, getInitialVaccineData],\n );\n\n const confirmDoseTypeChange = useCallback(() => {\n const { vaccineId, newDoseType } = doseTypeConfirmation;\n handleUpdateDoseType(vaccineId, newDoseType);\n setDoseTypeConfirmation({\n open: false,\n vaccineId: null,\n newDoseType: null,\n });\n }, [doseTypeConfirmation, handleUpdateDoseType]);\n\n /**\n * Switches the whole vaccine between a counted schedule and a recurring one.\n *\n * Vaccine-wide, not per product: whether a vaccine has a fixed number of doses is a property\n * of the vaccine itself. One product supplying it on a counted schedule while another\n * repeated indefinitely is not a configuration anyone could act on, because the dose ledger\n * is shared across products.\n *\n * Every product's schedule is dropped — the change alters what a schedule is rather than one\n * of its values, so nothing carries over, and a blank left behind would be saved as though\n * it had been configured. Each product goes back to unconfigured and is picked and saved in\n * its own turn, the same way it was set up to begin with.\n */\n const applyNoFixedDoses = useCallback(\n (vaccineId, enabling) => {\n const doseType = enabling ? DOSE_TYPE_RECURRING : \"FIXED\";\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...clearProductSchedules(currentData),\n doseType,\n doses: 0,\n // One blank row for a recurring schedule: its single window and interval. Without it\n // the dose table has nothing to draw and asks for a dose count that will never come.\n doseDetails: enabling\n ? [{ eligibleFrom: \"\", eligibleTo: \"\", interval: 0 }]\n : {},\n // A repeating tail belongs to a FLEXIBLE schedule; it means nothing on either side of\n // this switch.\n recurringBooster: null,\n }));\n // The panel edits one product at a time and every entry has just been dropped, so the\n // current selection would otherwise point at a schedule that no longer exists.\n setSelectedProductByVaccine((current) => ({\n ...current,\n [vaccineId]: null,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateNoFixedDoses = useCallback(\n (vaccineId, enabling) => {\n const draft =\n editedVaccines[vaccineId] || getInitialVaccineData(vaccineId) || {};\n // Only the entries the admin can actually see. A vaccine also carries an entry with\n // productId null — the fallback used when product management is off, holding whatever the\n // backfill copied out of the old scalar columns. With product management on it is ignored\n // everywhere else on this screen, so counting it here reported one more schedule than the\n // admin has ever configured.\n const configured = (draft.productSchedules || []).filter((schedule) => {\n const inPlay = isProductManagementEnabled\n ? Boolean(schedule.productId)\n : (schedule.productId ?? null) === null;\n return (\n inPlay &&\n ((schedule.doses || 0) > 0 || schedule.doseType === DOSE_TYPE_RECURRING)\n );\n }).length;\n\n // Nothing configured yet means nothing to lose, so the dialog would only be noise.\n if (configured === 0) {\n applyNoFixedDoses(vaccineId, enabling);\n return;\n }\n setNoFixedDosesConfirmation({\n open: true,\n vaccineId,\n enabling,\n productCount: configured,\n });\n },\n [\n applyNoFixedDoses,\n editedVaccines,\n getInitialVaccineData,\n isProductManagementEnabled,\n ],\n );\n\n const confirmNoFixedDoses = useCallback(() => {\n applyNoFixedDoses(\n noFixedDosesConfirmation.vaccineId,\n noFixedDosesConfirmation.enabling,\n );\n setNoFixedDosesConfirmation({\n open: false,\n vaccineId: null,\n enabling: false,\n productCount: 0,\n });\n }, [applyNoFixedDoses, noFixedDosesConfirmation]);\n\n const handleUpdateScheduleType = useCallback(\n (vaccineId, isNonRoutine) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n scheduleType: isNonRoutine\n ? SCHEDULE_TYPE_NON_ROUTINE\n : SCHEDULE_TYPE_ROUTINE,\n // No fixed doses is only offered on a non-routine vaccine, so turning that off has to\n // take it with it — otherwise the vaccine keeps a dose type whose control is no longer\n // on screen. Every product's schedule goes with it for the same reason it does when the\n // checkbox itself is unticked: a recurring schedule is not a counted one with a missing\n // number.\n // Only the schedules, not the whole draft: clearProductSchedules returns a copy of\n // everything, so spreading it here put the previous scheduleType back over the line\n // above and the checkbox took two clicks to clear.\n //\n // The checkbox is disabled while no-fixed-doses is on, so this branch should not be\n // reachable from the screen. It stays correct anyway — a disabled control is a UI\n // promise, and the state it guards should not depend on one.\n ...(isNonRoutine || currentData.doseType !== DOSE_TYPE_RECURRING\n ? {}\n : {\n productSchedules: [],\n doseType: \"FIXED\",\n doses: 0,\n doseDetails: {},\n recurringBooster: null,\n }),\n }));\n\n },\n [updateEditedVaccine],\n );\n\n /**\n * Re-reads the vaccine master and puts the server's version back into the store.\n *\n * Called after a save so the Draft chip appears straight away: the chip comes from\n * has_unpublished_changes, which only the database knows, so nothing locally assembled can\n * produce it.\n *\n * The freshly loaded row is also pushed into scheduledVaccines, because\n * getInitialSummaryVaccineData prefers a scheduled entry over the master row and would keep\n * shadowing the reload with the locally built object otherwise — the reload would run and\n * change nothing on screen.\n *\n * @returns the reloaded vaccine, or null when the reload could not be done\n */\n const reloadVaccines = useCallback(\n async (vaccineId) => {\n try {\n const response = await ImmunizationUtil.getVaccines();\n const rows = response?.data?.result;\n if (!Array.isArray(rows)) return null;\n\n const mapped = rows.map(ImmunizationUtil.mapImmunizationVaccineConfig);\n dispatch(setVaccines(mapped));\n\n const reloaded = mapped.find((vaccine) => vaccine.id === vaccineId) || null;\n if (reloaded) {\n dispatch(updateScheduledVaccine(reloaded));\n }\n return reloaded;\n } catch (err) {\n // The save itself succeeded; a failed reload only costs the chip until the next load.\n console.warn(\"Could not reload the vaccine list after save:\", err);\n return null;\n }\n },\n [dispatch],\n );\n\n /**\n * Posts a change summary to the reviewers configured in IMMUNIZATION_CONFIG_NOTIFY_EMAILS.\n *\n * Fire-and-forget on purpose: the save it describes has already committed, so a mail server\n * that is down — or a notification list that is deliberately empty — must never surface to\n * the admin as a failed save.\n */\n const sendConfigChangeNotification = useCallback((vaccineName, changes) => {\n if (!changes || !changes.length) return;\n\n ImmunizationUtil.notifyConfigChange({\n vaccine_name: vaccineName,\n changes,\n }).catch((err) => {\n console.warn(\"Config change notification not sent:\", err);\n });\n }, []);\n\n /**\n * Works out what changed between the loaded configuration and the one just saved, and sends\n * it. Reads pmProducts rather than the productsById map, which is declared further down.\n */\n const notifyConfigChange = useCallback(\n (previous, saved) => {\n try {\n const productNameById = Object.fromEntries(\n (pmProducts || []).map((product) => [String(product.id), product.name]),\n );\n sendConfigChangeNotification(\n saved?.name,\n buildConfigChangeSummary(previous, saved, productNameById),\n );\n } catch (err) {\n console.warn(\"Could not build config change summary:\", err);\n }\n },\n [pmProducts, sendConfigChangeNotification],\n );\n\n const confirmUpdateStatus = useCallback(async () => {\n const { vaccineId, newStatus } = statusConfirmation;\n try {\n await ImmunizationUtil.updateVaccineStatus({\n parameters: {\n vaccineId,\n status: newStatus,\n },\n });\n\n dispatch(setVaccineStatus({ vaccineId, status: newStatus }));\n\n setEditedVaccines((prev) => {\n const currentData = prev[vaccineId] || getInitialVaccineData(vaccineId);\n return {\n ...prev,\n [vaccineId]: {\n ...currentData,\n isActive: newStatus,\n },\n };\n });\n\n // Deactivating a vaccine removes it from every member's timeline once published, so it\n // is worth a notification in its own right — the schedule itself has not been touched,\n // which is why this does not go through buildConfigChangeSummary.\n sendConfigChangeNotification(\n vaccines.find((v) => v.id === vaccineId)?.name,\n [`Status: ${newStatus ? \"Inactive\" : \"Active\"} → ${newStatus ? \"Active\" : \"Inactive\"}`],\n );\n\n // A status toggle drafts too, so it needs the same reload to show its Draft chip.\n await reloadVaccines(vaccineId);\n\n setSavedNotLiveOpen(true);\n } catch (error) {\n console.error(\"Failed to update vaccine status:\", error);\n showToast({\n message: error?.message || \"Failed to update vaccine status\",\n type: \"error\",\n });\n } finally {\n setStatusConfirmation({ open: false, vaccineId: null, newStatus: null });\n }\n }, [\n statusConfirmation,\n getInitialVaccineData,\n sendConfigChangeNotification,\n reloadVaccines,\n vaccines,\n ]);\n\n const handleUpdateStatus = useCallback((vaccineId, newStatus) => {\n setStatusConfirmation({\n open: true,\n vaccineId,\n newStatus,\n });\n }, []);\n\n const handleUpdateBaseDateCode = useCallback(\n (vaccineId, newBaseDateCode) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n baseDateCode: newBaseDateCode,\n }));\n },\n [updateEditedVaccine],\n );\n\n const getAllowedBaseDateCodes = useCallback(\n (recipientType) =>\n getAllowedBaseDateCodesForRecipient(recipientMaster, recipientType),\n [recipientMaster],\n );\n\n const getAvailableBaseDateOptions = useCallback(\n (recipientType) => {\n if (!recipientType) return [];\n\n const allowedCodeSet = new Set(\n getAllowedBaseDateCodes(recipientType)\n .map((code) =>\n String(code || \"\")\n .trim()\n .toLowerCase(),\n )\n .filter(Boolean),\n );\n\n return baseDateMaster.filter(\n (baseDate) =>\n baseDate.is_active &&\n allowedCodeSet.has(\n String(baseDate.code || \"\")\n .trim()\n .toLowerCase(),\n ),\n );\n },\n [baseDateMaster, getAllowedBaseDateCodes],\n );\n\n const handleUpdateRecipientType = useCallback(\n (vaccineId, newRecipientType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const allowedBaseDates = getAllowedBaseDateCodes(newRecipientType);\n const currentBaseDateCode = currentData.baseDateCode;\n const isCurrentBaseDateAllowed =\n !currentBaseDateCode ||\n allowedBaseDates.includes(currentBaseDateCode);\n\n return {\n ...currentData,\n recipientType: newRecipientType,\n baseDateCode: isCurrentBaseDateAllowed ? currentBaseDateCode : null,\n };\n });\n },\n [getAllowedBaseDateCodes, updateEditedVaccine],\n );\n\n const handleUpdateCodeSets = useCallback(\n (vaccineId, updatedCodeSets) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n codeSets: updatedCodeSets,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDurationUnits = useCallback(\n (vaccineId, updatedUnits) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const prevUnits = currentData.durationUnits || {};\n const rawDoseDetails = currentData.doseDetails;\n\n // doseDetails can be a plain object (FIXED type) or an array (FLEXIBLE type)\n const isObjectForm =\n rawDoseDetails &&\n !Array.isArray(rawDoseDetails) &&\n typeof rawDoseDetails === \"object\";\n\n const detailsArray = isObjectForm\n ? [rawDoseDetails]\n : Array.isArray(rawDoseDetails)\n ? rawDoseDetails\n : [];\n\n const remapDose = (dose) => {\n let eligibleFrom = dose.eligibleFrom;\n let eligibleTo = dose.eligibleTo;\n\n if (updatedUnits.eligibleFrom !== prevUnits.eligibleFrom) {\n const isBirth =\n typeof dose.eligibleFrom === \"string\" &&\n dose.eligibleFrom.toLowerCase() === \"birth\";\n const qty = isBirth ? 0 : Number.parseInt(dose.eligibleFrom) || 0;\n eligibleFrom = `${qty} ${updatedUnits.eligibleFrom}`;\n }\n // A lifelong end has no quantity to re-express, so a unit switch leaves it alone.\n if (\n updatedUnits.eligibleTo !== prevUnits.eligibleTo &&\n !isLifelong(dose.eligibleTo)\n ) {\n const isBirth =\n typeof dose.eligibleTo === \"string\" &&\n dose.eligibleTo.toLowerCase() === \"birth\";\n const qty = isBirth ? 0 : Number.parseInt(dose.eligibleTo) || 0;\n eligibleTo = `${qty} ${updatedUnits.eligibleTo}`;\n }\n return { ...dose, eligibleFrom, eligibleTo };\n };\n\n const mappedArray = detailsArray.map(remapDose);\n\n const newDoseDetails = isObjectForm ? mappedArray[0] : mappedArray;\n\n return {\n ...currentData,\n durationUnits: updatedUnits,\n doseDetails: newDoseDetails,\n };\n });\n },\n [updateEditedVaccine],\n );\n\n /**\n * Switches the panel to another product.\n *\n * Everything the panel edits lives on the draft's top-level fields, so the product in hand\n * is folded back into the array before the next one is loaded — otherwise switching away\n * would discard the edits made to the product being left.\n */\n const selectProduct = useCallback(\n (vaccineId, productId) => {\n // Nothing is folded back into productSchedules on the way out. The array is written by a\n // save and by removing a schedule, never by moving around the panel, which is what keeps\n // a product the admin only looked at from being stored as a configured one.\n updateEditedVaccine(\n vaccineId,\n (currentData) =>\n productId === null\n ? currentData\n : loadScheduleIntoDraft(currentData, productId),\n false,\n );\n\n setSelectedProductByVaccine((prev) => ({\n ...prev,\n [vaccineId]: productId,\n }));\n dispatch(clearValidationErrors(vaccineId));\n // Choosing a product reveals the dose and schedule editors, growing the panel again.\n revealExpansionFooter();\n },\n [dispatch, updateEditedVaccine, revealExpansionFooter],\n );\n\n /**\n * Changing the product dropdown. Loading the next product overwrites the panel, so anything\n * unsaved for the one being left is gone — worth asking about, but only when there is\n * something to lose.\n */\n const handleSelectProduct = useCallback(\n (vaccineId, productId) => {\n const draft = editedVaccines[vaccineId];\n const previousProductId = selectedProductByVaccine[vaccineId] ?? null;\n const stored =\n scheduledVaccines.find((sv) => sv.id === vaccineId) ||\n vaccines.find((v) => v.id === vaccineId) ||\n null;\n\n if (\n draft &&\n previousProductId !== null &&\n previousProductId !== productId &&\n isProductScheduleDirty(draft, stored, previousProductId)\n ) {\n setDiscardConfirmation({\n open: true,\n scope: \"product\",\n vaccineId,\n nextProductId: productId,\n nextVaccineId: null,\n });\n return;\n }\n\n selectProduct(vaccineId, productId);\n },\n [\n editedVaccines,\n scheduledVaccines,\n selectProduct,\n selectedProductByVaccine,\n vaccines,\n ],\n );\n\n const handleRemoveProductSchedule = useCallback(\n (vaccineId, productId) => {\n updateEditedVaccine(vaccineId, (currentData) =>\n removeProductSchedule(currentData, productId),\n );\n setSelectedProductByVaccine((prev) => ({ ...prev, [vaccineId]: null }));\n },\n [updateEditedVaccine],\n );\n\n const discardVaccineEdits = useCallback(\n (vaccineId) => {\n setEditedVaccines((prev) => {\n const updated = { ...prev };\n delete updated[vaccineId];\n return updated;\n });\n setSelectedProductByVaccine((prev) => ({ ...prev, [vaccineId]: null }));\n dispatch(clearValidationErrors(vaccineId));\n },\n [dispatch],\n );\n\n // The button is the explicit \"throw it away\" action, so it does not ask again.\n const handleDiscard = (vaccineId) => {\n discardVaccineEdits(vaccineId);\n toggleExpand(vaccineId);\n };\n\n\n /**\n * The modal has already created the vaccine by the time this runs, so the local add is only\n * there to put something on screen immediately. It cannot carry has_unpublished_changes —\n * that comes from the database — so without the reload the new vaccine sits there with no\n * Draft chip until someone reloads the page, looking published when it is not.\n *\n * Same reload the save path uses, and awaited for the same reason: the server's row replaces\n * the locally assembled one.\n */\n const handleAddCustomVaccine = async (data) => {\n dispatch(addCustomVaccine({ ...data, isActive: true }));\n setIsModalOpen(false);\n await reloadVaccines(data?.id ?? null);\n };\n\n /**\n * The configuration a save would write. Shared with the Save button so the two can never\n * disagree about what is on screen.\n */\n const resolveDraftForSave = useCallback(\n (vaccineId) =>\n editedVaccines[vaccineId] ||\n scheduledVaccines.find((sv) => sv.id === vaccineId) ||\n getInitialVaccineData(vaccineId),\n [editedVaccines, scheduledVaccines, getInitialVaccineData],\n );\n\n /**\n * Whether a save right now would rebuild a product's schedule from the panel.\n *\n * With product management off the panel *is* the schedule, so it always does. With it on it\n * does only when a product is open and something about it has changed — a product merely\n * looked at must leave no trace, or an empty schedule follows the next save into the\n * database. Everything downstream keys off this: what the payload carries, what gets\n * validated, and whether the Save button believes there is anything to write.\n */\n const shouldFlushSchedule = useCallback(\n (vaccineId, draft) => {\n if (!isProductManagementEnabled) return true;\n\n const productId = selectedProductByVaccine[vaccineId] ?? null;\n if (productId === null) return false;\n\n const stored =\n scheduledVaccines.find((sv) => sv.id === vaccineId) ||\n vaccines.find((v) => v.id === vaccineId) ||\n null;\n return isProductScheduleDirty(draft, stored, productId);\n },\n [\n isProductManagementEnabled,\n scheduledVaccines,\n selectedProductByVaccine,\n vaccines,\n ],\n );\n\n /**\n * What saving this vaccine right now would actually change, as the same one-line summaries\n * the change notification sends. Empty means the save would store a draft identical to the\n * configuration already live.\n *\n * That is worth stopping. A draft is not inert: publish updates every row that has one and\n * raises IMMUNIZATION_SCHEDULE_REFRESH_PENDING, so the nightly pass rebuilds every member's\n * schedule — for a change nobody made. It also leaves a changelog row whose before and after\n * are identical.\n *\n * buildConfigChangeSummary is reused rather than compared against separately: the button and\n * the notification would otherwise be two definitions of \"changed\", free to drift apart. The\n * product names it takes only decorate the text, so they are left out here.\n */\n const getPendingChanges = useCallback(\n (vaccineId) => {\n const draft = resolveDraftForSave(vaccineId);\n if (!draft) return [];\n\n const selectedProductId = selectedProductByVaccine[vaccineId] ?? null;\n const previous =\n scheduledVaccines.find((sv) => sv.id === vaccineId) ||\n vaccines.find((v) => v.id === vaccineId) ||\n null;\n\n try {\n return buildConfigChangeSummary(previous, {\n ...draft,\n productSchedules: buildScheduleArray(\n draft,\n selectedProductId,\n shouldFlushSchedule(vaccineId, draft),\n ),\n });\n } catch (err) {\n // A comparison that could not be made is not evidence that nothing changed, so the\n // save stays available and the server decides.\n console.warn(\"Could not compare vaccine configuration:\", err);\n return [\"Configuration updated\"];\n }\n },\n [\n resolveDraftForSave,\n scheduledVaccines,\n selectedProductByVaccine,\n shouldFlushSchedule,\n vaccines,\n ],\n );\n\n /**\n * Leaving the open row — collapsing it, or opening a different one. Both drop whatever is\n * unsaved, so both ask first when there is anything to drop. Pass the row to open next, or\n * null to just collapse.\n */\n const leaveExpandedRow = useCallback(\n (vaccineId, nextVaccineId) => {\n if (getPendingChanges(vaccineId).length > 0) {\n setDiscardConfirmation({\n open: true,\n scope: \"vaccine\",\n vaccineId,\n nextProductId: null,\n nextVaccineId,\n });\n return;\n }\n discardVaccineEdits(vaccineId);\n toggleExpand(nextVaccineId ?? vaccineId);\n },\n [discardVaccineEdits, getPendingChanges, toggleExpand],\n );\n\n const closeDiscardConfirmation = useCallback(\n () =>\n setDiscardConfirmation({\n open: false,\n scope: null,\n vaccineId: null,\n nextProductId: null,\n nextVaccineId: null,\n }),\n [],\n );\n\n /**\n * Opening a row. Only one is ever expanded, so opening one closes another — which puts that\n * other row's unsaved work at stake and sends it through the same question.\n */\n const openRow = useCallback(\n (vaccineId) => {\n if (expandedRowId !== null && expandedRowId !== vaccineId) {\n leaveExpandedRow(expandedRowId, vaccineId);\n return;\n }\n toggleExpand(vaccineId);\n },\n [expandedRowId, leaveExpandedRow, toggleExpand],\n );\n\n const confirmDiscard = useCallback(() => {\n const { scope, vaccineId, nextProductId, nextVaccineId } =\n discardConfirmation;\n\n if (scope === \"product\") {\n // Nothing to undo: the edits only ever lived in the panel's own fields, and loading the\n // next product overwrites them.\n selectProduct(vaccineId, nextProductId);\n } else if (scope === \"vaccine\") {\n discardVaccineEdits(vaccineId);\n toggleExpand(nextVaccineId ?? vaccineId);\n }\n\n closeDiscardConfirmation();\n }, [\n closeDiscardConfirmation,\n discardConfirmation,\n discardVaccineEdits,\n selectProduct,\n toggleExpand,\n ]);\n\n const handleSaveVaccineDetails = async (vaccineId) => {\n const draft = resolveDraftForSave(vaccineId);\n\n if (draft) {\n const selectedProductId = selectedProductByVaccine[vaccineId] ?? null;\n const flushSchedule = shouldFlushSchedule(vaccineId, draft);\n\n // Only the product on screen is validated, and only when this save is rebuilding its\n // schedule. Other products' entries are carried through untouched, so a problem in one\n // the admin never opened cannot block this save — and a save that touches no schedule at\n // all, a rename or a removal, is not held up by dose fields nobody edited.\n const errors = validateVaccineForm(draft, flushSchedule);\n if (errors) {\n dispatch(setValidationErrors({ vaccineId, errors }));\n showToast({\n message: \"Please fix the errors before saving.\",\n type: \"error\",\n });\n return;\n }\n\n const payload = prepareVaccinePayload(\n draft,\n selectedProductId,\n flushSchedule,\n );\n const savedDraft = {\n ...draft,\n productSchedules: buildScheduleArray(\n draft,\n selectedProductId,\n flushSchedule,\n ),\n };\n\n // Captured before the save, while both sides of the edit are still on hand — the store\n // is updated below and the previous values are gone after that.\n const previous =\n scheduledVaccines.find((sv) => sv.id === vaccineId) ||\n vaccines.find((v) => v.id === vaccineId) ||\n null;\n\n try {\n await ImmunizationUtil.updateImmunization(payload);\n dispatch(updateScheduledVaccine(savedDraft));\n dispatch(clearValidationErrors(vaccineId));\n\n notifyConfigChange(previous, savedDraft);\n\n setSavedNotLiveOpen(true);\n\n setEditedVaccines((prev) => {\n const updated = { ...prev };\n delete updated[vaccineId];\n return updated;\n });\n\n // Last, and only after the local state is settled: the reload overwrites the optimistic\n // entry above with the server's, which is the only version carrying the draft flag.\n await reloadVaccines(vaccineId);\n } catch (err) {\n console.error(\"Failed to update immunization:\", err);\n showToast({\n message: err?.message || \"Failed to update vaccine details\",\n type: \"error\",\n });\n }\n }\n toggleExpand(vaccineId);\n };\n\n const displayVaccines = useMemo(() => {\n return buildDisplayVaccines({\n vaccines,\n editedVaccines,\n scheduledVaccines,\n showInactive,\n });\n }, [vaccines, editedVaccines, scheduledVaccines, showInactive]);\n\n const productsById = useMemo(\n () =>\n Object.fromEntries(\n (pmProducts || []).map((product) => [product.id, product]),\n ),\n [pmProducts],\n );\n\n return (\n <Box className=\"immunization-summary\">\n <Box className=\"header-section\">\n <Box className=\"title-group\">\n <Typography className=\"page-title\">\n Immunization Configuration\n </Typography>\n <Typography className=\"page-subtitle\">\n Configure the specific details for your selected vaccines.\n </Typography>\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5 }}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.2,\n mr: 1,\n }}\n >\n <CustomSwitch\n checked={showInactive}\n onChange={(e) => setShowInactive(e.target.checked)}\n />\n <Typography\n sx={{\n fontSize: \"12px\",\n fontWeight: 700,\n color: \"var(--color-gray1)\",\n cursor: \"pointer\",\n userSelect: \"none\",\n }}\n onClick={() => setShowInactive(!showInactive)}\n >\n Show Inactives Also\n </Typography>\n </Box>\n {hasRecipientRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faUser} />}\n onClick={() => setIsRecipientModalOpen(true)}\n sx={{\n backgroundColor: \"var(--color-tableHeader)\",\n \"&:hover\": { backgroundColor: \"var(--color-tableHeader)\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Recipient\n </Button>\n )}\n {hasRecipientRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faCalendarDay} />}\n onClick={() => setIsBaseDateModalOpen(true)}\n sx={{\n backgroundColor: \"var(--color-tableHeader)\",\n \"&:hover\": { backgroundColor: \"var(--color-tableHeader)\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Base Date\n </Button>\n )}\n {hasFilterRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faFilter} />}\n onClick={() => setIsFiltersModalOpen(true)}\n sx={{\n backgroundColor: \"var(--color-tableHeader)\",\n \"&:hover\": { backgroundColor: \"var(--color-tableHeader)\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Filters\n </Button>\n )}\n {canAddVaccine && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faPlus} />}\n onClick={() => setIsModalOpen(true)}\n sx={{\n backgroundColor: \"var(--color-tableHeader)\",\n \"&:hover\": { backgroundColor: \"var(--color-tableHeader)\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(17, 182, 102, 0.2)\",\n }}\n >\n Add Vaccines\n </Button>\n )}\n </Box>\n </Box>\n\n <TableContainer component={Paper} className=\"table-container\">\n <Table stickyHeader>\n <TableHead>\n <TableRow>\n <TableCell className=\"header-cell\">SR. NO.</TableCell>\n <TableCell className=\"header-cell\">VACCINE NAME</TableCell>\n <TableCell className=\"header-cell\">SCHEDULE</TableCell>\n <TableCell className=\"header-cell\">STATUS</TableCell>\n <TableCell className=\"header-cell\" align=\"right\"></TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {displayVaccines.map((vaccine, index) => {\n const isExpanded = expandedRowId === vaccine.id;\n const linkedProducts = isProductManagementEnabled\n ? getLinkedProducts(pmProducts, vaccine.vaccine_code)\n : [];\n const selectedProductId =\n selectedProductByVaccine[vaccine.id] ?? null;\n // With product management on the panel edits one product at a time, so the dose\n // and schedule controls stay hidden until the admin says which one.\n const showScheduleEditors =\n !isProductManagementEnabled || selectedProductId !== null;\n // Only for the row on screen — every other row's footer is collapsed, and this\n // walks the whole configuration to work out its answer.\n const hasPendingChanges =\n isExpanded && getPendingChanges(vaccine.id).length > 0;\n return (\n <React.Fragment key={vaccine.id}>\n <TableRow\n className={`table-row ${isExpanded ? \"expanded-row\" : \"\"}`}\n onClick={() => !isExpanded && openRow(vaccine.id)}\n sx={{ cursor: isExpanded ? \"default\" : \"pointer\" }}\n >\n <TableCell>{index + 1}</TableCell>\n <TableCell>\n {isExpanded ? (\n <TextField\n variant=\"outlined\"\n size=\"small\"\n value={vaccine.name}\n disabled={!canEditVaccine}\n error={!!validationErrors[vaccine.id]?.name}\n helperText={validationErrors[vaccine.id]?.name}\n onChange={(e) =>\n handleUpdateName(vaccine.id, e.target.value)\n }\n className=\"vaccine-name-input\"\n fullWidth\n />\n ) : (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n flexWrap: \"wrap\",\n }}\n >\n <span className=\"vaccine-name\">{vaccine.name}</span>\n {/* Everything shown for this row is the unpublished draft, so say so\n — otherwise the screen looks like the live schedule and there is\n no way to tell a saved change from a published one. */}\n {vaccine.hasUnpublishedChanges && (\n <Tooltip\n title=\"Saved but not published. Members still see the previously published schedule.\"\n arrow\n placement=\"top\"\n >\n <Chip\n label=\"Draft\"\n size=\"small\"\n sx={{\n backgroundColor: \"rgba(237, 108, 2, 0.12)\",\n color: \"#ed6c02\",\n fontWeight: 700,\n fontSize: \"10px\",\n height: \"18px\",\n }}\n />\n </Tooltip>\n )}\n {vaccine.scheduleType ===\n SCHEDULE_TYPE_NON_ROUTINE && (\n <Chip\n label=\"Non-Routine\"\n size=\"small\"\n sx={{\n backgroundColor: \"rgba(2, 136, 209, 0.12)\",\n color: \"#0277bd\",\n fontWeight: 700,\n fontSize: \"10px\",\n height: \"20px\",\n border: \"1px solid rgba(2, 136, 209, 0.3)\",\n \"& .MuiChip-label\": { px: \"8px\" },\n }}\n />\n )}\n {Array.isArray(vaccine.doseDetails) &&\n vaccine.doseDetails.some((d) => d.isBooster) && (\n <Chip\n label=\"Includes Booster\"\n size=\"small\"\n sx={{\n backgroundColor: \"rgba(103, 58, 183, 0.12)\",\n color: \"#7c3aed\",\n fontWeight: 700,\n fontSize: \"10px\",\n height: \"20px\",\n border: \"1px solid rgba(103, 58, 183, 0.3)\",\n \"& .MuiChip-label\": { px: \"8px\" },\n }}\n />\n )}\n </Box>\n )}\n </TableCell>\n {/* Dose count and eligibility are properties of a schedule, and a\n vaccine can have one per product, so they read as a single column\n rather than two. The dose selector lives in the panel beside the\n schedule it belongs to, in both flag states. */}\n <TableCell>\n {!isExpanded && (\n <ScheduleSummaryCell\n vaccine={vaccine}\n productsById={productsById}\n isProductManagementEnabled={\n isProductManagementEnabled\n }\n />\n )}\n </TableCell>\n <TableCell onClick={(e) => e.stopPropagation()}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n }}\n >\n <CustomSwitch\n checked={!!vaccine.isActive}\n disabled={!canEditVaccine}\n onChange={(e) => {\n e.stopPropagation();\n handleUpdateStatus(vaccine.id, e.target.checked);\n }}\n />\n </Box>\n </TableCell>\n <TableCell align=\"right\">\n {!isExpanded ? (\n <IconButton\n className=\"action-btn edit\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n openRow(vaccine.id);\n }}\n >\n <FontAwesomeIcon icon={faChevronDown} size=\"xs\" />\n </IconButton>\n ) : (\n <IconButton\n className=\"action-btn collapse-btn\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n leaveExpandedRow(vaccine.id, null);\n }}\n >\n <FontAwesomeIcon icon={faChevronUp} />\n </IconButton>\n )}\n </TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell\n colSpan={5}\n className=\"expanded-content-cell\"\n sx={{ padding: 0 }}\n >\n {/* onEntered rather than the click handler: with unmountOnExit the\n footer does not exist yet when the row is clicked, and the panel is\n still animating its height, so anything scheduled earlier either\n finds no ref or scrolls to a position that is about to change. */}\n <Collapse\n in={isExpanded}\n timeout=\"auto\"\n unmountOnExit\n onEntered={revealExpansionFooter}\n >\n <Box>\n <Box className=\"expansion-container\">\n <Box className=\"left-panel\">\n <EditGuard disabled={!canEditVaccine}>\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"var(--color-text)\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n SCHEDULE TYPE\n </Typography>\n {/* Locked while no-fixed-doses is on. Clearing this would have\n to clear that too, which reads as one click undoing a\n setting the admin did not touch; leaving it visible but\n disabled says the two are tied without doing anything\n behind their back. The span carries the tooltip, since a\n disabled control fires no pointer events of its own. */}\n <Tooltip\n title={\n vaccine.doseType === DOSE_TYPE_RECURRING\n ? \"Turn off No fixed doses first — a repeating schedule is always non-routine.\"\n : \"\"\n }\n arrow\n placement=\"top\"\n >\n <span>\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n disabled={\n vaccine.doseType ===\n DOSE_TYPE_RECURRING\n }\n checked={\n vaccine.scheduleType ===\n SCHEDULE_TYPE_NON_ROUTINE\n }\n onChange={(e) =>\n handleUpdateScheduleType(\n vaccine.id,\n e.target.checked,\n )\n }\n />\n }\n label={\n <Typography\n sx={{\n fontSize: \"12px\",\n fontWeight: 700,\n color: \"var(--color-gray1)\",\n }}\n >\n Non-routine vaccine\n </Typography>\n }\n sx={{ ml: 0 }}\n />\n </span>\n </Tooltip>\n {/* Only for non-routine. A vaccine everyone is expected to\n complete cannot have an open-ended number of doses — that\n is what makes this an optional schedule rather than a very\n long one. It belongs to the vaccine, not to a product:\n products share one dose ledger, so they cannot disagree\n about whether the doses are counted. */}\n {vaccine.scheduleType ===\n SCHEDULE_TYPE_NON_ROUTINE && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n checked={\n vaccine.doseType ===\n DOSE_TYPE_RECURRING\n }\n onChange={(e) =>\n handleUpdateNoFixedDoses(\n vaccine.id,\n e.target.checked,\n )\n }\n />\n }\n label={\n <Typography\n sx={{\n fontSize: \"12px\",\n fontWeight: 700,\n color: \"var(--color-gray1)\",\n }}\n >\n No fixed doses\n </Typography>\n }\n sx={{ ml: 0 }}\n />\n )}\n {validationErrors[vaccine.id]?.doseType && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ display: \"block\" }}\n >\n {validationErrors[vaccine.id].doseType}\n </Typography>\n )}\n </Box>\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"var(--color-text)\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n RECIPIENT TYPE\n </Typography>\n <Autocomplete\n options={recipientMaster}\n getOptionLabel={(option) =>\n option?.name || \"\"\n }\n isOptionEqualToValue={(option, value) =>\n option.code === value.code\n }\n value={\n recipientMaster.find(\n (recipient) =>\n recipient.code ===\n vaccine.recipientType,\n ) || null\n }\n onChange={(_, newValue) =>\n handleUpdateRecipientType(\n vaccine.id,\n newValue?.code || \"\",\n )\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder=\"Select Recipient Type\"\n error={\n !!validationErrors[vaccine.id]\n ?.recipientType\n }\n helperText={\n validationErrors[vaccine.id]\n ?.recipientType\n }\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment\n position=\"start\"\n sx={{ pl: 1 }}\n >\n <FontAwesomeIcon\n icon={faUser}\n style={{\n color: \"var(--color-gray1)\",\n fontSize: \"14px\",\n }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n },\n }}\n />\n )}\n />\n </Box>\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"var(--color-text)\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n BASE DATE\n </Typography>\n <Autocomplete\n options={getAvailableBaseDateOptions(\n vaccine.recipientType,\n )}\n disabled={!vaccine.recipientType}\n getOptionLabel={(option) =>\n option?.name ||\n option?.label ||\n option?.base_name ||\n option?.code ||\n option?.id ||\n \"\"\n }\n isOptionEqualToValue={(option, value) =>\n String(option?.code || \"\")\n .trim()\n .toLowerCase() ===\n String(value?.code || \"\")\n .trim()\n .toLowerCase()\n }\n value={\n getAvailableBaseDateOptions(\n vaccine.recipientType,\n ).find(\n (baseDate) =>\n String(baseDate.code || \"\")\n .trim()\n .toLowerCase() ===\n String(vaccine.baseDateCode || \"\")\n .trim()\n .toLowerCase(),\n ) || null\n }\n onChange={(_, newValue) =>\n handleUpdateBaseDateCode(\n vaccine.id,\n newValue?.code ?? null,\n )\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder={\n vaccine.recipientType\n ? \"Select Base Date\"\n : \"Select Recipient Type First\"\n }\n error={\n !!validationErrors[vaccine.id]\n ?.baseDateCode\n }\n helperText={\n validationErrors[vaccine.id]\n ?.baseDateCode\n }\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment\n position=\"start\"\n sx={{ pl: 1 }}\n >\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{\n color: \"var(--color-gray1)\",\n fontSize: \"14px\",\n }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n },\n }}\n />\n )}\n />\n </Box>\n </EditGuard>\n {/* Outside the guard on purpose. Selecting a product is how the\n panel is read, not how it is edited — with it disabled a\n viewer without the update right cannot reach any schedule at\n all, only an empty panel. */}\n {isProductManagementEnabled && (\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"var(--color-text)\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n PRODUCT\n </Typography>\n <Autocomplete\n options={linkedProducts}\n getOptionLabel={(option) =>\n option?.name || \"\"\n }\n isOptionEqualToValue={(option, value) =>\n option.id === value.id\n }\n value={\n linkedProducts.find(\n (product) =>\n product.id === selectedProductId,\n ) || null\n }\n onChange={(_, newValue) =>\n handleSelectProduct(\n vaccine.id,\n newValue?.id ?? null,\n )\n }\n noOptionsText=\"No products are linked to this vaccine\"\n renderOption={(props, option) => (\n <Box\n component=\"li\"\n {...props}\n key={option.id}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n width: \"100%\",\n }}\n >\n <Typography\n sx={{\n fontSize: \"13px\",\n flexGrow: 1,\n }}\n >\n {option.name}\n </Typography>\n {hasProductSchedule(\n vaccine,\n option.id,\n ) && (\n <Chip\n label=\"Configured\"\n size=\"small\"\n sx={{\n height: \"18px\",\n fontSize: \"10px\",\n fontWeight: 700,\n backgroundColor:\n \"rgba(17, 182, 102, 0.15)\",\n color: \"#0b7a45\",\n \"& .MuiChip-label\": {\n px: \"8px\",\n },\n }}\n />\n )}\n </Box>\n </Box>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder=\"Select a product to configure its schedule\"\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n },\n }}\n />\n )}\n />\n </Box>\n )}\n <EditGuard disabled={!canEditVaccine}>\n {/* The dose count belongs to the schedule it applies to, so it\n sits directly above that schedule rather than in the\n vaccine's table row — with product management on that is the\n selected product's schedule, with it off the only one. */}\n {showScheduleEditors && (\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"var(--color-text)\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n NUMBER OF DOSES\n </Typography>\n {vaccine.doseType !== DOSE_TYPE_RECURRING && (\n <DoseSelector\n vaccineId={vaccine.id}\n currentDoses={vaccine.doses}\n currentDoseDetails={vaccine.doseDetails}\n maxDoses={MAX_DOSES}\n disabled={!canEditVaccine}\n onChange={(id, count, details) =>\n handleUpdateDoseState(\n id,\n count,\n details,\n vaccine.doseType,\n )\n }\n />\n )}\n {validationErrors[vaccine.id]?.doses && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: 0.5, display: \"block\" }}\n >\n {validationErrors[vaccine.id].doses}\n </Typography>\n )}\n </Box>\n )}\n {showScheduleEditors ? (\n <>\n <DoseDetailsTable\n doses={vaccine.doseDetails}\n doseCount={vaccine.doses}\n doseType={vaccine.doseType || \"FIXED\"}\n durationUnits={vaccine.durationUnits}\n onDurationUnitsUpdate={(updatedUnits) =>\n handleUpdateDurationUnits(\n vaccine.id,\n updatedUnits,\n )\n }\n onUpdate={(updatedDoses) =>\n handleUpdateDoseDetails(\n vaccine.id,\n updatedDoses,\n vaccine.doseType || \"FIXED\",\n )\n }\n onDoseTypeChange={(val) =>\n handleUpdateDoseTypeRequested(\n vaccine.id,\n val,\n )\n }\n errors={\n validationErrors[vaccine.id]?.doseDetails\n }\n />\n {vaccine.doseType === \"FLEXIBLE\" && (\n <RecurringBoosterFields\n value={vaccine.recurringBooster}\n disabled={!canEditVaccine}\n errors={\n validationErrors[vaccine.id]\n ?.recurringBooster || {}\n }\n onChange={(next) =>\n updateEditedVaccine(\n vaccine.id,\n (currentData) => ({\n ...currentData,\n recurringBooster: next,\n }),\n )\n }\n />\n )}\n </>\n ) : (\n <Typography\n sx={{\n fontSize: \"12px\",\n fontStyle: \"italic\",\n color: \"var(--color-gray1)\",\n mt: 1,\n }}\n >\n Select a product above to view and edit its\n schedule.\n </Typography>\n )}\n </EditGuard>\n </Box>\n <EditGuard\n disabled={!canEditVaccine}\n className=\"right-panel\"\n >\n <VaccineFilters\n filters={vaccine.filters || []}\n onUpdate={(updatedFilters) =>\n handleUpdateFilters(\n vaccine.id,\n updatedFilters,\n )\n }\n />\n {/* Both are per-product: which regions a product is applicable in\n and what it depends on can differ between two products of the\n same antigen, so they follow the product selection. */}\n {showScheduleEditors && (\n <>\n <GeographicalApplicability\n regions={vaccine.regions}\n onUpdate={(updatedRegions) =>\n handleUpdateRegions(\n vaccine.id,\n updatedRegions,\n )\n }\n />\n <VaccineDependencies\n dependencies={vaccine.dependencies || []}\n onUpdate={(updatedDeps) =>\n handleUpdateDependencies(\n vaccine.id,\n updatedDeps,\n )\n }\n vaccineOptions={vaccines.filter(\n (v) => v.isActive && v.id !== vaccine.id,\n )}\n errors={\n validationErrors[vaccine.id]?.dependencies\n }\n />\n </>\n )}\n <VaccineCodeSets\n codeSets={vaccine.codeSets || []}\n onUpdate={(updatedCodeSets) =>\n handleUpdateCodeSets(\n vaccine.id,\n updatedCodeSets,\n )\n }\n errors={validationErrors[vaccine.id]?.codeSets}\n />\n </EditGuard>\n </Box>\n </Box>\n\n <Box\n className=\"expansion-footer\"\n ref={isExpanded ? expansionFooterRef : null}\n >\n <Button\n variant=\"outlined\"\n className=\"discard-btn\"\n onClick={() => handleDiscard(vaccine.id)}\n >\n {canEditVaccine ? \"DISCARD CHANGES\" : \"CLOSE\"}\n </Button>\n {canEditVaccine &&\n isProductManagementEnabled &&\n selectedProductId !== null &&\n hasProductSchedule(vaccine, selectedProductId) && (\n <Button\n variant=\"outlined\"\n color=\"error\"\n sx={{\n textTransform: \"none\",\n fontWeight: 700,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n }}\n onClick={() =>\n handleRemoveProductSchedule(\n vaccine.id,\n selectedProductId,\n )\n }\n >\n REMOVE THIS PRODUCT'S SCHEDULE\n </Button>\n )}\n {canEditVaccine && (\n // A disabled button cannot raise the events a tooltip listens for,\n // so the span carries them instead.\n <Tooltip\n title={\n hasPendingChanges ? \"\" : \"No changes to save\"\n }\n >\n <span>\n <Button\n variant=\"contained\"\n className=\"save-btn\"\n disabled={!hasPendingChanges}\n endIcon={\n <FontAwesomeIcon icon={faArrowRight} />\n }\n onClick={() =>\n handleSaveVaccineDetails(vaccine.id)\n }\n >\n SAVE VACCINE DETAILS\n </Button>\n </span>\n </Tooltip>\n )}\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </React.Fragment>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n\n <SavedNotLiveModal\n open={savedNotLiveOpen}\n onClose={() => setSavedNotLiveOpen(false)}\n />\n\n <CustomConfirmationModal\n open={statusConfirmation.open}\n handleClose={() =>\n setStatusConfirmation({\n open: false,\n vaccineId: null,\n newStatus: null,\n })\n }\n handleClick={confirmUpdateStatus}\n title=\"Confirm Status Change\"\n description={`Are you sure you want to mark this vaccine as ${\n statusConfirmation.newStatus ? \"Active\" : \"Inactive\"\n }?`}\n dataTestId=\"status-change-confirmation\"\n />\n\n <CustomConfirmationModal\n open={discardConfirmation.open}\n handleClose={closeDiscardConfirmation}\n handleClick={confirmDiscard}\n title=\"Discard unsaved changes?\"\n description={\n discardConfirmation.scope === \"product\"\n ? `Changes to ${\n productsById[\n selectedProductByVaccine[discardConfirmation.vaccineId]\n ]?.name || \"this product\"\n }'s schedule have not been saved. Switching products will discard them.`\n : \"This vaccine has changes that have not been saved. Leaving will discard them.\"\n }\n dataTestId=\"discard-changes-confirmation\"\n />\n\n <CustomConfirmationModal\n open={noFixedDosesConfirmation.open}\n handleClose={() =>\n setNoFixedDosesConfirmation({\n open: false,\n vaccineId: null,\n enabling: false,\n productCount: 0,\n })\n }\n handleClick={confirmNoFixedDoses}\n title={\n noFixedDosesConfirmation.enabling\n ? \"Switch to no fixed doses?\"\n : \"Switch back to a fixed number of doses?\"\n }\n description={`This changes what a schedule means for this vaccine, so the schedule already configured for ${\n noFixedDosesConfirmation.productCount\n } product${\n noFixedDosesConfirmation.productCount === 1 ? \"\" : \"s\"\n } will be cleared and each one has to be configured again. Are you sure you want to proceed?`}\n dataTestId=\"nofixeddoses-change-confirmation\"\n />\n <CustomConfirmationModal\n open={doseTypeConfirmation.open}\n handleClose={() =>\n setDoseTypeConfirmation({\n open: false,\n vaccineId: null,\n newDoseType: null,\n })\n }\n handleClick={confirmDoseTypeChange}\n title=\"Confirm Dose Type Change\"\n description={`Changing the dose type to ${\n doseTypeConfirmation.newDoseType?.toUpperCase() || \"\"\n } may result in data loss for existing dose configuration. Are you sure you want to proceed?`}\n dataTestId=\"dosetype-change-confirmation\"\n />\n <AddCustomVaccineModal\n open={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n onAdd={handleAddCustomVaccine}\n isFromSummary={true}\n />\n <ConfigureRecipientModal\n open={isRecipientModalOpen}\n onClose={() => setIsRecipientModalOpen(false)}\n />\n <ConfigureBaseDateModal\n open={isBaseDateModalOpen}\n onClose={() => setIsBaseDateModalOpen(false)}\n />\n <ConfigureFiltersModal\n open={isFiltersModalOpen}\n onClose={() => setIsFiltersModalOpen(false)}\n />\n </Box>\n );\n};\n\nexport default ImmunizationSummary;\n","import { useEffect, useRef, useState } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { Box, CircularProgress } from \"@mui/material\";\nimport ImmunizationConfiguration from \"./ImmunizationConfiguration\";\nimport ImmunizationScheduleConfiguration from \"./ImmunizationScheduleConfiguration\";\nimport ImmunizationSummary from \"./ImmunizationSummary\";\nimport { ImmunizationUtil } from \"./service/ImmunizationUtil\";\nimport {\n setBaseDatesMaster,\n setCurrentView,\n setRecipientMaster,\n setVaccines,\n setFiltersMaster,\n setFeatureRights,\n setImmunizationConfigLoaded,\n} from \"@/store/reducers/immunizationSlice\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\n\nconst VIEW_COMPONENT_MAP = {\n landing: ImmunizationConfiguration,\n \"schedule-config\": ImmunizationScheduleConfiguration,\n summary: ImmunizationSummary,\n};\n\nconst ImmunizationConfigurationBase = () => {\n const dispatch = useDispatch();\n const { currentViewId, isConfigLoaded } = useSelector(\n (state) => state.immunization,\n );\n const [isInitializing, setIsInitializing] = useState(!isConfigLoaded);\n\n const hasFetchedRef = useRef(false);\n\n useEffect(() => {\n if (isConfigLoaded) {\n setIsInitializing(false);\n hasFetchedRef.current = false;\n return;\n }\n\n if (hasFetchedRef.current) {\n return;\n }\n hasFetchedRef.current = true;\n\n const fetchInitialData = async () => {\n try {\n setIsInitializing(true);\n const [initiationResponse, rightsResponse] = await Promise.allSettled([\n ImmunizationUtil.checkImmunizationConfigurationInitiation({}),\n getAssignedFeatures(\"techo.manage.immunizationConfiguration\"),\n ]);\n\n if (rightsResponse?.status === \"fulfilled\") {\n dispatch(\n setFeatureRights(JSON.parse(rightsResponse.value.data || \"{}\")),\n );\n }\n\n const initiationStatus =\n initiationResponse?.status === \"fulfilled\"\n ? initiationResponse.value?.data?.result?.[0]?.key_value\n : null;\n\n if (initiationResponse?.status !== \"fulfilled\") {\n throw (\n initiationResponse?.reason ||\n new Error(\"Failed to fetch initiation status\")\n );\n }\n\n const isDone = initiationStatus === \"DONE\";\n\n if (!isDone) {\n // dispatch(setCurrentView(\"landing\"));\n dispatch(setCurrentView(\"schedule-config\"));\n dispatch(setImmunizationConfigLoaded(true));\n return;\n }\n\n const referenceDataResponse =\n await ImmunizationUtil.getImmunizationReferenceData();\n\n if (referenceDataResponse) {\n const referenceDataResults = referenceDataResponse?.data || [];\n const baseDatesResponse = referenceDataResults[0];\n const filtersResponse = referenceDataResults[1];\n const vaccineResponse = referenceDataResults[2];\n const recipientResponse = referenceDataResults[3];\n\n if (baseDatesResponse?.result) {\n dispatch(setBaseDatesMaster(baseDatesResponse.result));\n }\n\n if (filtersResponse?.result) {\n dispatch(setFiltersMaster(filtersResponse.result));\n }\n\n if (recipientResponse?.result) {\n dispatch(setRecipientMaster(recipientResponse.result));\n }\n\n if (vaccineResponse?.result) {\n const mappedVaccines = vaccineResponse.result.map(\n ImmunizationUtil.mapImmunizationVaccineConfig,\n );\n dispatch(setVaccines(mappedVaccines));\n }\n }\n\n dispatch(setCurrentView(\"summary\"));\n dispatch(setImmunizationConfigLoaded(true));\n } catch (error) {\n console.error(\"Error fetching initial data:\", error);\n showToast({\n message: error?.message || \"Failed to fetch initial configuration\",\n type: \"error\",\n });\n hasFetchedRef.current = false;\n } finally {\n setIsInitializing(false);\n }\n };\n fetchInitialData();\n }, [dispatch, isConfigLoaded]);\n\n const ActiveView =\n VIEW_COMPONENT_MAP[currentViewId] || ImmunizationConfiguration;\n\n if (isInitializing && !isConfigLoaded) {\n return (\n <Box className=\"flex justify-center items-center w-full h-[60vh]\">\n <CircularProgress color=\"primary\" />\n </Box>\n );\n }\n\n return (\n <div className=\"immunization-configuration-base-wrapper\">\n <ActiveView />\n </div>\n );\n};\n\nexport default ImmunizationConfigurationBase;\n"],"names":["TemplateCard","title","toolTipText","buttonText","icon","iconColor","iconBgColor","isCustom","onClick","Box","jsxs","jsx","FontAwesomeIcon","Tooltip","IconButton","faInfoCircle","Typography","Button","faArrowRight","PropTypes","ImmunizationConfiguration","dispatch","useDispatch","TextField","InputAdornment","faSearch","Grid","faPlus","setCurrentView","VaccineCard","vaccine","selected","disabled","faSyringe","deriveVaccineCode","name","sanitizeVaccineCode","value","normalizeCode","code","AddCustomVaccineModal","open","onClose","onAdd","isFromSummary","vaccineName","setVaccineName","useState","manualVaccineCode","setManualVaccineCode","disease","setDisease","recipientType","setRecipientType","baseDateCode","setBaseDateCode","vaccineCodeInputRef","useRef","touched","setTouched","vaccines","recipientMaster","baseDateMaster","useSelector","state","selectedRecipient","useMemo","recipient","allowedBaseDateCodes","config","availableBaseDateOptions","activeBaseDates","baseDate","allowedCodeSet","selectedBaseDate","normalizedCode","isCodeManual","vaccineCode","trimmedVaccineCode","isDuplicateVaccineCode","normalizedBaseDate","isCodeMissing","handleToggleCodeEdit","_a","vaccineCodeHelperText","isFormValid","handleAdd","showToast","p","payload","response","ImmunizationUtil","resultObject","_b","vaccineId","_c","_d","err","handleReset","error","handleCloseModal","Dialog","DialogTitle","faTimes","DialogContent","e","faTag","faBarcode","faRotateLeft","faPen","faShieldVirus","Autocomplete","option","_","newValue","params","Fragment","faUser","faCalendarDay","DialogActions","VaccineGridSkeleton","children","isLoading","getUseSkeleton","index","ImmunizationScheduleConfiguration","selectedVaccineIds","isConfigLoaded","rights","canAddVaccine","searchTerm","setSearchTerm","isModalOpen","setIsModalOpen","isFetchingVaccines","setIsFetchingVaccines","isSubmitting","setIsSubmitting","useEffect","vaccinesResponse","mappedVaccines","setVaccines","vaccineErr","handleToggleVaccine","id","toggleVaccine","handleAddCustomVaccine","data","addCustomVaccine","handleAddCustomVaccineClick","handleToggleAll","allVisibleIds","filteredVaccines","v","newSelectedIds","setSelectedVaccineIds","handleSelectVaccines","activateIds","deactivateIds","isNowSelected","wasActive","activateSelectedVaccines","setImmunizationConfigLoaded","allVaccines","activeSelectedIds","areAllVisibleSelected","Alert","faListCheck","faCheckDouble","DATE_COLUMN_TYPE_KEYWORDS","modalHeaderCellSx","modalFieldSx","parseColumnInfo","columnInfo","isDateTypeColumn","dataType","normalisedType","keyword","ConfigureBaseDateModal","startInAddMode","onSaved","scheduledVaccines","dbTablesMaster","isAdding","setIsAdding","loading","setLoading","saving","setSaving","usageWarning","setUsageWarning","newName","setNewName","newCode","setNewCode","selectedTable","setSelectedTable","selectedColumn","setSelectedColumn","resetForm","fetchTables","res","setDbTablesMaster","availableColumns","tableObj","t","columnName","left","right","availableTables","existingCodes","bd","isCodeDuplicate","canSave","handleSave","createdBaseDate","upsertBaseDateMasterItem","handleStatusChange","newStatus","usingVaccines","scheduled","sv","effectiveBaseDateCode","bdCode","updateBaseDateMasterStatus","CircularProgress","faCode","Chip","faDatabase","table","selectedOption","nextTable","faColumns","TableContainer","Paper","Table","TableHead","TableRow","TableCell","TableBody","CustomSwitch","faArrowLeft","idx","RESOURCE_ID_PLACEHOLDER","PLACEHOLDER_PATTERN","ConfigureFiltersModal","filtersList","editingFilter","setEditingFilter","newDescription","setNewDescription","newQuery","setNewQuery","fetchFilters","forceRefetch","setFiltersMaster","handleEditClick","filter","f","queryPlaceholders","match","hasResourceIdPlaceholder","hasUnsupportedPlaceholders","placeholder","queryPlaceholderError","savedFilter","upsertFilterMasterItem","updateFilterMasterStatus","faFilter","faAlignLeft","faEdit","normaliseKeyValue","normaliseColumnName","columnExpression","cleaned","aliasMatch","directAliasMatch","splitSelectColumns","selectPart","columns","current","bracketDepth","char","inferColumnsFromQueryText","query","arr","parseRecipientConfig","ConfigureRecipientModal","editingRecipient","setEditingRecipient","isBaseDateModalOpen","setIsBaseDateModalOpen","geographicalApplicability","setGeographicalApplicability","allowedBaseDates","setAllowedBaseDates","fetchTypeKeys","setFetchTypeKeys","locationKey","setLocationKey","historyKey","setHistoryKey","excludeVaccineKey","setExcludeVaccineKey","isQueryTouched","setIsQueryTouched","queryColumns","setQueryColumns","errors","setErrors","fetchRecipients","setRecipientMaster","validateRecipientForm","queryError","duplicateColumnUsageError","item","baseDateOptions","queryColumnOptions","usageMap","registerUsage","fieldLabel","normalisedValue","existingUsage","fetchTypeKey","duplicateError","historyKeyError","excludeVaccineKeyError","locationKeyError","getAvailableColumnOptions","useCallback","currentValues","currentValueSet","reservedValues","normalisedOption","q","foundForbidden","loadColumnsFromQuery","queryToPreview","discoveredColumns","timer","savedRecipient","upsertRecipientMasterItem","val","prev","generatedCode","PostgresEditor","checked","uniqueValues","seenValues","getTagProps","faClockRotateLeft","newInputValue","faMapMarkedAlt","selectedOptions","savedBaseDate","UNIT_OPTIONS","LIFELONG_OPTION","LIFELONG_UNIT","DEFAULT_DOSE_UNITS","getUnitOption","UnitSelect","onChange","compact","allowLifelong","Select","MenuItem","getDays","DurationInput","defaultValue","onFieldUpdate","unit","onUnitChange","allowEmpty","hasNoEnd","quantity","isBlankDuration","rawValue","faExclamationCircle","resolveUnitValue","eligibleTo","isLifelong","RecurringBoosterFields","enabled","booster","update","field","next","toggle","on","FormControlLabel","Checkbox","label","lifelong","getUnit","nextUnit","fallback","parts","DoseDetailsTable","doses","doseType","doseCount","durationUnits","onDurationUnitsUpdate","onUpdate","onDoseTypeChange","deleteConfirmModal","setDeleteConfirmModal","safeDurationUnits","boosterAliasModal","setBoosterAliasModal","isRecurring","isFixed","durationColumnWidth","durationColumnSx","compactNumberCellSx","safeDoses","lifelongFromIdx","dose","handleFieldChange","sanitizedValue","updatedDose","baseArray","updatedDoses","d","i","newDose","handleFixedEligibleToUnitChange","newUnit","currentDose","handleDoseUnitChange","unitField","turningOn","newUnits","qty","handleSaveBoosterAlias","confirmDeleteDose","externalErrors","fromError","toError","intervalError","fromUnit","toUnit","fromDays","getDaysVal","toDays","isCascadedLifelong","liveOverdueErrors","validateOverdueWindow","overdueFromError","overdueTillError","_e","_f","_g","Switch","event","faTrash","Popover","retrieveNextLevel","locationIds","level","fetchAccordingToUserAOI","languagePreference","ids","api","retriveLocationType","GeographicalApplicability","regions","loggedInUser","loadingLevels","setLoadingLevels","activeLevels","setActiveLevels","levelOptions","setLevelOptions","selections","setSelections","editingId","setEditingId","fetchingRef","hydrateOptions","selectionMap","levels","currentType","currentKey","selectedId","nextType","nextKey","fetchLevelData","fetchMetadata","initialSelectionMap","resp","sorted","l","a","b","groupedMap","group","groupedLevelsList","initSels","initOpts","key","lang","firstLevelNum","firstLevelResp","cluster","clusterLevel","matchingGroup","newOpts","loc","parentId","targetLevelNum","targetTypeKey","scrollRef","React","reconstructFromIds","locationIdArr","currentOpts","newSels","targetId","clusterOptions","matchedOpt","o","k","handleOpen","region","handleClose","reset","handleAddLocation","selectedEntries","sel","locationId","locationList","fullPath","isRelated","p1","p2","filteredRegions","r","newRegion","handleChange","typeObj","typeId","opt","currentIndex","childKey","nextOpts","renderDropdown","levelObj","options","requiredLabelStyle","VaccineDependencies","dependencies","vaccineOptions","handleAddField","newDep","handleDelete","handleInputChange","updated","dep","depErrors","DoseSelector","currentDoses","currentDoseDetails","maxDoses","decreaseConfirmModal","setDecreaseConfirmModal","handleDoseChange","newDoseCount","updatedDoseDetails","dosesToDelete","confirmDoseDecrease","newCount","VaccineFilters","filters","filtersMaster","activeFilters","normalizedFilters","props","tagValue","createElement","CODE_SET_OPTIONS","VaccineCodeSets","codeSets","newCodeSet","cs","csErrors","selectedTypes","getInitialSummaryVaccineData","base","buildDisplayVaccines","editedVaccines","showInactive","nameA","nameB","getAllowedBaseDateCodesForRecipient","VACCINES_CATEGORY_CODE","DEFAULT_DURATION_UNITS","getLinkedProducts","pmProducts","product","findProductSchedule","draft","productId","schedule","hasProductSchedule","buildEmptyProductSchedule","clearProductSchedules","PER_PRODUCT_FIELDS","pickPerProductFields","source","picked","flushDraftIntoSchedules","schedules","existingIndex","loadScheduleIntoDraft","scheduleFingerprint","isProductScheduleDirty","stored","edited","before","removeProductSchedule","helperGetDays","helperGetOptionalDays","helperGetEligibleTo","isBlank","helperGetUnit","buildRecurringBooster","buildDoseRows","regularCount","boosterCount","doseLabel","firstFixedDose","doseDetails","buildSchedulePayloadEntry","fixedDose","dependency","n","ee","te","ne","re","ie","ae","s","c","u","m","h","g","y","x","S","C","w","T","E","D","A","j","M","N","P","F","I","L","R","z","B","V","H","oe","U","W","G","K","se","ce","le","ue","de","fe","pe","me","he","ge","ve","ye","be","J","Y","X","Z","Q","$","xe","Se","O","SCHEDULE_TYPE_LABELS","labelOrValue","map","isMeaningfullyEqual","after","describeValue","describeScalar","lines","summariseProductSchedules","beforeList","afterList","productNameById","list","entry","suffix","existedBefore","existsAfter","buildConfigChangeSummary","MAX_DOSES","SCHEDULE_TYPE_ROUTINE","SCHEDULE_TYPE_NON_ROUTINE","DOSE_TYPE_RECURRING","formatEligibilityPart","part","trimmed","LIFELONG_ELIGIBILITY","unitMatch","buildScheduleArray","selectedProductId","shouldFlush","prepareVaccinePayload","productSchedules","filtersJSON","codeSetsArray","MAX_COLLAPSED_PRODUCTS","EligibilityText","eligibility","recurringBoosterWindow","ScheduleSummaryCell","productsById","isProductManagementEnabled","configured","visible","hiddenCount","applyLifelongCascade","firstLifelongIdx","SavedNotLiveModal","EditGuard","className","ImmunizationSummary","validationErrors","expandedRowId","setExpandedRowId","setShowInactive","useIsProductManagementEnabled","setPmProducts","selectedProductByVaccine","setSelectedProductByVaccine","isFiltersModalOpen","setIsFiltersModalOpen","isRecipientModalOpen","setIsRecipientModalOpen","setEditedVaccines","hasFilterRight","hasRecipientRight","canEditVaccine","savedNotLiveOpen","setSavedNotLiveOpen","statusConfirmation","setStatusConfirmation","discardConfirmation","setDiscardConfirmation","noFixedDosesConfirmation","setNoFixedDosesConfirmation","doseTypeConfirmation","setDoseTypeConfirmation","loadProducts","getProducts","expansionFooterRef","revealExpansionFooter","toggleExpand","isExpanding","clearValidationErrors","getInitialVaccineData","updateEditedVaccine","updater","shouldClearErrors","currentData","nextData","handleUpdateDoseState","finalDoseDetails","handleUpdateDoseDetails","handleUpdateRegions","updatedRegions","handleUpdateDependencies","updatedDependencies","handleUpdateName","handleUpdateFilters","updatedFilters","handleUpdateDoseType","newDoseType","targetCount","handleUpdateDoseTypeRequested","confirmDoseTypeChange","applyNoFixedDoses","enabling","handleUpdateNoFixedDoses","confirmNoFixedDoses","handleUpdateScheduleType","isNonRoutine","reloadVaccines","rows","mapped","reloaded","updateScheduledVaccine","sendConfigChangeNotification","changes","notifyConfigChange","previous","saved","confirmUpdateStatus","setVaccineStatus","handleUpdateStatus","handleUpdateBaseDateCode","newBaseDateCode","getAllowedBaseDateCodes","getAvailableBaseDateOptions","handleUpdateRecipientType","newRecipientType","currentBaseDateCode","isCurrentBaseDateAllowed","handleUpdateCodeSets","updatedCodeSets","handleUpdateDurationUnits","updatedUnits","prevUnits","rawDoseDetails","isObjectForm","detailsArray","remapDose","eligibleFrom","mappedArray","newDoseDetails","selectProduct","handleSelectProduct","previousProductId","handleRemoveProductSchedule","discardVaccineEdits","handleDiscard","resolveDraftForSave","shouldFlushSchedule","getPendingChanges","leaveExpandedRow","nextVaccineId","closeDiscardConfirmation","openRow","confirmDiscard","scope","nextProductId","handleSaveVaccineDetails","flushSchedule","validateVaccineForm","setValidationErrors","savedDraft","displayVaccines","isExpanded","linkedProducts","showScheduleEditors","hasPendingChanges","faChevronUp","faChevronDown","Collapse","count","details","updatedDeps","_h","CustomConfirmationModal","VIEW_COMPONENT_MAP","ImmunizationConfigurationBase","currentViewId","isInitializing","setIsInitializing","hasFetchedRef","initiationResponse","rightsResponse","getAssignedFeatures","setFeatureRights","initiationStatus","referenceDataResponse","referenceDataResults","baseDatesResponse","filtersResponse","vaccineResponse","recipientResponse","setBaseDatesMaster","ActiveView"],"mappings":"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AA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AA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"}
|