@argusoft/medplat-core 1.0.28 → 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.
- package/dist/AccessRights-Zm8Obm4N.js +1284 -0
- package/dist/AccessRights-Zm8Obm4N.js.map +1 -0
- package/dist/{AddFeatures-C0Z29oSd.js → AddFeatures-v3TmGQee.js} +2 -2
- package/dist/{AddFeatures-C0Z29oSd.js.map → AddFeatures-v3TmGQee.js.map} +1 -1
- package/dist/AddMenuConfiguration-Ce91MhnU.js +8547 -0
- package/dist/AddMenuConfiguration-Ce91MhnU.js.map +1 -0
- package/dist/{AddRoleDrawer-CQdzQZLb.js → AddRoleDrawer-0gqAK8N0.js} +62 -63
- package/dist/AddRoleDrawer-0gqAK8N0.js.map +1 -0
- package/dist/{ChangePasswordModalCore-CDxkeIIM.js → ChangePasswordModalCore-DutQAZOx.js} +2 -2
- package/dist/{ChangePasswordModalCore-CDxkeIIM.js.map → ChangePasswordModalCore-DutQAZOx.js.map} +1 -1
- package/dist/{ConditionConfig-DSsgGEXS.js → ConditionConfig-B4Ffpgj3.js} +2 -2
- package/dist/ConditionConfig-B4Ffpgj3.js.map +1 -0
- package/dist/{EntityManagement-GaYsBTvf.js → EntityManagement-CPQL6qBj.js} +2 -2
- package/dist/{EntityManagement-GaYsBTvf.js.map → EntityManagement-CPQL6qBj.js.map} +1 -1
- package/dist/{EventConfigurations-kNtAj_WM.js → EventConfigurations-BJcURufo.js} +3 -3
- package/dist/{EventConfigurations-kNtAj_WM.js.map → EventConfigurations-BJcURufo.js.map} +1 -1
- package/dist/{EventsExceptionModal-D4Bf1ilS.js → EventsExceptionModal-BlZtBQoR.js} +2 -2
- package/dist/{EventsExceptionModal-D4Bf1ilS.js.map → EventsExceptionModal-BlZtBQoR.js.map} +1 -1
- package/dist/{EventsSkeleton-8iiETGcf.js → EventsSkeleton-DK6JDKAK.js} +26 -19
- package/dist/EventsSkeleton-DK6JDKAK.js.map +1 -0
- package/dist/{FeatureMenu-jl7-Tk6y.js → FeatureMenu-C3503UIX.js} +3 -3
- package/dist/{FeatureMenu-jl7-Tk6y.js.map → FeatureMenu-C3503UIX.js.map} +1 -1
- package/dist/Features-Dne21RWu.js +14 -0
- package/dist/Features-Dne21RWu.js.map +1 -0
- package/dist/{ManageNotification-CaBAOhji.js → Google-DQxMfbaL.js} +1725 -2652
- package/dist/{ManageNotification-CaBAOhji.js.map → Google-DQxMfbaL.js.map} +1 -1
- package/dist/ImmunizationConfigurationBase-DLQVSNnt.js +5895 -0
- package/dist/ImmunizationConfigurationBase-DLQVSNnt.js.map +1 -0
- package/dist/ImmunizationConfigurationBase.css +1 -1
- package/dist/{ManageDynamicFeature-BhONvfC_.js → ManageDynamicFeature-dt096fyj.js} +2 -2
- package/dist/{ManageDynamicFeature-BhONvfC_.js.map → ManageDynamicFeature-dt096fyj.js.map} +1 -1
- package/dist/{ManageEventConfiguration-DV3I5POA.js → ManageEventConfiguration-BpSJszSX.js} +5 -5
- package/dist/{ManageEventConfiguration-DV3I5POA.js.map → ManageEventConfiguration-BpSJszSX.js.map} +1 -1
- package/dist/ManageNotification-CfhHlfxA.js +934 -0
- package/dist/ManageNotification-CfhHlfxA.js.map +1 -0
- package/dist/{ManageRole-CGYfglpo.js → ManageRole-4Y2PP4dQ.js} +32 -30
- package/dist/ManageRole-4Y2PP4dQ.js.map +1 -0
- package/dist/{ManageUser-AY1EUDLI.js → ManageUser-DDzyd9jm.js} +1728 -1592
- package/dist/ManageUser-DDzyd9jm.js.map +1 -0
- package/dist/MobileMenuManagement-Cf8IZlla.js +108 -0
- package/dist/MobileMenuManagement-Cf8IZlla.js.map +1 -0
- package/dist/{MobileTypeEventConfigModal-BxLympIO.js → MobileTypeEventConfigModal-DUkUYACe.js} +2 -2
- package/dist/MobileTypeEventConfigModal-DUkUYACe.js.map +1 -0
- package/dist/{NotificationList-C3Vb_jKU.js → NotificationList-BMFpNUJG.js} +109 -110
- package/dist/NotificationList-BMFpNUJG.js.map +1 -0
- package/dist/{OtherTypeEventConfigModal-BeG1GrUi.js → OtherTypeEventConfigModal-CYBfr2XE.js} +570 -478
- package/dist/OtherTypeEventConfigModal-CYBfr2XE.js.map +1 -0
- package/dist/{RoleManagement-BPl2cE27.js → RoleManagement-DEiBNfT8.js} +100 -101
- package/dist/RoleManagement-DEiBNfT8.js.map +1 -0
- package/dist/{ServerSyncModal-D_oFpv3C.js → ServerSyncModal-92U3xtqI.js} +84 -85
- package/dist/ServerSyncModal-92U3xtqI.js.map +1 -0
- package/dist/{SubMenu-DYxAPH2Z.js → SubMenu-B072oEGb.js} +3 -3
- package/dist/{SubMenu-DYxAPH2Z.js.map → SubMenu-B072oEGb.js.map} +1 -1
- package/dist/{TableDetails-Cf_YfnY2.js → TableDetails-BtafRxXb.js} +1069 -831
- package/dist/TableDetails-BtafRxXb.js.map +1 -0
- package/dist/{TableList-D6jnIbnz.js → TableList-Dpo6dO7S.js} +2 -2
- package/dist/{TableList-D6jnIbnz.js.map → TableList-Dpo6dO7S.js.map} +1 -1
- package/dist/{TypeConfiguration-37wp-gsl.js → TypeConfiguration-C3xoP2Nb.js} +2 -2
- package/dist/{TypeConfiguration-37wp-gsl.js.map → TypeConfiguration-C3xoP2Nb.js.map} +1 -1
- package/dist/{WidgetList-Dw_FmbbE.js → WidgetList-D7YuWfDD.js} +2 -2
- package/dist/{WidgetList-Dw_FmbbE.js.map → WidgetList-D7YuWfDD.js.map} +1 -1
- package/dist/dashboardLayoutUtils-D1xCAxp3.js +405 -0
- package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +1 -0
- package/dist/index.js +4 -752
- package/dist/index.js.map +1 -1
- package/dist/index.lib-C3fwoM3y.js +820 -0
- package/dist/index.lib-C3fwoM3y.js.map +1 -0
- package/package.json +2 -2
- package/dist/AccessRights-CHu27ZOw.js +0 -1262
- package/dist/AccessRights-CHu27ZOw.js.map +0 -1
- package/dist/AddMenuConfiguration-BSQLl88V.js +0 -6570
- package/dist/AddMenuConfiguration-BSQLl88V.js.map +0 -1
- package/dist/AddRoleDrawer-CQdzQZLb.js.map +0 -1
- package/dist/ConditionConfig-DSsgGEXS.js.map +0 -1
- package/dist/EventsSkeleton-8iiETGcf.js.map +0 -1
- package/dist/Features-CObdzJp_.js +0 -13
- package/dist/Features-CObdzJp_.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-DZGqwda2.js +0 -5910
- package/dist/ImmunizationConfigurationBase-DZGqwda2.js.map +0 -1
- package/dist/ManageRole-CGYfglpo.js.map +0 -1
- package/dist/ManageUser-AY1EUDLI.js.map +0 -1
- package/dist/MobileMenuManagement-CVAKyKDa.js +0 -112
- package/dist/MobileMenuManagement-CVAKyKDa.js.map +0 -1
- package/dist/MobileTypeEventConfigModal-BxLympIO.js.map +0 -1
- package/dist/NotificationList-C3Vb_jKU.js.map +0 -1
- package/dist/OtherTypeEventConfigModal-BeG1GrUi.js.map +0 -1
- package/dist/RoleManagement-BPl2cE27.js.map +0 -1
- package/dist/ServerSyncModal-D_oFpv3C.js.map +0 -1
- package/dist/TableDetails-Cf_YfnY2.js.map +0 -1
- package/dist/dashboardLayoutUtils-Bt5HA96J.js +0 -265
- package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImmunizationConfigurationBase-DZGqwda2.js","sources":["../src/views/ImmunizationConfiguration/ImmunizationConfiguration.jsx","../src/views/ImmunizationConfiguration/components/VaccineCard.jsx","../src/views/ImmunizationConfiguration/components/AddCustomVaccineModal.jsx","../src/views/ImmunizationConfiguration/Skeletons/VaccineGridSkeleton.jsx","../src/views/ImmunizationConfiguration/ImmunizationScheduleConfiguration.jsx","../src/views/ImmunizationConfiguration/components/ConfigureBaseDateModal.jsx","../src/views/ImmunizationConfiguration/components/ConfigureFiltersModal.jsx","../src/views/ImmunizationConfiguration/components/ConfigureRecipientModal.jsx","../src/views/ImmunizationConfiguration/components/DoseDetailsTable.jsx","../../app-shell/src/common/services/LocationService.js","../../app-shell/src/common/services/LocationType.js","../src/views/ImmunizationConfiguration/components/GeographicalApplicability.jsx","../src/views/ImmunizationConfiguration/components/VaccineDependencies.jsx","../src/views/ImmunizationConfiguration/components/DoseSelector.jsx","../src/views/ImmunizationConfiguration/components/VaccineFilters.jsx","../src/views/ImmunizationConfiguration/components/VaccineCodeSets.jsx","../src/views/ImmunizationConfiguration/utils/summaryUtils.js","../src/views/ImmunizationConfiguration/utils/validationUtils.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 = ({\n vaccine = {},\n selected = false,\n onClick = () => {},\n isCustom = false,\n}) => {\n return (\n <Box\n className={`vaccine-card ${selected ? \"selected\" : \"\"} ${\n isCustom ? \"custom-vaccine\" : \"\"\n }`}\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\">\n {isCustom ? \"ADD CUSTOM VACCINE\" : vaccine.name}\n </Typography>\n {vaccine?.category && (\n <Typography className=\"vaccine-cat\">{vaccine.category}</Typography>\n )}\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};\n\nexport default VaccineCard;\n","import { useMemo, 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} 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 AddCustomVaccineModal = ({ open, onClose, onAdd, isFromSummary }) => {\n const [vaccineName, setVaccineName] = useState(\"\");\n const [disease, setDisease] = useState(\"\");\n const [recipientType, setRecipientType] = useState(\"\");\n const [baseDateCode, setBaseDateCode] = useState(null);\n const [touched, setTouched] = useState({\n vaccineName: 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 isFormValid =\n vaccineName.trim() !== \"\" &&\n disease.trim() !== \"\" &&\n !!recipientType &&\n !!baseDateCode;\n\n const handleAdd = async () => {\n if (isFormValid) {\n const derivedCode = vaccineName.trim().toUpperCase().replace(/\\s+/g, \"\");\n const isDuplicate = vaccines.some(\n (v) =>\n String(v?.vaccine_code || v?.name || v?.vaccine_name || \"\")\n .toUpperCase()\n .replace(/\\s+/g, \"\") === derivedCode,\n );\n\n if (isDuplicate) {\n showToast({\n message: `Vaccine with name \"${vaccineName}\" already exists.`,\n type: \"error\",\n });\n setTouched((p) => ({ ...p, vaccineName: true }));\n return;\n }\n\n try {\n const payload = {\n vaccine_name: vaccineName,\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 disease: true,\n recipientType: true,\n baseDate: true,\n });\n }\n };\n\n const handleReset = () => {\n setVaccineName(\"\");\n setDisease(\"\");\n setRecipientType(\"\");\n setBaseDateCode(null);\n setTouched({\n vaccineName: 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\">\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 {\n Box,\n Typography,\n TextField,\n InputAdornment,\n Button,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faSearch,\n faListCheck,\n faArrowRight,\n faCheckDouble,\n} 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 { vaccines, selectedVaccineIds, isConfigLoaded } = useSelector(\n (state) => state.immunization,\n );\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(\n ImmunizationUtil.mapImmunizationVaccineConfig,\n );\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 =\n (!isConfigLoaded || isFetchingVaccines || isSubmitting) &&\n (!vaccines || vaccines.length === 0);\n\n const handleToggleVaccine = (id) => {\n dispatch(toggleVaccine(id));\n };\n\n const handleAddCustomVaccine = (data) => {\n dispatch(addCustomVaccine(data));\n };\n\n const handleToggleAll = () => {\n const allVisibleIds = filteredVaccines\n .filter((v) => v && v.id)\n .map((v) => v.id);\n const areAllVisibleSelected =\n allVisibleIds.length > 0 &&\n allVisibleIds.every((id) => (selectedVaccineIds || []).includes(id));\n\n if (areAllVisibleSelected) {\n const newSelectedIds = (selectedVaccineIds || []).filter(\n (id) => !allVisibleIds.includes(id),\n );\n dispatch(setSelectedVaccineIds(newSelectedIds));\n } else {\n const newSelectedIds = [\n ...new Set([...(selectedVaccineIds || []), ...allVisibleIds]),\n ];\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\n .filter((v) => v && v.id)\n .map((v) => v.id);\n const areAllVisibleSelected =\n allVisibleIds.length > 0 &&\n 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={{ fontWeight: 800, mb: 1, color: 'var(--color-text)', fontSize: \"28px\" }}\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\n schedule.\n </Typography>\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\n 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}\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\n icon={faSearch}\n className=\"search-icon\"\n />\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 onClick={() => handleToggleVaccine(vaccine?.id)}\n />\n </Grid>\n ))}\n <Grid>\n <VaccineCard\n isCustom={true}\n onClick={() => setIsModalOpen(true)}\n />\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={\n selectedVaccineIds.length === 0 || isLoading || isSubmitting\n }\n endIcon={<FontAwesomeIcon icon={faArrowRight} />}\n onClick={handleSelectVaccines}\n >\n SELECT VACCINES\n </Button>\n </Box>\n </Box>\n </Box>\n\n <AddCustomVaccineModal\n open={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n onAdd={handleAddCustomVaccine}\n />\n </Box>\n );\n};\n\nexport default ImmunizationScheduleConfiguration;\n","import { useState, useEffect, useMemo } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Autocomplete,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faCalendarDay,\n faPlus,\n faArrowLeft,\n faDatabase,\n faColumns,\n faCode,\n faTag,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n setDbTablesMaster,\n upsertBaseDateMasterItem,\n updateBaseDateMasterStatus,\n} from \"@/store/reducers/immunizationSlice\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport { ImmunizationUtil } from \"../service/ImmunizationUtil\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst DATE_COLUMN_TYPE_KEYWORDS = [\"date\", \"timestamp\", \"datetime\"];\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: 'var(--color-gray1)',\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"var(--color-gray4)\",\n borderBottom: \"1.5px solid var(--color-gray4)\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"var(--color-gray4)\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"var(--color-gray3)\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-focused fieldset\": { borderColor: 'var(--color-primary)' },\n \"&.Mui-disabled fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"var(--color-gray4)\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: 'var(--color-text)',\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: 'var(--color-text)' },\n },\n};\n\nconst parseColumnInfo = (columnInfo) => {\n if (!columnInfo) return {};\n if (typeof columnInfo === \"object\") return columnInfo;\n try {\n return JSON.parse(columnInfo);\n } catch {\n return {};\n }\n};\n\nconst isDateTypeColumn = (dataType) => {\n const normalisedType = String(dataType || \"\").toLowerCase();\n return DATE_COLUMN_TYPE_KEYWORDS.some((keyword) =>\n normalisedType.includes(keyword),\n );\n};\n\nconst ConfigureBaseDateModal = ({\n open,\n onClose,\n startInAddMode = false,\n onSaved,\n}) => {\n const dispatch = useDispatch();\n const { baseDateMaster, vaccines, scheduledVaccines, dbTablesMaster } =\n useSelector((state) => state.immunization);\n\n const [isAdding, setIsAdding] = useState(false);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n\n const [usageWarning, setUsageWarning] = useState({\n open: false,\n bdName: \"\",\n usedIn: [],\n });\n\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [selectedTable, setSelectedTable] = useState(\"\");\n const [selectedColumn, setSelectedColumn] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setIsAdding(!!startInAddMode);\n resetForm();\n fetchTables();\n }\n }, [open, startInAddMode]);\n\n const fetchTables = async () => {\n if (dbTablesMaster?.length > 0) return;\n try {\n setLoading(true);\n const res = await ImmunizationUtil.getAllTablesAndColumns();\n if (res?.data?.result) {\n dispatch(setDbTablesMaster(res.data.result));\n }\n } catch (e) {\n console.error(\"Failed to fetch tables\", e);\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setSelectedTable(\"\");\n setSelectedColumn(\"\");\n };\n\n const availableColumns = useMemo(() => {\n if (!selectedTable) return [];\n const tableObj = dbTablesMaster.find((t) => t.tableName === selectedTable);\n const columnInfo = parseColumnInfo(tableObj?.columnInfo);\n\n return Object.entries(columnInfo)\n .filter(([, dataType]) => isDateTypeColumn(dataType))\n .map(([columnName]) => columnName)\n .sort((left, right) => left.localeCompare(right));\n }, [selectedTable, dbTablesMaster]);\n\n const availableTables = useMemo(() => {\n return [...(dbTablesMaster || [])].sort((left, right) =>\n left.tableName.localeCompare(right.tableName),\n );\n }, [dbTablesMaster]);\n\n const existingCodes = useMemo(\n () => baseDateMaster?.map((bd) => bd.code?.toLowerCase()) || [],\n [baseDateMaster],\n );\n\n const isCodeDuplicate =\n !!newCode && existingCodes.includes(newCode.trim().toLowerCase());\n\n const canSave =\n newName.trim() &&\n newCode.trim() &&\n !isCodeDuplicate &&\n selectedTable &&\n selectedColumn &&\n !saving;\n\n const handleSave = async () => {\n try {\n setSaving(true);\n const payload = {\n name: newName.trim(),\n code: newCode.trim(),\n rel_table: selectedTable,\n rel_column: selectedColumn,\n is_active: true,\n };\n\n const res = await ImmunizationUtil.saveBaseDate(payload);\n\n if (res?.data?.success !== false) {\n showToast({ message: \"Base Date added successfully\", type: \"success\" });\n const createdBaseDate = res?.data?.result?.[0] || {\n name: payload.name,\n code: payload.code,\n rel_table: payload.rel_table,\n rel_column: payload.rel_column,\n is_active: payload.is_active,\n };\n dispatch(upsertBaseDateMasterItem(createdBaseDate));\n onSaved?.(createdBaseDate);\n resetForm();\n if (startInAddMode) {\n onClose();\n } else {\n setIsAdding(false);\n }\n } else {\n throw new Error(\"Failed to save base date\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error saving base date\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n const handleStatusChange = async (bd, newStatus) => {\n if (!newStatus) {\n const usingVaccines = vaccines\n ?.filter((v) => {\n const scheduled = scheduledVaccines?.find((sv) => sv.id === v.id);\n const effectiveBaseDateCode = String(\n scheduled?.baseDateCode ?? v.baseDateCode ?? v.base_date_code ?? \"\",\n );\n const bdCode = String(bd.code || \"\");\n return effectiveBaseDateCode === bdCode && bdCode !== \"\";\n })\n .map((v) => v.vaccine_name || v.name);\n\n if (usingVaccines?.length > 0) {\n setUsageWarning({\n open: true,\n bdName: bd.name,\n usedIn: usingVaccines,\n });\n return;\n }\n }\n\n try {\n const payload = {\n code: bd.code,\n is_active: newStatus,\n };\n\n const res = await ImmunizationUtil.updateBaseDate(payload);\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Base Date ${newStatus ? \"activated\" : \"deactivated\"} successfully`,\n type: \"success\",\n });\n dispatch(\n updateBaseDateMasterStatus({\n code: bd.code,\n is_active: newStatus,\n }),\n );\n } else {\n throw new Error(\"Failed to update base date status\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error updating base date status\",\n type: \"error\",\n });\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"530px\",\n maxHeight: \"90vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faCalendarDay} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding ? \"Add New Base Date\" : \"Configure Base Date\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {baseDateMaster?.length || 0} base date\n {baseDateMaster?.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: 'var(--color-text)' }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"14px\",\n backgroundColor: \"var(--color-gray4)\",\n }}\n >\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Base Date Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"e.g., Member's Birth Date\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Base Date Code\n {isCodeDuplicate && (\n <Chip\n label=\"Duplicate\"\n size=\"small\"\n sx={{\n ml: 1,\n height: 18,\n fontSize: \"9px\",\n fontWeight: 700,\n backgroundColor: \"#fee2e2\",\n color: \"#dc2626\",\n }}\n />\n )}\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) =>\n setNewCode(e.target.value.toLowerCase().replace(/\\s+/g, \"_\"))\n }\n placeholder=\"e.g., dob\"\n error={isCodeDuplicate}\n helperText={isCodeDuplicate ? \"This code already exists.\" : \"\"}\n sx={modalFieldSx}\n />\n </Box>\n\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Related Table\n </Typography>\n <Autocomplete\n size=\"small\"\n fullWidth\n options={availableTables}\n value={\n availableTables.find(\n (table) => table.tableName === selectedTable,\n ) || null\n }\n onChange={(_, selectedOption) => {\n const nextTable = selectedOption?.tableName || \"\";\n setSelectedTable(nextTable);\n if (nextTable !== selectedTable) {\n setSelectedColumn(\"\");\n }\n }}\n getOptionLabel={(option) => option?.tableName || \"\"}\n isOptionEqualToValue={(option, value) =>\n option?.tableName === value?.tableName\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select Table\"\n placeholder=\"Search related table\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faColumns}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Related Column\n </Typography>\n <Autocomplete\n size=\"small\"\n fullWidth\n options={availableColumns}\n value={selectedColumn || null}\n disabled={!selectedTable}\n onChange={(_, selectedOption) =>\n setSelectedColumn(selectedOption || \"\")\n }\n noOptionsText={\n selectedTable\n ? \"No date-type columns available\"\n : \"Select a table first\"\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label={\n selectedTable ? \"Select Column\" : \"Select a table first\"\n }\n placeholder={\n selectedTable\n ? \"Search date-type column\"\n : \"Select a table first\"\n }\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n </Box>\n ) : baseDateMaster?.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"base dates table\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ ...modalHeaderCellSx, width: 40 }}>\n #\n </TableCell>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx}>Related Table</TableCell>\n <TableCell sx={modalHeaderCellSx}>Related Column</TableCell>\n <TableCell sx={modalHeaderCellSx}>Status</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {baseDateMaster.map((bd, index) => (\n <TableRow\n key={bd.id}\n sx={{\n \"&:hover\": { backgroundColor: \"var(--color-gray4)\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{ fontSize: \"13px\", color: 'var(--color-gray1)', py: 1.5 }}\n >\n {index + 1}\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: 'var(--color-text)',\n py: 1.5,\n }}\n >\n {bd.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: 'var(--color-text)',\n backgroundColor: \"var(--color-gray4)\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {bd.code}\n </Box>\n </TableCell>\n <TableCell\n sx={{ fontSize: \"13px\", color: 'var(--color-gray1)', py: 1.5 }}\n >\n {bd.rel_table}\n </TableCell>\n <TableCell\n sx={{ fontSize: \"13px\", color: 'var(--color-gray1)', py: 1.5 }}\n >\n {bd.rel_column}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <CustomSwitch\n checked={!!bd.is_active}\n onChange={(e) =>\n handleStatusChange(bd, e.target.checked)\n }\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: 'var(--color-gray1)',\n }}\n >\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: 'var(--color-gray1)' }}\n >\n No base dates configured yet.\n </Typography>\n <Typography variant=\"caption\" sx={{ color: \"var(--color-gray3)\" }}>\n Click “Add New” to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n resetForm();\n if (startInAddMode) {\n onClose();\n } else {\n setIsAdding(false);\n }\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon icon={faArrowLeft} style={{ fontSize: 11 }} />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={!canSave}\n >\n Save Base Date\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Base Date\n </Button>\n )}\n </DialogActions>\n\n <Dialog\n open={usageWarning.open}\n onClose={() => setUsageWarning({ ...usageWarning, open: false })}\n PaperProps={{ sx: { borderRadius: \"14px\", p: 1 } }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n pb: 1,\n }}\n >\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 800, fontSize: \"16px\", color: 'var(--color-text)' }}\n >\n Base Date in Use\n </Typography>\n <IconButton\n onClick={() => setUsageWarning({ ...usageWarning, open: false })}\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent>\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 2 }}>\n <strong>"{usageWarning.bdName}"</strong> is currently\n being used in the following vaccines:\n </Typography>\n <Box\n sx={{\n maxHeight: \"150px\",\n overflowY: \"auto\",\n bgcolor: \"var(--color-gray4)\",\n p: 1.5,\n borderRadius: \"8px\",\n border: \"1.5px solid var(--color-gray3)\",\n }}\n >\n {usageWarning.usedIn.map((name, idx) => (\n <Typography\n key={idx}\n variant=\"caption\"\n sx={{ display: \"block\", color: 'var(--color-text)', fontWeight: 600 }}\n >\n • {name}\n </Typography>\n ))}\n </Box>\n <Typography\n variant=\"body2\"\n sx={{ mt: 2, color: \"#ef4444\", fontWeight: 700 }}\n >\n To toggle it off, please ensure it's not used anywhere.\n </Typography>\n </Box>\n </DialogContent>\n </Dialog>\n </Dialog>\n );\n};\n\nConfigureBaseDateModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n startInAddMode: PropTypes.bool,\n onSaved: PropTypes.func,\n};\n\nexport default ConfigureBaseDateModal;\n","import { useState, useEffect, useMemo } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Tooltip,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faFilter,\n faPlus,\n faArrowLeft,\n faCode,\n faTag,\n faAlignLeft,\n faDatabase,\n faEdit,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n setFiltersMaster,\n upsertFilterMasterItem,\n updateFilterMasterStatus,\n} from \"@/store/reducers/immunizationSlice\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport { ImmunizationUtil } from \"../service/ImmunizationUtil\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst RESOURCE_ID_PLACEHOLDER = \"#resourceId#\";\nconst PLACEHOLDER_PATTERN = /#(\\w+)#/g;\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: 'var(--color-gray1)',\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"var(--color-gray4)\",\n borderBottom: \"1.5px solid var(--color-gray4)\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"var(--color-gray4)\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"var(--color-gray3)\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-focused fieldset\": { borderColor: 'var(--color-primary)' },\n \"&.Mui-disabled fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"var(--color-gray4)\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: 'var(--color-text)',\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: 'var(--color-text)' },\n },\n};\n\nconst ConfigureFiltersModal = ({ open, onClose }) => {\n const dispatch = useDispatch();\n const {\n filtersMaster: filtersList = [],\n vaccines,\n scheduledVaccines,\n } = useSelector((state) => state.immunization);\n\n const [isAdding, setIsAdding] = useState(false);\n const [editingFilter, setEditingFilter] = useState(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n\n const [usageWarning, setUsageWarning] = useState({\n open: false,\n filterName: \"\",\n usedIn: [],\n });\n\n // Form State\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [newDescription, setNewDescription] = useState(\"\");\n const [newQuery, setNewQuery] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setIsAdding(false);\n setEditingFilter(null);\n resetForm();\n fetchFilters();\n }\n }, [open]);\n\n const fetchFilters = async (forceRefetch = false) => {\n if (!forceRefetch && filtersList?.length > 0) return;\n try {\n setLoading(true);\n const res = await ImmunizationUtil.getFilters();\n if (res?.data?.result) {\n dispatch(setFiltersMaster(res.data.result));\n }\n } catch (e) {\n console.error(\"Failed to fetch filters\", e);\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setNewDescription(\"\");\n setNewQuery(\"\");\n setEditingFilter(null);\n };\n\n const handleEditClick = (filter) => {\n setEditingFilter(filter);\n setNewName(filter.name || \"\");\n setNewCode(filter.code || \"\");\n setNewDescription(filter.description || \"\");\n setNewQuery(filter.query || \"\");\n setIsAdding(true);\n };\n\n const existingCodes = useMemo(\n () => filtersList?.map((f) => f.code?.toLowerCase()) || [],\n [filtersList],\n );\n\n const isCodeDuplicate =\n !editingFilter &&\n !!newCode &&\n existingCodes.includes(newCode.trim().toLowerCase());\n\n const queryPlaceholders = useMemo(() => {\n return Array.from(\n new Set(\n [...newQuery.matchAll(PLACEHOLDER_PATTERN)].map((match) => match[1]),\n ),\n );\n }, [newQuery]);\n\n const hasResourceIdPlaceholder = queryPlaceholders.includes(\"resourceId\");\n const hasUnsupportedPlaceholders = queryPlaceholders.some(\n (placeholder) => placeholder !== \"resourceId\",\n );\n const queryPlaceholderError = !newQuery.trim()\n ? \"\"\n : !hasResourceIdPlaceholder\n ? `Query must include ${RESOURCE_ID_PLACEHOLDER}.`\n : hasUnsupportedPlaceholders\n ? `Only ${RESOURCE_ID_PLACEHOLDER} is allowed as a parameter.`\n : \"\";\n\n const canSave =\n newName.trim() &&\n newCode.trim() &&\n newDescription.trim() &&\n newQuery.trim() &&\n !queryPlaceholderError &&\n !isCodeDuplicate &&\n !saving;\n\n const handleSave = async () => {\n try {\n if (queryPlaceholderError) {\n throw new Error(queryPlaceholderError);\n }\n\n setSaving(true);\n const payload = {\n name: newName.trim(),\n code: newCode.trim(),\n description: newDescription.trim(),\n query: newQuery.trim(),\n is_active: editingFilter ? editingFilter.is_active : true, // Preserve status when editing\n };\n\n let res;\n if (editingFilter) {\n res = await ImmunizationUtil.updateFilter(payload);\n } else {\n res = await ImmunizationUtil.addFilter(payload);\n }\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Filter ${editingFilter ? \"updated\" : \"added\"} successfully`,\n type: \"success\",\n });\n const savedFilter = res?.data?.result?.[0] || {\n ...editingFilter,\n name: payload.name,\n code: payload.code,\n description: payload.description,\n query: payload.query,\n is_active: payload.is_active,\n };\n dispatch(upsertFilterMasterItem(savedFilter));\n resetForm();\n setIsAdding(false);\n } else {\n throw new Error(\"Failed to save filter\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error saving filter\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n const handleStatusChange = async (filter, newStatus) => {\n if (!newStatus) {\n const usingVaccines = vaccines\n ?.filter((v) => {\n const scheduled = scheduledVaccines?.find((sv) => sv.id === v.id);\n const currentFilters = scheduled?.filters || v.filters || [];\n return currentFilters.includes(filter.code);\n })\n .map((v) => v.vaccine_name || v.name);\n\n if (usingVaccines?.length > 0) {\n setUsageWarning({\n open: true,\n filterName: filter.name,\n usedIn: usingVaccines,\n });\n return;\n }\n }\n\n try {\n const payload = {\n ...filter, // Send all old info, but toggled\n is_active: newStatus,\n };\n\n const res = await ImmunizationUtil.updateFilter(payload);\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Filter ${newStatus ? \"activated\" : \"deactivated\"} successfully`,\n type: \"success\",\n });\n dispatch(\n updateFilterMasterStatus({\n code: filter.code,\n is_active: newStatus,\n }),\n );\n } else {\n throw new Error(\"Failed to update filter status\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error updating filter status\",\n type: \"error\",\n });\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"650px\",\n maxHeight: \"95vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faFilter} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding\n ? editingFilter\n ? \"Edit Filter\"\n : \"Add New Filter\"\n : \"Configure Filters\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {filtersList?.length || 0} filter\n {filtersList?.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: 'var(--color-text)' }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"14px\",\n backgroundColor: \"var(--color-gray4)\",\n }}\n >\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Filter Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"e.g., Eligibility Filter\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Filter Code\n {isCodeDuplicate && (\n <Chip\n label=\"Duplicate\"\n size=\"small\"\n sx={{\n ml: 1,\n height: 18,\n fontSize: \"9px\",\n fontWeight: 700,\n backgroundColor: \"#fee2e2\",\n color: \"#dc2626\",\n }}\n />\n )}\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) =>\n !editingFilter &&\n setNewCode(\n e.target.value.toLowerCase().replace(/\\s+/g, \"_\"),\n )\n }\n placeholder=\"e.g., check_eligibility\"\n disabled={!!editingFilter}\n error={isCodeDuplicate}\n helperText={\n isCodeDuplicate ? \"This code already exists.\" : \"\"\n }\n sx={modalFieldSx}\n />\n </Box>\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faAlignLeft}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Description\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n multiline\n rows={2}\n value={newDescription}\n onChange={(e) => setNewDescription(e.target.value)}\n placeholder=\"Describe the purpose of this filter...\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n SQL Query\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n multiline\n rows={5}\n value={newQuery}\n onChange={(e) => setNewQuery(e.target.value)}\n placeholder={\"SELECT EXISTS(...) AS result\"}\n error={!!queryPlaceholderError}\n helperText={queryPlaceholderError}\n sx={modalFieldSx}\n />\n <Typography\n variant=\"caption\"\n sx={{\n color: 'var(--color-gray1)',\n mt: 1,\n display: \"block\",\n lineHeight: 1.4,\n }}\n >\n <strong>Important:</strong> The query must return a{\" \"}\n <strong>boolean</strong> value whether the member passes the\n filter. Use only <code>{RESOURCE_ID_PLACEHOLDER}</code> as the\n parameter.\n </Typography>\n </Box>\n </Box>\n ) : filtersList?.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"filters table\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ ...modalHeaderCellSx, width: 40 }}>\n #\n </TableCell>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx}>Description</TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\">\n Status\n </TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\" width=\"60\">\n Edit\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filtersList.map((filter, index) => (\n <TableRow\n key={filter.id || filter.code}\n sx={{\n \"&:hover\": { backgroundColor: \"var(--color-gray4)\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{ fontSize: \"13px\", color: 'var(--color-gray1)', py: 1.5 }}\n >\n {index + 1}\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: 'var(--color-text)',\n py: 1.5,\n }}\n >\n {filter.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: 'var(--color-text)',\n backgroundColor: \"var(--color-gray4)\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {filter.code}\n </Box>\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n color: 'var(--color-gray1)',\n py: 1.5,\n maxWidth: 200,\n }}\n >\n <Tooltip title={filter.description || \"\"} placement=\"top\">\n <Typography\n variant=\"caption\"\n noWrap\n sx={{ display: \"block\" }}\n >\n {filter.description}\n </Typography>\n </Tooltip>\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <CustomSwitch\n checked={!!filter.is_active}\n onChange={(e) =>\n handleStatusChange(filter, e.target.checked)\n }\n />\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <IconButton\n size=\"small\"\n onClick={() => handleEditClick(filter)}\n sx={{\n color: 'var(--color-gray1)',\n \"&:hover\": { color: 'var(--color-text)' },\n }}\n >\n <FontAwesomeIcon\n icon={faEdit}\n style={{ fontSize: 13 }}\n />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: 'var(--color-gray1)',\n }}\n >\n <FontAwesomeIcon\n icon={faFilter}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: 'var(--color-gray1)' }}\n >\n No filters configured yet.\n </Typography>\n <Typography variant=\"caption\" sx={{ color: \"var(--color-gray3)\" }}>\n Click “Add New” to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n setIsAdding(false);\n resetForm();\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon icon={faArrowLeft} style={{ fontSize: 11 }} />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={!canSave}\n >\n {editingFilter ? \"Update Filter\" : \"Save Filter\"}\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Filter\n </Button>\n )}\n </DialogActions>\n\n <Dialog\n open={usageWarning.open}\n onClose={() => setUsageWarning({ ...usageWarning, open: false })}\n PaperProps={{ sx: { borderRadius: \"14px\", p: 1 } }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n pb: 1,\n }}\n >\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 800, fontSize: \"16px\", color: 'var(--color-text)' }}\n >\n Filter in Use\n </Typography>\n <IconButton\n onClick={() => setUsageWarning({ ...usageWarning, open: false })}\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent>\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 2 }}>\n <strong>"{usageWarning.filterName}"</strong> is\n currently being used in the following vaccines:\n </Typography>\n <Box\n sx={{\n maxHeight: \"150px\",\n overflowY: \"auto\",\n bgcolor: \"var(--color-gray4)\",\n p: 1.5,\n borderRadius: \"8px\",\n border: \"1.5px solid var(--color-gray3)\",\n }}\n >\n {usageWarning.usedIn.map((name, idx) => (\n <Typography\n key={idx}\n variant=\"caption\"\n sx={{ display: \"block\", color: 'var(--color-text)', fontWeight: 600 }}\n >\n • {name}\n </Typography>\n ))}\n </Box>\n <Typography\n variant=\"body2\"\n sx={{ mt: 2, color: \"#ef4444\", fontWeight: 700 }}\n >\n To deactivate this filter, please ensure it's removed from\n all vaccines first.\n </Typography>\n </Box>\n </DialogContent>\n </Dialog>\n </Dialog>\n );\n};\n\nConfigureFiltersModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default ConfigureFiltersModal;\n","import { useEffect, useMemo, useState, useCallback } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Autocomplete,\n} from \"@mui/material\";\nimport PostgresEditor from \"@/views/custom-components/PostgresEditor\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faUser,\n faPlus,\n faArrowLeft,\n faCode,\n faTag,\n faDatabase,\n faEdit,\n faMapMarkedAlt,\n faClockRotateLeft,\n faListCheck,\n faCalendarDay,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport { ImmunizationUtil } from \"../service/ImmunizationUtil\";\nimport {\n setRecipientMaster,\n upsertRecipientMasterItem,\n} from \"@/store/reducers/immunizationSlice\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport ConfigureBaseDateModal from \"./ConfigureBaseDateModal\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst RESOURCE_ID_PLACEHOLDER = \"#resourceId#\";\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: \"var(--color-gray1)\",\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"var(--color-gray4)\",\n borderBottom: \"1.5px solid var(--color-gray4)\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"var(--color-gray4)\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"var(--color-gray3)\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-focused fieldset\": { borderColor: \"var(--color-primary)\" },\n \"&.Mui-disabled fieldset\": { borderColor: \"var(--color-gray3)\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"var(--color-gray4)\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: \"var(--color-text)\",\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: \"var(--color-text)\" },\n },\n};\n\nconst normaliseKeyValue = (value) => value?.trim().toLowerCase() || \"\";\n\nconst normaliseColumnName = (columnExpression) => {\n const cleaned = columnExpression.trim().replace(/,$/, \"\");\n const aliasMatch = cleaned.match(/\\s+as\\s+([a-zA-Z0-9_\"]+)$/i);\n if (aliasMatch) {\n return aliasMatch[1].replace(/\"/g, \"\");\n }\n\n const directAliasMatch = cleaned.match(/\\s+([a-zA-Z_][a-zA-Z0-9_]*)$/);\n if (\n directAliasMatch &&\n !/[)\\]]$/.test(cleaned.slice(0, cleaned.lastIndexOf(directAliasMatch[0])))\n ) {\n return directAliasMatch[1];\n }\n\n const lastPart = cleaned.split(\".\").pop() || cleaned;\n return lastPart.replace(/[\"'`]/g, \"\").trim();\n};\n\nconst splitSelectColumns = (selectPart) => {\n const columns = [];\n let current = \"\";\n let bracketDepth = 0;\n\n for (const char of selectPart) {\n if (char === \"(\") bracketDepth += 1;\n if (char === \")\") bracketDepth = Math.max(0, bracketDepth - 1);\n\n if (char === \",\" && bracketDepth === 0) {\n if (current.trim()) {\n columns.push(current.trim());\n }\n current = \"\";\n continue;\n }\n current += char;\n }\n\n if (current.trim()) {\n columns.push(current.trim());\n }\n\n return columns;\n};\n\nconst inferColumnsFromQueryText = (query) => {\n const match = query.match(/select\\s+([\\s\\S]+?)\\s+from\\s/i);\n if (!match?.[1]) {\n return [];\n }\n\n return splitSelectColumns(match[1])\n .map(normaliseColumnName)\n .filter(Boolean)\n .filter((value, index, arr) => arr.indexOf(value) === index);\n};\n\nconst parseRecipientConfig = (config) => {\n if (!config) return {};\n if (typeof config === \"object\") return config;\n try {\n return JSON.parse(config);\n } catch {\n return {};\n }\n};\n\nconst ConfigureRecipientModal = ({ open, onClose }) => {\n const dispatch = useDispatch();\n const { recipientMaster = [], baseDateMaster = [] } = useSelector(\n (state) => state.immunization,\n );\n\n const [isAdding, setIsAdding] = useState(false);\n const [editingRecipient, setEditingRecipient] = useState(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n const [isBaseDateModalOpen, setIsBaseDateModalOpen] = useState(false);\n\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [newQuery, setNewQuery] = useState(\"\");\n const [geographicalApplicability, setGeographicalApplicability] =\n useState(false);\n const [allowedBaseDates, setAllowedBaseDates] = useState([]);\n const [fetchTypeKeys, setFetchTypeKeys] = useState([]);\n const [locationKey, setLocationKey] = useState(\"\");\n const [historyKey, setHistoryKey] = useState(\"\");\n const [excludeVaccineKey, setExcludeVaccineKey] = useState(\"\");\n const [isQueryTouched, setIsQueryTouched] = useState(false);\n const [queryColumns, setQueryColumns] = useState([]);\n const [errors, setErrors] = useState({});\n\n useEffect(() => {\n if (open) {\n setIsAdding(false);\n setEditingRecipient(null);\n resetForm();\n fetchRecipients();\n }\n }, [open]);\n\n const fetchRecipients = async (forceRefetch = false) => {\n if (!forceRefetch && recipientMaster.length > 0) return;\n try {\n setLoading(true);\n const res = await ImmunizationUtil.getRecipients();\n if (res?.data?.result) {\n dispatch(setRecipientMaster(res.data.result));\n }\n } catch (error) {\n console.error(error);\n showToast({\n message: \"Failed to fetch recipients\",\n type: \"error\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setNewQuery(\"\");\n setGeographicalApplicability(false);\n setAllowedBaseDates([]);\n setFetchTypeKeys([]);\n setLocationKey(\"\");\n setHistoryKey(\"\");\n setExcludeVaccineKey(\"\");\n setEditingRecipient(null);\n setIsQueryTouched(false);\n setQueryColumns([]);\n setErrors({});\n };\n\n const validateRecipientForm = () => {\n const errors = {};\n\n if (!newName.trim()) {\n errors.name = \"Name is required\";\n }\n\n if (!normalizedCode) {\n errors.code = \"Code is required\";\n } else if (!editingRecipient && isCodeDuplicate) {\n errors.code = \"This code already exists\";\n }\n\n if (!newQuery.trim()) {\n errors.query = \"Query is required\";\n } else if (queryError) {\n errors.query = queryError;\n }\n\n if (!fetchTypeKeys.length) {\n errors.fetchTypeKeys = \"At least one fetch type key is required\";\n }\n\n if (!historyKey.trim()) {\n errors.historyKey = \"History key is required\";\n }\n\n if (!excludeVaccineKey.trim()) {\n errors.excludeVaccineKey = \"Exclude vaccine key is required\";\n }\n\n if (geographicalApplicability && !locationKey.trim()) {\n errors.locationKey = \"Location key is required\";\n }\n\n if (duplicateColumnUsageError) {\n errors.duplicateColumnUsage = duplicateColumnUsageError;\n }\n\n return errors;\n };\n\n const existingCodes = useMemo(\n () =>\n recipientMaster.map((item) => item.code?.toLowerCase()).filter(Boolean),\n [recipientMaster],\n );\n\n const normalizedCode = newCode.trim().replace(/\\s+/g, \"_\").toUpperCase();\n const isCodeDuplicate =\n !editingRecipient &&\n !!normalizedCode &&\n existingCodes.includes(normalizedCode.toLowerCase());\n\n const baseDateOptions = useMemo(\n () =>\n baseDateMaster\n .filter((item) => item.is_active)\n .map((item) => ({\n label: item.name,\n value: item.code,\n })),\n [baseDateMaster],\n );\n\n const queryColumnOptions = useMemo(() => queryColumns, [queryColumns]);\n\n const duplicateColumnUsageError = useMemo(() => {\n const usageMap = new Map();\n\n const registerUsage = (value, fieldLabel) => {\n const normalisedValue = normaliseKeyValue(value);\n if (!normalisedValue) return;\n\n const existingUsage = usageMap.get(normalisedValue);\n if (existingUsage) {\n return `${value} is already used in ${existingUsage}. Each column can only be used once across recipient keys.`;\n }\n\n usageMap.set(normalisedValue, fieldLabel);\n return \"\";\n };\n\n for (const fetchTypeKey of fetchTypeKeys) {\n const duplicateError = registerUsage(fetchTypeKey, \"Fetch Type Keys\");\n if (duplicateError) return duplicateError;\n }\n\n const historyKeyError = registerUsage(historyKey, \"History Key\");\n if (historyKeyError) return historyKeyError;\n\n const excludeVaccineKeyError = registerUsage(\n excludeVaccineKey,\n \"Exclude Vaccine Key\",\n );\n if (excludeVaccineKeyError) return excludeVaccineKeyError;\n\n const locationKeyError = registerUsage(locationKey, \"Location Key\");\n if (locationKeyError) return locationKeyError;\n\n return \"\";\n }, [fetchTypeKeys, historyKey, locationKey, excludeVaccineKey]);\n\n const getAvailableColumnOptions = useCallback(\n (currentValues = []) => {\n const currentValueSet = new Set(\n currentValues.map((value) => normaliseKeyValue(value)).filter(Boolean),\n );\n\n const reservedValues = new Set(\n [\n ...fetchTypeKeys,\n historyKey,\n excludeVaccineKey,\n geographicalApplicability ? locationKey : \"\",\n ]\n .map((value) => normaliseKeyValue(value))\n .filter(Boolean),\n );\n\n currentValueSet.forEach((value) => reservedValues.delete(value));\n\n return queryColumnOptions.filter((option) => {\n const normalisedOption = normaliseKeyValue(option);\n return !reservedValues.has(normalisedOption);\n });\n },\n [\n fetchTypeKeys,\n geographicalApplicability,\n historyKey,\n excludeVaccineKey,\n locationKey,\n queryColumnOptions,\n ],\n );\n\n const queryError = useMemo(() => {\n const q = newQuery.trim().toLowerCase();\n if (!q) return \"\";\n if (!q.startsWith(\"select\")) return \"Query must start with SELECT.\";\n const forbidden = [\n \"insert\",\n \"update\",\n \"delete\",\n \"drop\",\n \"truncate\",\n \"alter\",\n \"create\",\n ];\n const foundForbidden = forbidden.find((keyword) => {\n const regex = new RegExp(`\\\\b${keyword}\\\\b`, \"i\");\n return regex.test(q);\n });\n if (foundForbidden)\n return `Query contains forbidden keyword: ${foundForbidden.toUpperCase()}`;\n return \"\";\n }, [newQuery]);\n\n const loadColumnsFromQuery = (queryToPreview = newQuery) => {\n if (!queryToPreview.trim() || queryError) {\n setQueryColumns([]);\n return;\n }\n\n const discoveredColumns = inferColumnsFromQueryText(queryToPreview);\n setQueryColumns(discoveredColumns);\n };\n\n useEffect(() => {\n const timer = setTimeout(() => {\n if (newQuery) {\n loadColumnsFromQuery(newQuery);\n }\n }, 1000);\n return () => clearTimeout(timer);\n }, [newQuery]);\n\n const handleEditClick = (recipient) => {\n const config = parseRecipientConfig(recipient.config);\n setEditingRecipient(recipient);\n setIsAdding(true);\n setNewName(recipient.name || \"\");\n setNewCode(recipient.code || \"\");\n setNewQuery(config.query || \"\");\n setGeographicalApplicability(!!config.geographicalApplicability);\n setAllowedBaseDates(config.allowedBaseDates || []);\n setFetchTypeKeys(config.fetchTypeKeys || []);\n setLocationKey(config.locationKey || \"\");\n setHistoryKey(config.historyKey || \"\");\n setExcludeVaccineKey(config.excludeVaccineKey || \"\");\n setIsQueryTouched(false);\n };\n\n const handleSave = async () => {\n try {\n setIsQueryTouched(true);\n const errors = validateRecipientForm();\n setErrors(errors);\n\n if (Object.keys(errors).length > 0) {\n showToast({\n message: \"Please fix the validation errors before saving.\",\n type: \"error\",\n });\n return;\n }\n if (!editingRecipient && isCodeDuplicate) {\n showToast({\n message: \"Code must be unique. This code already exists.\",\n type: \"error\",\n });\n return;\n }\n\n if (queryError) {\n showToast({ message: queryError, type: \"error\" });\n return;\n }\n\n if (duplicateColumnUsageError) {\n showToast({ message: duplicateColumnUsageError, type: \"error\" });\n return;\n }\n\n const payload = {\n name: newName.trim(),\n code: editingRecipient?.code || normalizedCode,\n config: JSON.stringify({\n allowedBaseDates,\n geographicalApplicability,\n query: newQuery.trim(),\n fetchTypeKeys,\n locationKey: geographicalApplicability ? locationKey : \"\",\n historyKey,\n excludeVaccineKey,\n }),\n };\n\n setSaving(true);\n const res = editingRecipient\n ? await ImmunizationUtil.updateRecipient(payload)\n : await ImmunizationUtil.saveRecipient(payload);\n\n if (res?.data?.success === false) {\n throw new Error(\"Failed to save recipient\");\n }\n\n const savedRecipient = res?.data?.result?.[0] || {\n ...editingRecipient,\n name: payload.name,\n code: payload.code,\n config: parseRecipientConfig(payload.config),\n };\n\n dispatch(upsertRecipientMasterItem(savedRecipient));\n showToast({\n message: `Recipient ${editingRecipient ? \"updated\" : \"added\"} successfully`,\n type: \"success\",\n });\n resetForm();\n setIsAdding(false);\n } catch (error) {\n console.error(error);\n showToast({\n message: error?.message || \"Failed to save recipient\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"680px\",\n maxHeight: \"95vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faUser} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding\n ? editingRecipient\n ? \"Edit Recipient\"\n : \"Add New Recipient\"\n : \"Configure Recipient\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {recipientMaster.length || 0} recipient\n {recipientMaster.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: \"var(--color-text)\" }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"14px\",\n backgroundColor: \"var(--color-gray4)\",\n }}\n >\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => {\n const val = e.target.value;\n setNewName(val);\n\n setErrors((prev) => ({ ...prev, name: \"\" }));\n setErrors((prev) => ({ ...prev, code: \"\" }));\n\n if (!editingRecipient) {\n const generatedCode = val\n .trim()\n .replace(/\\s+/g, \"_\")\n .toUpperCase();\n setNewCode(generatedCode);\n }\n }}\n error={!!errors.name}\n helperText={errors.name}\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.5,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Code\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) => {\n if (!editingRecipient) {\n setNewCode(e.target.value);\n setErrors((prev) => ({ ...prev, code: \"\" }));\n }\n }}\n disabled={!!editingRecipient}\n error={!!errors.code}\n helperText={\n editingRecipient\n ? \"Code cannot be changed while editing.\"\n : errors.code || \"\"\n }\n sx={modalFieldSx}\n />\n </Box>\n </Box>\n\n <Box className=\"input-group\">\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Query\n </Typography>\n <Box\n sx={{\n border: !!errors.query\n ? \"1.5px solid #d32f2f\"\n : \"1.5px solid var(--color-gray3)\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n height: \"180px\",\n }}\n >\n <PostgresEditor\n defaultValue={newQuery}\n height=\"180px\"\n onChange={(value) => {\n setNewQuery(value);\n setErrors((prev) => ({ ...prev, query: \"\" }));\n }}\n />\n </Box>\n {errors.query && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: 0.5, ml: 1, display: \"block\" }}\n >\n {errors.query}\n </Typography>\n )}\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n p: 1.5,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"12px\",\n backgroundColor: \"var(--color-background2)\",\n }}\n >\n <Box>\n <Typography\n sx={{\n fontWeight: 700,\n fontSize: \"13px\",\n color: \"var(--color-text)\",\n }}\n >\n Geographical Applicability\n </Typography>\n <Typography\n sx={{ fontSize: \"12px\", color: \"var(--color-gray1)\" }}\n >\n Show location key only when recipient config needs\n geography.\n </Typography>\n </Box>\n <CustomSwitch\n checked={geographicalApplicability}\n onChange={(e) => {\n const checked = e.target.checked;\n setGeographicalApplicability(checked);\n if (!checked) {\n setLocationKey(\"\");\n }\n }}\n />\n </Box>\n\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\" }}>\n <Box className=\"input-group\" sx={{ flex: 1, minWidth: 250 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faListCheck}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Fetch Type Keys\n </Typography>\n <Autocomplete\n multiple\n freeSolo\n disableCloseOnSelect\n size=\"small\"\n options={getAvailableColumnOptions(fetchTypeKeys)}\n value={fetchTypeKeys}\n onChange={(_, newValue) => {\n const uniqueValues = [];\n const seenValues = new Set();\n\n newValue.forEach((value) => {\n const normalisedValue = normaliseKeyValue(value);\n if (\n !normalisedValue ||\n seenValues.has(normalisedValue)\n ) {\n return;\n }\n seenValues.add(normalisedValue);\n uniqueValues.push(value);\n });\n\n setFetchTypeKeys(uniqueValues);\n setErrors((prev) => ({\n ...prev,\n fetchTypeKeys: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n renderTags={(value, getTagProps) =>\n value.map((option, index) => (\n <Chip\n label={option}\n {...getTagProps({ index })}\n size=\"small\"\n />\n ))\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Fetch Type Keys\"\n placeholder=\"Select or type and press enter\"\n error={!!errors.fetchTypeKeys}\n helperText={errors.fetchTypeKeys}\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1, minWidth: 250 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faClockRotateLeft}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n History Key\n </Typography>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={getAvailableColumnOptions([historyKey])}\n value={historyKey}\n onChange={(_, newValue) => {\n setHistoryKey(newValue || \"\");\n setErrors((prev) => ({\n ...prev,\n historyKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n onInputChange={(_, newInputValue) => {\n setHistoryKey(newInputValue);\n setErrors((prev) => ({\n ...prev,\n historyKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"History Key\"\n placeholder=\"Select or type column name\"\n error={!!errors.historyKey}\n helperText={errors.historyKey}\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1, minWidth: 250 }}>\n <Typography\n className=\"input-label\"\n sx={{\n mb: 0.8,\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n <FontAwesomeIcon\n icon={faClockRotateLeft}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Exclude Vaccine Key\n </Typography>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={getAvailableColumnOptions([excludeVaccineKey])}\n value={excludeVaccineKey}\n onChange={(_, newValue) => {\n setExcludeVaccineKey(newValue || \"\");\n setErrors((prev) => ({\n ...prev,\n excludeVaccineKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n onInputChange={(_, newInputValue) => {\n setExcludeVaccineKey(newInputValue);\n setErrors((prev) => ({\n ...prev,\n excludeVaccineKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Exclude Vaccine Key\"\n placeholder=\"Select or type column name\"\n error={!!errors.excludeVaccineKey}\n helperText={errors.excludeVaccineKey}\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n\n {geographicalApplicability && (\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faMapMarkedAlt}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Location Key\n </Typography>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={getAvailableColumnOptions([locationKey])}\n value={locationKey}\n onChange={(_, newValue) => {\n setLocationKey(newValue || \"\");\n setErrors((prev) => ({\n ...prev,\n locationKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n onInputChange={(_, newInputValue) => {\n setLocationKey(newInputValue);\n setErrors((prev) => ({\n ...prev,\n locationKey: \"\",\n duplicateColumnUsage: \"\",\n }));\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Location Key\"\n placeholder=\"Select or type column name\"\n error={!!errors.locationKey}\n helperText={errors.locationKey}\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n )}\n\n {errors.duplicateColumnUsage && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: -1, ml: 1, display: \"block\" }}\n >\n {errors.duplicateColumnUsage}\n </Typography>\n )}\n\n <Box className=\"input-group\">\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: 1.5,\n mb: 0.8,\n flexWrap: \"wrap\",\n }}\n >\n <Typography className=\"input-label\" sx={{ mb: 0 }}>\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Allowed Base Dates\n </Typography>\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setIsBaseDateModalOpen(true)}\n sx={{\n textTransform: \"none\",\n fontWeight: 700,\n color: \"var(--color-text)\",\n p: 0,\n minWidth: 0,\n }}\n >\n + Add New Base Date\n </Button>\n </Box>\n <Autocomplete\n multiple\n disableCloseOnSelect\n size=\"small\"\n options={baseDateOptions}\n value={baseDateOptions.filter((option) =>\n allowedBaseDates.includes(option.value),\n )}\n onChange={(_, selectedOptions) =>\n setAllowedBaseDates(\n selectedOptions.map((item) => item.value),\n )\n }\n getOptionLabel={(option) => option.label}\n isOptionEqualToValue={(option, value) =>\n option.value === value.value\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select allowed base dates\"\n placeholder=\"Choose one or more\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n ) : recipientMaster.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid var(--color-gray4)\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"recipient table\">\n <TableHead>\n <TableRow>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\" width=\"60\">\n Edit\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {recipientMaster.map((recipient) => (\n <TableRow\n key={recipient.id || recipient.code}\n sx={{\n \"&:hover\": { backgroundColor: \"var(--color-gray4)\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: \"var(--color-text)\",\n py: 1.5,\n }}\n >\n {recipient.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: \"var(--color-text)\",\n backgroundColor: \"var(--color-gray4)\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {recipient.code}\n </Box>\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <IconButton\n size=\"small\"\n onClick={() => handleEditClick(recipient)}\n sx={{\n color: \"var(--color-gray1)\",\n \"&:hover\": { color: \"var(--color-text)\" },\n }}\n >\n <FontAwesomeIcon\n icon={faEdit}\n style={{ fontSize: 13 }}\n />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: \"var(--color-gray1)\",\n }}\n >\n <FontAwesomeIcon\n icon={faUser}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: \"var(--color-gray1)\" }}\n >\n No recipients configured yet.\n </Typography>\n <Typography\n variant=\"caption\"\n sx={{ color: \"var(--color-gray3)\" }}\n >\n Click “Add New” to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n resetForm();\n setIsAdding(false);\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon\n icon={faArrowLeft}\n style={{ fontSize: 11 }}\n />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={saving}\n >\n {editingRecipient ? \"Update Recipient\" : \"Save Recipient\"}\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Recipient\n </Button>\n )}\n </DialogActions>\n </Dialog>\n\n <ConfigureBaseDateModal\n open={isBaseDateModalOpen}\n onClose={() => setIsBaseDateModalOpen(false)}\n startInAddMode\n onSaved={(savedBaseDate) => {\n if (savedBaseDate?.code) {\n setAllowedBaseDates((prev) =>\n prev.includes(savedBaseDate.code)\n ? prev\n : [...prev, savedBaseDate.code],\n );\n }\n }}\n />\n </>\n );\n};\n\nConfigureRecipientModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default ConfigureRecipientModal;\n","import {\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n IconButton,\n Box,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Popover,\n Switch,\n Tooltip,\n Select,\n MenuItem,\n} from \"@mui/material\";\nimport React, { useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport PropTypes from \"prop-types\";\nimport {\n faExclamationCircle,\n faPlus,\n faTrash,\n} from \"@fortawesome/free-solid-svg-icons\";\n\nconst UnitSelect = ({ value, onChange }) => {\n return (\n <Select\n size=\"small\"\n value={value}\n onChange={onChange}\n sx={{\n fontSize: \"12px\",\n height: \"32px\",\n bgcolor: \"#f5f7fa\",\n minWidth: \"50px\",\n \"& .MuiSelect-select\": {\n paddingTop: \"6px\",\n paddingBottom: \"6px\",\n paddingLeft: \"6px\",\n paddingRight: \"18px\",\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 <MenuItem value=\"days\" sx={{ fontSize: \"12px\" }}>\n days\n </MenuItem>\n <MenuItem value=\"weeks\" sx={{ fontSize: \"12px\" }}>\n weeks\n </MenuItem>\n <MenuItem value=\"months\" sx={{ fontSize: \"12px\" }}>\n months\n </MenuItem>\n <MenuItem value=\"years\" sx={{ fontSize: \"12px\" }}>\n years\n </MenuItem>\n </Select>\n );\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 getDaysVal = (val, unit) => {\n if (!val) return 0;\n if (typeof val === \"string\" && val.toLowerCase() === \"birth\") return 0;\n const num = parseInt(val) || 0;\n if (unit === \"weeks\") return num * 7;\n if (unit === \"months\") return num * 30;\n if (unit === \"years\") return num * 365;\n return num;\n};\n\nconst DurationInput = ({\n defaultValue,\n error,\n onFieldUpdate,\n unit = \"days\",\n onUnitChange,\n}) => {\n const quantity = getDays(defaultValue);\n\n const handleQtyChange = (e) => {\n const rawValue = e.target.value;\n if (rawValue === \"\") {\n onFieldUpdate(`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=\"number\"\n value={quantity.toString()}\n onChange={handleQtyChange}\n inputProps={{ min: 0 }}\n className={`dose-input duration-qty ${error ? \"error-input\" : \"\"}`}\n sx={{\n flex: 1,\n minWidth: \"70px\",\n \"& input::-webkit-outer-spin-button, & input::-webkit-inner-spin-button\":\n {\n display: \"none\",\n margin: 0,\n },\n \"& input[type=number]\": {\n MozAppearance: \"textfield\",\n paddingLeft: \"0px\",\n paddingRight: \"0px\",\n },\n }}\n />\n <UnitSelect\n value={unit}\n onChange={(e) => onUnitChange(e.target.value)}\n />\n </Box>\n {error && (\n <Box\n className=\"error-msg\"\n sx={{ position: \"absolute\", top: \"100%\", mt: 1, left: 0 }}\n >\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};\n\nconst DoseDetailsTable = ({\n doses = [],\n doseType = \"FIXED\",\n doseCount = 0,\n durationUnits,\n onDurationUnitsUpdate = () => {},\n onUpdate,\n onDoseTypeChange,\n errors = [],\n}) => {\n const [deleteConfirmModal, setDeleteConfirmModal] = useState({\n open: false,\n index: null,\n });\n const safeDurationUnits = durationUnits || {\n eligibleFrom: \"days\",\n eligibleTo: \"days\",\n interval: \"days\",\n };\n\n const [boosterAliasModal, setBoosterAliasModal] = useState({\n open: false,\n index: null,\n value: \"\",\n anchorEl: null,\n });\n\n const isFixed = doseType === \"FIXED\";\n const durationColumnSx = {\n px: isFixed ? 2.5 : 0.5,\n minWidth: isFixed ? 180 : 118,\n width: isFixed ? 180 : 118,\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 // 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 overdue: \"days\",\n };\n const newUnits = { ...prevUnits, [unitField]: newUnit };\n const updatedDose = { ...d, units: newUnits };\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 === \"overdue\") {\n const qty = parseInt(d.overdue) || 0;\n updatedDose.overdue = `${qty} ${newUnit}`;\n }\n return updatedDose;\n });\n onUpdate(updatedDoses);\n };\n\n const handleSaveBoosterAlias = () => {\n if (boosterAliasModal.index === null) {\n return;\n }\n\n handleFieldChange(\n boosterAliasModal.index,\n \"alias\",\n boosterAliasModal.value.trim(),\n );\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=\"Each dose has its own independent eligibility window and minimum interval.\"\n arrow\n placement=\"top\"\n >\n <Box\n className={`toggle-option ${doseType === \"FLEXIBLE\" ? \"active\" : \"\"}`}\n onClick={() => onDoseTypeChange(\"FLEXIBLE\")}\n >\n Flexible\n </Box>\n </Tooltip>\n </Box>\n </Box>\n </Box>\n <TableContainer\n className=\"dose-table\"\n sx={{ overflowX: \"auto\", overflowY: \"visible\" }}\n >\n <Table\n size=\"small\"\n sx={{\n minWidth: isFixed ? 720 : 624,\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: isFixed ? 180 : 118 }} />\n <col style={{ width: isFixed ? 180 : 118 }} />\n <col style={{ width: isFixed ? 180 : 118 }} />\n {!isFixed && <col style={{ width: 118 }} />}\n {!isFixed && <col style={{ width: 66 }} />}\n {!isFixed && <col style={{ width: 48 }} />}\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 <TableCell className=\"header-cell\" sx={durationColumnSx}>\n OVERDUE\n </TableCell>\n )}\n {!isFixed && (\n <>\n <TableCell\n className=\"header-cell\"\n sx={{ px: 0.5, minWidth: 66, width: 66 }}\n >\n BOOSTER\n </TableCell>\n <TableCell\n className=\"header-cell\"\n sx={{\n px: 0.5,\n minWidth: 48,\n width: 48,\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 let overdueError = externalErrors.overdue;\n const fromUnit = isFixed\n ? safeDurationUnits.eligibleFrom || \"days\"\n : dose?.units?.eligibleFrom || \"days\";\n const toUnit = isFixed\n ? safeDurationUnits.eligibleTo || \"days\"\n : dose?.units?.eligibleTo || \"days\";\n const overdueUnit = dose?.units?.overdue || \"days\";\n\n const fromDays = getDaysVal(dose?.eligibleFrom, fromUnit);\n const toDays = getDaysVal(dose?.eligibleTo, toUnit);\n const overdueDays = getDaysVal(dose?.overdue, overdueUnit);\n if (!toError && toDays > 0 && toDays <= fromDays) {\n toError = \"Must be strictly greater than Eligible From\";\n }\n\n if (!overdueError && overdueDays > 0) {\n if (overdueDays <= fromDays || overdueDays > toDays) {\n overdueError =\n \"Must be greater than Eligible From and at most Eligible To\";\n }\n }\n return (\n <TableRow key={dose.id || idx}>\n <TableCell sx={compactNumberCellSx}>{idx + 1}</TableCell>\n <TableCell sx={durationColumnSx}>\n <DurationInput\n defaultValue={dose?.eligibleFrom}\n error={fromError || dose?.error}\n unit={\n isFixed\n ? safeDurationUnits.eligibleFrom || \"days\"\n : dose?.units?.eligibleFrom || \"days\"\n }\n onUnitChange={(newUnit) =>\n isFixed\n ? onDurationUnitsUpdate({\n ...safeDurationUnits,\n eligibleFrom: newUnit,\n })\n : handleDoseUnitChange(idx, \"eligibleFrom\", newUnit)\n }\n onFieldUpdate={(val) =>\n handleFieldChange(idx, \"eligibleFrom\", val)\n }\n />\n </TableCell>\n <TableCell sx={durationColumnSx}>\n <DurationInput\n defaultValue={dose?.eligibleTo}\n error={toError}\n unit={\n isFixed\n ? safeDurationUnits.eligibleTo || \"days\"\n : dose?.units?.eligibleTo || \"days\"\n }\n onUnitChange={(newUnit) =>\n isFixed\n ? onDurationUnitsUpdate({\n ...safeDurationUnits,\n eligibleTo: newUnit,\n })\n : handleDoseUnitChange(idx, \"eligibleTo\", newUnit)\n }\n onFieldUpdate={(val) =>\n handleFieldChange(idx, \"eligibleTo\", val)\n }\n />\n </TableCell>\n <TableCell sx={durationColumnSx}>\n {(isFixed && doseCount === 1) ||\n (!isFixed && idx === safeDoses.length - 1) ? (\n <Typography\n variant=\"body2\"\n sx={{ color: \"var(--color-gray1)\", pl: 1 }}\n >\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) =>\n handleFieldChange(\n idx,\n \"interval\",\n e.target.value,\n )\n }\n className={`dose-input ${intervalError ? \"error-input\" : \"\"}`}\n sx={{\n flex: 1,\n minWidth: \"70px\", // Prevents the field from shrinking excessively\n \"& input::-webkit-outer-spin-button, & input::-webkit-inner-spin-button\":\n {\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 },\n }}\n />\n <UnitSelect\n value={\n isFixed\n ? safeDurationUnits.interval || \"days\"\n : dose?.units?.interval || \"days\"\n }\n onChange={(e) =>\n isFixed\n ? onDurationUnitsUpdate({\n ...safeDurationUnits,\n interval: e.target.value,\n })\n : handleDoseUnitChange(\n idx,\n \"interval\",\n e.target.value,\n )\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 <TableCell sx={durationColumnSx}>\n <DurationInput\n defaultValue={dose?.overdue}\n error={overdueError}\n unit={dose?.units?.overdue || \"days\"}\n onUnitChange={(newUnit) =>\n handleDoseUnitChange(idx, \"overdue\", newUnit)\n }\n onFieldUpdate={(val) =>\n handleFieldChange(idx, \"overdue\", val)\n }\n />\n </TableCell>\n )}\n {!isFixed && (\n <TableCell sx={{ px: 0.5 }}>\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) =>\n handleFieldChange(\n idx,\n \"isBooster\",\n e.target.checked,\n )\n }\n />\n {dose?.isBooster && (\n <Tooltip\n title=\"Add booster alias\"\n arrow\n placement=\"top\"\n >\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\n ? \"#b7e4cb\"\n : \"#d9e0e7\",\n boxShadow: \"0 1px 2px rgba(57, 77, 97, 0.12)\",\n \"&:hover\": {\n bgcolor: dose?.alias\n ? \"#d9efe4\"\n : \"#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.5, textAlign: \"center\" }}>\n <IconButton\n size=\"small\"\n color=\"error\"\n onClick={() =>\n setDeleteConfirmModal({ open: true, index: idx })\n }\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </TableCell>\n )}\n </TableRow>\n );\n })\n ) : (\n <TableRow>\n <TableCell\n colSpan={isFixed ? 4 : 7}\n align=\"center\"\n sx={{ py: 3 }}\n >\n <Typography\n variant=\"body2\"\n sx={{ color: \"var(--color-gray1)\" }}\n >\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\n sx={{ color: \"var(--color-gray1)\", mb: 1.25, fontSize: \"12px\" }}\n >\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\n sx={{ display: \"flex\", justifyContent: \"flex-end\", gap: 1, mt: 1.5 }}\n >\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)\" }}>\n Delete Dose?\n </DialogTitle>\n <DialogContent>\n <Typography\n sx={{ color: \"var(--color-gray1)\", mb: 2, fontSize: \"14px\" }}\n >\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 interval: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n alias: PropTypes.string,\n error: PropTypes.string,\n }),\n ]),\n doseType: PropTypes.string,\n doseCount: PropTypes.number,\n durationUnits: PropTypes.shape({\n eligibleFrom: PropTypes.string,\n eligibleTo: PropTypes.string,\n interval: PropTypes.string,\n }),\n onDurationUnitsUpdate: PropTypes.func,\n onUpdate: PropTypes.func.isRequired,\n onDoseTypeChange: PropTypes.func.isRequired,\n errors: PropTypes.array,\n};\n\nexport default DoseDetailsTable;\n","import { api } from '@/common/interceptors/AxiosInterceptor';\nimport { showToast } from '@/common/toaster/toaster';\n\nexport const retrieveNextLevel = async (locationIds, level, fetchAccordingToUserAOI, languagePreference) => {\n const ids = Array.isArray(locationIds) ? locationIds : [locationIds];\n\n const params = {\n level,\n fetchAccordingToUserAOI,\n languagePreference,\n };\n if (ids.length) {\n params.locationIds = ids.join(',');\n params.locationId = ids[0];\n }\n try {\n const res = await api.get('/location/hierarchy', { params, showLoader: false });\n return res.data;\n } catch (error) {\n console.error(error);\n showToast({ type: 'error', message: 'Can not fetch next level locations' });\n }\n};\n\nexport const getParent = async (locationId, languagePreference) => {\n try {\n const res = await api.get('/location/parent', {\n params: { languagePreference, locationId },\n showLoader: false,\n });\n return res.data;\n } catch (error) {\n console.error(error);\n showToast({ type: 'error', message: 'Can not fetch parent details' });\n }\n};\n\nexport const createOrUpdate = async (location) => {\n await api.post('/location', location);\n};\n\nexport const retrieveNextLevelOfGivenLocationId = async (locationId) => {\n const res = await api.get('/location/childlocations', { params: { locationId } });\n return res.data;\n};\n\nexport const retrieveById = async (locationId) => {\n const res = await api.get('/location/byid', { params: { location_id: locationId } });\n return res.data;\n};\n\nexport const retrieveLocationByRoleId = (roleId) => api.get('/location/byroleid', { params: { role_id: roleId } });\n","import { api } from '@/common/interceptors/AxiosInterceptor';\n\nexport const retriveLocationType = (params, config) => api.get('/location/locationtypes', { params, ...config });\n\nexport const createLocationType = (data) => 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 "+ ADD REGION" to add GEOGRAPHICAL APPLICABILITY.\n </Box>\n )}\n </Box>\n\n <Dialog\n open={isModalOpen}\n onClose={handleClose}\n fullWidth\n maxWidth=\"sm\"\n PaperProps={{\n sx: { borderRadius: \"10px\" },\n }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n borderBottom: \"1px solid #eee\",\n mb: 0.5,\n py: 1.5,\n }}\n >\n <Typography sx={{ fontWeight: 700, fontSize: \"15px\" }}>\n {editingId\n ? \"Edit Geographical Location\"\n : \"Add Geographical Location\"}\n </Typography>\n <IconButton onClick={handleClose} size=\"small\">\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent ref={scrollRef} sx={{ mt: 0.5, py: 1 }}>\n {activeLevels.map((level, idx) => renderDropdown(level, idx))}\n {loading && activeLevels.length === 0 && (\n <Box sx={{ display: \"flex\", justifyContent: \"center\", p: 3 }}>\n <CircularProgress size={24} />\n </Box>\n )}\n </DialogContent>\n <DialogActions sx={{ p: 2, pt: 0.5 }}>\n <Button\n variant=\"contained\"\n fullWidth\n onClick={handleAddLocation}\n disabled={\n !activeLevels.length ||\n !selections[String(activeLevels[0].id || activeLevels[0].name)]\n ?.id\n }\n sx={{\n bgcolor: 'var(--color-tableHeader)',\n textTransform: \"none\",\n fontWeight: 700,\n borderRadius: \"20px\",\n py: 0.75,\n fontSize: \"13px\",\n \"&:hover\": { bgcolor: 'var(--color-tableHeader)' },\n }}\n >\n {editingId ? \"UPDATE LOCATION\" : \"ADD LOCATION\"}\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n};\n\nGeographicalApplicability.propTypes = {\n regions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n fullPath: PropTypes.string,\n locationId: PropTypes.number,\n locationIdArr: PropTypes.arrayOf(PropTypes.number),\n locationList: PropTypes.string,\n }),\n ),\n onUpdate: PropTypes.func.isRequired,\n};\n\nexport default GeographicalApplicability;\n","import {\n Box,\n Typography,\n Select,\n MenuItem,\n IconButton,\n TextField,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\n\nconst requiredLabelStyle = {\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"var(--color-text)\",\n fontSize: \"12px\",\n \"&::after\": {\n content: '\" *\"',\n color: \"var(--color-text)\",\n fontWeight: \"bold\",\n },\n};\n\nconst VaccineDependencies = ({\n dependencies = [],\n onUpdate,\n vaccineOptions = [],\n errors = [],\n}) => {\n const handleAddField = () => {\n const newDep = {\n id: Date.now(),\n vaccine: \"\",\n requirement: \"Should be given\",\n minGap: 0,\n maxGap: 0,\n };\n onUpdate([...dependencies, newDep]);\n };\n\n const handleDelete = (idx) => {\n onUpdate(dependencies.filter((_, i) => i !== idx));\n };\n\n const handleInputChange = (idx, field, value) => {\n const updated = dependencies.map((dep, i) => {\n if (i === idx) {\n if (field === \"requirement\") {\n return { ...dep, [field]: value, minGap: 0, maxGap: 0 };\n }\n return { ...dep, [field]: value };\n }\n return dep;\n });\n onUpdate(updated);\n };\n\n return (\n <Box className=\"dependency-section\">\n <Box className=\"side-card dependency-item\" sx={{ overflow: \"visible\" }}>\n <Box className=\"card-header\">\n <Typography\n className=\"section-label\"\n sx={{\n color: \"var(--color-text)\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n }}\n >\n VACCINE DEPENDENCIES\n </Typography>\n <Typography\n className=\"add-link\"\n onClick={handleAddField}\n sx={{ cursor: \"pointer\" }}\n >\n + ADD DEPENDENCY\n </Typography>\n </Box>\n\n {dependencies.map((dep, idx) => {\n const depErrors = (Array.isArray(errors) ? errors[idx] : {}) || {};\n return (\n <Box\n key={dep.id || idx}\n sx={{\n mb: 2,\n pb: 1.5,\n borderBottom: \"1px solid var(--color-gray4)\",\n \"&:last-child\": { borderBottom: \"none\", mb: 0, pb: 0 },\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n gap: 1.25,\n alignItems: \"flex-start\",\n mb: 1.25,\n flexWrap: \"wrap\",\n }}\n >\n <Box sx={{ flex: 1.5 }}>\n <Typography variant=\"caption\" sx={requiredLabelStyle}>\n Select Vaccines\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={dep.vaccine}\n onChange={(e) =>\n handleInputChange(idx, \"vaccine\", e.target.value)\n }\n displayEmpty\n sx={{\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n }}\n >\n <MenuItem value=\"\" disabled>\n Select some options\n </MenuItem>\n {vaccineOptions.map((v) => (\n <MenuItem key={v.id} value={v.vaccine_code}>\n {v.name}\n </MenuItem>\n ))}\n </Select>\n {depErrors.vaccine && (\n <Typography\n variant=\"caption\"\n sx={{ color: \"#d32f2f\", fontSize: \"0.75rem\", mt: 0.5 }}\n >\n {depErrors.vaccine}\n </Typography>\n )}\n </Box>\n\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"caption\" sx={requiredLabelStyle}>\n Requirement\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={dep.requirement}\n onChange={(e) =>\n handleInputChange(idx, \"requirement\", e.target.value)\n }\n sx={{\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n }}\n >\n <MenuItem value=\"Should be given\">Should be given</MenuItem>\n <MenuItem value=\"Should not be given\">\n Should not be given\n </MenuItem>\n <MenuItem value=\"Optional\">Optional</MenuItem>\n </Select>\n </Box>\n\n {(dep.requirement === \"Should be given\" ||\n dep.requirement === \"Optional\") && (\n <>\n <Box sx={{ width: 100 }}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"#333\",\n fontSize: \"10px\",\n \"&::after\": {\n content: '\" *\"',\n color: \"#333\",\n fontWeight: \"bold\",\n },\n }}\n >\n Min Gap (In Days)\n </Typography>\n <TextField\n size=\"small\"\n type=\"number\"\n value={dep.minGap}\n onChange={(e) =>\n handleInputChange(idx, \"minGap\", e.target.value)\n }\n error={!!depErrors.minGap}\n helperText={depErrors.minGap}\n inputProps={{ min: 0 }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n height: \"37px\",\n },\n \"& .MuiFormHelperText-root\": {\n position: \"absolute\",\n top: \"100%\",\n left: 0,\n width: \"220px\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n },\n }}\n />\n </Box>\n\n <Box sx={{ width: 100, position: \"relative\" }}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"#333\",\n fontSize: \"10px\",\n }}\n >\n Max Gap (In Days)\n </Typography>\n <TextField\n size=\"small\"\n type=\"number\"\n value={dep.maxGap}\n onChange={(e) =>\n handleInputChange(idx, \"maxGap\", e.target.value)\n }\n error={!!depErrors.maxGap}\n helperText={depErrors.maxGap}\n inputProps={{ min: 0 }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n height: \"37px\",\n },\n \"& .MuiFormHelperText-root\": {\n position: \"absolute\",\n top: \"100%\",\n right: 0,\n width: \"220px\",\n wordWrap: \"break-word\",\n textAlign: \"right\",\n },\n }}\n />\n </Box>\n </>\n )}\n <IconButton\n color=\"error\"\n size=\"small\"\n sx={{\n mt: 3,\n \"&:hover\": { bgcolor: \"rgba(244, 67, 54, 0.08)\" },\n }}\n onClick={() => handleDelete(idx)}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n </Box>\n );\n })}\n\n {dependencies.length === 0 && (\n <Box\n className=\"dependency-hint\"\n sx={{\n p: 2,\n textAlign: \"center\",\n border: \"1px dashed var(--color-gray3)\",\n borderRadius: \"8px\",\n color: \"var(--color-gray1)\",\n }}\n >\n Click "+ ADD DEPENDENCY" to add validations.\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n\nVaccineDependencies.propTypes = {\n dependencies: PropTypes.array,\n onUpdate: PropTypes.func.isRequired,\n vaccineOptions: PropTypes.array,\n errors: PropTypes.array,\n};\n\nexport default VaccineDependencies;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Box,\n Select,\n MenuItem,\n Typography,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n} from \"@mui/material\";\n\nconst DoseSelector = ({\n vaccineId,\n currentDoses,\n currentDoseDetails,\n maxDoses,\n onChange,\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 overdue: \"\",\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 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 {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};\n\nexport default DoseSelector;\n","import {\n Box,\n Typography,\n TextField,\n InputAdornment,\n Autocomplete,\n Chip,\n Checkbox,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faFilter } from \"@fortawesome/free-solid-svg-icons\";\nimport { useSelector } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n\nconst VaccineFilters = ({ filters = [], onUpdate }) => {\n const { filtersMaster = [] } = useSelector((state) => state.immunization);\n\n const activeFilters = filtersMaster.filter((f) => f.is_active);\n\n const selectedOptions = activeFilters.filter((f) =>\n filters.some(\n (code) => (typeof code === \"string\" ? code : code.code) === f.code,\n ),\n );\n\n const normalizedFilters = filters.map((f) =>\n typeof f === \"string\" ? f : f.code,\n );\n\n return (\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: 'var(--color-text)',\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n VACCINE FILTERS\n </Typography>\n\n <Autocomplete\n multiple\n options={activeFilters}\n disableCloseOnSelect\n getOptionLabel={(option) => option.name || option.code || \"\"}\n value={selectedOptions}\n onChange={(event, newValue) => {\n onUpdate(newValue.map((val) => val.code));\n }}\n renderOption={(props, option, { selected }) => (\n <li {...props} style={{ fontSize: \"13px\", padding: \"8px 12px\" }}>\n <Checkbox\n size=\"small\"\n style={{ marginRight: 8 }}\n checked={selected}\n sx={{\n p: 0,\n color: \"var(--color-gray3)\",\n \"&.Mui-checked\": { color: 'var(--color-text)' },\n }}\n />\n <Box>\n <Typography sx={{ fontSize: \"13px\", fontWeight: 600 }}>\n {option.name}\n </Typography>\n </Box>\n </li>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder={normalizedFilters.length === 0 ? \"Select Filters\" : \"\"}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\" sx={{ pl: 1 }}>\n <FontAwesomeIcon\n icon={faFilter}\n style={{ color: 'var(--color-gray1)', fontSize: \"12px\" }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: 'var(--color-background2)',\n \"& fieldset\": { borderColor: \"var(--color-gray3)\" },\n },\n }}\n />\n )}\n renderTags={(tagValue, getTagProps) =>\n tagValue.map((option, index) => (\n <Chip\n label={option.name}\n {...getTagProps({ index })}\n size=\"small\"\n key={option.code}\n sx={{\n height: 20,\n fontSize: \"10px\",\n backgroundColor: \"var(--color-gray4)\",\n fontWeight: 600,\n borderRadius: \"4px\",\n }}\n />\n ))\n }\n />\n </Box>\n );\n};\n\nVaccineFilters.propTypes = {\n filters: PropTypes.array,\n onUpdate: PropTypes.func.isRequired,\n};\n\nexport default VaccineFilters;\n","import {\n Box,\n Typography,\n Select,\n MenuItem,\n IconButton,\n TextField,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\n\nconst CODE_SET_OPTIONS = [\"CVX\", \"MVX\", \"SNOMED-CT\"];\n\nconst requiredLabelStyle = {\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"var(--color-text)\",\n fontSize: \"12px\",\n \"&::after\": {\n content: '\" *\"',\n color: \"var(--color-text)\",\n fontWeight: \"bold\",\n },\n};\n\nconst VaccineCodeSets = ({ codeSets = [], onUpdate, errors = [] }) => {\n const handleAddField = () => {\n const newCodeSet = {\n type: \"\",\n value: \"\",\n };\n onUpdate([...codeSets, newCodeSet]);\n };\n\n const handleDelete = (idx) => {\n onUpdate(codeSets.filter((_, i) => i !== idx));\n };\n\n const handleInputChange = (idx, field, value) => {\n const updated = codeSets.map((cs, i) => {\n if (i === idx) {\n return { ...cs, [field]: value };\n }\n return cs;\n });\n onUpdate(updated);\n };\n\n return (\n <Box className=\"dependency-section\" sx={{ mt: 2 }}>\n <Box className=\"side-card dependency-item\" sx={{ overflow: \"visible\" }}>\n <Box className=\"card-header\">\n <Typography\n className=\"section-label\"\n sx={{\n color: \"#394d61\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n }}\n >\n CODE SETS\n </Typography>\n <Typography\n className=\"add-link\"\n onClick={handleAddField}\n sx={{ cursor: \"pointer\" }}\n >\n + ADD CODE SET\n </Typography>\n </Box>\n\n {codeSets.map((cs, idx) => {\n const csErrors = (Array.isArray(errors) ? errors[idx] : {}) || {};\n const selectedTypes = new Set(\n codeSets\n .filter((item, i) => i !== idx && item.type)\n .map((item) => item.type),\n );\n\n return (\n <Box\n key={idx}\n sx={{\n mb: 2,\n pb: 1.5,\n borderBottom: \"1px solid #f0f0f0\",\n \"&:last-child\": { borderBottom: \"none\", mb: 0, pb: 0 },\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n gap: 1.25,\n alignItems: \"flex-start\",\n mb: 1.25,\n flexWrap: \"wrap\",\n }}\n >\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"caption\" sx={requiredLabelStyle}>\n Select Code Set Type\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={cs.type}\n onChange={(e) =>\n handleInputChange(idx, \"type\", e.target.value)\n }\n displayEmpty\n sx={{ borderRadius: \"6px\", bgcolor: \"#fff\" }}\n >\n <MenuItem value=\"\" disabled>\n Select type\n </MenuItem>\n {CODE_SET_OPTIONS.map((opt) => (\n <MenuItem\n key={opt}\n value={opt}\n disabled={selectedTypes.has(opt)}\n >\n {opt}\n </MenuItem>\n ))}\n </Select>\n {csErrors.type && (\n <Typography\n variant=\"caption\"\n sx={{\n color: \"#d32f2f\",\n fontSize: \"0.75rem\",\n mt: 0.5,\n display: \"block\",\n }}\n >\n {csErrors.type}\n </Typography>\n )}\n </Box>\n\n {cs.type && (\n <Box sx={{ flex: 1.5 }}>\n <Typography variant=\"caption\" sx={requiredLabelStyle}>\n Code Value\n </Typography>\n <TextField\n size=\"small\"\n fullWidth\n value={cs.value}\n placeholder={`Enter ${cs.type} value`}\n onChange={(e) =>\n handleInputChange(idx, \"value\", e.target.value)\n }\n error={!!csErrors.value}\n helperText={csErrors.value}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"#fff\",\n },\n }}\n />\n </Box>\n )}\n\n <IconButton\n color=\"error\"\n size=\"small\"\n sx={{\n mt: 3,\n \"&:hover\": { bgcolor: \"rgba(244, 67, 54, 0.08)\" },\n }}\n onClick={() => handleDelete(idx)}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n </Box>\n );\n })}\n\n {codeSets.length === 0 && (\n <Box\n className=\"dependency-hint\"\n sx={{\n p: 2,\n textAlign: \"center\",\n border: \"1px dashed var(--color-gray3)\",\n borderRadius: \"8px\",\n color: \"var(--color-gray1)\",\n }}\n >\n Click "+ ADD CODE SET" to add interoperability code sets.\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n\nVaccineCodeSets.propTypes = {\n codeSets: PropTypes.array,\n onUpdate: PropTypes.func.isRequired,\n errors: PropTypes.array,\n};\n\nexport default VaccineCodeSets;\n","import { ImmunizationUtil } from \"../service/ImmunizationUtil\";\n\nexport const getInitialSummaryVaccineData = ({\n vaccineId,\n vaccines,\n scheduledVaccines,\n}) => {\n const base = vaccines.find((v) => v.id === vaccineId);\n const scheduled = scheduledVaccines.find((sv) => sv.id === vaccineId);\n const doseType = base?.doseType || \"FIXED\";\n\n const data = scheduled\n ? { ...scheduled }\n : {\n id: base?.id || vaccineId,\n name: base?.name || \"N.A.\",\n 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 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","export const getDays = (val) => {\n if (!val) return 0;\n if (typeof val === \"string\" && val.toLowerCase() === \"birth\") return 0;\n return Number.parseInt(val) || 0;\n};\n\nexport const validateDoseDetails = (\n doseDetails,\n doseType,\n doseCount,\n durationUnits = {},\n) => {\n if (doseCount === 0) return null;\n const errors = [];\n const details = Array.isArray(doseDetails) ? doseDetails : [doseDetails];\n\n // Global fallback units (used for FIXED, or FLEXIBLE doses missing per-dose units)\n const globalEligibleFromUnit = durationUnits.eligibleFrom || \"days\";\n const globalEligibleToUnit = durationUnits.eligibleTo || \"days\";\n const globalIntervalUnit = durationUnits.interval || \"days\";\n\n const getDaysVal = (val, unit) => {\n if (!val) return 0;\n if (typeof val === \"string\" && val.toLowerCase() === \"birth\") return 0;\n const num = Number.parseInt(val) || 0;\n if (unit === \"weeks\") return num * 7;\n if (unit === \"months\") return num * 30;\n if (unit === \"years\") return num * 365;\n return num;\n };\n\n details.forEach((dose, idx) => {\n // Use per-dose units if present (FLEXIBLE), otherwise fall back to global (FIXED)\n const perDoseUnits = dose.units || {};\n const eligibleFromUnit =\n perDoseUnits.eligibleFrom || globalEligibleFromUnit;\n const eligibleToUnit = perDoseUnits.eligibleTo || globalEligibleToUnit;\n const intervalUnit = perDoseUnits.interval || globalIntervalUnit;\n const doseErrors = {};\n const startInDays = getDaysVal(dose.eligibleFrom, eligibleFromUnit);\n const endInDays = getDaysVal(dose.eligibleTo, eligibleToUnit);\n\n if (\n (dose.eligibleFrom === undefined ||\n dose.eligibleFrom === null ||\n dose.eligibleFrom === \"\") &&\n idx !== 0\n ) {\n doseErrors.eligibleFrom = \"Eligible From is required\";\n }\n\n if (\n dose.eligibleTo === undefined ||\n dose.eligibleTo === null ||\n dose.eligibleTo === \"\" ||\n getDaysVal(dose.eligibleTo, eligibleToUnit) === 0\n ) {\n doseErrors.eligibleTo = \"Eligible To is required\";\n }\n\n const isLastFlexibleRow =\n doseType === \"FLEXIBLE\" && idx === details.length - 1;\n\n const isIntervalRequired =\n (doseType === \"FIXED\" && doseCount > 1) ||\n (!isLastFlexibleRow && doseType === \"FLEXIBLE\");\n\n if (isIntervalRequired) {\n const intervalVal = Number.parseInt(dose.interval) || 0;\n const intervalInDays = getDaysVal(dose.interval, intervalUnit);\n if (\n dose.interval === undefined ||\n dose.interval === null ||\n dose.interval === \"\" ||\n intervalVal === 0 ||\n dose.interval === \"0 days\"\n ) {\n doseErrors.interval = \"Interval is required\";\n } else if (\n doseType === \"FIXED\" &&\n doseCount > 1 &&\n (doseCount - 1) * intervalInDays > endInDays - startInDays\n ) {\n doseErrors.interval = `Number of doses not possible in the window. Total interval exceeds available window (${endInDays - startInDays} days).`;\n }\n }\n\n if (endInDays <= startInDays && dose.eligibleFrom && dose.eligibleTo) {\n doseErrors.eligibleTo = \"Must be strictly greater than ELIGIBLE FROM\";\n }\n\n if (doseType === \"FLEXIBLE\") {\n const overdueUnit = perDoseUnits.overdue || \"days\";\n const overdueInDays = getDaysVal(dose.overdue, overdueUnit);\n\n if (\n overdueInDays > 0 &&\n (overdueInDays <= startInDays || overdueInDays > endInDays)\n ) {\n doseErrors.overdue =\n \"Must be greater than ELIGIBLE FROM and at most ELIGIBLE TO\";\n }\n }\n\n if (idx > 0 && doseType === \"FLEXIBLE\") {\n const prevDose = details[idx - 1];\n const prevPerDoseUnits = prevDose.units || {};\n const prevFromUnit =\n prevPerDoseUnits.eligibleFrom || globalEligibleFromUnit;\n const prevIntervalUnit = prevPerDoseUnits.interval || globalIntervalUnit;\n const prevStartInDays = getDaysVal(prevDose.eligibleFrom, prevFromUnit);\n const prevIntervalDays = getDaysVal(prevDose.interval, prevIntervalUnit);\n if (startInDays < prevStartInDays + prevIntervalDays) {\n doseErrors.eligibleFrom =\n \"Must be greater than previous ELIGIBLE FROM and INTERVAL\";\n }\n\n if (prevDose.isBooster && !dose.isBooster) {\n doseErrors.isBooster = \"A regular dose cannot follow a booster dose\";\n }\n }\n\n if (Object.keys(doseErrors).length > 0) {\n errors[idx] = doseErrors;\n }\n });\n\n return errors.length > 0 ? errors : null;\n};\n\nexport const validateDependencies = (dependencies) => {\n const errors = [];\n const seenVaccines = new Set();\n\n dependencies.forEach((dep, idx) => {\n const depErrors = {};\n if (!dep.vaccine) {\n depErrors.vaccine = \"Vaccine selection is required\";\n } else {\n if (seenVaccines.has(dep.vaccine)) {\n depErrors.vaccine = \"This vaccine is already added as a dependency\";\n }\n seenVaccines.add(dep.vaccine);\n }\n\n const isMinEmpty =\n dep.minGap === \"\" || dep.minGap === null || dep.minGap === undefined;\n const isMaxEmpty =\n dep.maxGap === \"\" || dep.maxGap === null || dep.maxGap === undefined;\n\n const minGap = getDays(dep.minGap);\n const maxGap = getDays(dep.maxGap);\n\n if (\n dep.requirement === \"Should be given\" ||\n dep.requirement === \"Optional\"\n ) {\n if (isMinEmpty) {\n depErrors.minGap = \"Gap cannot be empty\";\n } else if (minGap <= 0) {\n depErrors.minGap = \"Must be greater than 0\";\n }\n\n if (\n !isMinEmpty &&\n !isMaxEmpty &&\n minGap > 0 &&\n maxGap > 0 &&\n maxGap <= minGap\n ) {\n depErrors.maxGap = \"Max gap must be greater than Min Gap\";\n }\n } else {\n // For \"Should not be given\", values can be empty or zero.\n if (!isMinEmpty && minGap < 0) {\n depErrors.minGap = \"Gap cannot be negative\";\n }\n if (!isMaxEmpty && maxGap < 0) {\n depErrors.maxGap = \"Gap cannot be negative\";\n }\n }\n\n if (Object.keys(depErrors).length > 0) {\n errors[idx] = depErrors;\n }\n });\n\n return errors.some((e) => e && Object.keys(e).length > 0) ? errors : null;\n};\n\nexport const validateCodeSets = (codeSets) => {\n const errors = [];\n const seenTypes = new Set();\n\n (codeSets || []).forEach((cs, idx) => {\n const csErrors = {};\n if (!cs.type) {\n csErrors.type = \"Type is required\";\n } else {\n if (seenTypes.has(cs.type)) {\n csErrors.type = \"This type is already added\";\n }\n seenTypes.add(cs.type);\n }\n\n if (!cs.value || cs.value.trim() === \"\") {\n csErrors.value = \"Value is required\";\n }\n\n if (Object.keys(csErrors).length > 0) {\n errors[idx] = csErrors;\n }\n });\n\n return errors.some((e) => e && Object.keys(e).length > 0) ? errors : null;\n};\n\nexport const validateVaccineForm = (vaccine) => {\n const errors = {};\n\n if (!vaccine.name || vaccine.name.trim() === \"\") {\n errors.name = \"Vaccine Name is required\";\n }\n\n if (!vaccine.recipientType) {\n errors.recipientType = \"Recipient Type is required\";\n }\n\n if (!vaccine.baseDateCode) {\n errors.baseDateCode = \"Base Date is required\";\n }\n\n if (!vaccine.doses || vaccine.doses === 0) {\n errors.doses = \"At least one dose is required\";\n }\n\n const doseErrors = validateDoseDetails(\n vaccine.doseDetails,\n vaccine.doseType,\n vaccine.doses,\n vaccine.durationUnits,\n );\n if (doseErrors) {\n errors.doseDetails = doseErrors;\n }\n\n const depErrors = validateDependencies(vaccine.dependencies || []);\n if (depErrors) {\n errors.dependencies = depErrors;\n }\n\n const codeSetErrors = validateCodeSets(vaccine.codeSets || []);\n if (codeSetErrors) {\n errors.codeSets = codeSetErrors;\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\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} 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 { validateVaccineForm } from \"./utils/validationUtils\";\nimport \"./styles/ImmunizationSummary.scss\";\n\nconst MAX_DOSES = 10;\n\nconst formatEligibilityPart = (part) => {\n if (!part) return \"N.A.\";\n const trimmed = part.trim();\n if (trimmed === \"N.A.\" || trimmed === \"null days\" || trimmed === \"\")\n return \"N.A.\";\n\n const unitMatch = trimmed.match(/^(\\d+)\\s*(days?|weeks?|months?|years?)$/i);\n if (unitMatch) {\n const qty = parseInt(unitMatch[1]);\n const unit = unitMatch[2].toLowerCase();\n if (qty === 0) return \"From Start\";\n if (unit.startsWith(\"year\"))\n return `${qty} ${qty === 1 ? \"Year\" : \"Years\"}`;\n if (unit.startsWith(\"month\"))\n return `${qty} ${qty === 1 ? \"Month\" : \"Months\"}`;\n if (unit.startsWith(\"week\"))\n return `${qty} ${qty === 1 ? \"Week\" : \"Weeks\"}`;\n return `${qty} ${qty === 1 ? \"Day\" : \"Days\"}`;\n }\n};\n\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 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: helperGetDays(d.eligibleTo),\n overdue: helperGetDays(d.overdue),\n min_gap:\n 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_unit: d.units?.overdue || \"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)\n ? draft.doseDetails[0]?.eligibleFrom\n : draft.doseDetails?.eligibleFrom,\n )\n : null,\n fixedEligibleTo:\n draft.doseType === \"FIXED\"\n ? helperGetDays(\n Array.isArray(draft.doseDetails)\n ? draft.doseDetails[0]?.eligibleTo\n : draft.doseDetails?.eligibleTo,\n )\n : null,\n fixedInterval:\n draft.doseType === \"FIXED\" && draft.doses > 1\n ? helperGetDays(\n Array.isArray(draft.doseDetails)\n ? draft.doseDetails[0]?.interval\n : 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 },\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 =\n rights?.[\"update.admin.immunizationConfiguration.filter\"];\n const hasRecipientRight =\n rights?.[\"update.admin.immunizationConfiguration.recipient\"];\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 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 =\n typeof updater === \"function\" ? updater(currentData) : updater;\n\n return {\n ...prev,\n [vaccineId]: nextData,\n };\n });\n\n if (shouldClearErrors) {\n dispatch(clearValidationErrors(vaccineId));\n }\n },\n [dispatch, getInitialVaccineData],\n );\n\n const handleUpdateDoseState = useCallback(\n (vaccineId, newDoseCount, updatedDoseDetails, doseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const finalDoseDetails =\n newDoseCount === 0\n ? doseType === \"FIXED\"\n ? {}\n : []\n : updatedDoseDetails;\n\n return {\n ...currentData,\n doses: newDoseCount,\n doseDetails: finalDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(\n finalDoseDetails,\n doseType,\n newDoseCount,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseDetails = useCallback(\n (vaccineId, updatedDoseDetails, doseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const newDoseCount =\n doseType === \"FLEXIBLE\"\n ? updatedDoseDetails.length\n : currentData.doses;\n\n return {\n ...currentData,\n doses: newDoseCount,\n doseDetails: updatedDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(\n updatedDoseDetails,\n doseType,\n newDoseCount,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateRegions = useCallback(\n (vaccineId, updatedRegions) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n regions: updatedRegions,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDependencies = useCallback(\n (vaccineId, updatedDependencies) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n dependencies: updatedDependencies,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateName = useCallback(\n (vaccineId, newName) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n name: newName,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateFilters = useCallback(\n (vaccineId, updatedFilters) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n filters: updatedFilters,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseType = useCallback(\n (vaccineId, newDoseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n if (currentData.doseType === newDoseType) return currentData;\n\n let updatedDoseDetails;\n\n if (newDoseType === \"FIXED\") {\n updatedDoseDetails = Array.isArray(currentData.doseDetails)\n ? currentData.doseDetails[0] || {\n id: `fixed_${Date.now()}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n interval: 0,\n }\n : currentData.doseDetails;\n } else {\n updatedDoseDetails = Array.isArray(currentData.doseDetails)\n ? [...currentData.doseDetails]\n : [\n currentData.doseDetails || {\n id: `new_flex_${Date.now()}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n overdue: \"\",\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 overdue: \"\",\n interval: 0,\n });\n }\n }\n }\n\n return {\n ...currentData,\n doseType: newDoseType,\n doseDetails: updatedDoseDetails,\n eligibility: ImmunizationUtil.calculateOverallEligibility(\n updatedDoseDetails,\n newDoseType,\n currentData.doses,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseTypeRequested = useCallback(\n (vaccineId, newDoseType) => {\n const current =\n editedVaccines[vaccineId] || getInitialVaccineData(vaccineId);\n if (current.doseType === newDoseType) return;\n\n setDoseTypeConfirmation({\n open: true,\n vaccineId,\n newDoseType,\n });\n },\n [editedVaccines, getInitialVaccineData],\n );\n\n const confirmDoseTypeChange = useCallback(() => {\n const { vaccineId, newDoseType } = doseTypeConfirmation;\n handleUpdateDoseType(vaccineId, newDoseType);\n setDoseTypeConfirmation({\n open: false,\n vaccineId: null,\n newDoseType: null,\n });\n }, [doseTypeConfirmation, handleUpdateDoseType]);\n\n const 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) =>\n getAllowedBaseDateCodesForRecipient(recipientMaster, recipientType),\n [recipientMaster],\n );\n\n const getAvailableBaseDateOptions = useCallback(\n (recipientType) => {\n if (!recipientType) return [];\n\n const allowedCodeSet = new Set(\n getAllowedBaseDateCodes(recipientType)\n .map((code) =>\n String(code || \"\")\n .trim()\n .toLowerCase(),\n )\n .filter(Boolean),\n );\n\n return baseDateMaster.filter(\n (baseDate) =>\n baseDate.is_active &&\n allowedCodeSet.has(\n String(baseDate.code || \"\")\n .trim()\n .toLowerCase(),\n ),\n );\n },\n [baseDateMaster, getAllowedBaseDateCodes],\n );\n\n const handleUpdateRecipientType = useCallback(\n (vaccineId, newRecipientType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const allowedBaseDates = getAllowedBaseDateCodes(newRecipientType);\n const currentBaseDateCode = currentData.baseDateCode;\n const isCurrentBaseDateAllowed =\n !currentBaseDateCode ||\n allowedBaseDates.includes(currentBaseDateCode);\n\n return {\n ...currentData,\n recipientType: newRecipientType,\n baseDateCode: isCurrentBaseDateAllowed ? currentBaseDateCode : null,\n };\n });\n },\n [getAllowedBaseDateCodes, updateEditedVaccine],\n );\n\n const handleUpdateCodeSets = useCallback(\n (vaccineId, updatedCodeSets) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n codeSets: updatedCodeSets,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDurationUnits = useCallback(\n (vaccineId, updatedUnits) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const prevUnits = currentData.durationUnits || {};\n const rawDoseDetails = currentData.doseDetails;\n\n // doseDetails can be a plain object (FIXED type) or an array (FLEXIBLE type)\n const isObjectForm =\n rawDoseDetails &&\n !Array.isArray(rawDoseDetails) &&\n typeof rawDoseDetails === \"object\";\n\n const detailsArray = isObjectForm\n ? [rawDoseDetails]\n : Array.isArray(rawDoseDetails)\n ? rawDoseDetails\n : [];\n\n const remapDose = (dose) => {\n let eligibleFrom = dose.eligibleFrom;\n let eligibleTo = dose.eligibleTo;\n\n if (updatedUnits.eligibleFrom !== prevUnits.eligibleFrom) {\n const isBirth =\n typeof dose.eligibleFrom === \"string\" &&\n dose.eligibleFrom.toLowerCase() === \"birth\";\n const qty = isBirth ? 0 : Number.parseInt(dose.eligibleFrom) || 0;\n eligibleFrom = `${qty} ${updatedUnits.eligibleFrom}`;\n }\n if (updatedUnits.eligibleTo !== prevUnits.eligibleTo) {\n const isBirth =\n typeof dose.eligibleTo === \"string\" &&\n dose.eligibleTo.toLowerCase() === \"birth\";\n const qty = isBirth ? 0 : Number.parseInt(dose.eligibleTo) || 0;\n eligibleTo = `${qty} ${updatedUnits.eligibleTo}`;\n }\n return { ...dose, eligibleFrom, eligibleTo };\n };\n\n const mappedArray = detailsArray.map(remapDose);\n\n const newDoseDetails = isObjectForm ? mappedArray[0] : mappedArray;\n\n return {\n ...currentData,\n durationUnits: updatedUnits,\n doseDetails: newDoseDetails,\n };\n });\n },\n [updateEditedVaccine],\n );\n\n 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\">\n Immunization Configuration\n </Typography>\n <Typography className=\"page-subtitle\">\n Configure the specific details for your selected vaccines.\n </Typography>\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5 }}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.2,\n mr: 1,\n }}\n >\n <CustomSwitch\n checked={showInactive}\n onChange={(e) => setShowInactive(e.target.checked)}\n />\n <Typography\n sx={{\n fontSize: \"12px\",\n fontWeight: 700,\n color: \"var(--color-gray1)\",\n cursor: \"pointer\",\n userSelect: \"none\",\n }}\n onClick={() => setShowInactive(!showInactive)}\n >\n Show Inactives Also\n </Typography>\n </Box>\n {hasRecipientRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faUser} />}\n onClick={() => setIsRecipientModalOpen(true)}\n sx={{\n backgroundColor: \"var(--color-tableHeader)\",\n \"&:hover\": { backgroundColor: \"var(--color-tableHeader)\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Recipient\n </Button>\n )}\n {hasRecipientRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faCalendarDay} />}\n onClick={() => setIsBaseDateModalOpen(true)}\n sx={{\n backgroundColor: \"var(--color-tableHeader)\",\n \"&:hover\": { backgroundColor: \"var(--color-tableHeader)\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Base Date\n </Button>\n )}\n {hasFilterRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faFilter} />}\n onClick={() => setIsFiltersModalOpen(true)}\n sx={{\n backgroundColor: \"var(--color-tableHeader)\",\n \"&:hover\": { backgroundColor: \"var(--color-tableHeader)\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Filters\n </Button>\n )}\n <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 </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\">\n OVERALL ELIGIBILITY(ACCORDING TO BASE DATE)\n </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 error={!!validationErrors[vaccine.id]?.name}\n helperText={validationErrors[vaccine.id]?.name}\n onChange={(e) =>\n handleUpdateName(vaccine.id, e.target.value)\n }\n className=\"vaccine-name-input\"\n fullWidth\n />\n ) : (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\" }}>\n <span className=\"vaccine-name\">{vaccine.name}</span>\n {Array.isArray(vaccine.doseDetails) &&\n vaccine.doseDetails.some((d) => d.isBooster) && (\n <Chip\n label=\"Includes Booster\"\n size=\"small\"\n sx={{\n backgroundColor: \"rgba(103, 58, 183, 0.12)\",\n color: \"#7c3aed\",\n fontWeight: 700,\n fontSize: \"10px\",\n height: \"20px\",\n border: \"1px solid rgba(103, 58, 183, 0.3)\",\n \"& .MuiChip-label\": { px: \"8px\" },\n }}\n />\n )}\n </Box>\n )}\n </TableCell>\n <TableCell>\n {isExpanded ? (\n <Box>\n <DoseSelector\n vaccineId={vaccine.id}\n currentDoses={vaccine.doses}\n currentDoseDetails={vaccine.doseDetails}\n maxDoses={MAX_DOSES}\n onChange={(id, count, details) =>\n handleUpdateDoseState(\n id,\n count,\n details,\n vaccine.doseType,\n )\n }\n />\n {validationErrors[vaccine.id]?.doses && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: 0.5, display: \"block\" }}\n >\n {validationErrors[vaccine.id].doses}\n </Typography>\n )}\n </Box>\n ) : (\n `${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\n key={`${vaccine.id}_eligibility_${i}`}\n >\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 onChange={(e) => {\n e.stopPropagation();\n handleUpdateStatus(vaccine.id, e.target.checked);\n }}\n />\n </Box>\n </TableCell>\n <TableCell align=\"right\">\n {!isExpanded ? (\n <IconButton\n className=\"action-btn edit\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n toggleExpand(vaccine.id);\n }}\n >\n <FontAwesomeIcon icon={faChevronDown} size=\"xs\" />\n </IconButton>\n ) : (\n <IconButton\n className=\"action-btn collapse-btn\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n handleDiscard(vaccine.id);\n }}\n >\n <FontAwesomeIcon icon={faChevronUp} />\n </IconButton>\n )}\n </TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell\n colSpan={6}\n className=\"expanded-content-cell\"\n sx={{ padding: 0 }}\n >\n <Collapse in={isExpanded} timeout=\"auto\" unmountOnExit>\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 RECIPIENT TYPE\n </Typography>\n <Autocomplete\n options={recipientMaster}\n getOptionLabel={(option) => option?.name || \"\"}\n isOptionEqualToValue={(option, value) =>\n option.code === value.code\n }\n value={\n recipientMaster.find(\n (recipient) =>\n recipient.code === vaccine.recipientType,\n ) || null\n }\n onChange={(_, newValue) =>\n handleUpdateRecipientType(\n vaccine.id,\n newValue?.code || \"\",\n )\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder=\"Select Recipient Type\"\n error={\n !!validationErrors[vaccine.id]\n ?.recipientType\n }\n helperText={\n validationErrors[vaccine.id]\n ?.recipientType\n }\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment\n position=\"start\"\n sx={{ pl: 1 }}\n >\n <FontAwesomeIcon\n icon={faUser}\n style={{\n color: \"var(--color-gray1)\",\n fontSize: \"14px\",\n }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n },\n }}\n />\n )}\n />\n </Box>\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"var(--color-text)\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n BASE DATE\n </Typography>\n <Autocomplete\n options={getAvailableBaseDateOptions(\n vaccine.recipientType,\n )}\n disabled={!vaccine.recipientType}\n getOptionLabel={(option) =>\n option?.name ||\n option?.label ||\n option?.base_name ||\n option?.code ||\n option?.id ||\n \"\"\n }\n isOptionEqualToValue={(option, value) =>\n String(option?.code || \"\")\n .trim()\n .toLowerCase() ===\n String(value?.code || \"\")\n .trim()\n .toLowerCase()\n }\n value={\n getAvailableBaseDateOptions(\n vaccine.recipientType,\n ).find(\n (baseDate) =>\n String(baseDate.code || \"\")\n .trim()\n .toLowerCase() ===\n String(vaccine.baseDateCode || \"\")\n .trim()\n .toLowerCase(),\n ) || null\n }\n onChange={(_, newValue) =>\n handleUpdateBaseDateCode(\n vaccine.id,\n newValue?.code ?? null,\n )\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder={\n vaccine.recipientType\n ? \"Select Base Date\"\n : \"Select Recipient Type First\"\n }\n error={\n !!validationErrors[vaccine.id]\n ?.baseDateCode\n }\n helperText={\n validationErrors[vaccine.id]?.baseDateCode\n }\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment\n position=\"start\"\n sx={{ pl: 1 }}\n >\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{\n color: \"var(--color-gray1)\",\n fontSize: \"14px\",\n }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"var(--color-background2)\",\n },\n }}\n />\n )}\n />\n </Box>\n <DoseDetailsTable\n doses={vaccine.doseDetails}\n doseCount={vaccine.doses}\n doseType={vaccine.doseType || \"FIXED\"}\n durationUnits={vaccine.durationUnits}\n onDurationUnitsUpdate={(updatedUnits) =>\n handleUpdateDurationUnits(\n vaccine.id,\n updatedUnits,\n )\n }\n onUpdate={(updatedDoses) =>\n handleUpdateDoseDetails(\n vaccine.id,\n updatedDoses,\n vaccine.doseType || \"FIXED\",\n )\n }\n onDoseTypeChange={(val) =>\n handleUpdateDoseTypeRequested(vaccine.id, val)\n }\n errors={validationErrors[vaccine.id]?.doseDetails}\n />\n </Box>\n <Box className=\"right-panel\">\n <VaccineFilters\n filters={vaccine.filters || []}\n onUpdate={(updatedFilters) =>\n handleUpdateFilters(vaccine.id, updatedFilters)\n }\n />\n <GeographicalApplicability\n regions={vaccine.regions}\n onUpdate={(updatedRegions) =>\n handleUpdateRegions(vaccine.id, updatedRegions)\n }\n />\n <VaccineDependencies\n dependencies={vaccine.dependencies || []}\n onUpdate={(updatedDeps) =>\n handleUpdateDependencies(\n vaccine.id,\n updatedDeps,\n )\n }\n vaccineOptions={vaccines.filter(\n (v) => v.isActive && v.id !== vaccine.id,\n )}\n errors={\n validationErrors[vaccine.id]?.dependencies\n }\n />\n <VaccineCodeSets\n codeSets={vaccine.codeSets || []}\n onUpdate={(updatedCodeSets) =>\n handleUpdateCodeSets(\n vaccine.id,\n updatedCodeSets,\n )\n }\n errors={validationErrors[vaccine.id]?.codeSets}\n />\n </Box>\n </Box>\n\n <Box className=\"expansion-footer\">\n <Button\n variant=\"outlined\"\n className=\"discard-btn\"\n onClick={() => handleDiscard(vaccine.id)}\n >\n DISCARD CHANGES\n </Button>\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 </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 <AddCustomVaccineModal\n open={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n onAdd={handleAddCustomVaccine}\n isFromSummary={true}\n />\n <ConfigureRecipientModal\n open={isRecipientModalOpen}\n onClose={() => setIsRecipientModalOpen(false)}\n />\n <ConfigureBaseDateModal\n open={isBaseDateModalOpen}\n onClose={() => setIsBaseDateModalOpen(false)}\n />\n <ConfigureFiltersModal\n open={isFiltersModalOpen}\n onClose={() => setIsFiltersModalOpen(false)}\n />\n </Box>\n );\n};\n\nexport default ImmunizationSummary;\n","import { useEffect, useRef, useState } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { Box, CircularProgress } from \"@mui/material\";\nimport ImmunizationConfiguration from \"./ImmunizationConfiguration\";\nimport ImmunizationScheduleConfiguration from \"./ImmunizationScheduleConfiguration\";\nimport ImmunizationSummary from \"./ImmunizationSummary\";\nimport { ImmunizationUtil } from \"./service/ImmunizationUtil\";\nimport {\n setBaseDatesMaster,\n setCurrentView,\n setRecipientMaster,\n setVaccines,\n setFiltersMaster,\n setFeatureRights,\n setImmunizationConfigLoaded,\n} from \"@/store/reducers/immunizationSlice\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\n\nconst VIEW_COMPONENT_MAP = {\n landing: ImmunizationConfiguration,\n \"schedule-config\": ImmunizationScheduleConfiguration,\n summary: ImmunizationSummary,\n};\n\nconst ImmunizationConfigurationBase = () => {\n const dispatch = useDispatch();\n const { currentViewId, isConfigLoaded } = useSelector(\n (state) => state.immunization,\n );\n const [isInitializing, setIsInitializing] = useState(!isConfigLoaded);\n\n const hasFetchedRef = useRef(false);\n\n useEffect(() => {\n if (isConfigLoaded) {\n setIsInitializing(false);\n hasFetchedRef.current = false;\n return;\n }\n\n if (hasFetchedRef.current) {\n return;\n }\n hasFetchedRef.current = true;\n\n const fetchInitialData = async () => {\n try {\n setIsInitializing(true);\n const [initiationResponse, rightsResponse] = await Promise.allSettled([\n ImmunizationUtil.checkImmunizationConfigurationInitiation({}),\n getAssignedFeatures(\"techo.manage.immunizationConfiguration\"),\n ]);\n\n if (rightsResponse?.status === \"fulfilled\") {\n dispatch(\n setFeatureRights(JSON.parse(rightsResponse.value.data || \"{}\")),\n );\n }\n\n const initiationStatus =\n initiationResponse?.status === \"fulfilled\"\n ? initiationResponse.value?.data?.result?.[0]?.key_value\n : null;\n\n if (initiationResponse?.status !== \"fulfilled\") {\n throw (\n initiationResponse?.reason ||\n new Error(\"Failed to fetch initiation status\")\n );\n }\n\n const isDone = initiationStatus === \"DONE\";\n\n if (!isDone) {\n // dispatch(setCurrentView(\"landing\"));\n dispatch(setCurrentView(\"schedule-config\"));\n dispatch(setImmunizationConfigLoaded(true));\n return;\n }\n\n const referenceDataResponse =\n await ImmunizationUtil.getImmunizationReferenceData();\n\n if (referenceDataResponse) {\n const referenceDataResults = referenceDataResponse?.data || [];\n const baseDatesResponse = referenceDataResults[0];\n const filtersResponse = referenceDataResults[1];\n const vaccineResponse = referenceDataResults[2];\n const recipientResponse = referenceDataResults[3];\n\n if (baseDatesResponse?.result) {\n dispatch(setBaseDatesMaster(baseDatesResponse.result));\n }\n\n if (filtersResponse?.result) {\n dispatch(setFiltersMaster(filtersResponse.result));\n }\n\n if (recipientResponse?.result) {\n dispatch(setRecipientMaster(recipientResponse.result));\n }\n\n if (vaccineResponse?.result) {\n const mappedVaccines = vaccineResponse.result.map(\n ImmunizationUtil.mapImmunizationVaccineConfig,\n );\n dispatch(setVaccines(mappedVaccines));\n }\n }\n\n dispatch(setCurrentView(\"summary\"));\n dispatch(setImmunizationConfigLoaded(true));\n } catch (error) {\n console.error(\"Error fetching initial data:\", error);\n showToast({\n message: error?.message || \"Failed to fetch initial configuration\",\n type: \"error\",\n });\n hasFetchedRef.current = false;\n } finally {\n setIsInitializing(false);\n }\n };\n fetchInitialData();\n }, [dispatch, isConfigLoaded]);\n\n const ActiveView =\n VIEW_COMPONENT_MAP[currentViewId] || ImmunizationConfiguration;\n\n if (isInitializing && !isConfigLoaded) {\n return (\n <Box className=\"flex justify-center items-center w-full h-[60vh]\">\n <CircularProgress color=\"primary\" />\n </Box>\n );\n }\n\n return (\n <div className=\"immunization-configuration-base-wrapper\">\n <ActiveView />\n </div>\n );\n};\n\nexport default ImmunizationConfigurationBase;\n"],"names":["TemplateCard","title","toolTipText","buttonText","icon","iconColor","iconBgColor","isCustom","onClick","Box","jsxs","jsx","FontAwesomeIcon","Tooltip","IconButton","faInfoCircle","Typography","Button","faArrowRight","PropTypes","ImmunizationConfiguration","dispatch","useDispatch","TextField","InputAdornment","faSearch","Grid","faPlus","setCurrentView","VaccineCard","vaccine","selected","faSyringe","AddCustomVaccineModal","open","onClose","onAdd","isFromSummary","vaccineName","setVaccineName","useState","disease","setDisease","recipientType","setRecipientType","baseDateCode","setBaseDateCode","touched","setTouched","vaccines","recipientMaster","baseDateMaster","useSelector","state","selectedRecipient","useMemo","recipient","allowedBaseDateCodes","config","availableBaseDateOptions","activeBaseDates","baseDate","allowedCodeSet","code","selectedBaseDate","normalizedCode","isFormValid","handleAdd","derivedCode","v","showToast","p","payload","response","ImmunizationUtil","resultObject","_b","_a","vaccineId","_c","_d","err","handleReset","error","handleCloseModal","Dialog","DialogTitle","faTimes","DialogContent","e","faTag","faShieldVirus","Autocomplete","option","value","_","newValue","params","Fragment","faUser","faCalendarDay","DialogActions","VaccineGridSkeleton","children","isLoading","getUseSkeleton","index","ImmunizationScheduleConfiguration","selectedVaccineIds","isConfigLoaded","searchTerm","setSearchTerm","isModalOpen","setIsModalOpen","isFetchingVaccines","setIsFetchingVaccines","isSubmitting","setIsSubmitting","useEffect","vaccinesResponse","mappedVaccines","setVaccines","vaccineErr","handleToggleVaccine","id","toggleVaccine","handleAddCustomVaccine","data","addCustomVaccine","handleToggleAll","allVisibleIds","filteredVaccines","newSelectedIds","setSelectedVaccineIds","handleSelectVaccines","activateIds","deactivateIds","isNowSelected","wasActive","activateSelectedVaccines","setImmunizationConfigLoaded","allVaccines","activeSelectedIds","areAllVisibleSelected","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","name","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","UnitSelect","onChange","Select","MenuItem","getDays","getDaysVal","unit","num","DurationInput","defaultValue","onFieldUpdate","onUnitChange","quantity","handleQtyChange","rawValue","faExclamationCircle","DoseDetailsTable","doses","doseType","doseCount","durationUnits","onDurationUnitsUpdate","onUpdate","onDoseTypeChange","deleteConfirmModal","setDeleteConfirmModal","safeDurationUnits","boosterAliasModal","setBoosterAliasModal","isFixed","durationColumnSx","compactNumberCellSx","safeDoses","handleFieldChange","field","sanitizedValue","updatedDose","baseArray","updatedDoses","d","i","newDose","handleDoseUnitChange","unitField","newUnit","newUnits","qty","handleSaveBoosterAlias","confirmDeleteDose","dose","externalErrors","fromError","toError","intervalError","overdueError","fromUnit","toUnit","overdueUnit","fromDays","toDays","overdueDays","_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","useRef","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","validateDoseDetails","doseDetails","details","globalEligibleFromUnit","globalEligibleToUnit","globalIntervalUnit","perDoseUnits","eligibleFromUnit","eligibleToUnit","intervalUnit","doseErrors","startInDays","endInDays","isLastFlexibleRow","intervalVal","intervalInDays","overdueInDays","prevDose","prevPerDoseUnits","prevFromUnit","prevIntervalUnit","prevStartInDays","prevIntervalDays","validateDependencies","seenVaccines","isMinEmpty","isMaxEmpty","minGap","maxGap","validateCodeSets","seenTypes","validateVaccineForm","codeSetErrors","MAX_DOSES","formatEligibilityPart","part","trimmed","unitMatch","prepareVaccinePayload","draft","helperGetDays","doseRows","regularCount","boosterCount","doseLabel","locationArray","dependencyArray","filtersPayload","filtersJSON","codeSetsArray","durationUnitsJSON","ImmunizationSummary","validationErrors","rights","expandedRowId","setExpandedRowId","setShowInactive","isFiltersModalOpen","setIsFiltersModalOpen","isRecipientModalOpen","setIsRecipientModalOpen","setEditedVaccines","hasFilterRight","hasRecipientRight","statusConfirmation","setStatusConfirmation","doseTypeConfirmation","setDoseTypeConfirmation","toggleExpand","isExpanding","clearValidationErrors","getInitialVaccineData","updateEditedVaccine","updater","shouldClearErrors","currentData","nextData","handleUpdateDoseState","finalDoseDetails","handleUpdateDoseDetails","handleUpdateRegions","updatedRegions","handleUpdateDependencies","updatedDependencies","handleUpdateName","handleUpdateFilters","updatedFilters","handleUpdateDoseType","newDoseType","targetCount","handleUpdateDoseTypeRequested","confirmDoseTypeChange","confirmUpdateStatus","setVaccineStatus","handleUpdateStatus","handleUpdateBaseDateCode","newBaseDateCode","getAllowedBaseDateCodes","getAvailableBaseDateOptions","handleUpdateRecipientType","newRecipientType","currentBaseDateCode","isCurrentBaseDateAllowed","handleUpdateCodeSets","updatedCodeSets","handleUpdateDurationUnits","updatedUnits","prevUnits","rawDoseDetails","isObjectForm","detailsArray","remapDose","eligibleFrom","eligibleTo","mappedArray","newDoseDetails","handleDiscard","handleSaveVaccineDetails","setValidationErrors","updateScheduledVaccine","displayVaccines","isExpanded","count","faChevronUp","faChevronDown","Collapse","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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"}
|