@argusoft/medplat-core 1.0.27 → 1.0.29

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.
Files changed (97) hide show
  1. package/dist/AccessRights-Zm8Obm4N.js +1284 -0
  2. package/dist/AccessRights-Zm8Obm4N.js.map +1 -0
  3. package/dist/{AddFeatures-C0Z29oSd.js → AddFeatures-v3TmGQee.js} +2 -2
  4. package/dist/{AddFeatures-C0Z29oSd.js.map → AddFeatures-v3TmGQee.js.map} +1 -1
  5. package/dist/AddMenuConfiguration-Ce91MhnU.js +8547 -0
  6. package/dist/AddMenuConfiguration-Ce91MhnU.js.map +1 -0
  7. package/dist/{AddRoleDrawer-CQdzQZLb.js → AddRoleDrawer-0gqAK8N0.js} +62 -63
  8. package/dist/AddRoleDrawer-0gqAK8N0.js.map +1 -0
  9. package/dist/{ChangePasswordModalCore-CDxkeIIM.js → ChangePasswordModalCore-DutQAZOx.js} +2 -2
  10. package/dist/{ChangePasswordModalCore-CDxkeIIM.js.map → ChangePasswordModalCore-DutQAZOx.js.map} +1 -1
  11. package/dist/{ConditionConfig-DSsgGEXS.js → ConditionConfig-B4Ffpgj3.js} +2 -2
  12. package/dist/ConditionConfig-B4Ffpgj3.js.map +1 -0
  13. package/dist/{EntityManagement-GaYsBTvf.js → EntityManagement-CPQL6qBj.js} +2 -2
  14. package/dist/{EntityManagement-GaYsBTvf.js.map → EntityManagement-CPQL6qBj.js.map} +1 -1
  15. package/dist/{EventConfigurations-kNtAj_WM.js → EventConfigurations-BJcURufo.js} +3 -3
  16. package/dist/{EventConfigurations-kNtAj_WM.js.map → EventConfigurations-BJcURufo.js.map} +1 -1
  17. package/dist/{EventsExceptionModal-D4Bf1ilS.js → EventsExceptionModal-BlZtBQoR.js} +2 -2
  18. package/dist/{EventsExceptionModal-D4Bf1ilS.js.map → EventsExceptionModal-BlZtBQoR.js.map} +1 -1
  19. package/dist/{EventsSkeleton-8iiETGcf.js → EventsSkeleton-DK6JDKAK.js} +26 -19
  20. package/dist/EventsSkeleton-DK6JDKAK.js.map +1 -0
  21. package/dist/{FeatureMenu-jl7-Tk6y.js → FeatureMenu-C3503UIX.js} +3 -3
  22. package/dist/{FeatureMenu-jl7-Tk6y.js.map → FeatureMenu-C3503UIX.js.map} +1 -1
  23. package/dist/Features-Dne21RWu.js +14 -0
  24. package/dist/Features-Dne21RWu.js.map +1 -0
  25. package/dist/FileSaver.min-CN9EpL2h.js.map +1 -1
  26. package/dist/{ManageNotification-CaBAOhji.js → Google-DQxMfbaL.js} +1725 -2652
  27. package/dist/Google-DQxMfbaL.js.map +1 -0
  28. package/dist/ImmunizationConfigurationBase-DLQVSNnt.js +5895 -0
  29. package/dist/ImmunizationConfigurationBase-DLQVSNnt.js.map +1 -0
  30. package/dist/ImmunizationConfigurationBase.css +1 -1
  31. package/dist/ImmunizationSkeleton-D2tdv5k-.js.map +1 -1
  32. package/dist/{ManageDynamicFeature-BhONvfC_.js → ManageDynamicFeature-dt096fyj.js} +2 -2
  33. package/dist/{ManageDynamicFeature-BhONvfC_.js.map → ManageDynamicFeature-dt096fyj.js.map} +1 -1
  34. package/dist/{ManageEventConfiguration-DV3I5POA.js → ManageEventConfiguration-BpSJszSX.js} +5 -5
  35. package/dist/{ManageEventConfiguration-DV3I5POA.js.map → ManageEventConfiguration-BpSJszSX.js.map} +1 -1
  36. package/dist/ManageNotification-CfhHlfxA.js +934 -0
  37. package/dist/ManageNotification-CfhHlfxA.js.map +1 -0
  38. package/dist/{ManageRole-CGYfglpo.js → ManageRole-4Y2PP4dQ.js} +32 -30
  39. package/dist/ManageRole-4Y2PP4dQ.js.map +1 -0
  40. package/dist/{ManageUser-AY1EUDLI.js → ManageUser-DDzyd9jm.js} +1728 -1592
  41. package/dist/ManageUser-DDzyd9jm.js.map +1 -0
  42. package/dist/MobileMenuManagement-Cf8IZlla.js +108 -0
  43. package/dist/MobileMenuManagement-Cf8IZlla.js.map +1 -0
  44. package/dist/{MobileTypeEventConfigModal-BxLympIO.js → MobileTypeEventConfigModal-DUkUYACe.js} +2 -2
  45. package/dist/MobileTypeEventConfigModal-DUkUYACe.js.map +1 -0
  46. package/dist/{NotificationList-C3Vb_jKU.js → NotificationList-BMFpNUJG.js} +109 -110
  47. package/dist/NotificationList-BMFpNUJG.js.map +1 -0
  48. package/dist/{OtherTypeEventConfigModal-BeG1GrUi.js → OtherTypeEventConfigModal-CYBfr2XE.js} +570 -478
  49. package/dist/OtherTypeEventConfigModal-CYBfr2XE.js.map +1 -0
  50. package/dist/{RoleManagement-BPl2cE27.js → RoleManagement-DEiBNfT8.js} +100 -101
  51. package/dist/RoleManagement-DEiBNfT8.js.map +1 -0
  52. package/dist/{ServerSyncModal-D_oFpv3C.js → ServerSyncModal-92U3xtqI.js} +84 -85
  53. package/dist/ServerSyncModal-92U3xtqI.js.map +1 -0
  54. package/dist/{SubMenu-DYxAPH2Z.js → SubMenu-B072oEGb.js} +3 -3
  55. package/dist/{SubMenu-DYxAPH2Z.js.map → SubMenu-B072oEGb.js.map} +1 -1
  56. package/dist/{TableDetails-Cf_YfnY2.js → TableDetails-BtafRxXb.js} +1069 -831
  57. package/dist/TableDetails-BtafRxXb.js.map +1 -0
  58. package/dist/{TableList-D6jnIbnz.js → TableList-Dpo6dO7S.js} +2 -2
  59. package/dist/{TableList-D6jnIbnz.js.map → TableList-Dpo6dO7S.js.map} +1 -1
  60. package/dist/{TypeConfiguration-37wp-gsl.js → TypeConfiguration-C3xoP2Nb.js} +2 -2
  61. package/dist/{TypeConfiguration-37wp-gsl.js.map → TypeConfiguration-C3xoP2Nb.js.map} +1 -1
  62. package/dist/{WidgetList-Dw_FmbbE.js → WidgetList-D7YuWfDD.js} +2 -2
  63. package/dist/{WidgetList-Dw_FmbbE.js.map → WidgetList-D7YuWfDD.js.map} +1 -1
  64. package/dist/dashboardLayoutUtils-D1xCAxp3.js +405 -0
  65. package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +1 -0
  66. package/dist/i18next-CTOWN_jH.js.map +1 -1
  67. package/dist/index.css +1 -1
  68. package/dist/index.js +4 -752
  69. package/dist/index.js.map +1 -1
  70. package/dist/index.lib-C3fwoM3y.js +820 -0
  71. package/dist/index.lib-C3fwoM3y.js.map +1 -0
  72. package/dist/xlsx.min-D1LFqt_b.js.map +1 -1
  73. package/package.json +2 -2
  74. package/dist/AccessRights-CHu27ZOw.js +0 -1262
  75. package/dist/AccessRights-CHu27ZOw.js.map +0 -1
  76. package/dist/AddMenuConfiguration-BSQLl88V.js +0 -6570
  77. package/dist/AddMenuConfiguration-BSQLl88V.js.map +0 -1
  78. package/dist/AddRoleDrawer-CQdzQZLb.js.map +0 -1
  79. package/dist/ConditionConfig-DSsgGEXS.js.map +0 -1
  80. package/dist/EventsSkeleton-8iiETGcf.js.map +0 -1
  81. package/dist/Features-CObdzJp_.js +0 -13
  82. package/dist/Features-CObdzJp_.js.map +0 -1
  83. package/dist/ImmunizationConfigurationBase-BevKZx_l.js +0 -5910
  84. package/dist/ImmunizationConfigurationBase-BevKZx_l.js.map +0 -1
  85. package/dist/ManageNotification-CaBAOhji.js.map +0 -1
  86. package/dist/ManageRole-CGYfglpo.js.map +0 -1
  87. package/dist/ManageUser-AY1EUDLI.js.map +0 -1
  88. package/dist/MobileMenuManagement-CVAKyKDa.js +0 -112
  89. package/dist/MobileMenuManagement-CVAKyKDa.js.map +0 -1
  90. package/dist/MobileTypeEventConfigModal-BxLympIO.js.map +0 -1
  91. package/dist/NotificationList-C3Vb_jKU.js.map +0 -1
  92. package/dist/OtherTypeEventConfigModal-BeG1GrUi.js.map +0 -1
  93. package/dist/RoleManagement-BPl2cE27.js.map +0 -1
  94. package/dist/ServerSyncModal-D_oFpv3C.js.map +0 -1
  95. package/dist/TableDetails-Cf_YfnY2.js.map +0 -1
  96. package/dist/dashboardLayoutUtils-Bt5HA96J.js +0 -265
  97. package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImmunizationConfigurationBase-DLQVSNnt.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/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 &ldquo;Add New&rdquo; 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>&quot;{usageWarning.bdName}&quot;</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&apos;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 &ldquo;Add New&rdquo; 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>&quot;{usageWarning.filterName}&quot;</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&apos;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 &ldquo;Add New&rdquo; 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 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 }) => {\n return (\n <Select\n size=\"small\"\n value={value}\n onChange={onChange}\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};\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 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}\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 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 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 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 const updatedDoses = baseArray.map((d, i) => {\n if (i !== idx) return d;\n const prevUnits = d.units || {\n eligibleFrom: 'days',\n eligibleTo: 'days',\n interval: 'days',\n overdueFrom: 'days',\n overdueTill: 'days',\n };\n // Lifelong is not a real unit, so it never overwrites the stored one — that keeps the\n // original unit intact on the round-trip to the database.\n const newUnits = newUnit === LIFELONG_UNIT ? prevUnits : { ...prevUnits, [unitField]: newUnit };\n const updatedDose = { ...d, units: newUnits };\n\n if (unitField === 'eligibleTo' && newUnit === LIFELONG_UNIT) {\n updatedDose.eligibleTo = null;\n return updatedDose;\n }\n if (unitField === 'eligibleTo' && isLifelong(d.eligibleTo)) {\n // Coming back from lifelong: there is no quantity to preserve.\n updatedDose.eligibleTo = `0 ${newUnit}`;\n return updatedDose;\n }\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 // Only the end of the series can be open-ended; FIXED has one shared window.\n const allowLifelong = isFixed || idx === safeDoses.length - 1;\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 <DurationInput\n compact={!isFixed}\n defaultValue={dose?.eligibleTo}\n error={toError}\n allowLifelong={allowLifelong}\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 </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) => api.post('/resource/getdata/create_location_type', data);\n\nexport const getLocationTypeById = (data) => api.post('/resource/getdata/retrieve_location_type_by_id', data);\n\nexport const updateLocationType = (data) => api.post('/resource/getdata/update_location_type', data);\n\nexport const toggleLocationTypeStatus = (data) => api.post('/resource/getdata/toggle_location_type_status', 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 &quot;+ ADD REGION&quot; 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 &quot;+ ADD DEPENDENCY&quot; 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 &quot;+ ADD CODE SET&quot; 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 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 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 React, { useState, useCallback, useMemo } from 'react';\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} 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} 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 { ImmunizationUtil } from './service/ImmunizationUtil';\nimport { showToast } from '@/common/toaster/toaster';\nimport { LIFELONG_ELIGIBILITY, isLifelong, validateVaccineForm } from './utils/validationUtils';\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 === '') 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')) return `${qty} ${qty === 1 ? 'Year' : 'Years'}`;\n if (unit.startsWith('month')) return `${qty} ${qty === 1 ? 'Month' : 'Months'}`;\n if (unit.startsWith('week')) return `${qty} ${qty === 1 ? 'Week' : 'Weeks'}`;\n return `${qty} ${qty === 1 ? 'Day' : 'Days'}`;\n }\n};\n\nconst prepareVaccinePayload = (draft) => {\n const 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\n const 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 SQL NULL — the one value the engine reads as\n // \"no upper bound\". 0 would mean \"expires on the base date\".\n const helperGetEligibleTo = (val) => (isLifelong(val) ? null : helperGetDays(val));\n\n const doseRows = (() => {\n if (draft.doseType === 'FIXED') return '[]';\n let regularCount = 0;\n let boosterCount = 0;\n return JSON.stringify(\n (draft.doseDetails || []).map((d, idx, arr) => {\n let doseLabel;\n if (d.isBooster) {\n boosterCount++;\n doseLabel = `B${boosterCount}`;\n } else {\n regularCount++;\n doseLabel = regularCount;\n }\n return {\n dose: doseLabel,\n is_booster: !!d.isBooster,\n ...(d.isBooster && d.alias ? { alias: d.alias.trim() } : {}),\n eligible_from: helperGetDays(d.eligibleFrom),\n eligible_to: helperGetEligibleTo(d.eligibleTo),\n overdue_from: helperGetOptionalDays(d.overdueFrom),\n overdue_till: helperGetOptionalDays(d.overdueTill),\n min_gap: idx === arr.length - 1 ? 0 : Number.parseInt(d.interval) || 0,\n eligible_from_unit: d.units?.eligibleFrom || 'days',\n eligible_to_unit: d.units?.eligibleTo || 'days',\n interval_unit: d.units?.interval || 'days',\n overdue_from_unit: d.units?.overdueFrom || 'days',\n overdue_till_unit: d.units?.overdueTill || 'days',\n };\n })\n );\n })();\n\n const locationArray = JSON.stringify(\n (draft.regions || []).map((r) => ({\n locationId: r.locationId,\n locationIdArr: r.locationIdArr,\n locationList: r.locationList,\n }))\n );\n\n const dependencyArray = JSON.stringify(\n (draft.dependencies || []).map((dep) => ({\n vaccine: dep.vaccine,\n requirement: dep.requirement,\n minGap: Number.parseInt(dep.minGap) || 0,\n maxGap: Number.parseInt(dep.maxGap) || 0,\n }))\n );\n\n const filtersPayload = draft.filters || [];\n const filtersJSON = JSON.stringify(filtersPayload);\n\n const codeSetsArray = JSON.stringify(\n (draft.codeSets || []).map((cs) => ({\n type: cs.type,\n value: cs.value,\n }))\n );\n\n const durationUnitsJSON = JSON.stringify(\n draft.durationUnits || {\n eligibleFrom: 'days',\n eligibleTo: 'days',\n interval: 'days',\n }\n );\n\n return {\n parameters: {\n vaccineId: draft.id,\n vaccineName: draft.name,\n noOfDoses: draft.doses,\n dose: doseRows,\n doseType: draft.doseType,\n status: draft.isActive,\n fixedEligibleFrom:\n draft.doseType === 'FIXED'\n ? helperGetDays(\n Array.isArray(draft.doseDetails) ? draft.doseDetails[0]?.eligibleFrom : draft.doseDetails?.eligibleFrom\n )\n : null,\n fixedEligibleTo:\n draft.doseType === 'FIXED'\n ? helperGetEligibleTo(\n Array.isArray(draft.doseDetails) ? draft.doseDetails[0]?.eligibleTo : draft.doseDetails?.eligibleTo\n )\n : null,\n fixedInterval:\n draft.doseType === 'FIXED' && draft.doses > 1\n ? helperGetDays(\n Array.isArray(draft.doseDetails) ? draft.doseDetails[0]?.interval : draft.doseDetails?.interval\n )\n : draft.doseType === 'FIXED'\n ? 0\n : null,\n location: locationArray,\n dependencies: dependencyArray,\n filters: filtersJSON,\n codeSets: codeSetsArray,\n durationUnits: draft.doseType == 'FIXED' ? durationUnitsJSON : null,\n baseDateCode: draft.baseDateCode,\n recipientType: draft.recipientType,\n scheduleType: draft.scheduleType || SCHEDULE_TYPE_ROUTINE,\n },\n };\n};\n\nconst clearNonTerminalLifelong = (doseDetails, doseType) => {\n if (doseType !== 'FLEXIBLE' || !Array.isArray(doseDetails)) return doseDetails;\n\n return doseDetails.map((dose, idx) =>\n isLifelong(dose?.eligibleTo) && idx !== doseDetails.length - 1 ? { ...dose, eligibleTo: '' } : dose\n );\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 [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 = rights?.['update.admin.immunizationConfiguration.filter'];\n const hasRecipientRight = rights?.['update.admin.immunizationConfiguration.recipient'];\n const canAddVaccine = rights?.['create.admin.immunizationConfiguration.vaccine'];\n const canEditVaccine = rights?.['update.admin.immunizationConfiguration.vaccine'];\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 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 }\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 = 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 : clearNonTerminalLifelong(updatedDoseDetails, doseType);\n\n return {\n ...currentData,\n doses: newDoseCount,\n doseDetails: finalDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(finalDoseDetails, doseType, newDoseCount),\n };\n });\n },\n [updateEditedVaccine]\n );\n\n const handleUpdateDoseDetails = useCallback(\n (vaccineId, updatedDoseDetails, doseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const newDoseCount = doseType === 'FLEXIBLE' ? updatedDoseDetails.length : currentData.doses;\n const finalDoseDetails = clearNonTerminalLifelong(updatedDoseDetails, doseType);\n\n return {\n ...currentData,\n doses: newDoseCount,\n doseDetails: finalDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(finalDoseDetails, doseType, newDoseCount),\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 = clearNonTerminalLifelong(updatedDoseDetails, newDoseType);\n\n return {\n ...currentData,\n doseType: newDoseType,\n doseDetails: finalDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(finalDoseDetails, newDoseType, currentData.doses),\n };\n });\n },\n [updateEditedVaccine]\n );\n\n const handleUpdateDoseTypeRequested = useCallback(\n (vaccineId, newDoseType) => {\n const current = 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 ? SCHEDULE_TYPE_NON_ROUTINE : 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 = 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 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 showToast({\n message: `Vaccine status marked as ${newStatus ? 'Active' : 'Inactive'}.`,\n type: 'success',\n });\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 }, [statusConfirmation, getInitialVaccineData]);\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) => 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 = !currentBaseDateCode || 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 = rawDoseDetails && !Array.isArray(rawDoseDetails) && typeof rawDoseDetails === 'object';\n\n const detailsArray = isObjectForm ? [rawDoseDetails] : Array.isArray(rawDoseDetails) ? rawDoseDetails : [];\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 = typeof dose.eligibleFrom === 'string' && 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 (updatedUnits.eligibleTo !== prevUnits.eligibleTo && !isLifelong(dose.eligibleTo)) {\n const isBirth = typeof dose.eligibleTo === 'string' && 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 const handleDiscard = (vaccineId) => {\n setEditedVaccines((prev) => {\n const updated = { ...prev };\n delete updated[vaccineId];\n return updated;\n });\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 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);\n\n try {\n await ImmunizationUtil.updateImmunization(payload);\n dispatch(updateScheduledVaccine(draft));\n dispatch(clearValidationErrors(vaccineId));\n\n showToast({\n message: 'Vaccine details updated successfully!',\n type: 'success',\n });\n\n setEditedVaccines((prev) => {\n const updated = { ...prev };\n delete updated[vaccineId];\n return updated;\n });\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 return (\n <Box className=\"immunization-summary\">\n <Box className=\"header-section\">\n <Box className=\"title-group\">\n <Typography className=\"page-title\">Immunization Configuration</Typography>\n <Typography className=\"page-subtitle\">Configure the specific details for your selected vaccines.</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 checked={showInactive} onChange={(e) => setShowInactive(e.target.checked)} />\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\">NUMBER OF DOSES</TableCell>\n <TableCell className=\"header-cell\">OVERALL ELIGIBILITY(ACCORDING TO BASE DATE)</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 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) => handleUpdateName(vaccine.id, e.target.value)}\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 {vaccine.scheduleType === 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) && 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 <TableCell>\n {isExpanded ? (\n <Box>\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(id, count, details, vaccine.doseType)\n }\n />\n {validationErrors[vaccine.id]?.doses && (\n <Typography variant=\"caption\" color=\"error\" sx={{ mt: 0.5, display: 'block' }}>\n {validationErrors[vaccine.id].doses}\n </Typography>\n )}\n </Box>\n ) : (\n `${vaccine.doses} ${vaccine.doses > 1 ? 'Doses' : 'Dose'}`\n )}\n </TableCell>\n <TableCell className=\"eligibility-cell\">\n {vaccine.eligibility\n ? vaccine.eligibility.split('to').map((part, i) => (\n <React.Fragment key={`${vaccine.id}_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 </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 colSpan={6} className=\"expanded-content-cell\" sx={{ padding: 0 }}>\n <Collapse in={isExpanded} timeout=\"auto\" unmountOnExit>\n <Box\n component=\"fieldset\"\n disabled={!canEditVaccine}\n sx={{\n border: 0,\n p: 0,\n m: 0,\n minInlineSize: 0,\n ...(canEditVaccine ? {} : { 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={vaccine.scheduleType === SCHEDULE_TYPE_NON_ROUTINE}\n onChange={(e) => handleUpdateScheduleTypeRequested(vaccine.id, e.target.checked)}\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 (given only when required)\n </Typography>\n }\n sx={{ ml: 0 }}\n />\n {validationErrors[vaccine.id]?.doseType && (\n <Typography variant=\"caption\" color=\"error\" sx={{ display: 'block' }}>\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) => option?.name || ''}\n isOptionEqualToValue={(option, value) => option.code === value.code}\n value={\n recipientMaster.find((recipient) => recipient.code === vaccine.recipientType) ||\n null\n }\n onChange={(_, newValue) =>\n handleUpdateRecipientType(vaccine.id, newValue?.code || '')\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder=\"Select Recipient Type\"\n error={!!validationErrors[vaccine.id]?.recipientType}\n helperText={validationErrors[vaccine.id]?.recipientType}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\" sx={{ pl: 1 }}>\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(vaccine.recipientType)}\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(vaccine.recipientType).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(vaccine.id, newValue?.code ?? null)\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder={\n vaccine.recipientType ? 'Select Base Date' : 'Select Recipient Type First'\n }\n error={!!validationErrors[vaccine.id]?.baseDateCode}\n helperText={validationErrors[vaccine.id]?.baseDateCode}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\" sx={{ pl: 1 }}>\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 <DoseDetailsTable\n doses={vaccine.doseDetails}\n doseCount={vaccine.doses}\n doseType={vaccine.doseType || 'FIXED'}\n durationUnits={vaccine.durationUnits}\n onDurationUnitsUpdate={(updatedUnits) =>\n handleUpdateDurationUnits(vaccine.id, updatedUnits)\n }\n onUpdate={(updatedDoses) =>\n handleUpdateDoseDetails(vaccine.id, updatedDoses, vaccine.doseType || 'FIXED')\n }\n onDoseTypeChange={(val) => handleUpdateDoseTypeRequested(vaccine.id, val)}\n isFlexibleDisabled={vaccine.scheduleType === SCHEDULE_TYPE_NON_ROUTINE}\n errors={validationErrors[vaccine.id]?.doseDetails}\n />\n </Box>\n <Box className=\"right-panel\">\n <VaccineFilters\n filters={vaccine.filters || []}\n onUpdate={(updatedFilters) => handleUpdateFilters(vaccine.id, updatedFilters)}\n />\n <GeographicalApplicability\n regions={vaccine.regions}\n onUpdate={(updatedRegions) => handleUpdateRegions(vaccine.id, updatedRegions)}\n />\n <VaccineDependencies\n dependencies={vaccine.dependencies || []}\n onUpdate={(updatedDeps) => handleUpdateDependencies(vaccine.id, updatedDeps)}\n vaccineOptions={vaccines.filter((v) => v.isActive && v.id !== vaccine.id)}\n errors={validationErrors[vaccine.id]?.dependencies}\n />\n <VaccineCodeSets\n codeSets={vaccine.codeSets || []}\n onUpdate={(updatedCodeSets) => handleUpdateCodeSets(vaccine.id, updatedCodeSets)}\n errors={validationErrors[vaccine.id]?.codeSets}\n />\n </Box>\n </Box>\n </Box>\n\n <Box className=\"expansion-footer\">\n <Button variant=\"outlined\" className=\"discard-btn\" onClick={() => handleDiscard(vaccine.id)}>\n {canEditVaccine ? 'DISCARD CHANGES' : 'CLOSE'}\n </Button>\n {canEditVaccine && (\n <Button\n variant=\"contained\"\n className=\"save-btn\"\n endIcon={<FontAwesomeIcon icon={faArrowRight} />}\n onClick={() => handleSaveVaccineDetails(vaccine.id)}\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 <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={() => setScheduleTypeConfirmation({ open: false, vaccineId: null })}\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 open={isRecipientModalOpen} onClose={() => setIsRecipientModalOpen(false)} />\n <ConfigureBaseDateModal open={isBaseDateModalOpen} onClose={() => setIsBaseDateModalOpen(false)} />\n <ConfigureFiltersModal open={isFiltersModalOpen} onClose={() => setIsFiltersModalOpen(false)} />\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","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","handleFieldChange","field","sanitizedValue","updatedDose","baseArray","updatedDoses","d","i","newDose","handleFixedEligibleToUnitChange","newUnit","currentDose","handleDoseUnitChange","unitField","prevUnits","newUnits","qty","handleSaveBoosterAlias","confirmDeleteDose","dose","externalErrors","fromError","toError","intervalError","fromUnit","toUnit","fromDays","getDaysVal","toDays","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","MAX_DOSES","SCHEDULE_TYPE_ROUTINE","SCHEDULE_TYPE_NON_ROUTINE","formatEligibilityPart","part","trimmed","LIFELONG_ELIGIBILITY","unitMatch","prepareVaccinePayload","draft","helperGetDays","helperGetOptionalDays","helperGetEligibleTo","doseRows","regularCount","boosterCount","doseLabel","locationArray","dependencyArray","filtersPayload","filtersJSON","codeSetsArray","durationUnitsJSON","clearNonTerminalLifelong","doseDetails","ImmunizationSummary","validationErrors","expandedRowId","setExpandedRowId","setShowInactive","isFiltersModalOpen","setIsFiltersModalOpen","isRecipientModalOpen","setIsRecipientModalOpen","setEditedVaccines","hasFilterRight","hasRecipientRight","canEditVaccine","statusConfirmation","setStatusConfirmation","doseTypeConfirmation","setDoseTypeConfirmation","scheduleTypeConfirmation","setScheduleTypeConfirmation","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","confirmUpdateStatus","setVaccineStatus","handleUpdateStatus","handleUpdateBaseDateCode","newBaseDateCode","getAllowedBaseDateCodes","getAvailableBaseDateOptions","handleUpdateRecipientType","newRecipientType","currentBaseDateCode","isCurrentBaseDateAllowed","handleUpdateCodeSets","updatedCodeSets","handleUpdateDurationUnits","updatedUnits","rawDoseDetails","isObjectForm","detailsArray","remapDose","eligibleFrom","mappedArray","newDoseDetails","handleDiscard","handleSaveVaccineDetails","validateVaccineForm","setValidationErrors","updateScheduledVaccine","displayVaccines","isExpanded","count","details","faChevronUp","faChevronDown","Collapse","FormControlLabel","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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"}