@argusoft/medplat-core 1.0.23 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/{AddFeatures-CTVs_Gr9.js → AddFeatures-CqE3v0BN.js} +2 -2
  2. package/dist/{AddFeatures-CTVs_Gr9.js.map → AddFeatures-CqE3v0BN.js.map} +1 -1
  3. package/dist/AddMenuConfiguration-BSQLl88V.js +6570 -0
  4. package/dist/AddMenuConfiguration-BSQLl88V.js.map +1 -0
  5. package/dist/AddMenuConfiguration.css +1 -1
  6. package/dist/{ChangePasswordModalCore-DONyFFlx.js → ChangePasswordModalCore-DTYWRTa-.js} +955 -952
  7. package/dist/ChangePasswordModalCore-DTYWRTa-.js.map +1 -0
  8. package/dist/{ConditionConfig-C3rF2wXU.js → ConditionConfig-DSsgGEXS.js} +2 -2
  9. package/dist/{ConditionConfig-C3rF2wXU.js.map → ConditionConfig-DSsgGEXS.js.map} +1 -1
  10. package/dist/FhirRawResourceList-ZZFd7gTX.js +550 -0
  11. package/dist/FhirRawResourceList-ZZFd7gTX.js.map +1 -0
  12. package/dist/FhirServerList-Dkq7Kbes.js +116 -0
  13. package/dist/FhirServerList-Dkq7Kbes.js.map +1 -0
  14. package/dist/FhirServerProfile-CUOwC6Wb.js +253 -0
  15. package/dist/FhirServerProfile-CUOwC6Wb.js.map +1 -0
  16. package/dist/FhirServerWizard-Db6Hm4bQ.js +161 -0
  17. package/dist/FhirServerWizard-Db6Hm4bQ.js.map +1 -0
  18. package/dist/{ImmunizationConfigurationBase-CTBoSuSz.js → ImmunizationConfigurationBase-BevKZx_l.js} +386 -302
  19. package/dist/ImmunizationConfigurationBase-BevKZx_l.js.map +1 -0
  20. package/dist/{ManageEventConfiguration-BntUc_YI.js → ManageEventConfiguration-DV3I5POA.js} +4 -4
  21. package/dist/{ManageEventConfiguration-BntUc_YI.js.map → ManageEventConfiguration-DV3I5POA.js.map} +1 -1
  22. package/dist/{ManageRole-CZAk-IlM.js → ManageRole-B9bs_T00.js} +116 -116
  23. package/dist/ManageRole-B9bs_T00.js.map +1 -0
  24. package/dist/{ManageUser-Gv38VHMu.js → ManageUser-AB3_Vfp_.js} +85 -84
  25. package/dist/{ManageUser-Gv38VHMu.js.map → ManageUser-AB3_Vfp_.js.map} +1 -1
  26. package/dist/{MobileMenuManagement-CV6QCeos.js → MobileMenuManagement-CVAKyKDa.js} +33 -32
  27. package/dist/MobileMenuManagement-CVAKyKDa.js.map +1 -0
  28. package/dist/{MobileTypeEventConfigModal-BNjZ8pnq.js → MobileTypeEventConfigModal-BxLympIO.js} +2 -2
  29. package/dist/{MobileTypeEventConfigModal-BNjZ8pnq.js.map → MobileTypeEventConfigModal-BxLympIO.js.map} +1 -1
  30. package/dist/{OtherTypeEventConfigModal-DiVhWDpG.js → OtherTypeEventConfigModal-BeG1GrUi.js} +94 -93
  31. package/dist/OtherTypeEventConfigModal-BeG1GrUi.js.map +1 -0
  32. package/dist/{RoleManagement-B9WgZGEj.js → RoleManagement-BIiW9uTq.js} +2 -2
  33. package/dist/{RoleManagement-B9WgZGEj.js.map → RoleManagement-BIiW9uTq.js.map} +1 -1
  34. package/dist/ServerFormFields-SLghoZ2z.js +136 -0
  35. package/dist/ServerFormFields-SLghoZ2z.js.map +1 -0
  36. package/dist/SyncDialog-BRGpHOE4.js +130 -0
  37. package/dist/SyncDialog-BRGpHOE4.js.map +1 -0
  38. package/dist/{TypeConfiguration-CupQxH9Y.js → TypeConfiguration-37wp-gsl.js} +2 -2
  39. package/dist/{TypeConfiguration-CupQxH9Y.js.map → TypeConfiguration-37wp-gsl.js.map} +1 -1
  40. package/dist/{UserList-BzHsbYel.js → UserList-2gGuDgNa.js} +38 -37
  41. package/dist/{UserList-BzHsbYel.js.map → UserList-2gGuDgNa.js.map} +1 -1
  42. package/dist/{UserListSkeleton-DhIJ5X3y.js → UserListSkeleton-BMKANCtW.js} +57 -93
  43. package/dist/UserListSkeleton-BMKANCtW.js.map +1 -0
  44. package/dist/Users-CsJ08Kjm.js +40 -0
  45. package/dist/Users-CsJ08Kjm.js.map +1 -0
  46. package/dist/dashboardLayoutUtils-Bt5HA96J.js +265 -0
  47. package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +1 -0
  48. package/dist/index.css +1 -1
  49. package/dist/index.js +190 -134
  50. package/dist/index.js.map +1 -1
  51. package/dist/permissions-DEWACxJN.js +308 -0
  52. package/dist/permissions-DEWACxJN.js.map +1 -0
  53. package/package.json +1 -1
  54. package/dist/AddMenuConfiguration-DsnY0Rws.js +0 -2237
  55. package/dist/AddMenuConfiguration-DsnY0Rws.js.map +0 -1
  56. package/dist/ChangePasswordModalCore-DONyFFlx.js.map +0 -1
  57. package/dist/ImmunizationConfigurationBase-CTBoSuSz.js.map +0 -1
  58. package/dist/ManageRole-CZAk-IlM.js.map +0 -1
  59. package/dist/MobileMenuManagement-CV6QCeos.js.map +0 -1
  60. package/dist/OtherTypeEventConfigModal-DiVhWDpG.js.map +0 -1
  61. package/dist/UserListSkeleton-DhIJ5X3y.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"AddMenuConfiguration-DsnY0Rws.js","sources":["../src/views/MobileMenuManagement/MenuDragContext.js","../src/views/MobileMenuManagement/MobileDisplay.jsx","../src/views/MobileMenuManagement/AddMenuConfiguration.jsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const MenuDragContext = createContext();\nexport const useMenuDragContext = () => useContext(MenuDragContext);\n","import {\n Box,\n Divider,\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useState } from 'react';\nimport './MobileScreen.css';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faBatteryFull,\n faBell,\n faChevronDown,\n faCircleUser,\n faLocationDot,\n faMagnifyingGlass,\n faRotate,\n faSignal,\n faTimes,\n faWifi,\n} from '@fortawesome/free-solid-svg-icons';\nimport HomeIcon from '@/assets/img/home.svg';\nimport ProgramsIcon from '@/assets/img/programs.svg';\nimport AnalyticsIcon from '@/assets/img/analytics.svg';\nimport FamilyManagementIcon from '@/assets/img/family-management.svg';\nimport { DndContext, useDraggable, useDroppable } from '@dnd-kit/core';\nimport { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { Grid } from '@mui/system';\nimport { CSS } from '@dnd-kit/utilities';\nconst SortableComponent = ({ id, children, componentType }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useSortable({\n id,\n data: { sortable: true, type: componentType },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n dnd: { listeners, attributes },\n });\n};\nconst DraggableFixedComponent = ({ id, children, componentType }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id,\n data: {\n type: componentType,\n deletable: true,\n },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n ...listeners,\n ...attributes,\n });\n};\nconst FeatureSortableWrapper = ({ id, children, sectionId, featureName }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useSortable({\n id: id,\n data: {\n sortable: true,\n type: 'FEATURE_TILE',\n sectionId: sectionId,\n name: featureName,\n },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n ...attributes,\n ...listeners,\n });\n};\n\nconst MobileSearchBar = React.forwardRef(({ id, style, handleSectionClick, ...props }, ref) => {\n const handleContextMenu = (e) => {\n e.preventDefault();\n handleSectionClick(id);\n };\n return (\n <Box\n id={id}\n ref={ref}\n onContextMenu={handleContextMenu}\n sx={{\n ...style,\n width: '100%',\n minHeight: '50px',\n p: 1.5,\n border: '1px solid #ccc',\n borderRadius: '8px',\n backgroundColor: 'var(--color-background2)',\n display: 'flex',\n alignItems: 'center',\n mt: 1,\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n mb: 3,\n }}\n {...props}\n >\n <FontAwesomeIcon icon={faMagnifyingGlass} style={{ marginRight: '8px', color: '#888' }} />\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ flexGrow: 1 }}>\n Search...\n </Typography>\n </Box>\n );\n});\nMobileSearchBar.displayName = 'MobileSearchBar';\nMobileSearchBar.propTypes = {\n id: PropTypes.any,\n style: PropTypes.any,\n handleSectionClick: PropTypes.any,\n};\n\nconst MobileSection = React.forwardRef(\n (\n {\n id,\n arrayIndex,\n sectionTitle,\n handleSectionClick,\n dnd,\n sectionFeatures,\n SvgIconBox,\n onGroupClick,\n activeGroupId,\n ...props\n },\n ref\n ) => {\n const { listeners, attributes } = dnd || {};\n const handleContextMenu = (e) => {\n e.preventDefault();\n handleSectionClick(id);\n };\n const handleTileClick = (e) => {\n e.stopPropagation();\n };\n const handleGroupContextMenu = (e, feature) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (onGroupClick) {\n onGroupClick(e, feature);\n }\n };\n const { setNodeRef: setFeatureContainerRef, isOver } = useDroppable({\n id: `section-drop-zone-${id}`,\n data: {\n type: 'SECTION_DROP_ZONE',\n sectionId: id,\n },\n });\n return (\n <Box\n id={id}\n ref={ref}\n {...listeners}\n {...attributes}\n onContextMenu={handleContextMenu}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n p: 1,\n border: isOver ? '1px dashed var(--color-tableHeader)' : '0.1px solid #A9BCCD',\n cursor: 'pointer',\n backgroundColor: '#e6f0ff',\n borderRadius: '14px',\n mt: 1,\n }}\n {...props}\n >\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n mb: 0.5,\n }}\n >\n <Typography variant=\"body2\" sx={{ fontWeight: 'bold', color: 'var(--color-text)', flexGrow: 1 }}>\n {sectionTitle || `Section ${arrayIndex + 1}`}\n </Typography>\n </Box>\n\n <Box\n ref={setFeatureContainerRef}\n sx={{\n width: '100%',\n minHeight: '40px',\n border: `${isOver ? '1px dashed var(--color-tableHeader)' : ''}`,\n borderRadius: '4px',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: sectionFeatures?.length > 0 ? 'flex-start' : 'center',\n transition: 'background-color 0.1s',\n }}\n >\n {sectionFeatures?.length > 0 ? (\n <SortableContext items={sectionFeatures.map((f) => f.instanceId)} strategy={verticalListSortingStrategy}>\n <Grid container spacing={1} sx={{ width: '100%', m: 0 }}>\n {sectionFeatures.map((feature) => {\n const isGroup = feature.type === 'GROUP';\n const isPopoverOpen = isGroup && activeGroupId === feature.instanceId;\n return (\n <FeatureSortableWrapper\n key={feature.instanceId}\n id={feature.instanceId}\n sectionId={id}\n featureName={feature.name}\n >\n <Grid\n item\n xs={3}\n sm={3}\n sx={{\n flexBasis: 'calc(25% - 8px)',\n maxWidth: 'calc(25% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n }}\n >\n <Box\n onClick={(e) => feature.type === 'FEATURE' && handleTileClick(e)}\n onContextMenu={(e) => feature.type === 'GROUP' && handleGroupContextMenu(e, feature)}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: isGroup ? 'pointer' : 'grab',\n minWidth: 0,\n overflow: 'hidden',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n {renderFeatureIcon(\n Object.prototype.hasOwnProperty.call(feature, 'icon') ? feature.icon : null,\n SvgIconBox\n )}\n <Typography\n variant=\"body2\"\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {renderFeatureName(feature.name)}\n </Typography>\n {isGroup && (\n <Box sx={{ ml: 0.5, display: 'flex', alignItems: 'center' }}>\n <FontAwesomeIcon\n icon={faChevronDown}\n sx={{\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n transition: 'transform 0.2s',\n transform: isPopoverOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </Box>\n )}\n </Box>\n </Grid>\n </FeatureSortableWrapper>\n );\n })}\n </Grid>\n </SortableContext>\n ) : (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {isOver ? 'Drop Feature Here' : 'Drag features here later.'}\n </Typography>\n )}\n </Box>\n </Box>\n );\n }\n);\nMobileSection.displayName = 'MobileSection';\nMobileSection.propTypes = {\n id: PropTypes.any,\n arrayIndex: PropTypes.any,\n sectionTitle: PropTypes.any,\n handleSectionClick: PropTypes.any,\n dnd: PropTypes.any,\n sectionFeatures: PropTypes.any,\n SvgIconBox: PropTypes.any,\n onGroupClick: PropTypes.any,\n activeGroupId: PropTypes.any,\n};\nconst GroupFeatureSortableItem = ({ feature, SvgIconBox, handleFeatureClick }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: feature.uuid || feature.id,\n });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: isDragging ? 2000 : 1,\n opacity: isDragging ? 0.8 : 1,\n boxShadow: isDragging ? '0px 4px 10px rgba(0,0,0,0.1)' : 'none',\n };\n\n const handleClick = (e) => {\n e.stopPropagation();\n if (handleFeatureClick) {\n handleFeatureClick();\n }\n };\n\n const renderIconInPopover = (iconData, SvgIconBox) => {\n let svgContent = null;\n\n if (typeof iconData === 'object' && iconData !== null) {\n if (iconData.type === 'svg' && typeof iconData.content === 'string') {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === 'string') {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === 'string') {\n svgContent = iconData;\n } else if (typeof feature.icon === 'object' && feature.icon !== null) {\n svgContent = feature.icon.content || feature.icon.svg;\n }\n\n if (typeof svgContent === 'string' && svgContent.includes('<svg')) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n\n if (svgContent) {\n return (\n <Box sx={{ height: '24px', width: '24px', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n height: '24px',\n width: '24px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n color: 'var(--color-gray3)',\n border: '1px solid',\n borderRadius: '4px',\n fontSize: '0.8rem',\n }}\n >\n ?\n </Box>\n );\n };\n\n return (\n <Grid\n item\n xs={4}\n ref={setNodeRef}\n style={style}\n sx={{\n flexBasis: 'calc(33.3333% - 8px)',\n maxWidth: 'calc(33.3333% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n p: 0.5,\n }}\n >\n <Box\n onClick={handleClick}\n {...listeners}\n {...attributes}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: 'grab',\n minWidth: 0,\n overflow: 'hidden',\n borderRadius: '8px',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n <Box sx={{ mt: 0.5, mb: 0.5, display: 'flex', alignItems: 'center' }}>\n {renderIconInPopover(feature.icon, SvgIconBox)}\n </Box>\n\n <Typography\n variant=\"body2\"\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n p: '0 4px',\n }}\n >\n {feature.name}\n </Typography>\n </Box>\n </Grid>\n );\n};\nGroupFeatureSortableItem.propTypes = {\n feature: PropTypes.any,\n SvgIconBox: PropTypes.any,\n handleFeatureClick: PropTypes.any,\n};\nexport default function MobileDisplay({\n tabStatus,\n layoutComponents,\n componentTypes,\n handleSectionClick,\n activeElementId,\n activeTabId,\n handleTabSwitch,\n formList,\n selectedForm,\n onFormSelect,\n SvgIconBox,\n setCurrentLayoutComponents,\n programFeatures,\n}) {\n const dropZoneId = 'mobile-content';\n const dropZoneType = activeTabId === 'programs' ? 'PROGRAMS_ROOT_DROP_ZONE' : 'LAYOUT_ROOT_DROP_ZONE';\n const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n id: dropZoneId,\n data: {\n type: dropZoneType,\n sectionId: dropZoneId,\n },\n });\n\n const navItems = [\n { id: 'home', label: 'Home', icon: HomeIcon, alt: 'Home' },\n { id: 'programs', label: 'Programs', icon: ProgramsIcon, alt: 'Programs' },\n { id: 'analytics', label: 'Analytics', icon: AnalyticsIcon, alt: 'Analytics' },\n { id: 'familyManagement', label: 'Family Management', icon: FamilyManagementIcon, alt: 'Family Management' },\n ];\n\n const visibleNavItems = navItems.filter((item) => tabStatus[item.id]);\n const searchBarComponent = layoutComponents.find((c) => c.type === componentTypes.SEARCH_BAR);\n\n const sortableComponents = layoutComponents.filter((c) => c.type === componentTypes.SECTION);\n const [popoverState, setPopoverState] = useState({\n anchorEl: null,\n groupData: null,\n });\n\n const handleOpenGroupPopover = useCallback(\n (e, feature) => {\n const anchorElement = e.currentTarget;\n\n if (popoverState.groupData?.instanceId === feature.instanceId) {\n handleCloseGroupPopover();\n } else {\n setPopoverState({\n anchorEl: anchorElement,\n groupData: feature,\n });\n }\n },\n [popoverState.groupData]\n );\n const handleCloseGroupPopover = useCallback(() => {\n setPopoverState({ anchorEl: null, groupData: null });\n }, []);\n const renderFeatureTile = (feature) => {\n const isGroup = feature.type === 'GROUP';\n const isPopoverOpen = isGroup && popoverState.groupData?.instanceId === feature.instanceId;\n\n return (\n <FeatureSortableWrapper\n key={feature.instanceId}\n id={feature.instanceId}\n sectionId={null}\n featureName={feature.name}\n >\n <Grid\n item\n xs={4}\n sm={4}\n sx={{\n flexBasis: 'calc(33.3333% - 8px)',\n maxWidth: 'calc(33.3333% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n }}\n >\n <Box\n onClick={(e) => feature.type === 'FEATURE' && e.stopPropagation()}\n onContextMenu={(e) => feature.type === 'GROUP' && handleOpenGroupPopover(e, feature)}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: isGroup ? 'pointer' : 'grab',\n minWidth: 0,\n overflow: 'hidden',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n {renderFeatureIcon(Object.prototype.hasOwnProperty.call(feature, 'icon') ? feature.icon : null, SvgIconBox)}\n <Typography\n variant=\"body2\"\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {renderFeatureName(feature.name)}\n </Typography>\n {isGroup && (\n <Box sx={{ ml: 0.5, display: 'flex', alignItems: 'center' }}>\n <FontAwesomeIcon\n icon={faChevronDown}\n sx={{\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n transition: 'transform 0.2s',\n transform: isPopoverOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </Box>\n )}\n </Box>\n </Grid>\n </FeatureSortableWrapper>\n );\n };\n const handleGroupInternalSort = (event) => {\n const { active, over } = event;\n\n if (!over || active.id === over.id || !popoverState.groupData) {\n return;\n }\n\n const groupId = popoverState.groupData.instanceId;\n let newGroupData = null;\n\n setCurrentLayoutComponents((prevComponents) => {\n const newComponents = prevComponents.map((section) => {\n if (section.features) {\n return {\n ...section,\n features: section.features.map((feature) => {\n if (feature.instanceId === groupId && feature.type === 'GROUP' && feature.menus) {\n const oldIndex = feature.menus.findIndex((item) => (item.uuid || item.instanceId) === active.id);\n const newIndex = feature.menus.findIndex((item) => (item.uuid || item.instanceId) === over.id);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const newMenus = arrayMove(feature.menus, oldIndex, newIndex);\n\n newGroupData = { ...feature, menus: newMenus };\n\n return newGroupData;\n }\n }\n return feature;\n }),\n };\n }\n return section;\n });\n\n return newComponents;\n });\n\n if (newGroupData) {\n setPopoverState((prev) => ({\n ...prev,\n groupData: newGroupData,\n }));\n }\n };\n\n const handleNestedFeatureClick = () => {\n handleCloseGroupPopover();\n };\n const renderSortableComponent = (component, index) => {\n const isActive = component.id === activeElementId;\n return (\n <SortableComponent key={component.id} id={component.id} componentType={componentTypes.SECTION} isSortable={true}>\n <MobileSection\n id={component.id}\n arrayIndex={index}\n sectionTitle={component.title}\n handleSectionClick={handleSectionClick}\n sectionFeatures={component.features}\n isActive={isActive}\n SvgIconBox={SvgIconBox}\n onGroupClick={handleOpenGroupPopover}\n activeGroupId={popoverState.groupData?.instanceId}\n />\n </SortableComponent>\n );\n };\n return (\n <div className=\"mobile-screen-v2\" id=\"mobile-screen\">\n <div className=\"status-bar-v2\">\n <span className=\"time-v2\">12:16</span>\n <div className=\"notch-v2\"></div>\n\n <div className=\"right-status-icons-v2\">\n <span aria-label=\"wifi\">\n <FontAwesomeIcon icon={faWifi} />\n </span>\n <span aria-label=\"signal\">\n <FontAwesomeIcon icon={faSignal} />\n </span>\n <span aria-label=\"battery\" className=\"battery-icon\">\n <FontAwesomeIcon icon={faBatteryFull} />\n </span>\n </div>\n </div>\n <div className=\"header-v2\">\n <div className=\"location-v2\">\n <FontAwesomeIcon icon={faLocationDot} />\n <span className=\"location-text-v2\">પાલડી-કાંકજ</span>\n </div>\n <div className=\"header-actions-v2\">\n <span className=\"action-icon-v2 rotate-icon\" role=\"button\" aria-label=\"refresh\">\n <FontAwesomeIcon icon={faRotate} />\n </span>\n <span className=\"action-icon-v2 notification-outline\" role=\"button\" aria-label=\"notifications\">\n <FontAwesomeIcon icon={faBell} />\n </span>\n <span className=\"action-icon-v2 profile-icon\" role=\"button\" aria-label=\"profile\">\n <FontAwesomeIcon icon={faCircleUser} />\n </span>\n </div>\n </div>\n <div\n className=\"content-v2\"\n id=\"mobile-content\"\n ref={activeTabId !== 'familyManagement' ? setDroppableRef : null}\n style={{\n border: activeTabId !== 'familyManagement' && isOver ? '2px dashed var(--color-tableHeader)' : 'none',\n backgroundColor: activeTabId !== 'familyManagement' && isOver ? 'var(--color-gray4)' : 'transparent',\n minHeight: '300px',\n maxHeight: 'calc(100% - 110px)',\n overflowY: 'auto',\n padding: '8px',\n marginTop: activeTabId === 'programs' ? 20 : 0,\n marginLeft: activeTabId === 'programs' ? 3 : 0,\n }}\n >\n {activeTabId === 'familyManagement' ? (\n <Box\n sx={{\n p: 2,\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n }}\n >\n <Typography variant=\"body1\" sx={{ mb: 2, fontWeight: 'bold' }}>\n Select Form for Family Management\n </Typography>\n <FormControl fullWidth sx={{ maxWidth: '90%', mb: 2 }}>\n <InputLabel id=\"form-selector-label\">Form Name</InputLabel>\n <Select\n labelId=\"form-selector-label\"\n id=\"form-selector\"\n value={selectedForm?.code || ''}\n label=\"Form Name\"\n onChange={onFormSelect}\n MenuProps={{\n PaperProps: {\n style: {\n maxHeight: 240,\n },\n },\n }}\n >\n {formList?.map((form) => (\n <MenuItem key={form.code} value={form.code}>\n {form.name}\n </MenuItem>\n ))}\n {formList?.length === 0 && <MenuItem disabled>No Forms Available</MenuItem>}\n </Select>\n </FormControl>\n </Box>\n ) : activeTabId === 'programs' ? (\n <>\n {programFeatures && programFeatures.length > 0 ? (\n <SortableContext items={programFeatures.map((f) => f.instanceId)} strategy={verticalListSortingStrategy}>\n <Grid container spacing={1} sx={{ width: '100%', m: 0 }}>\n {programFeatures.map((feature) => renderFeatureTile(feature))}\n </Grid>\n </SortableContext>\n ) : (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mt: 5, textAlign: 'center' }}>\n {isOver ? 'Drop features here (Groups are not allowed).' : 'Drag features directly onto the screen.'}\n </Typography>\n )}\n </>\n ) : (\n <>\n {searchBarComponent && (\n <DraggableFixedComponent id={searchBarComponent.id} componentType={componentTypes.SEARCH_BAR}>\n <MobileSearchBar\n id={searchBarComponent.id}\n style={{ marginBottom: '8px' }}\n handleSectionClick={handleSectionClick}\n />\n </DraggableFixedComponent>\n )}\n\n {sortableComponents.map((component, index) => renderSortableComponent(component, index))}\n\n {layoutComponents.length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mt: 5, textAlign: 'center' }}>\n Drag components here to build the layout.\n </Typography>\n )}\n </>\n )}\n </div>\n {popoverState.groupData && popoverState.anchorEl && (\n <div onPointerDown={(e) => e.stopPropagation()}>\n <DndContext onDragEnd={handleGroupInternalSort}>\n <MobileGroupPopover\n groupData={popoverState.groupData}\n anchorEl={popoverState.anchorEl}\n onClose={handleCloseGroupPopover}\n SvgIconBox={SvgIconBox}\n handleFeatureClick={handleNestedFeatureClick}\n />\n </DndContext>\n </div>\n )}\n <div className=\"bottom-nav-v2\">\n <div className=\"nav-bar-v2\">\n {visibleNavItems.map((item) => (\n <Tooltip key={item.id} title={item.label} placement=\"bottom\" arrow>\n <div\n key={item.id}\n className={`nav-item-v2 ${activeTabId === item.id ? 'active-v2' : ''}`}\n role=\"button\"\n aria-label={item.label}\n onClick={() => handleTabSwitch(item.id)}\n >\n <img src={item.icon} alt={item.alt} />\n </div>\n </Tooltip>\n ))}\n </div>\n <div className=\"home-indicator-v2\"></div>\n </div>\n </div>\n );\n}\n\nMobileDisplay.propTypes = {\n tabStatus: PropTypes.any.isRequired,\n layoutComponents: PropTypes.any,\n componentTypes: PropTypes.any,\n handleSectionClick: PropTypes.any,\n activeElementId: PropTypes.any,\n activeTabId: PropTypes.any,\n handleTabSwitch: PropTypes.any,\n formList: PropTypes.any,\n selectedForm: PropTypes.any,\n onFormSelect: PropTypes.any,\n SvgIconBox: PropTypes.any,\n setCurrentLayoutComponents: PropTypes.any,\n programFeatures: PropTypes.any,\n};\nconst renderFeatureName = (name) => {\n const parts = name.split(' ');\n\n return parts.map((part, index) => (\n <React.Fragment key={index}>\n {part}\n {index < parts.length - 1 && <br />}\n </React.Fragment>\n ));\n};\nconst renderFeatureIcon = (iconData, SvgIconBox) => {\n let svgContent = null;\n\n if (typeof iconData === 'object' && iconData !== null) {\n if (iconData.type === 'svg' && typeof iconData.content === 'string') {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === 'string') {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === 'string') {\n svgContent = iconData;\n }\n\n if (typeof svgContent === 'string' && svgContent.includes('<svg')) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n if (svgContent) {\n return (\n <Box\n sx={{\n height: '36px',\n width: '36px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n fontSize: '1.2rem',\n color: 'var(--color-gray3)',\n border: '1px solid',\n borderRadius: '50%',\n height: '36px',\n width: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: '4px',\n }}\n >\n ?\n </Box>\n );\n};\nconst MobileGroupPopover = ({ groupData, anchorEl, onClose, SvgIconBox, handleFeatureClick }) => {\n if (!groupData || !anchorEl) return null;\n\n const features = groupData.menus || [];\n\n const anchorRect = anchorEl.getBoundingClientRect();\n\n return (\n <Paper\n elevation={8}\n sx={{\n position: 'fixed',\n top: anchorRect.bottom,\n left: anchorRect.left + anchorRect.width + 65,\n minWidth: '320px',\n maxWidth: '100%',\n p: 2,\n borderRadius: '12px',\n boxShadow: '0 8px 30px rgba(0,0,0,0.25)',\n backgroundColor: 'var(--color-gray4)',\n zIndex: 1500,\n maxHeight: '400px',\n overflowY: 'auto',\n transform: 'translateX(-50%)',\n }}\n >\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"h6\" sx={{ color: 'var(--color-text)', fontWeight: 'bold', fontSize: '1rem' }}>\n {groupData.name}\n </Typography>\n <IconButton onClick={onClose} size=\"small\" sx={{ color: 'var(--color-text)', p: 0.5 }}>\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </Box>\n <Divider />\n\n {features.length > 0 ? (\n <SortableContext items={features.map((f) => f.uuid || f.instanceId)} strategy={verticalListSortingStrategy}>\n <Grid container spacing={1}>\n {features.map((feature) => (\n <GroupFeatureSortableItem\n key={feature.uuid || feature.instanceId}\n feature={feature}\n SvgIconBox={SvgIconBox}\n handleFeatureClick={handleFeatureClick}\n />\n ))}\n </Grid>\n </SortableContext>\n ) : (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ fontStyle: 'italic', p: 1 }}>\n This menu is empty.\n </Typography>\n )}\n </Paper>\n );\n};\nMobileGroupPopover.propTypes = {\n groupData: PropTypes.any,\n anchorEl: PropTypes.any,\n onClose: PropTypes.any,\n SvgIconBox: PropTypes.any,\n handleFeatureClick: PropTypes.any,\n};\n","import { execute } from '@/common/services/QueryBuilder';\nimport { showToast } from '@/common/toaster/toaster';\nimport { closestCenter, DndContext, DragOverlay, rectIntersection, useDraggable, useDroppable } from '@dnd-kit/core';\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Autocomplete,\n Button,\n Divider,\n FormControl,\n Grid2,\n InputAdornment,\n Paper,\n Switch,\n TextField,\n Typography,\n} from '@mui/material';\nimport Grid from '@mui/material/Grid2';\nimport { Box } from '@mui/system';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useSelector } from 'react-redux';\nimport { useLocation, useNavigate } from 'react-router';\nimport CustomDropdown from '@/views/custom-components/CustomDropdown';\nimport { MenuDragContext } from './MenuDragContext';\nimport MobileDisplay from './MobileDisplay';\nimport PropTypes from 'prop-types';\nimport FontAwesomeIcons from '@/common/fontAwesomeIcons/FontAwesomeIcons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faMagnifyingGlass, faTrashCan } from '@fortawesome/free-solid-svg-icons';\nimport { generateUUID } from '@/utils/UUIDgenerator';\nimport CustomConfirmationModal from '@/views/custom-components/CustomConfirmationModal';\n\nexport default function AddMenuConfiguration() {\n const location = useLocation();\n const state = location.state;\n const queryParams = useMemo(() => new URLSearchParams(location.search), [location.search]);\n const navigate = useNavigate();\n\n const [rolesList, setRolesList] = useState([]);\n const [isEditMode, setIsEditMode] = useState(false);\n const [availableForms, setAvailableForms] = useState([]);\n const [mobileQueries, setMobileQueries] = useState([]);\n const [masterFeatureList, setMasterFeatureList] = useState({});\n const [groupedFeatures, setGroupedFeatures] = useState([]);\n const [isMenuGroupsExpanded, setIsMenuGroupsExpanded] = useState(true);\n const [isStandaloneExpanded, setIsStandaloneExpanded] = useState(true);\n const [backModalOpen, setBackModalOpen] = useState(false);\n const { user } = useSelector((state) => state.Authenticate);\n\n const formCtrl = useForm({\n defaultValues: {\n role: '',\n isAttendanceRequired: false,\n },\n mode: 'onChange',\n });\n\n useEffect(() => {\n (async () => {\n await fetchRoles();\n await fetchForms();\n await fetchMobileQueries();\n if (queryParams.get('id') && state?.mobileMenuList) {\n setIsEditMode(true);\n formCtrl.setValue('role', state.roleId);\n await fetchMenus(state.roleId);\n } else {\n setIsEditMode(false);\n }\n })();\n }, []);\n useEffect(() => {\n if (Object.keys(masterFeatureList).length > 0 && queryParams.get('id') && state?.mobileMenuList) {\n const { appConfiguration, tabStatus, selectedForm, isAttendanceRequired } = reconstructAppState(\n state?.mobileMenuList?.configJson,\n masterFeatureList,\n groupedFeatures\n );\n setAppConfiguration(appConfiguration);\n setTabStatus(tabStatus);\n setSelectedForm(selectedForm);\n formCtrl.setValue('isAttendanceRequired', isAttendanceRequired);\n }\n }, [masterFeatureList]);\n const fetchForms = async () => {\n let allFormListDto = {\n code: 'medplat_form_get_all_form_details',\n parameters: {},\n };\n\n const response = (await execute(allFormListDto)).data.result;\n\n const mappedForms = response.map((form, index) => ({\n id: form.form_code,\n name: form.form_name,\n code: form.form_code,\n uuid: form.uuid || `temp-uuid-${index}`,\n }));\n\n setAvailableForms(mappedForms);\n };\n const fetchMobileQueries = async () => {\n let allMobileQuery = {\n code: 'get_all_mobile_query',\n parameters: {},\n };\n\n const response = (await execute(allMobileQuery)).data.result;\n setMobileQueries(response);\n };\n const fetchRoles = async () => {\n try {\n const response = (\n await execute({\n code: 'RETRIEVE_MENU_CONFIG_ROLE_V2',\n })\n ).data;\n if (response.result) {\n setRolesList(response.result);\n }\n } catch (error) {\n showToast({\n message: error,\n type: 'error',\n });\n }\n };\n\n const fetchMenus = async (roleId) => {\n if (roleId) {\n try {\n const response = (\n await execute({\n code: 'fetch_linked_menus_by_role_id',\n parameters: {\n id: roleId,\n },\n })\n ).data;\n\n if (response.result) {\n transformListData(response.result);\n }\n } catch (error) {\n showToast({\n message: error,\n type: 'error',\n });\n }\n }\n };\n\n const findMetadataById = (id, masterFeatureList, groupedFeatures) => {\n const feature = masterFeatureList[id];\n if (feature) return feature;\n\n const group = groupedFeatures.find((f) => f.type === 'GROUP' && f.id === id);\n if (group) return group;\n\n return null;\n };\n const hydrateFeature = (canonicalFeature, parentInstanceId, masterFeatureList, groupedFeatures) => {\n const masterData = findMetadataById(canonicalFeature.id, masterFeatureList, groupedFeatures);\n if (!masterData) return null;\n const instanceUuid = generateUUID();\n\n if (masterData.type === 'GROUP') {\n const hydratedMenus = canonicalFeature.menus\n .map((menuItem) => {\n const masterMenuItem = findMetadataById(menuItem.id, masterFeatureList, groupedFeatures);\n if (!masterMenuItem) return null;\n return {\n ...masterMenuItem,\n uuid: generateUUID(),\n isGroupMember: true,\n groupId: canonicalFeature.id,\n };\n })\n .filter((m) => m !== null);\n\n if (hydratedMenus.length === 0) return null;\n\n return {\n ...masterData,\n id: instanceUuid,\n instanceId: `${parentInstanceId}_GROUP_${instanceUuid}`,\n menus: hydratedMenus,\n };\n } else if (masterData.type === 'FEATURE') {\n const instancePrefix =\n parentInstanceId === 'PROGRAMS_ROOT' ? parentInstanceId : `${parentInstanceId}_${masterData.id}`;\n\n return {\n ...masterData,\n id: masterData.id,\n uuid: instanceUuid,\n instanceId: `${instancePrefix}_${instanceUuid}`,\n };\n }\n return null;\n };\n\n const hydrateLayout = (canonicalLayout, tabId, masterFeatureList, groupedFeatures) => {\n if (!canonicalLayout || !Array.isArray(canonicalLayout)) return [];\n\n if (canonicalLayout.every((c) => c.id && !c.type && !c.features)) {\n const parentInstanceId = tabId === 'programs' ? 'PROGRAMS_ROOT' : tabId;\n\n return canonicalLayout\n .map((f) => hydrateFeature(f, parentInstanceId, masterFeatureList, groupedFeatures))\n .filter((f) => f !== null);\n }\n\n return canonicalLayout\n .map((component) => {\n const instanceId = generateUUID();\n\n if (component.type === 'SEARCH_BAR') {\n return { ...component, id: instanceId };\n }\n\n if (component.type === 'SECTION') {\n const sectionInstanceId = `comp-${instanceId}`;\n const hydratedFeatures = component.features\n .map((f) => hydrateFeature(f, sectionInstanceId, masterFeatureList, groupedFeatures))\n .filter((f) => f !== null);\n return { type: component.type, title: component.title, id: sectionInstanceId, features: hydratedFeatures };\n }\n return null;\n })\n .filter((c) => c !== null);\n };\n\n const reconstructAppState = (canonicalConfig) => {\n const newAppConfiguration = {};\n const newTabStatus = {};\n let newSelectedForm = null;\n const isAttendanceRequired = canonicalConfig?.isAttendanceRequired?.value || false;\n\n for (const tabId in canonicalConfig) {\n const tabData = canonicalConfig[tabId];\n newTabStatus[tabId] = tabData.active;\n\n if (tabData.active) {\n if (tabId === 'home' && tabData.layout) {\n newAppConfiguration[tabId] = hydrateLayout(tabData.layout, tabId, masterFeatureList, groupedFeatures);\n } else if (tabId === 'programs' && tabData?.features) {\n const hydratedFeatures = hydrateLayout(tabData.features, tabId, masterFeatureList, groupedFeatures);\n\n newAppConfiguration[tabId] = {\n features: hydratedFeatures,\n };\n } else if (tabData?.features) {\n newAppConfiguration[tabId] = hydrateLayout(tabData?.features, tabId, masterFeatureList, groupedFeatures);\n } else if (tabId === 'familyManagement' && tabData.formCode) {\n newSelectedForm = {\n formName: `Form for ${tabData.formCode}`,\n code: tabData.formCode,\n formUuid: generateUUID(),\n };\n }\n } else {\n if (tabId === 'programs') {\n newAppConfiguration[tabId] = { features: [] };\n } else {\n newAppConfiguration[tabId] = [];\n }\n }\n }\n return {\n appConfiguration: newAppConfiguration,\n tabStatus: newTabStatus,\n selectedForm: newSelectedForm,\n isAttendanceRequired,\n };\n };\n const transformListData = (data) => {\n const groupedList = [];\n const masterFeatureMap = {};\n\n data.forEach((item) => {\n let menus = JSON.parse(item.menus || '[]');\n\n const processedMenus = menus.map((menu) => {\n const transformedMenu = {\n uuid: generateUUID(),\n id: menu.id ? parseInt(menu.id) : null,\n name: menu.name || '',\n icon: menu.icon || '',\n type: 'FEATURE',\n isGroupMember: item.id != null,\n groupId: item.id || null,\n };\n\n masterFeatureMap[transformedMenu.id] = transformedMenu;\n\n return transformedMenu;\n });\n\n if (item.id != null) {\n groupedList.push({\n uuid: generateUUID(),\n id: item.id,\n name: item.name,\n icon: item.icon || '',\n type: 'GROUP',\n menus: processedMenus,\n });\n } else {\n groupedList.push(...processedMenus);\n }\n });\n\n setMasterFeatureList(masterFeatureMap);\n setGroupedFeatures(groupedList);\n };\n const sanitizeFeature = (feature) => {\n if (feature.type === 'GROUP') {\n const canonicalGroupId = feature.menus?.[0]?.groupId;\n\n if (!canonicalGroupId) {\n return null;\n }\n\n return {\n id: canonicalGroupId,\n menus: feature.menus.map((menu) => ({\n id: menu.id,\n })),\n };\n } else if (feature.type === 'FEATURE') {\n return {\n id: feature.id,\n };\n }\n return null;\n };\n const sanitizeLayout = (layout) => {\n if (!layout || !Array.isArray(layout)) return [];\n\n return layout\n .map((component) => {\n if (component.type === 'SEARCH_BAR') {\n return {\n type: component.type,\n queryName: component.queryName,\n };\n }\n\n if (component.type === 'SECTION') {\n const sanitizedFeatures = component?.features.map(sanitizeFeature).filter((f) => f !== null);\n\n return {\n type: component.type,\n title: component.title,\n features: sanitizedFeatures,\n };\n }\n\n return null;\n })\n .filter((c) => c !== null);\n };\n const createCanonicalConfig = () => {\n const finalConfig = {\n isAttendanceRequired: { value: formCtrl.getValues('isAttendanceRequired') },\n };\n\n navTabs.forEach((tab) => {\n const tabId = tab.id;\n const isEnabled = tabStatus[tabId];\n\n const tabEntry = {\n active: isEnabled,\n };\n\n if (isEnabled) {\n if (tabId === 'familyManagement' && selectedForm) {\n tabEntry.formCode = selectedForm.code;\n } else {\n if (tabId === 'home') {\n const rawLayout = appConfiguration[tabId] || [];\n tabEntry.layout = sanitizeLayout(rawLayout);\n } else if (tabId === 'programs') {\n const rawFeatures = appConfiguration[tabId]?.features || [];\n\n if (rawFeatures.length > 0) {\n tabEntry.features = rawFeatures.map(sanitizeFeature).filter((f) => f !== null);\n }\n } else if (tabId !== 'analytics') {\n const rawFeatures = appConfiguration[tabId] || [];\n\n if (Array.isArray(rawFeatures)) {\n tabEntry.features = rawFeatures.map(sanitizeFeature).filter((f) => f !== null);\n }\n }\n }\n }\n\n finalConfig[tabId] = tabEntry;\n });\n\n return finalConfig;\n };\n const onSubmit = async (data) => {\n const canonicalConfig = createCanonicalConfig();\n const configJsonString = JSON.stringify(canonicalConfig);\n\n const payload = {\n roleId: data.role,\n userId: user?.id,\n config_json: configJsonString,\n };\n try {\n const response = (\n await execute({\n code: 'save_mobile_menu_role_relation',\n parameters: payload,\n })\n ).data;\n if (response.result) {\n showToast({\n message: 'Menu configuration saved successfully',\n type: 'success',\n });\n navigate('/ui/medplat/admin/mobileMenuManagement');\n }\n } catch (error) {\n showToast({\n message: error,\n type: 'error',\n });\n }\n };\n const navTabs = [\n { id: 'home', name: 'Home' },\n { id: 'programs', name: 'Programs' },\n { id: 'analytics', name: 'Analytics' },\n { id: 'familyManagement', name: 'Family Management' },\n ];\n const [tabStatus, setTabStatus] = useState({\n home: true,\n programs: true,\n analytics: true,\n familyManagement: true,\n });\n\n const handleToggle = (tabId) => {\n setTabStatus((prevStatus) => {\n const newStatus = {\n ...prevStatus,\n [tabId]: !prevStatus[tabId],\n };\n\n const isCurrentlyActiveAndTurningOff = tabId === activeTabId && !newStatus[tabId];\n\n if (isCurrentlyActiveAndTurningOff) {\n const fallbackTab = navTabs.find((tab) => tab.id !== tabId && newStatus[tab.id] === true);\n\n if (fallbackTab) {\n setActiveTabId(fallbackTab.id);\n } else if (newStatus['home']) {\n setActiveTabId('home');\n } else {\n setActiveTabId(navTabs[0].id);\n }\n }\n\n return newStatus;\n });\n };\n const COMPONENT_TYPES = {\n SEARCH_BAR: 'SEARCH_BAR',\n SECTION: 'SECTION',\n FEATURE: 'FEATURE',\n SECTION_DROP_ZONE: 'SECTION_DROP_ZONE',\n GROUP: 'GROUP',\n };\n const [selectedForm, setSelectedForm] = useState(null);\n\n const handleFormSelection = (event) => {\n const selectedCode = event.target.value;\n const formObject = availableForms.find((form) => form.code === selectedCode);\n setSelectedForm(formObject);\n };\n const [activeId, setActiveId] = useState(null);\n const [activeElementId, setActiveElementId] = useState(null);\n const [activeTabId, setActiveTabId] = useState('home');\n\n const [appConfiguration, setAppConfiguration] = useState(() => {\n const initialConfig = {};\n navTabs.forEach((tab) => {\n initialConfig[tab.id] = [];\n });\n return initialConfig;\n });\n const [searchTerm, setSearchTerm] = useState('');\n const [activeGroupId, setActiveGroupId] = useState(null);\n const programsFeatures = appConfiguration.programs?.features || [];\n const handleGroupAccordionToggle = (groupId) => {\n setActiveGroupId((prevId) => (prevId === groupId ? null : groupId));\n };\n const rawLayout = appConfiguration[activeTabId];\n const currentLayout = Array.isArray(rawLayout) ? rawLayout : [];\n\n const filteredFeatures = useMemo(() => {\n const lowerSearch = searchTerm.toLowerCase();\n\n return groupedFeatures\n .map((item) => {\n if (item.type === 'GROUP') {\n const filteredMenus = item.menus.filter((menu) => menu.name.toLowerCase().includes(lowerSearch));\n\n if (item.name.toLowerCase().includes(lowerSearch) || filteredMenus.length > 0) {\n return { ...item, menus: filteredMenus };\n }\n return null;\n }\n\n if (item.name.toLowerCase().includes(lowerSearch)) {\n return item;\n }\n\n return null;\n })\n .filter(Boolean);\n }, [groupedFeatures, searchTerm]);\n const { separatedGroups, separatedFeatures } = useMemo(() => {\n const groups = filteredFeatures.filter((item) => item.type === 'GROUP');\n const features = filteredFeatures.filter((item) => item.type !== 'GROUP');\n\n return { separatedGroups: groups, separatedFeatures: features };\n }, [filteredFeatures]);\n const setCurrentLayoutComponents = useCallback(\n (newLayoutUpdater) => {\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n [activeTabId]:\n typeof newLayoutUpdater === 'function' ? newLayoutUpdater(prevConfig[activeTabId] || []) : newLayoutUpdater,\n }));\n },\n [activeTabId]\n );\n const handleTabSwitch = useCallback((tabId) => {\n setActiveTabId(tabId);\n }, []);\n const handleComponentUpdate = (id, property, value) => {\n setCurrentLayoutComponents((prev) => prev.map((comp) => (comp.id === id ? { ...comp, [property]: value } : comp)));\n };\n\n const handleDragStart = (event) => {\n setActiveId(event.active.id);\n };\n\n const handleDragEnd = useCallback(\n (event) => {\n const { active, over } = event;\n if (!active || !active.data.current) {\n setActiveId(null);\n return;\n }\n const overType = over?.data.current?.type;\n const overSectionId = over?.data.current?.sectionId;\n const activeSectionId = active.data.current?.sectionId;\n const draggedType = active.data.current?.type;\n setActiveId(null);\n\n if (!over && activeTabId === 'programs' && draggedType === COMPONENT_TYPES.FEATURE) {\n const droppedFeature = active.data.current.data;\n if (!droppedFeature) return;\n\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n\n const currentFeatures = programsConfig?.features || [];\n\n const newFeature = {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `PROGRAMS_ROOT_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: 'FEATURE',\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: 'svg',\n },\n };\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: [...currentFeatures, newFeature],\n },\n };\n });\n return;\n }\n if (over?.id === 'trash-zone') {\n const instanceIdToDelete = active.id;\n const parentSectionId = active.data.current.sectionId;\n if (draggedType === 'FEATURE_TILE') {\n if (parentSectionId) {\n setCurrentLayoutComponents((prevLayout) =>\n prevLayout.map((comp) => {\n if (comp.id === parentSectionId && comp?.features) {\n const newFeatures = comp?.features.filter((f) => f.instanceId !== instanceIdToDelete);\n return { ...comp, features: newFeatures };\n }\n return comp;\n })\n );\n } else if (activeTabId === 'programs') {\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n const currentFeatures = programsConfig?.features || [];\n\n const newFeatures = currentFeatures.filter((f) => f.instanceId !== instanceIdToDelete);\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n }\n } else if (draggedType === COMPONENT_TYPES.SECTION || draggedType === COMPONENT_TYPES.SEARCH_BAR) {\n setCurrentLayoutComponents((prev) => prev.filter((comp) => comp.id !== active.id));\n }\n return;\n }\n\n if (draggedType === 'FEATURE_TILE' && overType === 'FEATURE_TILE') {\n if (!activeSectionId && activeTabId === 'programs') {\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n const currentFeatures = programsConfig?.features || [];\n\n const oldIndex = currentFeatures.findIndex((f) => f.instanceId === active.id);\n const newIndex = currentFeatures.findIndex((f) => f.instanceId === over.id);\n\n if (oldIndex === -1 || newIndex === -1) {\n return prevConfig;\n }\n\n const newFeatures = arrayMove(currentFeatures, oldIndex, newIndex);\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n return;\n }\n if (activeSectionId === overSectionId && active.id !== over.id) {\n setCurrentLayoutComponents((prevLayout) =>\n prevLayout.map((section) => {\n if (section.id === activeSectionId) {\n const features = section?.features;\n const oldIndex = features.findIndex((f) => f.instanceId === active.id);\n const newIndex = features.findIndex((f) => f.instanceId === over.id);\n\n if (oldIndex === -1 || newIndex === -1) return section;\n\n const newFeatures = arrayMove(features, oldIndex, newIndex);\n\n return { ...section, features: newFeatures };\n }\n return section;\n })\n );\n }\n return;\n }\n\n if (draggedType === COMPONENT_TYPES.GROUP && overType === COMPONENT_TYPES.SECTION_DROP_ZONE) {\n const droppedGroup = active.data.current.data;\n const overSectionId = over?.data.current?.sectionId;\n\n if (droppedGroup && overSectionId) {\n setAppConfiguration((prevConfig) => {\n const currentLayout = prevConfig[activeTabId] || [];\n\n const targetSectionIndex = currentLayout.findIndex((c) => c.id === overSectionId);\n if (targetSectionIndex === -1) return prevConfig;\n\n const targetSection = currentLayout[targetSectionIndex];\n const sourceIdString = String(droppedGroup.uuid);\n const isDuplicate = targetSection?.features.some((f) => {\n return f.type === 'GROUP' && String(f.uuid) === sourceIdString;\n });\n\n if (isDuplicate) {\n showToast({\n type: 'warn',\n message: `Group ${droppedGroup.name} is already in this section.`,\n });\n return prevConfig;\n }\n const newGroupItem = {\n id: droppedGroup.uuid,\n name: droppedGroup.name,\n instanceId: `${overSectionId}_GROUP_${droppedGroup.uuid}_${crypto.randomUUID()}`,\n type: 'GROUP',\n menus: droppedGroup.menus || [],\n icon: droppedGroup.icon,\n };\n\n const updatedSection = {\n ...targetSection,\n features: [...targetSection.features, newGroupItem],\n };\n\n const newLayout = [...currentLayout];\n newLayout[targetSectionIndex] = updatedSection;\n\n return { ...prevConfig, [activeTabId]: newLayout };\n });\n }\n return;\n }\n if (draggedType === COMPONENT_TYPES.FEATURE && overType === COMPONENT_TYPES.SECTION_DROP_ZONE) {\n const droppedFeature = active.data.current.data;\n const overSectionId = over?.data.current?.sectionId;\n\n if (droppedFeature && overSectionId) {\n setAppConfiguration((prevConfig) => {\n const currentLayout = prevConfig[activeTabId] || [];\n const targetSectionIndex = currentLayout.findIndex((c) => c.id === overSectionId);\n\n if (targetSectionIndex === -1) return prevConfig;\n\n const targetSection = currentLayout[targetSectionIndex];\n\n const isDuplicate = targetSection?.features.some((f) => f.id === droppedFeature.id && f.type === 'FEATURE');\n if (isDuplicate) {\n showToast({\n type: 'warn',\n message: `Feature ${droppedFeature.name} is already in this section.`,\n });\n return prevConfig;\n }\n\n const newFeature = {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `${overSectionId}_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: 'FEATURE',\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: 'svg',\n },\n };\n\n const updatedSection = {\n ...targetSection,\n features: [...targetSection.features, newFeature],\n };\n\n const newLayout = [...currentLayout];\n newLayout[targetSectionIndex] = updatedSection;\n return { ...prevConfig, [activeTabId]: newLayout };\n });\n }\n return;\n }\n\n if (active.data.current?.sortable && !over?.data.current?.sortable) {\n if (over?.id === 'mobile-content') {\n return;\n }\n }\n\n if (over?.data.current?.sortable && active.data.current?.type === COMPONENT_TYPES.SECTION) {\n if (active.id !== over.id) {\n setCurrentLayoutComponents((prev) => {\n const searchBar = prev.find((c) => c.type === COMPONENT_TYPES.SEARCH_BAR);\n const sortableList = prev.filter((c) => c.type !== COMPONENT_TYPES.SEARCH_BAR);\n\n const oldSortableIndex = sortableList.findIndex((comp) => comp.id === active.id);\n const newSortableIndex = sortableList.findIndex((comp) => comp.id === over.id);\n\n if (oldSortableIndex === -1 || newSortableIndex === -1) {\n return prev;\n }\n\n const newSortableList = arrayMove(sortableList, oldSortableIndex, newSortableIndex);\n\n let finalLayout = newSortableList;\n if (searchBar) {\n finalLayout = [searchBar, ...finalLayout];\n }\n\n return finalLayout;\n });\n return;\n }\n }\n\n if (over?.id === 'mobile-content' && draggedType) {\n const targetZoneType = over.data.current?.type;\n if (targetZoneType === 'PROGRAMS_ROOT_DROP_ZONE') {\n if (draggedType === COMPONENT_TYPES.GROUP) {\n showToast({\n type: 'warn',\n message: `Groups cannot be dropped directly onto the Programs tab.`,\n });\n return;\n }\n\n if (draggedType === COMPONENT_TYPES.FEATURE) {\n const droppedFeature = active.data.current.data;\n if (!droppedFeature) return;\n\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n programs: {\n ...prevConfig.programs,\n features: [\n ...prevConfig.programs.features,\n {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `PROGRAMS_ROOT_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: 'FEATURE',\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: 'svg',\n },\n },\n ],\n },\n }));\n return;\n }\n }\n\n if (active.data.current?.sortable && targetZoneType === 'LAYOUT_ROOT_DROP_ZONE') {\n return;\n }\n if (targetZoneType === 'LAYOUT_ROOT_DROP_ZONE') {\n setCurrentLayoutComponents((prev) => {\n if (draggedType === COMPONENT_TYPES.SEARCH_BAR) {\n const isSearchAlreadyPresent = prev.some((comp) => comp.type === COMPONENT_TYPES.SEARCH_BAR);\n if (isSearchAlreadyPresent) {\n showToast({\n type: 'info',\n message: `Only one Search Bar is allowed.`,\n });\n return prev;\n }\n const newComponent = {\n id: `comp-${Date.now()}`,\n type: COMPONENT_TYPES.SEARCH_BAR,\n queryName: 'Query Name',\n };\n return [newComponent, ...prev];\n } else if (draggedType === COMPONENT_TYPES.SECTION) {\n const newComponent = {\n id: `comp-${Date.now()}`,\n type: draggedType,\n title: 'Section',\n features: [],\n };\n return [...prev, newComponent];\n }\n\n return prev;\n });\n return;\n }\n }\n },\n [setCurrentLayoutComponents, setAppConfiguration, activeTabId, COMPONENT_TYPES]\n );\n const SCREEN_CONTENT_WIDTH = '350px';\n\n const OverlayMobileSearchBar = () => (\n <Box\n sx={{\n width: SCREEN_CONTENT_WIDTH,\n p: 1.5,\n border: '1px solid #ccc',\n borderRadius: '8px',\n backgroundColor: 'var(--color-background2)',\n display: 'flex',\n alignItems: 'center',\n boxShadow: '0 1px 10px rgba(0,0,0,0.3)',\n }}\n >\n <FontAwesomeIcon icon={faMagnifyingGlass} style={{ marginRight: '8px', color: '#888' }} />\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ flexGrow: 1 }}>\n Search...\n </Typography>\n </Box>\n );\n\n const OverlayMobileSection = () => (\n <Box\n sx={{\n width: SCREEN_CONTENT_WIDTH,\n minHeight: '100px',\n backgroundColor: '#e6f0ff',\n border: '1px dashed var(--color-tableHeader)',\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 1px 10px rgba(0,0,0,0.3)',\n color: 'var(--color-text)',\n }}\n >\n <Typography variant=\"caption\" sx={{ fontWeight: 'bold' }}>\n Section Dragging\n </Typography>\n </Box>\n );\n const OverlayFeatureTile = ({ feature }) => (\n <Grid item xs={4} sm={4}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: 'grab',\n }}\n >\n {renderIcon(feature.icon)}\n <Typography\n variant=\"caption\"\n sx={{\n mt: 1,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.65rem',\n }}\n >\n {feature.name}\n </Typography>\n </Box>\n </Grid>\n );\n OverlayFeatureTile.propTypes = {\n feature: PropTypes.any,\n };\n const OverlaySidebarFeature = ({ feature }) => {\n const renderIconWithSpacing = (iconData, size) => {\n const iconElement = renderIcon(feature.icon, '18px');\n\n if (iconElement && iconElement.type === Box) {\n return React.cloneElement(iconElement, {\n sx: {\n ...iconElement.props.sx,\n height: '18px',\n width: '18px',\n marginRight: '8px',\n },\n });\n }\n return <Box sx={{ mr: '8px', display: 'flex', alignItems: 'center' }}>{renderIcon(iconData, size)}</Box>;\n };\n return (\n <Box\n sx={{\n width: 'fit-content',\n p: '10px',\n pl: '10px',\n backgroundColor: 'var(--color-background2)',\n border: '1px solid var(--color-gray3)',\n borderRadius: '4px',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n cursor: 'grab',\n display: 'flex',\n alignItems: 'center',\n transition: 'all 0.1s',\n mt: '4px',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n borderColor: 'var(--color-gray3)',\n },\n }}\n >\n {renderIconWithSpacing(feature.icon, '18px')}\n\n <Typography variant=\"body2\" sx={{ fontWeight: 'normal', color: '#333' }}>\n {feature?.name}\n </Typography>\n </Box>\n );\n };\n OverlaySidebarFeature.propTypes = {\n feature: PropTypes.any,\n };\n const getActiveLayoutItem = (activeId) => {\n const allSidebarItems = groupedFeatures.flatMap((item) => {\n if (item.type === COMPONENT_TYPES.GROUP) {\n return [item, ...item.menus];\n }\n return [item];\n });\n\n const sourceItem = allSidebarItems.find((f) => (f.uuid || f.id) === activeId);\n\n if (sourceItem) {\n let itemType;\n\n if (sourceItem.type) {\n itemType = sourceItem.type;\n } else if (sourceItem.menus) {\n itemType = COMPONENT_TYPES.GROUP;\n } else {\n itemType = COMPONENT_TYPES.FEATURE;\n }\n\n return {\n type: itemType,\n data: sourceItem,\n };\n }\n const programFeature = programsFeatures?.find((f) => f.instanceId === activeId);\n if (programFeature) {\n return { type: 'FEATURE_TILE', data: programFeature };\n }\n const topLevel = currentLayout.find((comp) => comp.id === activeId);\n if (topLevel) return { type: topLevel.type, data: topLevel };\n for (const section of currentLayout) {\n if (section?.features) {\n const feature = section?.features.find((f) => f.instanceId === activeId);\n if (feature) {\n return { type: 'FEATURE_TILE', data: feature };\n }\n }\n }\n return null;\n };\n const activeComponent = currentLayout.find((comp) => comp.id === activeElementId);\n const renderActiveOverlay = (activeId) => {\n const component = getActiveLayoutItem(activeId);\n if (!component) return null;\n\n if (component.type === COMPONENT_TYPES.SEARCH_BAR) {\n return <OverlayMobileSearchBar />;\n }\n if (component.type === COMPONENT_TYPES.SECTION) {\n return <OverlayMobileSection />;\n }\n if (component.type === COMPONENT_TYPES.FEATURE) {\n return <OverlaySidebarFeature feature={component.data} />;\n }\n if (component.type === COMPONENT_TYPES.GROUP) {\n return <OverlayFeatureTile feature={component.data} />;\n }\n if (component.type === 'FEATURE_TILE') {\n return <OverlayFeatureTile feature={component.data} />;\n }\n return null;\n };\n const isDraggingSortable = useMemo(() => {\n if (!activeId) return false;\n\n const isDraggingTopLevel = currentLayout.some((comp) => comp.id === activeId);\n\n const isDraggingFeatureTile = currentLayout.some((comp) => comp?.features?.some((f) => f.instanceId === activeId));\n\n const isDraggingProgramFeatureTile = programsFeatures?.some((f) => f.instanceId === activeId);\n\n return isDraggingTopLevel || isDraggingFeatureTile || isDraggingProgramFeatureTile;\n }, [activeId, currentLayout, programsFeatures]);\n const sortableSectionIds = currentLayout.filter((c) => c.type === COMPONENT_TYPES.SECTION).map((c) => c.id);\n const customCollisionDetection = (args) => {\n const draggedType = args.active?.data.current?.type;\n\n if (draggedType === COMPONENT_TYPES.FEATURE) {\n const droppableContainers = args.droppableContainers.filter(\n (container) => container.data.current?.type === 'SECTION_DROP_ZONE'\n );\n\n return rectIntersection({\n ...args,\n droppableContainers: droppableContainers,\n });\n }\n\n if (draggedType === COMPONENT_TYPES.SECTION) {\n const validSectionDropTargets = args.droppableContainers.filter((container) => {\n if (container.id === args.active.id) return false;\n if (container.data.current?.type === 'SECTION_DROP_ZONE') return false;\n return true;\n });\n\n return rectIntersection({\n ...args,\n droppableContainers: validSectionDropTargets,\n });\n }\n return closestCenter(args);\n };\n\n return (\n <>\n <MenuDragContext.Provider>\n <form noValidate onSubmit={formCtrl.handleSubmit(onSubmit)}>\n <DndContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n collisionDetection={customCollisionDetection}\n >\n <Grid container spacing={1}>\n <Grid size={1}></Grid>\n <Grid size={6}>\n <Grid\n sx={{\n padding: '2px',\n margin: '6px 0px',\n }}\n >\n <Grid container sx={{ justifyContent: 'space-between' }}>\n <Grid size={2}></Grid>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 'bold', marginLeft: '5px', mb: 1 }}>\n Mobile View\n </Typography>\n <Grid container spacing={1}>\n <Button\n variant=\"contained\"\n color=\"gray\"\n sx={{ fontSize: '0.8rem', height: '30px' }}\n type=\"submit\"\n onClick={() => {\n setBackModalOpen(true);\n }}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n sx={{ fontSize: '0.8rem', height: '30px' }}\n type=\"submit\"\n >\n Save\n </Button>\n </Grid>\n </Grid>\n <Grid sx={{ height: '100%', maxHeight: '100%', overflowY: 'auto' }}>\n <SortableContext items={sortableSectionIds} strategy={verticalListSortingStrategy}>\n <MobileDisplay\n tabStatus={tabStatus}\n layoutComponents={currentLayout}\n componentTypes={COMPONENT_TYPES}\n handleSectionClick={setActiveElementId}\n activeElementId={activeElementId}\n activeTabId={activeTabId}\n handleTabSwitch={handleTabSwitch}\n formList={availableForms}\n selectedForm={selectedForm}\n onFormSelect={handleFormSelection}\n SvgIconBox={SvgIconBox}\n setCurrentLayoutComponents={setCurrentLayoutComponents}\n programFeatures={appConfiguration.programs?.features || []}\n ></MobileDisplay>\n </SortableContext>\n </Grid>\n <Grid container spacing={2} justifyContent=\"space-around\" sx={{ my: '1.25rem' }}>\n {navTabs.map((tab) => (\n <Grid item xs={12} sm={6} md={3} key={tab.id}>\n <Grid container alignItems=\"center\" justifyContent=\"space-between\">\n <Typography variant=\"body2\" sx={{ fontWeight: 'bolder' }}>\n {tab.name}\n </Typography>\n\n <Switch\n checked={tabStatus[tab.id]}\n onChange={() => handleToggle(tab.id)}\n name={tab.name}\n sx={{\n '& .MuiSwitch-switchBase.Mui-checked': {\n color: 'var(--color-text)',\n '&:hover': {\n backgroundColor: 'rgba(7, 49, 73, 0.08)',\n },\n },\n '& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': {\n backgroundColor: 'var(--color-tableHeader)',\n opacity: 0.7,\n },\n }}\n />\n </Grid>\n </Grid>\n ))}\n </Grid>\n </Grid>\n </Grid>\n <Grid size={1}></Grid>\n <Grid size={4}>\n <Grid size={12}>\n <Paper sx={{ padding: '2px', margin: '6px 0px' }}>\n <Grid className=\"justify-between items-center\" container>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 'bold', marginLeft: '5px' }}>\n Menu Relation\n </Typography>\n </Grid>\n <Grid container>\n <Grid size={12}>\n <FormControl\n variant=\"outlined\"\n className=\"ml-3 mb-1 flex flex-row items-center align-items w-[90%]\"\n >\n <Typography variant=\"body2\">\n Select Role\n <span className=\"text-red-500 ml-1\">*</span> :\n </Typography>\n <Box className=\"w-[60%] ms-3\">\n <CustomDropdown\n control={formCtrl.control}\n size=\"small\"\n id=\"role\"\n name=\"role\"\n options={rolesList || []}\n disabled={isEditMode}\n displayName=\"name\"\n optionValue=\"id\"\n errors={formCtrl.formState.errors}\n sx={{ height: '50px', mt: 2 }}\n disableClearable={isEditMode ? true : false}\n placeholder=\"Select role\"\n onChange={(e) => fetchMenus(e.target.value)}\n />\n </Box>\n </FormControl>\n </Grid>\n <Grid size={12}>\n <FormControl\n variant=\"standard\"\n className=\"ml-3 mb-3 flex flex-row items-center align-items w-[90%]\"\n >\n <Typography variant=\"body2\">Attendance Required? :</Typography>\n <Box className=\"w-[60%] ms-3\">\n <Switch\n checked={formCtrl.watch('isAttendanceRequired')}\n onChange={(e) => formCtrl.setValue('isAttendanceRequired', e.target.checked)}\n sx={{\n '& .MuiSwitch-switchBase.Mui-checked': {\n color: 'var(--color-text)',\n '&:hover': {\n backgroundColor: 'rgba(7, 49, 73, 0.08)',\n },\n },\n '& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': {\n backgroundColor: 'var(--color-tableHeader)',\n opacity: 0.7,\n },\n }}\n />\n </Box>\n </FormControl>\n </Grid>\n </Grid>\n </Paper>\n </Grid>\n\n <Grid size={12}>\n <Paper\n sx={{\n padding: '5px',\n margin: '2px 0px',\n height: '595px',\n transition: 'height 0.3s ease-in-out',\n }}\n >\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 'bold', marginLeft: '5px', mb: 1 }}>\n Draggable Components\n </Typography>\n\n <Grid container spacing={2} justifyContent=\"space-around\" sx={{ p: 1 }}>\n <DraggableComponent id=\"draggable-search\" componentType={COMPONENT_TYPES.SEARCH_BAR}>\n <Grid item xs={6} sm={4} size={6}>\n <Box\n sx={{\n width: '100%',\n height: '50px',\n p: '8px 10px',\n backgroundColor: 'var(--color-gray4)',\n border: '1px solid var(--color-gray3)',\n borderRadius: '8px',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n cursor: 'grab',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n color: 'var(--color-text)',\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: '#e0eaf1',\n borderColor: 'var(--color-gray3)',\n boxShadow: '0 2px 5px rgba(0, 0, 0, 0.15)',\n },\n }}\n >\n <FontAwesomeIcons\n iconName=\"faMagnifyingGlass\"\n style={{ fontSize: '1.2rem', marginRight: '8px' }}\n />\n\n <Typography variant=\"body2\" sx={{ fontWeight: 'bold', lineHeight: 1 }}>\n Search Bar\n </Typography>\n </Box>\n </Grid>\n </DraggableComponent>\n <DraggableComponent id=\"draggable-section\" componentType={COMPONENT_TYPES.SECTION}>\n <Grid item xs={6} sm={4} size={6}>\n <Box\n sx={{\n width: '100%',\n height: '50px',\n p: '8px 10px',\n backgroundColor: 'var(--color-gray4)',\n border: '1px solid var(--color-gray3)',\n borderRadius: '8px',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n cursor: 'grab',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n color: 'var(--color-text)',\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: '#c5e1ff',\n borderColor: 'var(--color-tableHeader)',\n boxShadow: '0 2px 5px rgba(0, 0, 0, 0.15)',\n },\n }}\n >\n <FontAwesomeIcons iconName=\"faBox\" style={{ fontSize: '1.2rem', marginRight: '8px' }} />\n\n <Typography variant=\"body2\" sx={{ fontWeight: 'bold', lineHeight: 1 }}>\n Section\n </Typography>\n </Box>\n </Grid>\n </DraggableComponent>\n </Grid>\n <Grid>\n <TrashZone isDraggingSortable={isDraggingSortable} />\n </Grid>\n <Divider sx={{ mt: 2 }} />\n <Grid size={12}>\n <Box\n sx={{\n padding: '0px',\n margin: '10px 0px',\n height: '450px',\n overflowY: 'auto',\n transition: 'height 0.3s ease-in-out',\n }}\n >\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 'bold', marginLeft: '5px', mb: 1 }}>\n Available Features\n </Typography>\n\n <TextField\n fullWidth\n size=\"small\"\n placeholder=\"Search Feature...\"\n variant=\"outlined\"\n sx={{ mb: 2, px: 1 }}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcons iconName=\"faMagnifyingGlass\" />\n </InputAdornment>\n ),\n }}\n />\n <Box\n sx={{\n flexGrow: 1,\n overflowY: 'auto',\n padding: '0 8px',\n }}\n >\n <Grid container direction=\"column\" spacing={0} sx={{ px: 1 }}>\n {separatedGroups.length > 0 && (\n <Grid\n item\n xs={12}\n sx={{\n mb: 1,\n }}\n >\n <Accordion\n sx={{\n '&:before': { display: 'none' },\n boxShadow: '0 2px 4px rgba(0,0,0,0.05)',\n border: '1px solid #c5e1ff',\n borderRadius: '4px!important',\n backgroundColor: 'var(--color-background2)',\n }}\n expanded={isMenuGroupsExpanded}\n onChange={() => setIsMenuGroupsExpanded((prev) => !prev)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons iconName={'faChevronDown'} style={{ color: '#3f51b5' }} />\n }\n sx={{\n minHeight: '40px',\n backgroundColor: '#e3f2fd',\n '&:hover': { backgroundColor: '#c5e3f8' },\n '& .MuiAccordionSummary-content': { margin: '0' },\n p: '0 10px',\n }}\n >\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', color: '#3f51b5' }}>\n <FontAwesomeIcons iconName=\"faLayerGroup\" style={{ marginRight: '6px' }} />\n Menu Groups ({separatedGroups.length})\n </Typography>\n </AccordionSummary>\n <AccordionDetails sx={{ p: '8px', pt: 1, backgroundColor: 'var(--color-gray4)' }}>\n <Grid container spacing={0.5} direction=\"column\">\n {separatedGroups.map((item) => (\n <SidebarGroupRenderer\n key={item.uuid}\n item={item}\n COMPONENT_TYPES={COMPONENT_TYPES}\n activeGroupId={activeGroupId}\n onGroupToggle={handleGroupAccordionToggle}\n />\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n\n {separatedFeatures.length > 0 && (\n <Grid item xs={12}>\n <Accordion\n sx={{\n mt: 0.5,\n '&:before': { display: 'none' },\n boxShadow: '0 2px 4px rgba(0,0,0,0.05)',\n border: '1px solid #c8e6c9',\n mb: 1,\n borderRadius: '4px!important',\n backgroundColor: 'var(--color-background2)',\n }}\n expanded={isStandaloneExpanded}\n onChange={() => setIsStandaloneExpanded((prev) => !prev)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons iconName={'faChevronDown'} style={{ color: '#009688' }} />\n }\n sx={{\n minHeight: '40px',\n backgroundColor: '#e8f5e9',\n '&:hover': { backgroundColor: '#cbe6cc' },\n '& .MuiAccordionSummary-content': { margin: '0' },\n p: '0 10px',\n }}\n >\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', color: '#009688' }}>\n <FontAwesomeIcons iconName=\"faPuzzlePiece\" style={{ marginRight: '6px' }} />\n Standalone Features ({separatedFeatures.length})\n </Typography>\n </AccordionSummary>\n <AccordionDetails sx={{ p: '8px', pt: 1, backgroundColor: 'var(--color-background2)' }}>\n <Grid container spacing={0.5} direction=\"column\">\n {separatedFeatures.map((item) => (\n <SidebarGroupRenderer\n key={item.uuid}\n item={item}\n COMPONENT_TYPES={COMPONENT_TYPES}\n />\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n\n {separatedGroups.length === 0 && separatedFeatures.length === 0 && (\n <Typography variant=\"body2\" sx={{ p: 2, color: 'var(--color-gray1)', textAlign: 'center' }}>\n No groups or features match your search criteria.\n </Typography>\n )}\n </Grid>\n </Box>\n </Box>\n </Grid>\n </Paper>\n </Grid>\n\n <Grid size={12} sx={{ mt: 1 }}>\n <ConfigurationPanel\n activeComponent={activeComponent}\n onUpdate={handleComponentUpdate}\n onDeselect={() => setActiveElementId(null)}\n mobileQueries={mobileQueries}\n />\n </Grid>\n </Grid>\n </Grid>\n <DragOverlay>{renderActiveOverlay(activeId)}</DragOverlay>\n </DndContext>\n </form>\n </MenuDragContext.Provider>\n <CustomConfirmationModal\n open={backModalOpen}\n handleClose={() => {\n setBackModalOpen(false);\n }}\n handleClick={() => {\n navigate('/ui/medplat/admin/mobileMenuManagement');\n }}\n title=\"Leave Page\"\n description={`Changes you made will be discarded. Do you want to continue?`}\n dataTestId=\"delete-auth-confirmation\"\n />\n </>\n );\n}\nfunction DraggableComponent({ id, children, componentType, dragData = null }) {\n const { attributes, listeners, setNodeRef, transform } = useDraggable({\n id,\n data: { type: componentType, ...(dragData && { data: dragData }) },\n });\n\n const style = transform\n ? {\n transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,\n zIndex: 1000,\n opacity: 0.9,\n }\n : undefined;\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n ...listeners,\n ...attributes,\n });\n}\nfunction CustomTabPanel(props) {\n const { children, value, index, ...other } = props;\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`simple-tabpanel-${index}`}\n aria-labelledby={`simple-tab-${index}`}\n {...other}\n >\n {value === index && <Box sx={{ p: 3 }}>{children}</Box>}\n </div>\n );\n}\n\nCustomTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.number.isRequired,\n value: PropTypes.number.isRequired,\n};\n\nconst TrashZone = ({ isDraggingSortable }) => {\n const { setNodeRef, isOver } = useDroppable({\n id: 'trash-zone',\n });\n\n if (!isDraggingSortable) {\n return null;\n }\n\n return (\n <Box\n ref={setNodeRef}\n sx={{\n position: 'fixed',\n bottom: 20,\n left: '50%',\n transform: 'translateX(-50%)',\n width: 250,\n height: 50,\n p: 2,\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: isOver ? '#d32f2f' : '#ef5350',\n color: 'white',\n zIndex: 3000,\n transition: 'background-color 0.2s',\n }}\n >\n <FontAwesomeIcon icon={faTrashCan} style={{ marginRight: '10px' }} />\n <Typography variant=\"body1\">{isOver ? 'Release to Delete' : 'Drag Here to Delete'}</Typography>\n </Box>\n );\n};\nTrashZone.propTypes = {\n isDraggingSortable: PropTypes.any,\n};\nconst ConfigurationPanel = ({ activeComponent, onUpdate, onDeselect, mobileQueries }) => {\n if (!activeComponent) {\n return (\n <Paper\n sx={{\n p: 1,\n backgroundColor: 'var(--color-gray4)',\n textAlign: 'center',\n }}\n >\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 'bold', mb: 1, color: 'var(--color-text)' }}>\n Component Configuration\n </Typography>\n\n <Divider sx={{ mb: 1 }} />\n <Typography variant=\"body1\">\n To add or edit <b>Section Title</b> or <b>Search Bar Query Name</b>:\n </Typography>\n\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', mb: 1 }}>\n <Typography variant=\"body1\" color=\"primary\">\n Right-Click\n </Typography>\n <Typography variant=\"body1\" sx={{ ml: 1 }}>\n on the selected component card\n </Typography>\n </Box>\n\n <Typography variant=\"caption\" color=\"textSecondary\">\n This will open the menu to access the **Configuration Panel**.\n </Typography>\n </Paper>\n );\n }\n if (activeComponent.type === 'SEARCH_BAR') {\n const queryOptions = mobileQueries.map((q) => q.code);\n if (activeComponent.type === 'SEARCH_BAR') {\n return (\n <Paper sx={{ p: 2, height: '100%' }}>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Search Bar Configuration\n </Typography>\n\n <Autocomplete\n disablePortal\n id=\"query-name-autocomplete\"\n options={queryOptions}\n size=\"small\"\n fullWidth\n sx={{ mb: 2 }}\n value={activeComponent.queryName || null}\n onChange={(event, newValue) => {\n onUpdate(activeComponent.id, 'queryName', newValue || '');\n }}\n renderInput={(params) => (\n <TextField {...params} label=\"Query Code\" variant=\"outlined\" placeholder=\"Select or search query code\" />\n )}\n />\n\n <Button onClick={onDeselect} variant=\"outlined\" color=\"gray\">\n Close\n </Button>\n </Paper>\n );\n }\n }\n if (activeComponent.type === 'SECTION') {\n return (\n <Paper sx={{ p: 2, height: '100%' }}>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Section Configuration\n </Typography>\n\n <TextField\n label=\"Section Title\"\n variant=\"outlined\"\n fullWidth\n value={activeComponent.title || ''}\n onChange={(e) => onUpdate(activeComponent.id, 'title', e.target.value)} // 👈 Update handler\n sx={{ mb: 2 }}\n />\n\n <Button onClick={onDeselect} variant=\"outlined\" color=\"gray\">\n Close\n </Button>\n </Paper>\n );\n }\n return null;\n};\nConfigurationPanel.propTypes = {\n activeComponent: PropTypes.any,\n onUpdate: PropTypes.any,\n onDeselect: PropTypes.any,\n mobileQueries: PropTypes.any,\n};\nfunction SvgIconBox({ svg }) {\n const [svgHtml, setSvgHtml] = useState('');\n\n useEffect(() => {\n if (svg) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, 'image/svg+xml');\n const svgElement = doc.documentElement;\n\n let viewBox = svgElement.getAttribute('viewBox');\n if (!viewBox) {\n const width = svgElement.getAttribute('width') || '512';\n const height = svgElement.getAttribute('height') || '512';\n svgElement.setAttribute('viewBox', `0 0 ${width} ${height}`);\n }\n svgElement.removeAttribute('width');\n svgElement.removeAttribute('height');\n svgElement.setAttribute('style', 'width: 100%; height: 100%;');\n\n const serializedSvg = new XMLSerializer().serializeToString(svgElement);\n setSvgHtml(serializedSvg);\n }\n }, [svg]);\n\n return (\n <Grid2\n size={2}\n sx={{\n alignItems: 'center',\n alignSelf: 'center',\n height: '40px',\n width: '40px',\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n backgroundColor: '',\n borderRadius: '3%',\n transition: 'background-color 0.3s ease',\n '&:hover': {\n backgroundColor: 'var(--color-gray3)',\n cursor: 'pointer',\n },\n overflow: 'hidden',\n }}\n >\n <div dangerouslySetInnerHTML={{ __html: svgHtml }} />\n </Grid2>\n );\n}\n\nSvgIconBox.propTypes = {\n svg: PropTypes.string.isRequired,\n};\n\nconst renderIcon = (iconData, size = '36px') => {\n let svgContent = null;\n\n if (typeof iconData === 'object' && iconData !== null) {\n if (iconData.type === 'svg' && typeof iconData.content === 'string') {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === 'string') {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === 'string') {\n svgContent = iconData;\n }\n\n if (typeof svgContent === 'string' && svgContent.includes('<svg')) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n if (svgContent) {\n return (\n <Box\n sx={{\n height: size,\n width: size,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n fontSize: '1.2rem',\n color: 'var(--color-gray3)',\n border: '1px solid',\n borderRadius: '50%',\n height: '36px',\n width: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: '4px',\n }}\n >\n ?\n </Box>\n );\n};\nconst SidebarDraggableFeatureTile = ({ feature, isGroupMember = false }) => {\n const renderIconWithSpacing = (iconData, size) => {\n const iconElement = renderIcon(feature.icon, '18px');\n\n if (iconElement && iconElement.type === Box) {\n return React.cloneElement(iconElement, {\n sx: {\n ...iconElement.props.sx,\n height: '18px',\n width: '18px',\n marginRight: '8px',\n },\n });\n }\n return <Box sx={{ mr: '8px', display: 'flex', alignItems: 'center' }}>{renderIcon(iconData, size)}</Box>;\n };\n return (\n <Box\n sx={{\n width: 'fit-content',\n p: '10px',\n pl: isGroupMember ? '20px' : '10px',\n backgroundColor: 'var(--color-background2)',\n border: '1px solid var(--color-gray3)',\n borderRadius: '4px',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n cursor: 'grab',\n display: 'flex',\n alignItems: 'center',\n transition: 'all 0.1s',\n mt: '4px',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n borderColor: 'var(--color-gray3)',\n },\n }}\n >\n {renderIconWithSpacing(feature.icon, '18px')}\n\n <Typography variant=\"body2\" sx={{ fontWeight: 'normal', color: '#333' }}>\n {feature?.name}\n </Typography>\n </Box>\n );\n};\nSidebarDraggableFeatureTile.propTypes = {\n feature: PropTypes.any,\n isGroupMember: PropTypes.any,\n};\nconst SidebarGroupRenderer = ({ item, COMPONENT_TYPES, activeGroupId, onGroupToggle }) => {\n const isGroupExpanded = activeGroupId === item.uuid;\n const handleDragIconClickStop = (e) => {\n e.stopPropagation();\n };\n\n if (item.type !== 'GROUP') {\n return (\n <DraggableComponent key={item.uuid} id={item.uuid} componentType={COMPONENT_TYPES.FEATURE} dragData={item}>\n <Grid item xs={12} key={item.id}>\n <SidebarDraggableFeatureTile feature={item} />\n </Grid>\n </DraggableComponent>\n );\n }\n\n return (\n <Accordion\n key={item.uuid}\n sx={{\n m: 0,\n '&:before': { display: 'none' },\n boxShadow: 'none',\n border: '1px solid var(--color-gray3)',\n mb: 1,\n borderRadius: '4px!important',\n }}\n expanded={isGroupExpanded}\n onChange={() => onGroupToggle(item.uuid)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <Box sx={{ p: 1 }} onMouseDown={handleDragIconClickStop} onTouchStart={handleDragIconClickStop}>\n <FontAwesomeIcons\n iconName=\"faChevronDown\"\n style={{\n fontSize: '1rem',\n color: 'var(--color-text)',\n transform: isGroupExpanded ? 'rotate(360deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </Box>\n }\n sx={{\n minHeight: '15px',\n backgroundColor: '#e3f2fd',\n borderBottom: '1px solid #bbdefb',\n cursor: 'grab',\n '&:hover': { backgroundColor: '#c5e3f8' },\n '& .MuiAccordionSummary-content': { margin: '0' },\n p: '0 10px',\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', width: '100%' }}>\n <DraggableComponent\n key={`drag-handle-${item.uuid}`}\n id={item.uuid}\n componentType={COMPONENT_TYPES.GROUP}\n dragData={item}\n >\n <Box\n component=\"span\"\n sx={{ cursor: 'grab', mr: 1, px: 0.5, '&:hover': { color: '#007bff' } }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n <FontAwesomeIcons iconName=\"faBars\" style={{ fontSize: '0.8rem', color: 'var(--color-text)' }} />\n </Box>\n </DraggableComponent>\n\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', color: 'var(--color-text)', flexGrow: 1 }}>\n {item.name} ({item.menus.length})\n </Typography>\n </Box>\n </AccordionSummary>\n\n <AccordionDetails sx={{ p: '8px', pt: 1, backgroundColor: 'var(--color-gray4)' }}>\n <Grid container spacing={0.5}>\n {item.menus.map((menu) => (\n <DraggableComponent\n key={menu.uuid}\n id={menu.uuid}\n componentType={COMPONENT_TYPES.FEATURE} // DRAGGABLE FEATURE TYPE\n dragData={menu}\n >\n <Grid item xs={12} key={menu.id}>\n <SidebarDraggableFeatureTile feature={menu} isGroupMember={true} />\n </Grid>\n </DraggableComponent>\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n );\n};\nSidebarGroupRenderer.propTypes = {\n item: PropTypes.any,\n COMPONENT_TYPES: PropTypes.any,\n activeGroupId: PropTypes.any,\n onGroupToggle: PropTypes.any,\n};\n"],"names":["MenuDragContext","createContext","SortableComponent","id","children","componentType","attributes","listeners","setNodeRef","isDragging","useSortable","style","React","DraggableFixedComponent","useDraggable","FeatureSortableWrapper","sectionId","featureName","MobileSearchBar","handleSectionClick","props","ref","jsxs","Box","e","jsx","FontAwesomeIcon","faMagnifyingGlass","Typography","PropTypes","MobileSection","arrayIndex","sectionTitle","dnd","sectionFeatures","SvgIconBox","onGroupClick","activeGroupId","handleContextMenu","handleTileClick","handleGroupContextMenu","feature","setFeatureContainerRef","isOver","useDroppable","SortableContext","f","verticalListSortingStrategy","Grid","isGroup","isPopoverOpen","renderFeatureIcon","renderFeatureName","faChevronDown","GroupFeatureSortableItem","handleFeatureClick","transform","transition","CSS","iconData","svgContent","match","MobileDisplay","tabStatus","layoutComponents","componentTypes","activeElementId","activeTabId","handleTabSwitch","formList","selectedForm","onFormSelect","setCurrentLayoutComponents","programFeatures","dropZoneId","dropZoneType","setDroppableRef","visibleNavItems","HomeIcon","ProgramsIcon","AnalyticsIcon","FamilyManagementIcon","item","searchBarComponent","c","sortableComponents","popoverState","setPopoverState","useState","handleOpenGroupPopover","useCallback","anchorElement","_a","handleCloseGroupPopover","renderFeatureTile","handleGroupInternalSort","event","active","over","groupId","newGroupData","prevComponents","section","oldIndex","newIndex","newMenus","arrayMove","prev","handleNestedFeatureClick","renderSortableComponent","component","index","isActive","faWifi","faSignal","faBatteryFull","faLocationDot","faRotate","faBell","faCircleUser","FormControl","InputLabel","Select","form","MenuItem","Fragment","DndContext","MobileGroupPopover","Tooltip","name","parts","part","groupData","anchorEl","onClose","features","anchorRect","Paper","IconButton","faTimes","Divider","AddMenuConfiguration","location","useLocation","state","queryParams","useMemo","navigate","useNavigate","rolesList","setRolesList","isEditMode","setIsEditMode","availableForms","setAvailableForms","mobileQueries","setMobileQueries","masterFeatureList","setMasterFeatureList","groupedFeatures","setGroupedFeatures","isMenuGroupsExpanded","setIsMenuGroupsExpanded","isStandaloneExpanded","setIsStandaloneExpanded","backModalOpen","setBackModalOpen","user","useSelector","formCtrl","useForm","useEffect","fetchRoles","fetchForms","fetchMobileQueries","fetchMenus","appConfiguration","isAttendanceRequired","reconstructAppState","setAppConfiguration","setTabStatus","setSelectedForm","mappedForms","execute","response","error","showToast","roleId","transformListData","findMetadataById","group","hydrateFeature","canonicalFeature","parentInstanceId","masterData","instanceUuid","generateUUID","hydratedMenus","menuItem","masterMenuItem","m","instancePrefix","hydrateLayout","canonicalLayout","tabId","instanceId","sectionInstanceId","hydratedFeatures","canonicalConfig","newAppConfiguration","newTabStatus","newSelectedForm","tabData","data","groupedList","masterFeatureMap","processedMenus","menu","transformedMenu","sanitizeFeature","canonicalGroupId","_b","sanitizeLayout","layout","sanitizedFeatures","createCanonicalConfig","finalConfig","navTabs","tab","isEnabled","tabEntry","rawLayout","rawFeatures","onSubmit","configJsonString","payload","handleToggle","prevStatus","newStatus","fallbackTab","setActiveTabId","COMPONENT_TYPES","handleFormSelection","selectedCode","formObject","activeId","setActiveId","setActiveElementId","initialConfig","searchTerm","setSearchTerm","setActiveGroupId","programsFeatures","handleGroupAccordionToggle","prevId","currentLayout","filteredFeatures","lowerSearch","filteredMenus","separatedGroups","separatedFeatures","groups","newLayoutUpdater","prevConfig","handleComponentUpdate","property","value","comp","handleDragStart","handleDragEnd","overType","overSectionId","activeSectionId","_c","draggedType","_d","droppedFeature","programsConfig","currentFeatures","newFeature","instanceIdToDelete","parentSectionId","prevLayout","newFeatures","droppedGroup","_e","targetSectionIndex","targetSection","sourceIdString","newGroupItem","updatedSection","newLayout","_f","_g","_h","_i","_j","searchBar","sortableList","oldSortableIndex","newSortableIndex","finalLayout","targetZoneType","_k","_l","newComponent","SCREEN_CONTENT_WIDTH","OverlayMobileSearchBar","OverlayMobileSection","OverlayFeatureTile","renderIcon","OverlaySidebarFeature","size","iconElement","getActiveLayoutItem","sourceItem","itemType","programFeature","topLevel","activeComponent","renderActiveOverlay","isDraggingSortable","isDraggingTopLevel","isDraggingFeatureTile","isDraggingProgramFeatureTile","sortableSectionIds","customCollisionDetection","args","droppableContainers","container","rectIntersection","validSectionDropTargets","closestCenter","Button","Switch","CustomDropdown","DraggableComponent","FontAwesomeIcons","TrashZone","TextField","InputAdornment","Accordion","AccordionSummary","AccordionDetails","SidebarGroupRenderer","ConfigurationPanel","DragOverlay","CustomConfirmationModal","dragData","faTrashCan","onUpdate","onDeselect","queryOptions","q","Autocomplete","newValue","params","svg","svgHtml","setSvgHtml","svgElement","width","height","serializedSvg","Grid2","SidebarDraggableFeatureTile","isGroupMember","onGroupToggle","isGroupExpanded","handleDragIconClickStop"],"mappings":"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"}