@argusoft/medplat-core 1.0.28 → 1.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AccessRights-xrday-L1.js +1023 -0
- package/dist/AccessRights-xrday-L1.js.map +1 -0
- package/dist/AddEditQueryBuilder-D-iQiVIe.js +365 -0
- package/dist/AddEditQueryBuilder-D-iQiVIe.js.map +1 -0
- package/dist/{AddFeatures-C0Z29oSd.js → AddFeatures-D1sU8RjY.js} +2 -2
- package/dist/{AddFeatures-C0Z29oSd.js.map → AddFeatures-D1sU8RjY.js.map} +1 -1
- package/dist/AddLabelModal-Bq-wRqv9.js +631 -0
- package/dist/AddLabelModal-Bq-wRqv9.js.map +1 -0
- package/dist/AddMenuConfiguration-e5BVXhmw.js +8547 -0
- package/dist/AddMenuConfiguration-e5BVXhmw.js.map +1 -0
- package/dist/{AddRoleDrawer-CQdzQZLb.js → AddRoleDrawer-0gqAK8N0.js} +62 -63
- package/dist/AddRoleDrawer-0gqAK8N0.js.map +1 -0
- package/dist/AppModal-CCtrQ5Tr.js +394 -0
- package/dist/AppModal-CCtrQ5Tr.js.map +1 -0
- package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js +387 -0
- package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js.map +1 -0
- package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js +391 -0
- package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +1 -0
- package/dist/{ChangePasswordModalCore-CDxkeIIM.js → ChangePasswordModalCore-BPsJquTS.js} +1606 -1611
- package/dist/ChangePasswordModalCore-BPsJquTS.js.map +1 -0
- package/dist/{ConditionConfig-DSsgGEXS.js → ConditionConfig-Ddz9halE.js} +2 -2
- package/dist/ConditionConfig-Ddz9halE.js.map +1 -0
- package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js +435 -0
- package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js.map +1 -0
- package/dist/{EntityManagement-GaYsBTvf.js → EntityManagement-CPQL6qBj.js} +2 -2
- package/dist/{EntityManagement-GaYsBTvf.js.map → EntityManagement-CPQL6qBj.js.map} +1 -1
- package/dist/EventConfig-BmLemzX3.js +26 -0
- package/dist/EventConfig-BmLemzX3.js.map +1 -0
- package/dist/{EventConfigurations-kNtAj_WM.js → EventConfigurations-Bzh1qWXU.js} +31 -30
- package/dist/{EventConfigurations-kNtAj_WM.js.map → EventConfigurations-Bzh1qWXU.js.map} +1 -1
- package/dist/{EventsExceptionModal-D4Bf1ilS.js → EventsExceptionModal-B2SRrnB1.js} +2 -2
- package/dist/{EventsExceptionModal-D4Bf1ilS.js.map → EventsExceptionModal-B2SRrnB1.js.map} +1 -1
- package/dist/EventsSkeleton-BIcPks4T.js +61 -0
- package/dist/EventsSkeleton-BIcPks4T.js.map +1 -0
- package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +79 -0
- package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +1 -0
- package/dist/FeatureMenu-DYJmDt7q.js +521 -0
- package/dist/FeatureMenu-DYJmDt7q.js.map +1 -0
- package/dist/Features-Dne21RWu.js +14 -0
- package/dist/Features-Dne21RWu.js.map +1 -0
- package/dist/{FhirServerList-Dkq7Kbes.js → FhirServerList-DuTwnngN.js} +19 -19
- package/dist/{FhirServerList-Dkq7Kbes.js.map → FhirServerList-DuTwnngN.js.map} +1 -1
- package/dist/{FhirServerWizard-Db6Hm4bQ.js → FhirServerWizard-DZI8Olku.js} +15 -15
- package/dist/{FhirServerWizard-Db6Hm4bQ.js.map → FhirServerWizard-DZI8Olku.js.map} +1 -1
- package/dist/FlywayQuery-CQygj51V.js +179 -0
- package/dist/FlywayQuery-CQygj51V.js.map +1 -0
- package/dist/{ManageNotification-CaBAOhji.js → Google-DQxMfbaL.js} +1725 -2652
- package/dist/{ManageNotification-CaBAOhji.js.map → Google-DQxMfbaL.js.map} +1 -1
- package/dist/GrantPermissionModal-BDN66Atn.js +236 -0
- package/dist/GrantPermissionModal-BDN66Atn.js.map +1 -0
- package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +7639 -0
- package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +1 -0
- package/dist/ImmunizationConfigurationBase.css +1 -1
- package/dist/ImmunizationConfigurationsList-TZcLDEci.js +369 -0
- package/dist/ImmunizationConfigurationsList-TZcLDEci.js.map +1 -0
- package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +665 -0
- package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +1 -0
- package/dist/LanguagesModal-B3NTebYT.js +352 -0
- package/dist/LanguagesModal-B3NTebYT.js.map +1 -0
- package/dist/ManageDynamicFeature-BU0I45dd.js +4475 -0
- package/dist/ManageDynamicFeature-BU0I45dd.js.map +1 -0
- package/dist/{ManageEventConfiguration-DV3I5POA.js → ManageEventConfiguration-CoYcpjR9.js} +465 -397
- package/dist/ManageEventConfiguration-CoYcpjR9.js.map +1 -0
- package/dist/ManageNotification-C5MhV77Q.js +934 -0
- package/dist/ManageNotification-C5MhV77Q.js.map +1 -0
- package/dist/{ManageRole-CGYfglpo.js → ManageRole-CNZBRKGU.js} +32 -30
- package/dist/ManageRole-CNZBRKGU.js.map +1 -0
- package/dist/ManageTranslation-vRiptUAP.js +833 -0
- package/dist/ManageTranslation-vRiptUAP.js.map +1 -0
- package/dist/ManageTranslation.css +1 -1
- package/dist/{ManageUser-AY1EUDLI.js → ManageUser-DCFkUMV9.js} +1722 -1586
- package/dist/ManageUser-DCFkUMV9.js.map +1 -0
- package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js +272 -0
- package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js.map +1 -0
- package/dist/MobileAnalytics-pQoE8cG1.js +16888 -0
- package/dist/MobileAnalytics-pQoE8cG1.js.map +1 -0
- package/dist/MobileMenuManagement-Cf8IZlla.js +108 -0
- package/dist/MobileMenuManagement-Cf8IZlla.js.map +1 -0
- package/dist/{MobileTypeEventConfigModal-BxLympIO.js → MobileTypeEventConfigModal-BeveaX0C.js} +2 -2
- package/dist/MobileTypeEventConfigModal-BeveaX0C.js.map +1 -0
- package/dist/NotificationFlywayQuery-BAHVjf6N.js +247 -0
- package/dist/NotificationFlywayQuery-BAHVjf6N.js.map +1 -0
- package/dist/{NotificationList-C3Vb_jKU.js → NotificationList-DEyRZEuM.js} +109 -110
- package/dist/NotificationList-DEyRZEuM.js.map +1 -0
- package/dist/{OtherTypeEventConfigModal-BeG1GrUi.js → OtherTypeEventConfigModal-CM6VkdmY.js} +570 -478
- package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +1 -0
- package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js +482 -0
- package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map +1 -0
- package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js +157 -0
- package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js.map +1 -0
- package/dist/PermissionsModal-CCYkcKlC.js +151 -0
- package/dist/PermissionsModal-CCYkcKlC.js.map +1 -0
- package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js +119 -0
- package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js.map +1 -0
- package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +783 -0
- package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +1 -0
- package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js +818 -0
- package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +1 -0
- package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +599 -0
- package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +1 -0
- package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +1302 -0
- package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +1 -0
- package/dist/ProductsPage-CupVmOD4-D45a_hf-.js +252 -0
- package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +1 -0
- package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +648 -0
- package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +1 -0
- package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js +1577 -0
- package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +1 -0
- package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js +279 -0
- package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map +1 -0
- package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js +293 -0
- package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js.map +1 -0
- package/dist/QueryBuilder-CXaBe6sr.js +478 -0
- package/dist/QueryBuilder-CXaBe6sr.js.map +1 -0
- package/dist/{RoleManagement-BPl2cE27.js → RoleManagement-s8iNx2Mu.js} +131 -142
- package/dist/RoleManagement-s8iNx2Mu.js.map +1 -0
- package/dist/Roles-BIyiic67.js +14 -0
- package/dist/Roles-BIyiic67.js.map +1 -0
- package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js +544 -0
- package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map +1 -0
- package/dist/SalesPage-D18DCseD-BxktGDRQ.js +315 -0
- package/dist/SalesPage-D18DCseD-BxktGDRQ.js.map +1 -0
- package/dist/{ServerSyncModal-D_oFpv3C.js → ServerSyncModal-92U3xtqI.js} +84 -85
- package/dist/ServerSyncModal-92U3xtqI.js.map +1 -0
- package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +747 -0
- package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +1 -0
- package/dist/ShowFlywayQuery-D10Olk5Z.js +154 -0
- package/dist/ShowFlywayQuery-D10Olk5Z.js.map +1 -0
- package/dist/{ShowFlywayQuery-DVRCd384.js → ShowFlywayQuery-D1y_4A1u.js} +161 -121
- package/dist/ShowFlywayQuery-D1y_4A1u.js.map +1 -0
- package/dist/ShowQueryHistory-DRBKYDKk.js +313 -0
- package/dist/ShowQueryHistory-DRBKYDKk.js.map +1 -0
- package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js +721 -0
- package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +1 -0
- package/dist/SubMenu-eEDhZUvh.js +317 -0
- package/dist/SubMenu-eEDhZUvh.js.map +1 -0
- package/dist/{TableDetails-Cf_YfnY2.js → TableDetails-BtafRxXb.js} +1069 -831
- package/dist/TableDetails-BtafRxXb.js.map +1 -0
- package/dist/{TableList-D6jnIbnz.js → TableList-Dpo6dO7S.js} +2 -2
- package/dist/{TableList-D6jnIbnz.js.map → TableList-Dpo6dO7S.js.map} +1 -1
- package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js +746 -0
- package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +1 -0
- package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +315 -0
- package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +1 -0
- package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +476 -0
- package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +1 -0
- package/dist/{TypeConfiguration-37wp-gsl.js → TypeConfiguration-3O6ABrK-.js} +2 -2
- package/dist/{TypeConfiguration-37wp-gsl.js.map → TypeConfiguration-3O6ABrK-.js.map} +1 -1
- package/dist/{UserList-Bc8gYxRL.js → UserList-DgPxsnj2.js} +253 -236
- package/dist/{UserList-Bc8gYxRL.js.map → UserList-DgPxsnj2.js.map} +1 -1
- package/dist/Users-Bpc4Sazd.js +41 -0
- package/dist/Users-Bpc4Sazd.js.map +1 -0
- package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +321 -0
- package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +1 -0
- package/dist/{WidgetList-Dw_FmbbE.js → WidgetList-D7YuWfDD.js} +2 -2
- package/dist/{WidgetList-Dw_FmbbE.js.map → WidgetList-D7YuWfDD.js.map} +1 -1
- package/dist/constants-ClZJY2x1-MkSWn6TZ.js +434 -0
- package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +1 -0
- package/dist/dashboardLayoutUtils-D1xCAxp3.js +405 -0
- package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +1 -0
- package/dist/format-UOyOu75i-D0GyylyQ.js +63 -0
- package/dist/format-UOyOu75i-D0GyylyQ.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +4 -752
- package/dist/index.js.map +1 -1
- package/dist/index.lib-Dn8PMkeD.js +862 -0
- package/dist/index.lib-Dn8PMkeD.js.map +1 -0
- package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js +28 -0
- package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js.map +1 -0
- package/dist/validation-BzlHnL-r-CCJm2utQ.js +125 -0
- package/dist/validation-BzlHnL-r-CCJm2utQ.js.map +1 -0
- package/package.json +5 -4
- package/dist/AccessRights-CHu27ZOw.js +0 -1262
- package/dist/AccessRights-CHu27ZOw.js.map +0 -1
- package/dist/AddEditQueryBuilder-Brdnm6rQ.js +0 -313
- package/dist/AddEditQueryBuilder-Brdnm6rQ.js.map +0 -1
- package/dist/AddLabelModal-DFllBVcd.js +0 -734
- package/dist/AddLabelModal-DFllBVcd.js.map +0 -1
- package/dist/AddMenuConfiguration-BSQLl88V.js +0 -6570
- package/dist/AddMenuConfiguration-BSQLl88V.js.map +0 -1
- package/dist/AddRoleDrawer-CQdzQZLb.js.map +0 -1
- package/dist/AppModal-CtG2GjD_.js +0 -428
- package/dist/AppModal-CtG2GjD_.js.map +0 -1
- package/dist/ChangePasswordModalCore-CDxkeIIM.js.map +0 -1
- package/dist/ConditionConfig-DSsgGEXS.js.map +0 -1
- package/dist/EventsSkeleton-8iiETGcf.js +0 -76
- package/dist/EventsSkeleton-8iiETGcf.js.map +0 -1
- package/dist/FeatureMenu-jl7-Tk6y.js +0 -265
- package/dist/FeatureMenu-jl7-Tk6y.js.map +0 -1
- package/dist/Features-CObdzJp_.js +0 -13
- package/dist/Features-CObdzJp_.js.map +0 -1
- package/dist/FlywayQuery-Cx2sly6g.js +0 -169
- package/dist/FlywayQuery-Cx2sly6g.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-DZGqwda2.js +0 -5910
- package/dist/ImmunizationConfigurationBase-DZGqwda2.js.map +0 -1
- package/dist/ImmunizationConfigurationsList-DdSZicTP.js +0 -344
- package/dist/ImmunizationConfigurationsList-DdSZicTP.js.map +0 -1
- package/dist/LanguagesModal-D6VfaGrl.js +0 -394
- package/dist/LanguagesModal-D6VfaGrl.js.map +0 -1
- package/dist/ManageDynamicFeature-BhONvfC_.js +0 -4189
- package/dist/ManageDynamicFeature-BhONvfC_.js.map +0 -1
- package/dist/ManageEventConfiguration-DV3I5POA.js.map +0 -1
- package/dist/ManageRole-CGYfglpo.js.map +0 -1
- package/dist/ManageTranslation-B4C9-lWD.js +0 -625
- package/dist/ManageTranslation-B4C9-lWD.js.map +0 -1
- package/dist/ManageUser-AY1EUDLI.js.map +0 -1
- package/dist/MobileMenuManagement-CVAKyKDa.js +0 -112
- package/dist/MobileMenuManagement-CVAKyKDa.js.map +0 -1
- package/dist/MobileTypeEventConfigModal-BxLympIO.js.map +0 -1
- package/dist/NotificationFlywayQuery-BY8Zzml_.js +0 -244
- package/dist/NotificationFlywayQuery-BY8Zzml_.js.map +0 -1
- package/dist/NotificationList-C3Vb_jKU.js.map +0 -1
- package/dist/OtherTypeEventConfigModal-BeG1GrUi.js.map +0 -1
- package/dist/QueryBuilder-z7eqfd7D.js +0 -383
- package/dist/QueryBuilder-z7eqfd7D.js.map +0 -1
- package/dist/RoleManagement-BPl2cE27.js.map +0 -1
- package/dist/ServerSyncModal-D_oFpv3C.js.map +0 -1
- package/dist/ShowFlywayQuery-DVRCd384.js.map +0 -1
- package/dist/ShowFlywayQuery-tj42YQAS.js +0 -130
- package/dist/ShowFlywayQuery-tj42YQAS.js.map +0 -1
- package/dist/ShowQueryHistory-BDN0tzHg.js +0 -190
- package/dist/ShowQueryHistory-BDN0tzHg.js.map +0 -1
- package/dist/SubMenu-DYxAPH2Z.js +0 -191
- package/dist/SubMenu-DYxAPH2Z.js.map +0 -1
- package/dist/TableDetails-Cf_YfnY2.js.map +0 -1
- package/dist/Users-CsJ08Kjm.js +0 -40
- package/dist/Users-CsJ08Kjm.js.map +0 -1
- package/dist/dashboardLayoutUtils-Bt5HA96J.js +0 -265
- package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImmunizationConfigurationBase-Di1KO3oW.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-BifOsjlB.js","../../productManagement/dist/PmTable-_GbScaa4.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} 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\nconst DoseDetailsTable = ({\n doses = [],\n doseType = 'FIXED',\n doseCount = 0,\n durationUnits,\n onDurationUnitsUpdate = () => {},\n onUpdate,\n onDoseTypeChange,\n isFlexibleDisabled = false,\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 isFixed = doseType === 'FIXED';\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 if (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 DOSE - WISE DETAILS\n </Typography>\n\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={\n isFlexibleDisabled\n ? 'Non-routine vaccines support Fixed dose type only.'\n : 'Each dose has its own independent eligibility window and minimum interval.'\n }\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 </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 ? '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 isFlexibleDisabled: PropTypes.bool,\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) => ({\n productId: productId ?? null,\n doses: 0,\n doseType: 'FIXED',\n doseDetails: {},\n durationUnits: { ...DEFAULT_DURATION_UNITS },\n regions: [],\n dependencies: [],\n eligibility: 'N.A.',\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 = ['doses', 'doseType', 'doseDetails', 'durationUnits', 'regions', 'dependencies'];\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 const schedule = findProductSchedule(draft, productId) || buildEmptyProductSchedule(productId);\n return {\n ...draft,\n ...pickPerProductFields(schedule),\n eligibility: schedule.eligibility,\n };\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 buildDoseRows = (schedule) => {\n if (schedule.doseType === 'FIXED') 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 isFixed = schedule.doseType === 'FIXED';\n const fixedDose = firstFixedDose(schedule.doseDetails);\n\n return {\n productId: schedule.productId ?? null,\n noOfDoses: schedule.doses,\n doseType: schedule.doseType,\n doseEligibleFrom: isFixed ? helperGetDays(fixedDose.eligibleFrom) : null,\n doseEligibleTo: isFixed ? helperGetEligibleTo(fixedDose.eligibleTo) : null,\n minGap: isFixed ? (schedule.doses > 1 ? helperGetDays(fixedDose.interval) : 0) : null,\n durationUnits: isFixed ? schedule.durationUnits || { ...DEFAULT_DURATION_UNITS } : 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/tables`)).data ?? [];\n}\nasync function ne(e) {\n\treturn (await n.get(`${a}/settings/tables/${encodeURIComponent(e)}/uuid-columns`)).data ?? [];\n}\nasync function re(e) {\n\treturn (await n.get(`${a}/settings/tables/${encodeURIComponent(e)}/text-columns`)).data ?? [];\n}\nasync function ie(e) {\n\treturn (await n.get(`${a}/settings/tables/${encodeURIComponent(e)}/date-columns`)).data ?? [];\n}\nasync function ae() {\n\treturn (await n.get(`${a}/settings/document-modules`)).data ?? [];\n}\nasync function s() {\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 c(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 l(e) {\n\treturn (await n.post(`${a}/categories`, e)).data;\n}\nasync function u(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 d(e) {\n\treturn (await n.post(`${a}/brands`, e)).data;\n}\nasync function f(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 p(e) {\n\treturn (await n.get(`${a}/products/${e}`)).data;\n}\nasync function m(e) {\n\treturn (await n.post(`${a}/products`, e)).data;\n}\nasync function h(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 g(e) {\n\treturn (await n.get(`${a}/products/images/${e}`, { responseType: \"blob\" })).data;\n}\nasync function _({ 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 v(e) {\n\treturn (await n.post(`${a}/storage-units`, e)).data;\n}\nasync function y(e, t) {\n\treturn (await n.post(`${a}/storage-units/${e}/temperature/evaluate`, { temperatureCelsius: t })).data;\n}\nasync function b(e, t) {\n\treturn (await n.post(`${a}/storage-units/${e}/temperature`, t)).data;\n}\nasync function x() {\n\treturn (await n.get(`${a}/facilities`)).data ?? [];\n}\nasync function S(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 C(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 w(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 T() {\n\treturn (await n.get(`${a}/inventory/dues/by-member`)).data ?? [];\n}\nasync function E(e) {\n\treturn (await n.get(`${a}/inventory/dues/by-member/${e}`)).data;\n}\nasync function D() {\n\treturn (await n.get(`${a}/inventory/batches`)).data ?? [];\n}\nasync function O() {\n\treturn (await n.get(`${a}/inventory/vials/open`)).data ?? [];\n}\nasync function k(e) {\n\treturn (await n.get(`${a}/inventory/vials/by-product/${e}`)).data ?? [];\n}\nasync function A(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 j(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 M(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 N(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 P(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 F(e) {\n\treturn (await n.post(`${a}/inventory/purchase`, e)).data;\n}\nasync function I(e) {\n\treturn (await n.post(`${a}/inventory/transfer`, e)).data;\n}\nasync function L(e, t) {\n\treturn (await n.post(`${a}/inventory/transfer/${e}/confirm`, t ?? {})).data;\n}\nasync function R(e, t) {\n\treturn (await n.post(`${a}/inventory/transfer/${e}/cancel`, t ?? {})).data;\n}\nasync function z() {\n\treturn (await n.get(`${a}/inventory/transfers`)).data ?? [];\n}\nasync function B(e) {\n\treturn (await n.post(`${a}/inventory/pickup`, e)).data;\n}\nasync function V(e, t) {\n\treturn (await n.post(`${a}/inventory/pickup/${e}/return`, t)).data;\n}\nasync function H(e, t) {\n\treturn (await n.post(`${a}/inventory/pickup/${e}/topup`, t)).data;\n}\nasync function oe() {\n\treturn (await n.get(`${a}/inventory/pickups`)).data ?? [];\n}\nasync function U() {\n\treturn (await n.get(`${a}/inventory/pickups/mine/open`)).data ?? [];\n}\nasync function W(e) {\n\treturn (await n.get(`${a}/inventory/pickups/assignable-users/${e}`)).data ?? [];\n}\nasync function G(e) {\n\treturn (await n.post(`${a}/inventory/purchase-request`, e)).data;\n}\nasync function K() {\n\treturn (await n.get(`${a}/inventory/purchase-requests/mine`)).data ?? [];\n}\nasync function q() {\n\treturn (await n.get(`${a}/inventory/purchase-requests/approvals`)).data ?? [];\n}\nasync function se(e) {\n\treturn (await n.get(`${a}/inventory/purchase-requests/${e}`)).data;\n}\nasync function ce(e, t) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/decision`, t)).data;\n}\nasync function le(e) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/cancel`)).data;\n}\nasync function ue(e, t) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/ship`, t ?? {})).data;\n}\nasync function de(e, t) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/receive`, t ?? {})).data;\n}\nasync function fe(e, t) {\n\treturn (await n.post(`${a}/inventory/purchase-request/${e}/correct`, t)).data;\n}\nasync function pe(e) {\n\treturn (await n.post(`${a}/inventory/sale`, e)).data;\n}\nasync function me(e) {\n\treturn (await n.post(`${a}/inventory/payment`, e)).data;\n}\nasync function he(e) {\n\treturn (await n.post(`${a}/inventory/vial/close`, e)).data;\n}\nasync function ge(e) {\n\treturn (await n.post(`${a}/inventory/batch/quarantine`, e)).data;\n}\nasync function _e(e) {\n\treturn (await n.post(`${a}/inventory/batch/wastage`, e)).data;\n}\nasync function ve(e) {\n\treturn (await n.post(`${a}/inventory/batch/unquarantine`, e)).data;\n}\nvar ye = 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 be(e) {\n\treturn e ? ye[e]?.symbol ?? e : \"₹\";\n}\n//#endregion\n//#region src/utils/settingsStore.js\nvar xe = {\n\tmemberTableName: null,\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...xe,\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 Se(e) {\n\tJ = Z(e), Q();\n}\nfunction Ce() {\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 { V as $, W as A, te as B, w as C, o as D, se as E, U as F, z as G, j as H, K as I, b as J, ne as K, O as L, ie as M, ae as N, _ as O, x as P, B as Q, M as R, C as S, f as T, re as U, A as V, N as W, P as X, ge as Y, de as Z, c as _, le as a, h as at, E as b, L as c, m as ct, F as d, _e as dt, H as et, pe as f, u as g, g as h, be as i, ve as it, D as j, q as k, fe as l, ee as lt, y as m, Se as n, I as nt, R as o, d as ot, ce as p, k as q, Ce as r, G as rt, he as s, l as st, $ as t, ue as tt, me as u, v as ut, S as v, p as w, T as x, s as y, oe as z };\n\n//# sourceMappingURL=settingsStore-BifOsjlB.js.map","import { i as e, r as t } from \"./settingsStore-BifOsjlB.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-_GbScaa4.js.map","import { F as e, L as t, P as n, T as r, j as i, q as a, r as o } from \"./settingsStore-BifOsjlB.js\";\nimport { l as s, o as c } from \"./PmTable-_GbScaa4.js\";\nimport { S as ee } from \"./constants-ClZJY2x1.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-C3bKc5na.js\")), k = f(() => import(\"./CategoriesPage-BsS5IQh3.js\")), A = f(() => import(\"./BrandsPage-DmRW5bhm.js\")), j = f(() => import(\"./ProductsPage-CupVmOD4.js\")), M = f(() => import(\"./ProductEditPage-C1thoKHu.js\")), N = f(() => import(\"./StorageUnitsPage-7EqwuMOI.js\")), P = f(() => import(\"./InventoryPage-C_AxSy7A.js\")), F = f(() => import(\"./PurchasesPage-It1GHiXl.js\")), I = f(() => import(\"./PurchaseCreatePage-YD3NmhPQ.js\")), be = f(() => import(\"./PurchaseRequestsPage-DPAPzpmm.js\")), L = f(() => import(\"./PurchaseRequestDetailPage-Dg_MRY_N.js\")), xe = f(() => import(\"./PickupsPage-Ctpghavs.js\")), R = f(() => import(\"./PickupCreatePage-CB0Sl0Hb.js\")), Se = f(() => import(\"./TransfersPage-Cf701t8s.js\")), z = f(() => import(\"./TransferCreatePage-CuvoMrYH.js\")), B = f(() => import(\"./SalesPage-D18DCseD.js\")), V = f(() => import(\"./SaleCreatePage-C9kFmTvm.js\")), Ce = f(() => import(\"./PaymentsPage-BvPe5Q9F.js\")), H = f(() => import(\"./PaymentCreatePage-CIVe0P0p.js\")), we = f(() => import(\"./VialsPage-8oAc1yFv.js\")), U = f(() => import(\"./TransactionsPage-DrH53pVS.js\")), W = f(() => import(\"./SettingsPage-VsxI-ano.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/components/ProductAdministrationDialog.jsx\nfunction Te(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 Ee(e) {\n\treturn e.expiryDate ? new Date(e.expiryDate).getTime() : Infinity;\n}\nfunction De(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 Oe(e, t, n) {\n\treturn `${e} ${e === 1 ? t : n ?? `${t}s`}`;\n}\nvar ke = {\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 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 Ae(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 je(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 Me(e, t, n) {\n\tlet r = e?.profiles ?? [];\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 Ne({ 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(ke), [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...ke,\n\t\t\t\tproductId: N\n\t\t\t}), B([]);\n\t\t\tasync function a() {\n\t\t\t\twe(!0);\n\t\t\t\ttry {\n\t\t\t\t\tlet [a, o, s, c, ee] = await Promise.all([\n\t\t\t\t\t\tr(),\n\t\t\t\t\t\ti(),\n\t\t\t\t\t\tn().catch(() => []),\n\t\t\t\t\t\te().catch(() => []),\n\t\t\t\t\t\tt().catch(() => [])\n\t\t\t\t\t]);\n\t\t\t\t\tbe(a), 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\ta();\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 = Pe(t.id).filter((t) => De(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 && De(n, e)).length, a = [];\n\t\t\tr > 0 && a.push(`${Oe(r, \"unit\")} in ${Oe(n.length, \"batch\", \"batches\")}`), i > 0 && a.push(Oe(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]), Ne = j && q.length === 0;\n\tfunction Pe(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) => Ee(e) - Ee(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\tif (t?.unit !== \"DROPS\" && e.singleDose) return { volumeMl: e.vialVolumeMl ?? \"\" };\n\t\tlet n = Me(e, k, A);\n\t\treturn { volumeMl: n.profile ? n.profile.doseAmount ?? \"\" : \"\" };\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 [t, r, o, s] = await Promise.all([\n\t\t\t\t\ta(P.productId),\n\t\t\t\t\ti().catch(() => L),\n\t\t\t\t\tn().catch(() => R),\n\t\t\t\t\te().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) => De(e, c), u = t.filter(l), te = Date.now(), d = u.filter((e) => e.status === \"OPEN\" && !e.expired && Te(e) > te && Number(e.volumeRemainingMl) > 0).sort((e, t) => Te(e) - Te(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 = Pe(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, Q = m(() => X && !Ue ? Me(X, k, A) : null, [\n\t\tX,\n\t\tUe,\n\t\tk,\n\t\tA\n\t])?.profile ?? null, We = m(() => Ae(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})(), Ge = ne($);\n\tfunction Ke() {\n\t\tif (!Ge) {\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 || je(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 qe() {\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: [Ne ? /* @__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}), Ue ? /* @__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: \"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}) : k ? 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\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\tWe || \"—\",\n\t\t\t\t\t\t\t\tQ.label ? ` · ${Q.label}` : ` · ${je(Q)}`,\n\t\t\t\t\t\t\t\t\" — dose selected automatically.\"\n\t\t\t\t\t\t\t]\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\"No dose profile is configured for a patient aged \",\n\t\t\t\t\t\t\t\tWe || \"this age\",\n\t\t\t\t\t\t\t\t\". Ask an administrator to add a matching profile. Administration is blocked.\"\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: \"warning\",\n\t\t\t\t\t\t\tchildren: \"This vaccine's dose depends on the patient's age, but no reference date (such as date of birth) is available. Administration is blocked.\"\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: qe,\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 || Ne,\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: !Ge || P.loading,\n\t\t\t\t\tonClick: Ke,\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}\nNe.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 { Ne as ProductAdministrationDialog, r as getProducts, n as listFacilities, 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 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 loadScheduleIntoDraft,\n removeProductSchedule,\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\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 * 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) => {\n const productSchedules = flushDraftIntoSchedules(draft, selectedProductId);\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 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.\n const configured = schedules.filter((schedule) => schedule.doses > 0);\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.doses} ${schedule.doses === 1 ? \"Dose\" : \"Doses\"}`}\n {\" · \"}\n <EligibilityText eligibility={schedule.eligibility} />\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\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 const [doseTypeConfirmation, setDoseTypeConfirmation] = useState({\n open: false,\n vaccineId: null,\n newDoseType: null,\n });\n\n const [scheduleTypeConfirmation, setScheduleTypeConfirmation] = useState({\n open: false,\n vaccineId: 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 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 }));\n\n // Non-routine vaccines are FIXED only, so a FLEXIBLE one has to be converted.\n // `handleUpdateDoseType` no-ops when the dose type already matches.\n if (isNonRoutine) {\n handleUpdateDoseType(vaccineId, \"FIXED\");\n }\n },\n [handleUpdateDoseType, updateEditedVaccine],\n );\n\n const handleUpdateScheduleTypeRequested = useCallback(\n (vaccineId, isNonRoutine) => {\n const current =\n editedVaccines[vaccineId] || getInitialVaccineData(vaccineId);\n\n // Converting away from FLEXIBLE drops the per-dose configuration, so confirm first.\n if (isNonRoutine && current.doseType === \"FLEXIBLE\") {\n setScheduleTypeConfirmation({ open: true, vaccineId });\n return;\n }\n\n handleUpdateScheduleType(vaccineId, isNonRoutine);\n },\n [editedVaccines, getInitialVaccineData, handleUpdateScheduleType],\n );\n\n const confirmScheduleTypeChange = useCallback(() => {\n handleUpdateScheduleType(scheduleTypeConfirmation.vaccineId, true);\n setScheduleTypeConfirmation({ open: false, vaccineId: null });\n }, [handleUpdateScheduleType, scheduleTypeConfirmation]);\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 handleSelectProduct = useCallback(\n (vaccineId, productId) => {\n const previousProductId = selectedProductByVaccine[vaccineId] ?? null;\n\n updateEditedVaccine(\n vaccineId,\n (currentData) => {\n const flushed =\n previousProductId === null\n ? currentData\n : {\n ...currentData,\n productSchedules: flushDraftIntoSchedules(\n currentData,\n previousProductId,\n ),\n };\n return productId === null\n ? flushed\n : loadScheduleIntoDraft(flushed, productId);\n },\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 [\n dispatch,\n selectedProductByVaccine,\n updateEditedVaccine,\n revealExpansionFooter,\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 handleDiscard = (vaccineId) => {\n setEditedVaccines((prev) => {\n const updated = { ...prev };\n delete updated[vaccineId];\n return updated;\n });\n setSelectedProductByVaccine((prev) => ({ ...prev, [vaccineId]: null }));\n toggleExpand(vaccineId);\n };\n\n const handleAddCustomVaccine = (data) => {\n dispatch(addCustomVaccine({ ...data, isActive: true }));\n setIsModalOpen(false);\n };\n\n const handleSaveVaccineDetails = async (vaccineId) => {\n const draft =\n editedVaccines[vaccineId] ||\n scheduledVaccines.find((sv) => sv.id === vaccineId) ||\n getInitialVaccineData(vaccineId);\n\n if (draft) {\n const selectedProductId = selectedProductByVaccine[vaccineId] ?? null;\n\n // With product management on, the per-product half of the form is only on screen once a\n // product has been picked, so there is nothing meaningful to validate or save until then.\n if (isProductManagementEnabled && selectedProductId === null) {\n showToast({\n message: \"Select a product to configure its schedule before saving.\",\n type: \"error\",\n });\n return;\n }\n\n // Only the product on screen is validated. The other products' entries are carried\n // through untouched, so a problem in one the admin never opened cannot block this save.\n const errors = validateVaccineForm(draft);\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(draft, selectedProductId);\n const savedDraft = {\n ...draft,\n productSchedules: flushDraftIntoSchedules(draft, selectedProductId),\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 return (\n <React.Fragment key={vaccine.id}>\n <TableRow\n className={`table-row ${isExpanded ? \"expanded-row\" : \"\"}`}\n onClick={() => !isExpanded && toggleExpand(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 toggleExpand(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 handleDiscard(vaccine.id);\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 component=\"fieldset\"\n disabled={!canEditVaccine}\n sx={{\n border: 0,\n p: 0,\n m: 0,\n minInlineSize: 0,\n ...(canEditVaccine\n ? {}\n : { pointerEvents: \"none\", opacity: 0.7 }),\n }}\n >\n <Box className=\"expansion-container\">\n <Box className=\"left-panel\">\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 <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n checked={\n vaccine.scheduleType ===\n SCHEDULE_TYPE_NON_ROUTINE\n }\n onChange={(e) =>\n handleUpdateScheduleTypeRequested(\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 {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 {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 {/* 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 <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 {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 <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 isFlexibleDisabled={\n vaccine.scheduleType ===\n SCHEDULE_TYPE_NON_ROUTINE\n }\n errors={\n validationErrors[vaccine.id]?.doseDetails\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 </Box>\n <Box className=\"right-panel\">\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 </Box>\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 <Button\n variant=\"contained\"\n className=\"save-btn\"\n endIcon={<FontAwesomeIcon icon={faArrowRight} />}\n onClick={() =>\n handleSaveVaccineDetails(vaccine.id)\n }\n >\n SAVE VACCINE DETAILS\n </Button>\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={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 <CustomConfirmationModal\n open={scheduleTypeConfirmation.open}\n handleClose={() =>\n setScheduleTypeConfirmation({ open: false, vaccineId: null })\n }\n handleClick={confirmScheduleTypeChange}\n title=\"Confirm Non-Routine Change\"\n description=\"Non-routine vaccines support the FIXED dose type only. Marking this vaccine as non-routine will convert it to FIXED and may result in data loss for the existing dose configuration. Are you sure you want to proceed?\"\n dataTestId=\"scheduletype-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","DoseDetailsTable","doses","doseType","doseCount","durationUnits","onDurationUnitsUpdate","onUpdate","onDoseTypeChange","isFlexibleDisabled","deleteConfirmModal","setDeleteConfirmModal","safeDurationUnits","boosterAliasModal","setBoosterAliasModal","isFixed","durationColumnWidth","durationColumnSx","compactNumberCellSx","safeDoses","lifelongFromIdx","dose","handleFieldChange","field","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","next","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","label","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","Checkbox","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","PER_PRODUCT_FIELDS","pickPerProductFields","source","picked","flushDraftIntoSchedules","schedules","existingIndex","loadScheduleIntoDraft","removeProductSchedule","helperGetDays","helperGetOptionalDays","helperGetEligibleTo","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","O","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","xe","J","Y","X","Z","Q","$","Se","Ce","SCHEDULE_TYPE_LABELS","labelOrValue","map","isMeaningfullyEqual","before","after","describeValue","describeScalar","lines","summariseProductSchedules","beforeList","afterList","productNameById","list","entry","suffix","existedBefore","existsAfter","buildConfigChangeSummary","MAX_DOSES","SCHEDULE_TYPE_ROUTINE","SCHEDULE_TYPE_NON_ROUTINE","formatEligibilityPart","part","trimmed","LIFELONG_ELIGIBILITY","unitMatch","prepareVaccinePayload","selectedProductId","productSchedules","filtersJSON","codeSetsArray","MAX_COLLAPSED_PRODUCTS","EligibilityText","eligibility","ScheduleSummaryCell","productsById","isProductManagementEnabled","configured","visible","hiddenCount","applyLifelongCascade","firstLifelongIdx","SavedNotLiveModal","ImmunizationSummary","validationErrors","expandedRowId","setExpandedRowId","setShowInactive","useIsProductManagementEnabled","setPmProducts","selectedProductByVaccine","setSelectedProductByVaccine","isFiltersModalOpen","setIsFiltersModalOpen","isRecipientModalOpen","setIsRecipientModalOpen","setEditedVaccines","hasFilterRight","hasRecipientRight","canEditVaccine","savedNotLiveOpen","setSavedNotLiveOpen","statusConfirmation","setStatusConfirmation","doseTypeConfirmation","setDoseTypeConfirmation","scheduleTypeConfirmation","setScheduleTypeConfirmation","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","handleUpdateScheduleType","isNonRoutine","handleUpdateScheduleTypeRequested","confirmScheduleTypeChange","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","handleSelectProduct","previousProductId","flushed","handleRemoveProductSchedule","handleDiscard","handleSaveVaccineDetails","validateVaccineForm","setValidationErrors","savedDraft","displayVaccines","isExpanded","linkedProducts","showScheduleEditors","faChevronUp","faChevronDown","Collapse","FormControlLabel","count","details","updatedDeps","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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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;AAAA,EACR;AAAA,EACC;AAAA,IACC,MAAM;AAAA,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"}
|