{"version":3,"file":"InquiryContainer.mjs","names":["ChevronDownIcon","ChevronUpIcon","ClearIcon","LinearProgress","makeStyles","Typography","Card","Collapse","Divider","cloneDeep","orderBy","PropTypes","React","useCallback","useEffect","useMemo","useRef","useState","DndProvider","HTML5Backend","useTranslation","collapseAllNodes","constructPreloadedTree","getSearchValueString","expandAllNodes","fetchLazyChildren","collectChildVaryingKeysByType","keysByTypeToFilterArray","fetchCountsByType","findNodeByBusinessObjectKey","Form","formatTreeMenuItem","getSearchIdentifiers","getSearchObject","InquiryAdvancedSearch","InquiryDashboard","InquiryHeaderSecondary","InquiryHeaderSecondaryTarget","InquiryNodeControls","InquirySearchContainer","InquiryWrapper","LayoutUnit","makeTreeStructure","NodeDetails","NodeList","OpenPage","PageContainer","pluralize","PrimaryActionHeader","useActions","v4","uuid","NodeActionEnums","NodeActionTriggerEnums","TreeViewModeEnums","RecentlyLoadedNodesTable","ExecuteApiDialog","useSnackbar","executeQueryInstance","useInquiryStore","useSetInitialInquiryMenuVisibility","evaluateRule","mapRule","GroupNode","getSanitizedName","useShellStore","useActionStore","useAxiosGet","UdpTablist","UtilitySideBar","InquiryHeaderSecondaryAlertTarget","FluentIconButton","clsx","PageActionWrapper","WorkflowTreeMenu","NodeLoader","apiMutate","transformWorkflowPlayTree","updateWorkflowPlayNodeState","APP_RIBBON_SPACE","useBuildEnvironment","WorkflowContent","LoadingOverlay","UnitStateType","useSetLocationState","ConfigService","useStyles","theme","root","display","height","appRibbonSpace","mainWrapper","padding","spacing","children","searchContainerRoot","nodeListRoot","props","shellHidden","overflowX","nodeListRootLoaded","tree","isPreloaded","tabRoot","width","minWidth","workflowTablist","nodeListRootLoading","chevronButtons","justifyContent","zIndex","appBar","chevronButtonClosed","position","left","top","marginLeft","entityHeader","boxShadow","nodeHeader","content","overflowY","workflowMenuContent","marginTop","paddingTop","workflowTreeLoader","marginRight","WORKFLOW_MAX_NETWORK_CALLS","getKeyIdentifier","n","isGroupNode","properties","label","nodeObj","businessObjectKey","InquiryContainer","catalogObjects","executeQueryAdHoc","executeQueryWithParameters","executeGetDetailedTree","executeAddRecentlyLoadedNodes","initialSearchValue","litnHistory","litnHistoryLoading","pageId","pageData","pageLoading","pageError","productId","promotedEntities","apiCatalogId","setPageId","treeId","treeLoading","treeError","user","autoCollapseNav","containerId","state","buildEnv","classes","t","enqueueSnackbar","refreshing","setRefreshing","nodeLoaded","setNodeLoaded","searchValue","setSearchValue","clearSearchStr","setClearSearchStr","inSearch","setInSearch","selectedSearchRows","setSelectedSearchRows","menuList","setMenuList","menuLoading","setMenuLoading","selectedNode","setSelectedNode","selectedMenuIndex","setSelectedMenuIndex","disableMoveToTop","setDisableMoveToTop","nodeHistory","setNodeHistory","expandAllClicked","setExpandAllClicked","tabValue","setTabValue","selectedPageId","setSelectedPageId","nodesRequested","setNodesRequested","sidebarTabValue","setSidebarTabValue","advancedSearchItems","setAdvancedSearchItems","isAdvancedSearch","setIsAdvancedSearch","entityValue","setEntityValue","treeViewMode","setTreeViewMode","Classic","advancedSearchEntityValue","setAdvancedSearchEntityValue","moveToTopLoading","setMoveToTopLoading","moveToTopCount","setMoveToTopCount","promotedMethodsToExecute","setPromotedMethodsToExecute","executeApiDialogOpen","setExecuteApiDialogOpen","executeApiData","setExecuteApiData","executeApiProgress","setExecuteApiProgress","setIsPreloaded","headerTitle","setHeaderTitle","sidebarExpanded","setSidebarExpanded","primaryExpanded","setPrimaryExpanded","secondaryExpanded","setSecondaryExpanded","showToggle1","setShowToggle1","showToggle2","setShowToggle2","utilitySideBarWidth","setUtilitySideBarWidth","refreshNodeHeaderPageData","setRefreshNodeHeaderPageData","refreshPageHeaderPageData","setRefreshPageHeaderPageData","dragAndDropLoading","setDragAndDropLoading","inquiryWorkflowTabValue","setInquiryWorkflowTabValue","workflowMenuItemsList","setWorkflowMenuItemsList","selectedWorkflowNode","setSelectedWorkflowNode","reloadWorkflowFromPage","setReloadWorkflowFromPage","getWorkflowPlayErrorCount","setGetWorkflowPlayErrorCount","getWorkflowInitializedCount","setGetWorkflowInitializedCount","workflowInitialized","setWorkflowInitialized","workflow","setWorkflow","inquiryMenuHidden","setActionPanels","setShowInquiryHeaderActions","setMenuListState","setInquiryParams","closeAllSplitScreens","setSelectedNodeForStore","setHideActions","setInquiryTitleHeader","setInquiryToolbarTitle","setNavigationExpanded","setSubHeaderActionHasChildren","inquiryTitle","title","workflowMap","setWorkflowMap","workflowStarting","setLocationState","data","explorePageData","loading","explorePageLoading","tenantV1ApiUrl","explorePageId","orderBySequence","list","selectedTree","inquiryWorkflow","nodeHeaderPageIdToLoad","nodeHeaderPages","orderedNodeHeaderPages","nodeHeaderPageId","i","length","nodeHeaderPage","propertyMapping","jsonLogic","rule","page","pageHeaderPageIdToLoad","matchingTab","tabs","find","tab","pageHeaderPages","orderedPageHeaderPages","pageHeaderPageId","pageHeaderPage","nodeHeaderPageData","nodeHeaderPageLoading","pageHeaderPageData","pageHeaderPageLoading","workflowPlay","workflowPlayLoading","error","workflowPlayError","reloadWorkflow","builderV1ApiUrl","currentWorkflowPlayId","users","securityV1ApiUrl","currentTenantId","inWorkflowMode","groups","config","UNITY_PRODUCT_ID","handleReloadWorkflow","handleSelectedWorkflowNode","node","menuIndex","isSelectable","searchItems","result","treeStructure","reduce","items","item","matchingCatalogObject","co","catalogObjectName","catalogReturnObject","entityAttributes","searchFilterElements","forEach","element","parentId","apiMethodInstance","apiMethodId","columns","searchTableColumns","id","associatedInquiryTree","isPrimarySearch","push","entitySearchItems","value","filter","getLoadedNodeObject","queryPayload","nodeLabel","treeStructureId","loadedNode","inquiryTreeId","userId","nodeDetails","setAppNavigationExpanded","loadNodes","searchRows","Object","keys","catalogObjectKeys","promises","searchObjList","loadedNodesList","nodesRequestedArr","key","searchObj","currentSearchTree","lazyLoad","rows","searchIdentifier","row","filterElements","searchIdentifiers","split","si","formattedPropertyName","charAt","toUpperCase","slice","searchField","searchOperator","searchObject","wasLazyLoaded","menuTree","Promise","all","then","responses","updatedMenuList","response","index","status","pageList","displayTree","Array","isArray","updatedNodeHistory","map","panels","handleCloseWorkflow","handleRemoveMenuItem","menus","splice","newSelectedNode","handleRecentlyLoadedNodeClick","additionalAction","currentTreeStructureArr","currentTree","foundTreeStructure","associatedTreeStructure","associatedTree","eagerLoad","catch","e","console","matchingNode","nodeTreeStructure","defaultValue","variant","anchorOrigin","vertical","horizontal","handleLoadNodes","handleSingleNodeLoad","searchRow","handleRowDoubleClick","rowData","searchItem","identifiers","toString","clearNodes","handlePrimaryAction","handleSearch","event","target","clearSearch","handleSelectedSearchRows","objectName","handleSelectedNode","associatedTreeId","constructMenuItemForDroppedNode","loadPageNodeActions","targetNodeObj","sourceNodeObj","targetNodeEntityName","sourceNodeEntityName","menuItem","isExpanded","nodeSubLabel","defaultPageHeaderExpanded","defaultNodeHeaderExpanded","defaultIcon","color","name","type","nodeActions","isDroppedLoadedPageNode","existingPageLoadEntities","inquiryParams","nodeAction","dragEntityName","tabObj","inquiryTreeRuleId","propertyIsCustomMapping","sequence","requiredFieldMapping","parameters","loadPageForDroppedNode","sourceNode","targetNode","targetNodeCatalogReturnObject","sourceNodeCatalogReturnObject","orderedLoadPageNodeActions","pageMenuItem","unshift","targetMenuItem","includes","handleDroppedNodeForExecuteApi","executeApiNodeActions","sourceNodeType","targetNodeType","sourceNodeMenuIndex","targetNodeMenuIndex","apiMethodIds","eana","actionValue","promotedMethods","integrationV2ApiUrl","method","pmte","source","handleCloseExecuteApiDialog","handleMenuTreesRefresh","menuIndexes","workingTree","assocInquiryTreeMap","p","currentSelectedTree","selectedNodeSearchIdentifier","expandedStateRef","handleExpandedChange","stateMap","current","restoreExpandedState","getStableKey","walk","has","get","treeNodeIds","idMap","stack","pop","child","getCriticalPath","selectedTreeNode","path","treeNodes","hasLazyLevelInStructure","some","level","fetchAndBuildDisplayTree","pageSize","isPreloadedGroupQuery","apiMethodInstanceId","responseObj","fetchAndMergeLazyNode","currentNode","context","currentCriticalPathNode","criticalPathBroken","survivingAncestor","criticalPathList","keysByType","inclusionFilter","res","totalsByType","treeStructureArr","pageNumber","currentBok","criticalPathNodeBok","isCriticalPathNode","nextAncestorBok","present","c","existingChildrenMap","Map","oldChild","bok","set","mergedChildren","freshChild","existingChild","groupNodes","localPhysicalCounts","hasMore","entries","total","freshSeenByType","completedLoadingChildren","hasMoreChildren","seenChildKeysByType","errorRetrievingChildren","doesRootExist","isPreloadedRoot","rootEntityType","rootApiMethodId","rootPkFields","rootPk","rootPkValue","pkSearchField","rootCheckResponse","buildLazyDisplayTree","expandedKeys","rootExists","rootDeleted","queue","pathContext","shift","wasExpanded","criticalPathNode","handleMenuTreesRefreshFromPage","updateAllPreloadedTreesOrMutationInfo","updateAllPreloadedTrees","selectedNodeIndex","indexOf","prevState","updated","childNode","parentGroupId","parentGroupName","newGroupId","executeApiForDroppedNode","apiData","requestBody","apiMethod","handleDroppedNode","targetNodeActions","triggerType","On_Node_Drop","actionTypeId","Load_Inquiry_Page","Execute_Api","workflowNodeActions","Start_Workflow","tna","handleMoveToTop","detailedTreeResponse","count","handleExpandAll","currentMenuList","rootTree","lazyLoadChildrenArr","searchMethod","childTree","ts","currentChildPage","handleCollapseAll","inquiryTabList","tabList","orderedTabs","displayName","trim","icon","trees","queryId","queryParamMapping","inquiryFluentTabList","String","inquiryWorkflowFluentTabList","handlePageChange","Number","isNaN","handleFluentInquiryTabChange","detail","handleLoadingSpecificNode","obj","currentTabValue","errorMessage","fullyQualifiedName","sanitizedName","matchingCtlgFullyQualifiedNameComponent","domain","catObjName","matchingTabValueTree","tabTree","nodeTree","searchValues","searchResponse","handleSideBarValueChange","handleAdvancedSearchClick","values","selectedSearchOperators","entity","lookupPropertyNames","foundSearchItem","searchFields","field","startsWith","filterElement","configuredSearchField","replace","fromValue","Date","toISOString","toValue","entityList","entities","secondaryButtons","component","click","pageHeightOffSet","offset","onTreeViewModeChange","Compact","selectedNodeChildren","udpPageWidgetParams","entityName","contentId","nodeId","manytoManyNodeObjKey","joiningEntityCatalogObjectKey","parentNodeObj","parentNode","inquiryNodeProperties","refreshTree","loadInquiryNode","requiredFieldsMap","displayLoadNodeButton","nodeChildren","refreshNodeHeaderData","refreshPageHeaderData","inquiryContainerId","pageWidgetParams","heightOffset","pageContainer","isUdpPage","handleSidebarExpandClick","expanded","pageTabs","selectedNodeParent","getPreloadedTree","clonedTree","preloadedList","topNode","prevNode","foundNode","workflowPlayNode","updatedNode","initialized","firstWorkflowNode","Initial","timer","setTimeout","prevCount","clearTimeout","updatedMenu","menu","firstSelectableMenuItem","marginBottom","workflowMenuItems","nodeContainer","inquiryHeader","actions","recentlyLoadedNodes","onLoadedNodeClick","tableHeight","information","summaryCard","propTypes","object","array","bool","string","func","isValidWidget"],"sources":["../../src/inquiry/InquiryContainer.jsx"],"sourcesContent":["import {\n  ChevronDownIcon,\n  ChevronUpIcon,\n  ClearIcon\n} from '@fluentui/react-icons';\nimport {\n  LinearProgress,\n  makeStyles,\n  Typography,\n  Card,\n  Collapse,\n  Divider\n} from '@material-ui/core';\nimport { cloneDeep, orderBy } from 'lodash-es';\nimport PropTypes from 'prop-types';\nimport React, {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useTranslation } from 'react-i18next';\nimport {\n  collapseAllNodes,\n  constructPreloadedTree,\n  getSearchValueString\n} from '../utilities/tree/TreeUtilities';\nimport { expandAllNodes } from '../utilities/tree/TreeUtilities';\nimport { fetchLazyChildren } from '../utilities/tree/TreeUtilities';\nimport {\n  collectChildVaryingKeysByType,\n  keysByTypeToFilterArray,\n  fetchCountsByType,\n  findNodeByBusinessObjectKey\n} from '../utilities/tree/TreeUtilities';\nimport { Form } from '../utilities/form';\nimport { formatTreeMenuItem } from '../utilities/tree/TreeUtilities';\nimport { getSearchIdentifiers } from '../utilities/search/SearchUtilities';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\nimport { InquiryAdvancedSearch } from './search/InquiryAdvancedSearch';\nimport { InquiryDashboard } from './dashboard/InquiryDashboard';\nimport {\n  InquiryHeaderSecondary,\n  InquiryHeaderSecondaryTarget\n} from '../utilities/utilityBar/InquiryHeaderSecondary';\nimport { InquiryNodeControls } from './inquiryBar/InquiryNodeControls';\nimport { InquirySearchContainer } from './search/InquirySearchContainer';\nimport { InquiryWrapper } from './InquiryWrapper';\nimport { LayoutUnit } from '../layout/LayoutUnit';\nimport { makeTreeStructure } from '../utilities/tree/TreeUtilities';\nimport { NodeDetails } from './NodeDetails';\nimport { NodeList } from './NodeList';\nimport { OpenPage } from '../UI/templates/OpenPage';\nimport { PageContainer } from '../page/PageContainer';\nimport { pluralize } from '../utilities/input/StringUtilities';\nimport { PrimaryActionHeader } from '../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { useActions } from '../hooks/useActions';\nimport { v4 as uuid } from 'uuid';\nimport {\n  NodeActionEnums,\n  NodeActionTriggerEnums,\n  TreeViewModeEnums\n} from '../enums/unitySystemEnums.ts';\nimport { RecentlyLoadedNodesTable } from './dashboard/RecentlyLoadedNodesTable';\nimport { ExecuteApiDialog } from './ExecuteApiDialog';\nimport { useSnackbar } from 'notistack';\nimport { executeQueryInstance } from '../udp/utilities/methodUtils';\nimport {\n  useInquiryStore,\n  useSetInitialInquiryMenuVisibility\n} from '../stores/inquiryStore';\nimport { evaluateRule, mapRule } from '../utilities/rules/RuleUtilities';\nimport GroupNode from '../models/GroupNode';\nimport { getSanitizedName } from '../utilities/entities/entityUtilities';\nimport { useShellStore } from '../stores/shellStore';\nimport { useActionStore } from '../stores/actionStore';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UdpTablist } from '../UI/fluent-web-components/UdpTablist';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { InquiryHeaderSecondaryAlertTarget } from '../utilities/utilityBar/InquiryHeaderSecondaryAlert';\nimport { FluentIconButton } from '../UI/inputs/buttons/FluentIconButton';\nimport clsx from 'clsx';\nimport { PageActionWrapper } from '../actions/PageActionWrapper';\nimport { WorkflowTreeMenu } from '../workflow/menus/WorkflowTreeMenu';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport {\n  transformWorkflowPlayTree,\n  updateWorkflowPlayNodeState\n} from '../utilities/workflow/workflowUtilities';\nimport {\n  APP_RIBBON_SPACE,\n  useBuildEnvironment\n} from '../shell/ui/useBuildEnvironment';\nimport { WorkflowContent } from '../workflow/WorkflowContent';\nimport LoadingOverlay from '../UI/loading/LoadingOverlay';\nimport { UnitStateType } from '../enums/workflowEnums';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { ConfigService } from '../configService';\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    display: 'flex',\n    height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`\n  },\n  mainWrapper: {\n    padding: theme.spacing(2)\n  },\n  children: {\n    height: 'calc(100vh - 150px)'\n  },\n  searchContainerRoot: {\n    height: 'calc(100vh - 140px)'\n  },\n  nodeListRoot: {\n    height: (props) => `calc(100vh - ${props.shellHidden ? '120px' : '176px'})`,\n    overflowX: 'hidden'\n  },\n  nodeListRootLoaded: {\n    height: (props) =>\n      props.tree?.isPreloaded\n        ? 'calc(100vh - 140px)'\n        : `calc(100vh - ${props.shellHidden ? '130px' : '184px'})`,\n    overflowX: 'hidden'\n  },\n  tabRoot: {\n    width: '100%',\n    minWidth: 0\n  },\n  workflowTablist: {\n    width: '100%',\n    display: 'block',\n    '& udp-fluent-tablist': {\n      width: '100%'\n    }\n  },\n  nodeListRootLoading: {\n    height: 'calc(100vh - 108px)'\n  },\n  chevronButtons: {\n    display: 'flex',\n    justifyContent: 'center',\n    zIndex: theme.zIndex.appBar\n  },\n  chevronButtonClosed: {\n    position: 'absolute',\n    left: '50%',\n    top: 14,\n    marginLeft: -13,\n    zIndex: theme.zIndex.appBar\n  },\n  entityHeader: {\n    position: 'relative',\n    zIndex: theme.zIndex.appBar,\n    boxShadow:\n      '0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 3px 3px 0px rgba(0, 0, 0, 0.12)'\n  },\n  nodeHeader: {\n    boxShadow:\n      '0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 3px 3px 0px rgba(0, 0, 0, 0.12)'\n  },\n  content: {\n    overflowY: 'auto',\n    height: 'calc(100vh - 50px)'\n  },\n  workflowMenuContent: {\n    marginTop: theme.spacing(1),\n    height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 120}px)`,\n    overflowX: 'hidden',\n    paddingTop: theme.spacing(1)\n  },\n  workflowTreeLoader: {\n    marginRight: theme.spacing(1),\n    marginLeft: theme.spacing(1)\n  }\n}));\n\nconst WORKFLOW_MAX_NETWORK_CALLS = 50;\n\nconst getKeyIdentifier = (n) =>\n  n.isGroupNode ? n.properties?.label : n.nodeObj?.businessObjectKey;\n\nexport const InquiryContainer = (props) => {\n  const {\n    catalogObjects,\n    executeQueryAdHoc,\n    executeQueryWithParameters,\n    executeGetDetailedTree,\n    executeAddRecentlyLoadedNodes,\n    initialSearchValue,\n    litnHistory,\n    litnHistoryLoading,\n    pageId,\n    pageData,\n    pageLoading,\n    pageError,\n    productId,\n    promotedEntities,\n    apiCatalogId,\n    setPageId,\n    tree,\n    treeId,\n    treeLoading,\n    treeError,\n    user,\n    autoCollapseNav = true,\n    containerId = ''\n  } = props;\n  const shellHidden = useShellStore((state) => state.shellHidden);\n  const buildEnv = useBuildEnvironment();\n  const classes = useStyles({\n    shellHidden,\n    ...props,\n    appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n  });\n  const { t } = useTranslation();\n  const { enqueueSnackbar } = useSnackbar();\n\n  const [refreshing, setRefreshing] = useState(false);\n  const [nodeLoaded, setNodeLoaded] = useState(false);\n  const [searchValue, setSearchValue] = useState(initialSearchValue || '');\n  const [clearSearchStr, setClearSearchStr] = useState(false);\n  const [inSearch, setInSearch] = useState(false);\n  const [selectedSearchRows, setSelectedSearchRows] = useState(null);\n  const [menuList, setMenuList] = useState([]);\n  const [menuLoading, setMenuLoading] = useState(false);\n  const [selectedNode, setSelectedNode] = useState(null);\n  const [selectedMenuIndex, setSelectedMenuIndex] = useState(null);\n  const [disableMoveToTop, setDisableMoveToTop] = useState(true);\n  const [nodeHistory, setNodeHistory] = useState([]);\n  const [expandAllClicked, setExpandAllClicked] = useState(false);\n  const [tabValue, setTabValue] = useState(0);\n  const [selectedPageId, setSelectedPageId] = useState(null);\n  const [nodesRequested, setNodesRequested] = useState([]);\n  const [sidebarTabValue, setSidebarTabValue] = useState(0);\n  const [advancedSearchItems, setAdvancedSearchItems] = useState([]);\n  const [isAdvancedSearch, setIsAdvancedSearch] = useState(false);\n  const [entityValue, setEntityValue] = useState('');\n  const [treeViewMode, setTreeViewMode] = useState(TreeViewModeEnums.Classic);\n  const [advancedSearchEntityValue, setAdvancedSearchEntityValue] =\n    useState('');\n  const [moveToTopLoading, setMoveToTopLoading] = useState(false);\n  const [moveToTopCount, setMoveToTopCount] = useState(0);\n  const [promotedMethodsToExecute, setPromotedMethodsToExecute] = useState([]);\n  const [executeApiDialogOpen, setExecuteApiDialogOpen] = useState(false);\n  const [executeApiData, setExecuteApiData] = useState(null);\n  const [executeApiProgress, setExecuteApiProgress] = useState(false);\n  const [isPreloaded, setIsPreloaded] = useState(false);\n  const [headerTitle, setHeaderTitle] = useState('');\n  const [sidebarExpanded, setSidebarExpanded] = useState(true);\n  const [primaryExpanded, setPrimaryExpanded] = useState(false);\n  const [secondaryExpanded, setSecondaryExpanded] = useState(false);\n  const [showToggle1, setShowToggle1] = useState(false);\n  const [showToggle2, setShowToggle2] = useState(false);\n  const [utilitySideBarWidth, setUtilitySideBarWidth] = useState(288);\n  const [refreshNodeHeaderPageData, setRefreshNodeHeaderPageData] =\n    useState(null);\n  const [refreshPageHeaderPageData, setRefreshPageHeaderPageData] =\n    useState(null);\n  const [dragAndDropLoading, setDragAndDropLoading] = useState(false);\n\n  /* States for Workflow */\n  const [inquiryWorkflowTabValue, setInquiryWorkflowTabValue] = useState(1);\n  const [workflowMenuItemsList, setWorkflowMenuItemsList] = useState([]); // holds a list of workflow trees\n  const [selectedWorkflowNode, setSelectedWorkflowNode] = useState(null);\n  const [reloadWorkflowFromPage, setReloadWorkflowFromPage] = useState(false);\n  const [getWorkflowPlayErrorCount, setGetWorkflowPlayErrorCount] = useState(0);\n  const [getWorkflowInitializedCount, setGetWorkflowInitializedCount] =\n    useState(0);\n  const [workflowInitialized, setWorkflowInitialized] = useState(false);\n  const [workflow, setWorkflow] = useState(null);\n  // Checks if we should be hiding the Inquiry Left Menu\n  useSetInitialInquiryMenuVisibility();\n  const inquiryMenuHidden = useInquiryStore((state) => state.inquiryMenuHidden);\n\n  const {\n    setActionPanels,\n    setShowInquiryHeaderActions,\n    setMenuListState,\n    setInquiryParams,\n    closeAllSplitScreens\n  } = useActions();\n\n  const setSelectedNodeForStore = useActionStore(\n    (state) => state.setSelectedNode\n  );\n\n  const setHideActions = useActionStore((state) => state.setHideActions);\n\n  const setInquiryTitleHeader = useInquiryStore(\n    (state) => state.setInquiryToolbarTitle\n  );\n\n  const setNavigationExpanded = useShellStore(\n    (state) => state.setNavigationExpanded\n  );\n\n  const setSubHeaderActionHasChildren = useShellStore(\n    (state) => state.setSubHeaderActionHasChildren\n  );\n\n  const inquiryTitle = useInquiryStore((state) => state.title);\n  const workflowMap = useInquiryStore((state) => state.workflowMap);\n  const setWorkflowMap = useInquiryStore((state) => state.setWorkflowMap);\n  const workflowStarting = useInquiryStore((state) => state.workflowStarting);\n  const setLocationState = useSetLocationState();\n\n  const [{ data: explorePageData, loading: explorePageLoading }] = useAxiosGet(\n    ConfigService.tenantV1ApiUrl,\n    `page/${tree?.explorePageId}`,\n    {},\n    !!!tree?.explorePageId,\n    false\n  );\n\n  const orderBySequence = (list) => {\n    return orderBy(list, ['sequenceNo'], ['asc']);\n  };\n\n  const selectedTree = useMemo(\n    () => menuList[selectedMenuIndex] ?? null,\n    [menuList, selectedMenuIndex]\n  );\n\n  const inquiryWorkflow = useMemo(() => {\n    if (workflowMap) {\n      return workflowMap[containerId || 0];\n    }\n  }, [workflowMap, containerId]);\n\n  const nodeHeaderPageIdToLoad = useMemo(() => {\n    const nodeHeaderPages = selectedNode?.properties?.nodeHeaderPages;\n    if (!nodeHeaderPages) {\n      return null;\n    }\n    const orderedNodeHeaderPages = orderBySequence(nodeHeaderPages);\n    let nodeHeaderPageId = null;\n    for (let i = 0; i < orderedNodeHeaderPages.length; i++) {\n      const nodeHeaderPage = orderedNodeHeaderPages[i];\n      if (nodeHeaderPage?.propertyMapping && nodeHeaderPage?.jsonLogic) {\n        const rule = mapRule(\n          nodeHeaderPage?.propertyMapping,\n          nodeHeaderPage?.jsonLogic\n        );\n\n        if (evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n          nodeHeaderPageId = nodeHeaderPage.page?.pageId;\n          break;\n        } else {\n          continue;\n        }\n      } else {\n        nodeHeaderPageId = nodeHeaderPage.page?.pageId;\n        break;\n      }\n    }\n    return nodeHeaderPageId;\n  }, [selectedNode]);\n\n  const pageHeaderPageIdToLoad = useMemo(() => {\n    if (!selectedPageId) {\n      return null;\n    }\n    const matchingTab = selectedNode?.properties?.tabs?.find(\n      (tab) => tab.page?.pageId === selectedPageId\n    );\n    if (!matchingTab) {\n      return null;\n    }\n    const pageHeaderPages = matchingTab?.pageHeaderPages;\n    if (!pageHeaderPages) {\n      return null;\n    }\n    const orderedPageHeaderPages = orderBySequence(pageHeaderPages);\n    let pageHeaderPageId = null;\n    for (let i = 0; i < orderedPageHeaderPages.length; i++) {\n      const pageHeaderPage = orderedPageHeaderPages[i];\n      if (pageHeaderPage?.propertyMapping && pageHeaderPage?.jsonLogic) {\n        const rule = mapRule(\n          pageHeaderPage?.propertyMapping,\n          pageHeaderPage?.jsonLogic\n        );\n\n        if (evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n          pageHeaderPageId = pageHeaderPage.page?.pageId;\n          break;\n        } else {\n          continue;\n        }\n      } else {\n        pageHeaderPageId = pageHeaderPage.page?.pageId;\n        break;\n      }\n    }\n    return pageHeaderPageId;\n  }, [selectedNode, selectedPageId]);\n\n  const [{ data: nodeHeaderPageData, loading: nodeHeaderPageLoading }] =\n    useAxiosGet(\n      ConfigService.tenantV1ApiUrl,\n      `page/${nodeHeaderPageIdToLoad}`,\n      {},\n      !!!nodeHeaderPageIdToLoad,\n      false\n    );\n\n  const [{ data: pageHeaderPageData, loading: pageHeaderPageLoading }] =\n    useAxiosGet(\n      ConfigService.tenantV1ApiUrl,\n      `page/${pageHeaderPageIdToLoad}`,\n      {},\n      !!!pageHeaderPageIdToLoad,\n      false\n    );\n\n  /* Workflow Api calls */\n  const [\n    {\n      data: workflowPlay,\n      loading: workflowPlayLoading,\n      error: workflowPlayError\n    },\n    reloadWorkflow\n  ] = useAxiosGet(\n    ConfigService.builderV1ApiUrl,\n    `workflow/play/${inquiryWorkflow?.currentWorkflowPlayId}`,\n    {},\n    !!!inquiryWorkflow?.currentWorkflowPlayId,\n    false\n  );\n\n  const [{ data: users }] = useAxiosGet(\n    ConfigService.securityV1ApiUrl,\n    `users?tenantId=${user?.currentTenantId || ''}`,\n    {},\n    !!!inquiryWorkflow?.inWorkflowMode && !!!user?.currentTenantId\n  );\n\n  const [{ data: groups }] = useAxiosGet(\n    ConfigService.tenantV1ApiUrl,\n    `groups?tenantId=${user?.currentTenantId || ''}&productId=${\n      ConfigService.config.UNITY_PRODUCT_ID\n    }`,\n    {},\n    !!!inquiryWorkflow?.inWorkflowMode && !!!user?.currentTenantId\n  );\n\n  const handleReloadWorkflow = useCallback(async () => {\n    setReloadWorkflowFromPage(true);\n    if (inquiryWorkflow?.currentWorkflowPlayId) {\n      await reloadWorkflow();\n    }\n    setReloadWorkflowFromPage(false);\n  }, [reloadWorkflow, inquiryWorkflow]);\n\n  const handleSelectedWorkflowNode = useCallback(\n    async (node, menuIndex) => {\n      if (node.isSelectable) {\n        setSelectedWorkflowNode(node);\n        await handleReloadWorkflow();\n      }\n    },\n    [handleReloadWorkflow]\n  );\n\n  const searchItems = useMemo(() => {\n    if (!tree) return [];\n\n    const result = tree.treeStructure.reduce((items, node) => {\n      let item = null;\n      const matchingCatalogObject = catalogObjects?.find(\n        (co) => co.catalogObjectName === node.properties.catalogReturnObject\n      );\n      const entityAttributes = matchingCatalogObject?.properties || null;\n      const searchFilterElements = node.properties?.searchFilterElements;\n      if (searchFilterElements) {\n        searchFilterElements.forEach(\n          (element) => (element.searchValue = searchValue)\n        );\n      }\n      if (!node.parentId) {\n        item = {\n          apiMethodInstance: tree.apiMethodInstance,\n          apiMethodId: tree.apiMethodInstance.apiMethodId,\n          columns: entityAttributes || node.properties.searchTableColumns,\n          searchFilterElements: searchFilterElements,\n          id: `${uuid()}-${searchValue}`,\n          catalogReturnObject: node.properties.catalogReturnObject,\n          treeStructure: tree.treeStructure,\n          associatedInquiryTree: null\n        };\n      } else {\n        const associatedInquiryTree = node.properties?.associatedInquiryTree;\n        if (associatedInquiryTree && node.properties?.isPrimarySearch) {\n          item = {\n            apiMethodInstance: associatedInquiryTree.apiMethodInstance,\n            apiMethodId: associatedInquiryTree.apiMethodInstance?.apiMethodId,\n            columns: entityAttributes || node.properties.searchTableColumns,\n            searchFilterElements: searchFilterElements,\n            id: `${uuid()}-${searchValue}`,\n            catalogReturnObject: node.properties.catalogReturnObject,\n            treeStructure: associatedInquiryTree.treeStructure,\n            associatedInquiryTree: associatedInquiryTree\n          };\n        }\n      }\n      if (item) {\n        items.push(item);\n      }\n      return items;\n    }, []);\n    return result;\n  }, [tree, searchValue, catalogObjects]);\n\n  const entitySearchItems = useMemo(() => {\n    if (!searchItems) {\n      return [];\n    }\n    if (!entityValue?.value) {\n      return searchItems;\n    } else {\n      return searchItems.filter(\n        (item) => item.catalogReturnObject === entityValue.value\n      );\n    }\n  }, [searchItems, entityValue]);\n\n  const getLoadedNodeObject = useCallback(\n    (\n      apiMethodId,\n      queryPayload,\n      nodeLabel,\n      catalogReturnObject,\n      treeStructureId\n    ) => {\n      const loadedNode = {\n        productId: productId,\n        inquiryTreeId: treeId,\n        userId: user.id,\n        apiMethodId: apiMethodId,\n        nodeDetails: {},\n        queryPayload: {}\n      };\n      loadedNode.nodeDetails = {\n        nodeLabel: nodeLabel,\n        catalogReturnObject: catalogReturnObject,\n        treeStructureId: treeStructureId\n      };\n      loadedNode.queryPayload = queryPayload;\n      return loadedNode;\n    },\n    [treeId, user, productId]\n  );\n\n  const setAppNavigationExpanded = useCallback(\n    (value) => {\n      if (autoCollapseNav) {\n        setNavigationExpanded(value);\n      }\n    },\n    [autoCollapseNav, setNavigationExpanded]\n  );\n\n  const loadNodes = useCallback(\n    (searchRows) => {\n      if (searchRows && Object.keys(searchRows).length) {\n        setSidebarTabValue(0);\n        setNodeLoaded(true);\n        setInSearch(false);\n        setMenuLoading(true);\n        const catalogObjectKeys = Object.keys(searchRows);\n        const promises = [];\n        const searchObjList = [];\n        const loadedNodesList = [];\n        const nodesRequestedArr = [];\n        catalogObjectKeys.forEach((key) => {\n          const searchObj = searchRows[key];\n          const currentSearchTree = searchObj?.treeStructure.find(\n            (tree) => tree?.properties?.catalogReturnObject === key\n          );\n\n          const lazyLoad = !!currentSearchTree?.properties?.lazyLoad;\n\n          const rows = searchObj.rows;\n          const searchIdentifier = searchObj.searchIdentifier;\n          const apiMethodId = searchObj.apiMethodId;\n          const associatedInquiryTree = searchObj?.associatedInquiryTree;\n\n          rows.forEach((row) => {\n            const filterElements = [];\n            const searchIdentifiers = searchIdentifier.split(',');\n            searchIdentifiers.forEach((si) => {\n              const formattedPropertyName =\n                si.charAt(0).toUpperCase() + si.slice(1);\n              filterElements.push({\n                searchField: formattedPropertyName,\n                searchValue: row[si] ?? '',\n                searchOperator: '='\n              });\n            });\n            const searchObject = getSearchObject(\n              filterElements,\n              1,\n              50,\n              !lazyLoad\n            );\n            const data = { data: searchObject };\n            promises.push(executeQueryAdHoc(data, apiMethodId));\n            nodesRequestedArr.push(nodesRequestedArr.length + 1);\n            searchObjList.push({\n              searchObject,\n              apiMethodId,\n              treeStructure: searchObj.treeStructure,\n              catalogReturnObject: key,\n              associatedInquiryTree,\n              wasLazyLoaded: lazyLoad,\n              menuTree: currentSearchTree\n            });\n          });\n        });\n        setNodesRequested(nodesRequestedArr);\n        Promise.all(promises).then((responses) => {\n          const updatedMenuList = menuList.slice();\n          responses.forEach((response, index) => {\n            if (response.status === 200) {\n              if (response?.data?.pageList?.length) {\n                const treeStructure = makeTreeStructure(\n                  searchObjList[index].treeStructure,\n                  'id',\n                  'parentId'\n                );\n                const displayTree = formatTreeMenuItem(\n                  response.data.pageList[0],\n                  treeStructure,\n                  catalogObjects,\n                  promotedEntities,\n                  searchObjList[index].associatedInquiryTree,\n                  searchObjList[index].wasLazyLoaded\n                );\n                if (\n                  displayTree &&\n                  !Array.isArray(displayTree) &&\n                  Object.keys(displayTree).length\n                ) {\n                  updatedMenuList.push(displayTree);\n                  loadedNodesList.push(\n                    getLoadedNodeObject(\n                      searchObjList[index].apiMethodId,\n                      searchObjList[index].searchObject,\n                      displayTree?.properties?.nodeLabel,\n                      searchObjList[index].catalogReturnObject,\n                      treeStructure.id\n                    )\n                  );\n                  if (index === 0) {\n                    displayTree.properties.searchValue = getSearchValueString(\n                      response.data.pageList[0],\n                      displayTree?.properties?.searchIdentifier\n                    );\n                    if (selectedNode) {\n                      const updatedNodeHistory = nodeHistory.map(\n                        (node) => node\n                      );\n                      updatedNodeHistory.push(selectedNode);\n                      setNodeHistory(updatedNodeHistory);\n                    }\n                    setActionPanels(\n                      displayTree?.properties.panels,\n                      containerId\n                    );\n                    setSelectedNode(displayTree);\n                  }\n                }\n              }\n            }\n          });\n\n          if (menuList.length) {\n            setSelectedMenuIndex(menuList.length);\n          } else {\n            setSelectedMenuIndex(0);\n          }\n          executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n\n          setAppNavigationExpanded(false);\n          setMenuList(updatedMenuList);\n          setSelectedSearchRows(null);\n          setMenuLoading(false);\n          setNodesRequested([]);\n          setSearchValue('');\n          setClearSearchStr(true);\n        });\n      }\n    },\n    [\n      menuList,\n      executeQueryAdHoc,\n      catalogObjects,\n      selectedNode,\n      nodeHistory,\n      getLoadedNodeObject,\n      executeAddRecentlyLoadedNodes,\n      promotedEntities,\n      setActionPanels,\n      setAppNavigationExpanded,\n      containerId\n    ]\n  );\n\n  const handleCloseWorkflow = useCallback(() => {\n    setWorkflowMap({\n      [containerId || 0]: {\n        inWorkflowMode: false,\n        currentWorkflowPlayId: ''\n      }\n    });\n    setHideActions(false);\n    setSelectedWorkflowNode(null);\n    setWorkflowMenuItemsList([]);\n    setInquiryWorkflowTabValue(1);\n    setGetWorkflowPlayErrorCount(0);\n    setGetWorkflowInitializedCount(0);\n    setWorkflowInitialized(false);\n    setWorkflow(null);\n  }, [setWorkflowMap, containerId, setHideActions]);\n\n  // menus prop will only be passed from actions engine\n  const handleRemoveMenuItem = useCallback(\n    (menus) => {\n      const updatedMenuList = menus ?? menuList.slice();\n      updatedMenuList.splice(selectedMenuIndex, 1);\n      setMenuList(updatedMenuList);\n      setDisableMoveToTop(true);\n      if (updatedMenuList?.length) {\n        const newSelectedNode = updatedMenuList[0];\n        setActionPanels(newSelectedNode?.properties.panels, containerId);\n        setSelectedNode(newSelectedNode);\n        setSelectedMenuIndex(0);\n      } else {\n        setActionPanels([], containerId);\n        setSelectedNode(null);\n        setSelectedMenuIndex(null);\n        setNodeLoaded(false);\n        closeAllSplitScreens();\n        handleCloseWorkflow();\n      }\n    },\n    [\n      menuList,\n      selectedMenuIndex,\n      setActionPanels,\n      closeAllSplitScreens,\n      containerId,\n      handleCloseWorkflow\n    ]\n  );\n\n  const handleRecentlyLoadedNodeClick = useCallback(\n    async (loadedNode, additionalAction = () => {}) => {\n      setNodeLoaded(true);\n      setMenuLoading(true);\n      setSidebarTabValue(0);\n      setNodesRequested([1]);\n      const data = { data: loadedNode?.queryPayload };\n      const currentTreeStructureArr = tree.treeStructure.filter(\n        (node) =>\n          loadedNode?.nodeDetails?.catalogReturnObject ===\n          node.properties.catalogReturnObject\n      );\n      const currentTree =\n        currentTreeStructureArr.find((t) => {\n          if (t?.properties?.associatedInquiryTree?.treeStructure) {\n            const foundTreeStructure =\n              t?.properties?.associatedInquiryTree?.treeStructure.find(\n                (n) => n.id === loadedNode?.nodeDetails?.treeStructureId\n              );\n            return foundTreeStructure;\n          } else {\n            return false;\n          }\n        }) || currentTreeStructureArr[0];\n      // Update request data to be eager/lazy load based on current tree config\n      if (currentTree) {\n        if (currentTree.properties?.associatedInquiryTree) {\n          const associatedTreeStructure =\n            currentTree.properties.associatedInquiryTree?.treeStructure;\n          const associatedTree = associatedTreeStructure.find(\n            (node) => node.id === loadedNode?.nodeDetails?.treeStructureId\n          );\n          data.data.eagerLoad = !associatedTree?.properties?.lazyLoad;\n        } else {\n          data.data.eagerLoad = !currentTree?.properties?.lazyLoad;\n        }\n      }\n      const apiMethodId = loadedNode?.apiMethodId;\n      const response = await executeQueryAdHoc(data, apiMethodId).catch((e) => {\n        console.error(e);\n      });\n      if (\n        response?.status === 200 &&\n        loadedNode?.nodeDetails?.catalogReturnObject\n      ) {\n        if (response?.data?.pageList?.length) {\n          const matchingNode = tree?.treeStructure?.find(\n            (node) =>\n              node.properties.catalogReturnObject ===\n              loadedNode?.nodeDetails?.catalogReturnObject\n          );\n          let nodeTreeStructure = tree?.treeStructure;\n          if (matchingNode?.properties?.associatedInquiryTree) {\n            nodeTreeStructure =\n              matchingNode?.properties?.associatedInquiryTree.treeStructure;\n          }\n          const treeStructure = makeTreeStructure(\n            nodeTreeStructure,\n            'id',\n            'parentId'\n          );\n          const displayTree = formatTreeMenuItem(\n            response.data.pageList[0],\n            treeStructure,\n            catalogObjects,\n            promotedEntities,\n            matchingNode?.properties?.associatedInquiryTree,\n            !data.data.eagerLoad\n          );\n          if (\n            displayTree &&\n            !Array.isArray(displayTree) &&\n            Object.keys(displayTree).length\n          ) {\n            displayTree.properties.searchValue = getSearchValueString(\n              response.data.pageList[0],\n              displayTree?.properties?.searchIdentifier\n            );\n\n            if (selectedNode) {\n              const updatedNodeHistory = nodeHistory.map((node) => node);\n              updatedNodeHistory.push(selectedNode);\n              setNodeHistory(updatedNodeHistory);\n            }\n            setActionPanels(displayTree?.properties.panels, containerId);\n            setSelectedNode(displayTree);\n            setAppNavigationExpanded(false);\n            setMenuList([displayTree]);\n          }\n          setSelectedMenuIndex(0);\n          setMenuLoading(false);\n          setNodesRequested([]);\n        }\n      } else {\n        // could not properly load the entity\n        setMenuLoading(false);\n        enqueueSnackbar(\n          t('inquiry.container.unableToLoadEntity', {\n            defaultValue: 'Unable to load entity'\n          }),\n          {\n            variant: 'error',\n            anchorOrigin: {\n              vertical: 'top',\n              horizontal: 'center'\n            }\n          }\n        );\n      }\n      additionalAction();\n    },\n    [\n      tree,\n      executeQueryAdHoc,\n      catalogObjects,\n      promotedEntities,\n      selectedNode,\n      setActionPanels,\n      nodeHistory,\n      enqueueSnackbar,\n      t,\n      setAppNavigationExpanded,\n      containerId\n    ]\n  );\n\n  const handleLoadNodes = useCallback(() => {\n    loadNodes(selectedSearchRows);\n  }, [selectedSearchRows, loadNodes]);\n\n  const handleSingleNodeLoad = useCallback(\n    (searchRow) => {\n      loadNodes(searchRow);\n    },\n    [loadNodes]\n  );\n\n  const handleRowDoubleClick = useCallback(\n    (rowData, catalogReturnObject) => {\n      const node = {};\n      const searchItem = searchItems.find(\n        (item) => item.catalogReturnObject === catalogReturnObject\n      );\n      const identifiers =\n        getSearchIdentifiers(catalogObjects, searchItem.catalogReturnObject) ||\n        [];\n\n      node[searchItem.catalogReturnObject] = {\n        rows: [rowData],\n        apiMethodId: searchItem.apiMethodId,\n        searchIdentifier: identifiers.toString(),\n        treeStructure: searchItem.treeStructure\n      };\n      loadNodes(node);\n    },\n    [loadNodes, searchItems, catalogObjects]\n  );\n\n  const clearNodes = useCallback(() => {\n    setNodeLoaded(false);\n    setMenuList([]);\n    setActionPanels([], containerId);\n    setSelectedNode(null);\n    setSelectedMenuIndex(null);\n    setNodeHistory([]);\n    setTabValue(0);\n    setSelectedPageId(null);\n    setPageId(null);\n    setHeaderTitle('');\n    setNodesRequested([]);\n    closeAllSplitScreens();\n    handleCloseWorkflow();\n  }, [\n    setActionPanels,\n    setPageId,\n    closeAllSplitScreens,\n    containerId,\n    handleCloseWorkflow\n  ]);\n\n  const handlePrimaryAction = useCallback(() => {\n    handleLoadNodes();\n  }, [handleLoadNodes]);\n\n  const handleSearch = useCallback((event) => {\n    if (event.key === 'Enter') {\n      setSearchValue(event.target.value);\n      setIsAdvancedSearch(false);\n      setInSearch(true);\n    }\n  }, []);\n\n  const clearSearch = useCallback(() => {\n    setInSearch(false);\n    if (menuList.length > 0) {\n      setShowToggle2(true);\n    }\n    setSearchValue('');\n    setClearSearchStr(true);\n    setSelectedSearchRows(null);\n  }, [menuList]);\n\n  const handleSelectedSearchRows = useCallback(\n    (\n      objectName,\n      rows,\n      searchIdentifier,\n      apiMethodId,\n      treeStructure,\n      associatedInquiryTree\n    ) => {\n      let searchRows = cloneDeep(selectedSearchRows);\n      if (!searchRows) {\n        searchRows = {};\n      }\n      searchRows[objectName] = {\n        rows,\n        searchIdentifier,\n        apiMethodId,\n        treeStructure,\n        associatedInquiryTree\n      };\n      setSelectedSearchRows(searchRows);\n    },\n    [selectedSearchRows]\n  );\n\n  const handleSelectedNode = useCallback(\n    (newSelectedNode, menuIndex) => {\n      setSelectedMenuIndex(menuIndex);\n      setInSearch(false);\n      if (newSelectedNode.properties.associatedTreeId) {\n        setDisableMoveToTop(false);\n      } else {\n        setDisableMoveToTop(true);\n      }\n      if (selectedNode) {\n        const updatedNodeHistory = nodeHistory?.map((node) => node) || [];\n        updatedNodeHistory.push(selectedNode);\n        setNodeHistory(updatedNodeHistory);\n      }\n      setActionPanels(newSelectedNode?.properties.panels, containerId);\n      setSelectedNode(newSelectedNode);\n    },\n    [selectedNode, setActionPanels, nodeHistory, containerId]\n  );\n\n  const constructMenuItemForDroppedNode = useCallback(\n    (\n      loadPageNodeActions,\n      targetNodeObj,\n      sourceNodeObj,\n      targetNodeEntityName,\n      sourceNodeEntityName\n    ) => {\n      const menuItem = {\n        children: [],\n        id: uuid(),\n        isExpanded: true,\n        parentId: null,\n        properties: {\n          nodeLabel: '',\n          tabs: [],\n          searchValue: '',\n          nodeSubLabel: null,\n          defaultPageHeaderExpanded: 'hidden',\n          defaultNodeHeaderExpanded: 'hidden',\n          defaultIcon: {\n            color: null,\n            name: 'BranchCompareIcon',\n            type: null\n          },\n          nodeActions: loadPageNodeActions,\n          isDroppedLoadedPageNode: true,\n          existingPageLoadEntities: [sourceNodeEntityName]\n        },\n        inquiryParams: [targetNodeObj, sourceNodeObj],\n        // TODO: allow for use of targetNodeObj and sourceNodeObj for when config in Inquiry is added\n        nodeObj: targetNodeObj\n      };\n      if (loadPageNodeActions?.length) {\n        loadPageNodeActions.forEach((nodeAction) => {\n          if (nodeAction?.dragEntityName === sourceNodeEntityName) {\n            const tabObj = {\n              id: uuid(),\n              page: nodeAction.page,\n              inquiryTreeRuleId: nodeAction.inquiryTreeRuleId || '',\n              jsonLogic: nodeAction.jsonLogic || null,\n              propertyIsCustomMapping: nodeAction.propertyIsCustomMapping || '',\n              propertyMapping: nodeAction.propertyMapping || '',\n              sequence: nodeAction.sequence || '1',\n              requiredFieldMapping:\n                nodeAction.parameters?.requiredFieldMapping || null\n            };\n            menuItem.properties.tabs.push(tabObj);\n          }\n        });\n      }\n      let nodeLabel = 'DnD Nodes';\n      if (targetNodeEntityName === sourceNodeEntityName) {\n        nodeLabel = pluralize(getSanitizedName(targetNodeEntityName));\n      } else {\n        nodeLabel = `${getSanitizedName(\n          targetNodeEntityName\n        )}/${getSanitizedName(sourceNodeEntityName)}`;\n      }\n      menuItem.properties.nodeLabel = nodeLabel;\n      return menuItem;\n    },\n    []\n  );\n\n  const loadPageForDroppedNode = useCallback(\n    (\n      sourceNode,\n      targetNode,\n      loadPageNodeActions,\n      targetNodeCatalogReturnObject,\n      sourceNodeCatalogReturnObject\n    ) => {\n      // If the first drop has not occurred yet for a loaded page\n      if (!targetNode?.properties?.isDroppedLoadedPageNode) {\n        if (loadPageNodeActions.length) {\n          setMoveToTopLoading(true);\n          const orderedLoadPageNodeActions =\n            orderBySequence(loadPageNodeActions);\n          const pageMenuItem = constructMenuItemForDroppedNode(\n            orderedLoadPageNodeActions,\n            targetNode?.nodeObj,\n            sourceNode?.nodeObj,\n            targetNodeCatalogReturnObject,\n            sourceNodeCatalogReturnObject\n          );\n          const updatedMenuList = cloneDeep(menuList);\n          updatedMenuList.unshift(pageMenuItem);\n          setActionPanels(updatedMenuList[0]?.properties.panels, containerId);\n          setSelectedNode(updatedMenuList[0]);\n          setMenuList(updatedMenuList);\n          setMoveToTopLoading(false);\n        }\n      } else if (targetNode?.properties?.isDroppedLoadedPageNode) {\n        setMoveToTopLoading(true);\n        const updatedMenuList = cloneDeep(menuList);\n        const targetMenuItem = updatedMenuList.find(\n          (item) => item.id === targetNode.id\n        );\n        if (targetMenuItem) {\n          const nodeLabel = targetMenuItem.properties?.nodeLabel;\n          if (!nodeLabel.includes(sourceNodeCatalogReturnObject)) {\n            targetMenuItem.properties.nodeLabel = `${nodeLabel}/${getSanitizedName(\n              sourceNodeCatalogReturnObject\n            )}`;\n          }\n          targetMenuItem.inquiryParams.push(sourceNode?.nodeObj);\n          if (\n            !targetNode?.properties?.existingPageLoadEntities?.includes(\n              sourceNodeCatalogReturnObject\n            ) &&\n            loadPageNodeActions?.length\n          ) {\n            targetMenuItem.properties.existingPageLoadEntities.push(\n              sourceNodeCatalogReturnObject\n            );\n            loadPageNodeActions.forEach((nodeAction) => {\n              if (\n                nodeAction?.dragEntityName === sourceNodeCatalogReturnObject\n              ) {\n                const tabObj = {\n                  id: uuid(),\n                  page: nodeAction.page,\n                  inquiryTreeRuleId: nodeAction.inquiryTreeRuleId || '',\n                  jsonLogic: nodeAction.jsonLogic || null,\n                  propertyIsCustomMapping:\n                    nodeAction.propertyIsCustomMapping || '',\n                  propertyMapping: nodeAction.propertyMapping || '',\n                  sequence: nodeAction.sequence || '1',\n                  requiredFieldMapping:\n                    nodeAction.parameters?.requiredFieldMapping || null\n                };\n                targetMenuItem.properties.tabs.push(tabObj);\n              }\n            });\n          }\n          setActionPanels(targetMenuItem?.properties.panels, containerId);\n          setSelectedNode(targetMenuItem);\n        }\n        setMenuList(updatedMenuList);\n        setMoveToTopLoading(false);\n      }\n    },\n    [constructMenuItemForDroppedNode, menuList, setActionPanels, containerId]\n  );\n\n  const handleDroppedNodeForExecuteApi = useCallback(\n    async (\n      sourceNode,\n      targetNode,\n      executeApiNodeActions,\n      sourceNodeType,\n      targetNodeType,\n      sourceNodeMenuIndex,\n      targetNodeMenuIndex\n    ) => {\n      setDragAndDropLoading(true);\n      const apiMethodIds = executeApiNodeActions.map(\n        (eana) => eana.actionValue\n      );\n      const promotedMethods = await apiMutate(\n        ConfigService.integrationV2ApiUrl,\n        `apiMethod/listByApiCatalogIdAndIds/${apiCatalogId}`,\n        { method: 'post' },\n        { data: apiMethodIds }\n      );\n      setDragAndDropLoading(false);\n      const pmte = promotedMethods?.data ?? [];\n      setExecuteApiData({\n        source: sourceNode?.nodeObj,\n        target: targetNode?.nodeObj,\n        sourceNodeType,\n        targetNodeType,\n        sourceNodeMenuIndex,\n        targetNodeMenuIndex\n      });\n      setPromotedMethodsToExecute(pmte);\n      setExecuteApiDialogOpen(true);\n    },\n    [apiCatalogId]\n  );\n\n  const handleCloseExecuteApiDialog = useCallback(() => {\n    setExecuteApiData(null);\n    setPromotedMethodsToExecute([]);\n    setExecuteApiDialogOpen(false);\n  }, []);\n\n  const handleMenuTreesRefresh = useCallback(\n    async (menuIndexes) => {\n      if (!menuList.length) {\n        return;\n      }\n      const updatedMenuList = menuList.slice();\n      const promises = [];\n      let apiMethodId = tree.apiMethodInstance.apiMethodId;\n      let workingTree = tree;\n      let assocInquiryTreeMap = {};\n      let searchObjList = [];\n      if (!menuIndexes?.length) {\n        menuIndexes = [selectedMenuIndex];\n      }\n      menuIndexes.forEach((index) => {\n        const menuTree = menuList[index];\n        if (menuTree) {\n          const { properties, associatedInquiryTree } = menuTree;\n          const { filterElements } = properties;\n\n          if (associatedInquiryTree) {\n            apiMethodId = associatedInquiryTree.apiMethodInstance.apiMethodId;\n            workingTree = associatedInquiryTree;\n            assocInquiryTreeMap[index] = associatedInquiryTree;\n          }\n          const lazyLoad = !!workingTree?.properties?.lazyLoad;\n\n          const searchObject = getSearchObject(\n            filterElements,\n            1,\n            50,\n            !lazyLoad\n          );\n          const data = { data: searchObject };\n          promises.push(executeQueryAdHoc(data, apiMethodId));\n          searchObjList.push({\n            wasLazyLoaded: lazyLoad\n          });\n        }\n      });\n\n      await Promise.all(promises.map((p) => p.catch((e) => e))).then(\n        (responses) => {\n          responses.forEach((response, index) => {\n            if (response.status === 200) {\n              if (response?.data?.pageList?.length) {\n                const treeStructure = makeTreeStructure(\n                  workingTree.treeStructure,\n                  'id',\n                  'parentId'\n                );\n                const displayTree = formatTreeMenuItem(\n                  response.data.pageList[0],\n                  treeStructure,\n                  catalogObjects,\n                  promotedEntities,\n                  assocInquiryTreeMap[index],\n                  searchObjList[index].wasLazyLoaded\n                );\n\n                updatedMenuList[menuIndexes[index]] = displayTree;\n              }\n            }\n          });\n        }\n      );\n      const currentSelectedTree = updatedMenuList[selectedMenuIndex];\n      const selectedNodeSearchIdentifier =\n        selectedNode.properties.searchIdentifier || [];\n      setMenuList(updatedMenuList);\n      if (selectedNodeSearchIdentifier) {\n        const matchingNode = findNodeByBusinessObjectKey(\n          currentSelectedTree,\n          selectedNode.nodeObj?.businessObjectKey\n        )?.node;\n        setActionPanels(matchingNode?.properties.panels, containerId);\n        setSelectedNode(matchingNode);\n      } else {\n        setSelectedNode(selectedNode);\n      }\n    },\n    [\n      menuList,\n      tree,\n      selectedMenuIndex,\n      catalogObjects,\n      executeQueryAdHoc,\n      selectedNode,\n      promotedEntities,\n      setActionPanels,\n      containerId\n    ]\n  );\n\n  const expandedStateRef = useRef({});\n\n  const handleExpandedChange = useCallback((menuIndex, stateMap) => {\n    expandedStateRef.current[menuIndex] = stateMap;\n  }, []);\n\n  const restoreExpandedState = useCallback((node, stateMap) => {\n    if (!node) return;\n    const getStableKey = (n) =>\n      n.isGroupNode ? n.properties?.label : n.nodeObj?.businessObjectKey;\n    const walk = (n) => {\n      const key = getStableKey(n);\n      if (key && stateMap.has(key)) {\n        n.isExpanded = stateMap.get(key);\n      }\n      n.children?.forEach(walk);\n    };\n    if (Array.isArray(node)) {\n      node.forEach(walk);\n    } else {\n      walk(node);\n    }\n  }, []);\n\n  const treeNodeIds = useMemo(() => {\n    if (!selectedTree) return null;\n\n    const idMap = {};\n    const stack = [selectedTree];\n\n    while (stack.length) {\n      const node = stack.pop();\n      idMap[node.id] = node;\n\n      node.children?.forEach((child) => stack.push(child));\n    }\n\n    return idMap;\n  }, [selectedTree]);\n\n  const getCriticalPath = useCallback(\n    (selectedTreeNode) => {\n      if (!selectedTreeNode) return [];\n\n      const path = [];\n      let node = selectedTreeNode;\n      const treeNodes = treeNodeIds;\n      path.push(node);\n\n      while (node.parentId) {\n        node = treeNodes[node.parentId];\n        path.push(node);\n      }\n\n      return path;\n    },\n    [treeNodeIds]\n  );\n\n  const hasLazyLevelInStructure = useMemo(() => {\n    return (\n      tree?.treeStructure?.some((level) => level.properties?.lazyLoad) ?? false\n    );\n  }, [tree?.treeStructure]);\n\n  // For eager loaded trees only (no mixes with lazy loaded nodes)\n  const fetchAndBuildDisplayTree = useCallback(async () => {\n    if (!tree || !selectedTree) return null;\n\n    const lazyLoad = tree.properties?.lazyLoad ?? false;\n    const filterElements = selectedTree.properties?.filterElements;\n    const associatedInquiryTree = selectedTree.associatedInquiryTree;\n    const workingTree = selectedTree.associatedInquiryTree ?? tree;\n\n    if (!workingTree.apiMethodInstance) return null;\n    const apiMethodId = workingTree.apiMethodInstance.apiMethodId;\n\n    // The folowing is a problem for child nodes with over 50 entries\n    // given you want to eager load them all or guarantee a specific node\n    const page = 1;\n    const pageSize = 50; // Arbitrary\n    const searchObject = getSearchObject(\n      filterElements,\n      page,\n      pageSize,\n      !lazyLoad\n    );\n    const data = { data: searchObject };\n\n    const isPreloadedGroupQuery =\n      tree?.isPreloaded &&\n      tree?.apiMethodInstance?.apiMethodInstanceId &&\n      selectedTree.isGroupNode;\n\n    const response = isPreloadedGroupQuery\n      ? await executeQueryInstance(\n          { data: {} },\n          tree.apiMethodInstance.apiMethodInstanceId\n        )\n      : await executeQueryAdHoc(data, apiMethodId);\n\n    if (response?.status !== 200 || !response?.data?.pageList?.length) {\n      return null;\n    }\n\n    const treeStructure = makeTreeStructure(\n      workingTree.treeStructure,\n      'id',\n      'parentId'\n    );\n\n    let responseObj = response.data.pageList[0];\n\n    if (selectedTree.isGroupNode) {\n      responseObj = response.data.pageList;\n    }\n\n    return formatTreeMenuItem(\n      responseObj,\n      treeStructure,\n      catalogObjects,\n      promotedEntities,\n      associatedInquiryTree,\n      lazyLoad\n    );\n  }, [catalogObjects, executeQueryAdHoc, promotedEntities, selectedTree, tree]);\n\n  const fetchAndMergeLazyNode = useCallback(\n    async (currentNode, workingTree, context) => {\n      let {\n        currentCriticalPathNode,\n        criticalPathBroken,\n        survivingAncestor,\n        criticalPathList\n      } = context;\n\n      const keysByType = collectChildVaryingKeysByType(\n        currentNode,\n        catalogObjects\n      );\n      const inclusionFilter = keysByTypeToFilterArray(keysByType);\n\n      const [res, totalsByType] = await Promise.all([\n        fetchLazyChildren({\n          node: currentNode,\n          treeStructureArr: workingTree?.treeStructure || [],\n          executeQueryAdHoc,\n          catalogObjects,\n          promotedEntities,\n          pageNumber: 1,\n          inclusionFilter\n        }),\n        fetchCountsByType(currentNode, executeQueryAdHoc)\n      ]);\n\n      const currentBok = currentNode.nodeObj?.businessObjectKey;\n      const criticalPathNodeBok =\n        currentCriticalPathNode?.nodeObj?.businessObjectKey;\n      const isCriticalPathNode = currentBok === criticalPathNodeBok;\n\n      if (\n        !criticalPathBroken &&\n        isCriticalPathNode &&\n        criticalPathList.length\n      ) {\n        currentCriticalPathNode = criticalPathList.pop();\n\n        const nextAncestorBok =\n          currentCriticalPathNode?.nodeObj?.businessObjectKey;\n        const present = res.children.some(\n          (c) => c.nodeObj?.businessObjectKey === nextAncestorBok\n        );\n        if (nextAncestorBok && !present) {\n          criticalPathBroken = true;\n          survivingAncestor = currentNode;\n        }\n      }\n\n      const existingChildrenMap = new Map();\n      (currentNode.children || []).forEach((oldChild) => {\n        if (oldChild?.isGroupNode) return;\n        const type = oldChild.properties?.catalogReturnObject;\n        const bok = oldChild.nodeObj?.businessObjectKey;\n        if (type && bok) {\n          existingChildrenMap.set(`${type}_${bok}`, oldChild);\n        }\n      });\n\n      const mergedChildren = [];\n      res.children.forEach((freshChild) => {\n        const type = freshChild.properties?.catalogReturnObject;\n        const bok = freshChild.nodeObj?.businessObjectKey;\n        if (!type || !bok) return;\n\n        const existingChild = existingChildrenMap.get(`${type}_${bok}`);\n        if (existingChild) {\n          existingChild.nodeObj = freshChild.nodeObj;\n          existingChild.properties = freshChild.properties;\n          mergedChildren.push(existingChild);\n        } else {\n          mergedChildren.push(freshChild);\n        }\n      });\n\n      const groupNodes = (currentNode.children || []).filter(\n        (c) => c?.isGroupNode\n      );\n      currentNode.children = [...groupNodes, ...mergedChildren];\n\n      const localPhysicalCounts = {};\n      currentNode.children.forEach((c) => {\n        if (c?.isGroupNode) return;\n        const type = c.properties?.catalogReturnObject;\n        if (type) {\n          localPhysicalCounts[type] = (localPhysicalCounts[type] || 0) + 1;\n        }\n      });\n\n      const hasMore = Object.entries(totalsByType).some(\n        ([type, total]) => total > (localPhysicalCounts[type] || 0)\n      );\n\n      const freshSeenByType = collectChildVaryingKeysByType(\n        currentNode,\n        catalogObjects\n      );\n\n      currentNode.completedLoadingChildren = true;\n      currentNode.hasMoreChildren = hasMore;\n      currentNode.seenChildKeysByType = freshSeenByType;\n      currentNode.totalsByType = totalsByType;\n      currentNode.isExpanded = true;\n\n      if (res.errorRetrievingChildren) {\n        currentNode.errorRetrievingChildren = true;\n      }\n\n      return {\n        currentCriticalPathNode,\n        criticalPathBroken,\n        survivingAncestor,\n        criticalPathList\n      };\n    },\n    [catalogObjects, executeQueryAdHoc, promotedEntities]\n  );\n\n  const doesRootExist = useCallback(\n    async (displayTree, workingTree, isPreloadedRoot) => {\n      const rootEntityType = displayTree?.properties?.catalogReturnObject;\n      const rootApiMethodId = workingTree?.apiMethodInstance?.apiMethodId;\n\n      if (\n        displayTree?.isGroupNode ||\n        !rootEntityType ||\n        !rootApiMethodId ||\n        isPreloadedRoot\n      ) {\n        return true;\n      }\n\n      const rootPkFields = getSearchIdentifiers(catalogObjects, rootEntityType);\n      const rootPk = rootPkFields?.[0];\n      const rootPkValue = rootPk ? displayTree?.nodeObj?.[rootPk] : null;\n\n      if (!rootPk || rootPkValue == null) {\n        return true;\n      }\n\n      const pkSearchField = rootPk.charAt(0).toUpperCase() + rootPk.slice(1);\n      const rootCheckResponse = await executeQueryAdHoc(\n        {\n          data: getSearchObject(\n            [\n              {\n                searchField: pkSearchField,\n                searchValue: rootPkValue,\n                searchOperator: '='\n              }\n            ],\n            1,\n            1\n          )\n        },\n        rootApiMethodId\n      ).catch(() => null);\n\n      return !!rootCheckResponse?.data?.pageList?.length;\n    },\n    [catalogObjects, executeQueryAdHoc]\n  );\n\n  const buildLazyDisplayTree = useCallback(async () => {\n    const expandedKeys =\n      expandedStateRef.current[selectedMenuIndex] ?? new Map();\n    const displayTree = cloneDeep(selectedTree);\n    const workingTree = selectedTree.associatedInquiryTree ?? tree;\n\n    const isPreloadedRoot = !!tree?.isPreloaded;\n    const rootExists = await doesRootExist(\n      displayTree,\n      workingTree,\n      isPreloadedRoot\n    );\n\n    if (!rootExists) {\n      return { displayTree: null, survivingAncestor: null, rootDeleted: true };\n    }\n\n    const criticalPathList = getCriticalPath(selectedNode);\n    const queue = Array.isArray(displayTree) ? [...displayTree] : [displayTree];\n\n    let pathContext = {\n      currentCriticalPathNode: criticalPathList.pop(),\n      criticalPathBroken: false,\n      survivingAncestor: null,\n      criticalPathList\n    };\n\n    while (queue.length) {\n      const currentNode = queue.shift();\n      if (!currentNode) continue;\n\n      const key = getKeyIdentifier(currentNode);\n      const wasExpanded = key && expandedKeys.get(key);\n\n      if (wasExpanded && currentNode.properties?.lazyLoad) {\n        pathContext = await fetchAndMergeLazyNode(\n          currentNode,\n          workingTree,\n          pathContext\n        );\n      }\n\n      currentNode.children?.forEach((child) => queue.push(child));\n    }\n\n    return {\n      displayTree,\n      survivingAncestor: pathContext.survivingAncestor,\n      rootDeleted: false,\n      criticalPathNode: pathContext.criticalPathNode\n    };\n  }, [\n    doesRootExist,\n    fetchAndMergeLazyNode,\n    getCriticalPath,\n    selectedMenuIndex,\n    selectedNode,\n    selectedTree,\n    tree\n  ]);\n\n  const handleMenuTreesRefreshFromPage = useCallback(\n    async (updateAllPreloadedTreesOrMutationInfo = false) => {\n      // To ensure that the passed in variable is a boolean\n      const updateAllPreloadedTrees =\n        updateAllPreloadedTreesOrMutationInfo === true;\n\n      if (!selectedNode || !selectedTree) {\n        return;\n      }\n\n      setRefreshing(true);\n\n      const { associatedInquiryTree } = selectedTree;\n\n      let selectedNodeIndex = -1;\n      const workingTree = associatedInquiryTree ?? tree;\n\n      // selectedTree is always the top node of the tree that the current selectedNode is on\n      const expandedKeys =\n        expandedStateRef.current[selectedMenuIndex] ?? new Map();\n\n      if (selectedTree.children.length > 0) {\n        selectedNodeIndex = selectedTree.children.indexOf(selectedNode);\n      }\n\n      let displayTree = null;\n      let survivingAncestor = null;\n      let rootDeleted = false;\n      let criticalPathNode = null;\n\n      if (!hasLazyLevelInStructure) {\n        displayTree = await fetchAndBuildDisplayTree();\n      } else {\n        const res = await buildLazyDisplayTree();\n        displayTree = res.displayTree;\n        survivingAncestor = res.survivingAncestor;\n        rootDeleted = res.rootDeleted;\n        criticalPathNode = res.criticalPathNode;\n      }\n\n      // Root entity gone — drop this tree from menuList, clear selection,\n      // skip the rest of the refresh flow.\n      if (rootDeleted) {\n        setMenuList((prevState) => {\n          const updated = prevState.slice();\n          updated.splice(selectedMenuIndex, 1);\n          return updated;\n        });\n        setSelectedNode(null);\n        setActionPanels([], containerId);\n        setRefreshing(false);\n        return;\n      }\n\n      restoreExpandedState(displayTree, expandedKeys);\n\n      if (selectedTree.isGroupNode && selectedTree.children.length > 0) {\n        displayTree.forEach((childNode) => {\n          childNode.parentGroupId = selectedTree.id;\n          childNode.parentId = selectedTree.id;\n          childNode.parentGroupName = selectedTree.properties.label;\n        });\n      }\n\n      const currentSelectedTree = displayTree;\n      const selectedNodeSearchIdentifier =\n        selectedNode.properties.searchIdentifier || '';\n\n      setMenuList((prevState) => {\n        const updatedMenuList = prevState.slice();\n        if (updateAllPreloadedTrees && workingTree?.isPreloaded) {\n          updatedMenuList.forEach((menuItem) => {\n            const newGroupId = uuid();\n            menuItem.id = newGroupId;\n            menuItem.children?.forEach((childNode) => {\n              childNode.parentGroupId = newGroupId;\n              childNode.parentId = newGroupId;\n            });\n          });\n        }\n        if (selectedTree.isGroupNode) {\n          if (selectedTree.children.length > 0 && Array.isArray(displayTree)) {\n            updatedMenuList[selectedMenuIndex].children = displayTree;\n          }\n          if (!updateAllPreloadedTrees) {\n            const newGroupId = uuid();\n            updatedMenuList[selectedMenuIndex].id = newGroupId;\n            updatedMenuList[selectedMenuIndex]?.children?.forEach(\n              (childNode) => {\n                childNode.parentGroupId = newGroupId;\n                childNode.parentId = newGroupId;\n              }\n            );\n          }\n        } else if (!selectedTree.isGroupNode) {\n          updatedMenuList[selectedMenuIndex] = displayTree;\n        }\n        return updatedMenuList;\n      });\n\n      // If the current selected node (or an ancestor on its critical path)\n      // was deleted, propagate selection up to the surviving ancestor.\n      if (survivingAncestor) {\n        setSelectedNode(survivingAncestor);\n        setActionPanels(survivingAncestor.properties?.panels, containerId);\n      } else if (criticalPathNode) {\n        setSelectedNode(criticalPathNode);\n      } else if (selectedNodeSearchIdentifier) {\n        let tree = currentSelectedTree;\n        if (selectedTree.isGroupNode && selectedNodeIndex >= 0) {\n          tree = currentSelectedTree[selectedNodeIndex];\n        }\n        const matchingNode = findNodeByBusinessObjectKey(\n          tree,\n          selectedNode.nodeObj?.businessObjectKey\n        )?.node;\n        setActionPanels(matchingNode?.properties.panels, containerId);\n        setSelectedNode(matchingNode);\n      } else if (selectedTree.isGroupNode && selectedNodeIndex >= 0) {\n        setSelectedNode(displayTree[selectedNodeIndex]);\n      } else {\n        setSelectedNode(selectedNode);\n      }\n\n      setRefreshing(false);\n    },\n    [\n      selectedNode,\n      selectedTree,\n      tree,\n      selectedMenuIndex,\n      hasLazyLevelInStructure,\n      restoreExpandedState,\n      fetchAndBuildDisplayTree,\n      buildLazyDisplayTree,\n      setActionPanels,\n      containerId\n    ]\n  );\n\n  const executeApiForDroppedNode = useCallback(\n    async (value) => {\n      setExecuteApiProgress(true);\n      const { sourceNodeMenuIndex, targetNodeMenuIndex, ...apiData } =\n        executeApiData;\n      const response = await executeQueryWithParameters(\n        { data: { requestBody: { ...apiData } } },\n        value?.apiMethod?.apiMethodId\n      ).catch((res) => {\n        console.error(res);\n      });\n      if (response?.status === 200) {\n        const menuIndexes = [sourceNodeMenuIndex];\n        // if the menu indexes for the nodes are the same we only need to refresh 1 tree\n        if (sourceNodeMenuIndex !== targetNodeMenuIndex) {\n          menuIndexes.push(targetNodeMenuIndex);\n        }\n        handleMenuTreesRefresh(menuIndexes);\n      }\n      setExecuteApiProgress(false);\n      handleCloseExecuteApiDialog();\n    },\n    [\n      executeQueryWithParameters,\n      handleCloseExecuteApiDialog,\n      executeApiData,\n      handleMenuTreesRefresh\n    ]\n  );\n\n  const handleDroppedNode = useCallback(\n    (sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {\n      const sourceNodeCatalogReturnObject =\n        sourceNode?.properties?.catalogReturnObject;\n      const targetNodeCatalogReturnObject =\n        targetNode?.properties?.catalogReturnObject;\n      const targetNodeActions = targetNode?.properties?.nodeActions || [];\n      const loadPageNodeActions = targetNodeActions.filter(\n        (nodeAction) =>\n          nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n          nodeAction.actionTypeId === NodeActionEnums.Load_Inquiry_Page\n      );\n      // TODO: Implement query node actions\n      const executeApiNodeActions = targetNodeActions.filter(\n        (nodeAction) =>\n          nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n          nodeAction.actionTypeId === NodeActionEnums.Execute_Api &&\n          sourceNodeCatalogReturnObject === nodeAction?.dragEntityName\n      );\n      // TODO: Implement workflow node actions\n      const workflowNodeActions = targetNodeActions.filter(\n        (nodeAction) =>\n          nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n          nodeAction.actionTypeId === NodeActionEnums.Start_Workflow &&\n          sourceNodeCatalogReturnObject === nodeAction?.dragEntityName\n      );\n      if (\n        targetNodeActions.some(\n          (tna) =>\n            tna.dragEntityName === sourceNodeCatalogReturnObject &&\n            tna.actionTypeId === NodeActionEnums.Execute_Api\n        )\n      ) {\n        handleDroppedNodeForExecuteApi(\n          sourceNode,\n          targetNode,\n          executeApiNodeActions,\n          sourceNodeCatalogReturnObject,\n          targetNodeCatalogReturnObject,\n          sourceNodeMenuIndex,\n          targetNodeMenuIndex\n        );\n      }\n      if (\n        targetNodeActions.some(\n          (tna) =>\n            tna.dragEntityName === sourceNodeCatalogReturnObject &&\n            tna.actionTypeId === NodeActionEnums.Load_Inquiry_Page\n        )\n      ) {\n        loadPageForDroppedNode(\n          sourceNode,\n          targetNode,\n          loadPageNodeActions,\n          targetNodeCatalogReturnObject,\n          sourceNodeCatalogReturnObject\n        );\n      }\n    },\n    [loadPageForDroppedNode, handleDroppedNodeForExecuteApi]\n  );\n\n  const handleMoveToTop = useCallback(async () => {\n    if (!selectedNode) {\n      return;\n    }\n\n    const associatedTreeId = selectedNode.properties.associatedTreeId;\n\n    if (!associatedTreeId) return;\n    setMenuLoading(true);\n    setMoveToTopLoading(true);\n    let associatedInquiryTree = selectedNode.properties.associatedInquiryTree;\n    if (!associatedInquiryTree) {\n      const detailedTreeResponse =\n        await executeGetDetailedTree(associatedTreeId);\n      if (detailedTreeResponse.status === 200) {\n        associatedInquiryTree = detailedTreeResponse.data;\n      }\n    }\n    const lazyLoad = !!associatedInquiryTree?.properties?.lazyLoad;\n    const filterElements = selectedNode.properties.filterElements;\n    const apiMethodId = associatedInquiryTree.apiMethodInstance.apiMethodId;\n\n    const searchObject = getSearchObject(filterElements, 1, 50, !lazyLoad);\n    const data = { data: searchObject };\n    const loadedNodesList = [];\n    const response = await executeQueryAdHoc(data, apiMethodId).catch((res) => {\n      enqueueSnackbar(\n        t('inquiry.container.unableToMoveToTop', {\n          defaultValue: 'Unable to move to top: {{error}}',\n          error: res?.response?.data\n        }),\n        {\n          variant: 'error',\n          anchorOrigin: {\n            vertical: 'top',\n            horizontal: 'center'\n          }\n        }\n      );\n    });\n    if (response?.status === 200) {\n      if (response?.data?.pageList?.length) {\n        const updatedMenuList = menuList.slice();\n        const treeStructure = makeTreeStructure(\n          associatedInquiryTree.treeStructure,\n          'id',\n          'parentId'\n        );\n        const displayTree = formatTreeMenuItem(\n          response.data.pageList[0],\n          treeStructure,\n          catalogObjects,\n          promotedEntities,\n          associatedInquiryTree,\n          lazyLoad\n        );\n        loadedNodesList.push(\n          getLoadedNodeObject(\n            apiMethodId,\n            searchObject,\n            displayTree?.properties?.nodeLabel,\n            displayTree?.properties?.catalogReturnObject,\n            treeStructure.id\n          )\n        );\n        if (\n          displayTree &&\n          !Array.isArray(displayTree) &&\n          Object.keys(displayTree).length\n        ) {\n          displayTree.properties.searchValue = getSearchValueString(\n            response.data.pageList[0],\n            displayTree?.properties?.searchIdentifier\n          );\n\n          if (selectedNode) {\n            const updatedNodeHistory = nodeHistory.map((node) => node);\n            updatedNodeHistory.push(selectedNode);\n            setNodeHistory(updatedNodeHistory);\n          }\n          setActionPanels(displayTree?.properties.panels, containerId);\n          setSelectedNode(displayTree);\n          // Force the tab page to remount so it refetches, since the\n          // reloaded root has the same searchValue as the moved node\n          setMoveToTopCount((count) => count + 1);\n          executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n          updatedMenuList[selectedMenuIndex] = displayTree;\n          setMenuList(updatedMenuList);\n        }\n        setDisableMoveToTop(true);\n      }\n    }\n    setMenuLoading(false);\n    setMoveToTopLoading(false);\n  }, [\n    selectedNode,\n    executeQueryAdHoc,\n    executeGetDetailedTree,\n    menuList,\n    catalogObjects,\n    promotedEntities,\n    getLoadedNodeObject,\n    setActionPanels,\n    executeAddRecentlyLoadedNodes,\n    selectedMenuIndex,\n    nodeHistory,\n    containerId,\n    enqueueSnackbar,\n    t\n  ]);\n\n  // Expand All: expands only cached (already-fetched) nodes.\n  // Exception: if a root node's children haven't been fetched yet, fetch them (one level only).\n  const handleExpandAll = useCallback(async () => {\n    const treeStructureArr = tree?.treeStructure || [];\n    const currentMenuList = cloneDeep(menuList);\n\n    for (const rootTree of currentMenuList) {\n      // Fetch root's immediate children if they haven't been loaded yet\n      if (\n        rootTree.properties?.lazyLoad &&\n        !rootTree.completedLoadingChildren &&\n        rootTree.lazyLoadChildrenArr?.length\n      ) {\n        rootTree.children = [];\n        const promises = rootTree.lazyLoadChildrenArr.map((searchMethod) =>\n          executeQueryAdHoc(\n            { data: searchMethod.data },\n            searchMethod.apiMethodId\n          ).catch(() => null)\n        );\n        const responses = await Promise.all(promises);\n        responses.forEach((response, index) => {\n          const searchMethod = rootTree.lazyLoadChildrenArr[index];\n          if (response?.status === 200 && response?.data?.pageList?.length) {\n            const childTree = treeStructureArr.find(\n              (ts) =>\n                ts.properties.catalogReturnObject ===\n                searchMethod.catalogReturnObject\n            );\n            if (childTree) {\n              response.data.pageList.forEach((item) => {\n                const displayTree = formatTreeMenuItem(\n                  item,\n                  childTree,\n                  catalogObjects,\n                  promotedEntities,\n                  null,\n                  true\n                );\n                displayTree.parentId = rootTree.id;\n                rootTree.children.push(displayTree);\n              });\n            }\n          }\n        });\n        rootTree.completedLoadingChildren = true;\n        rootTree.currentChildPage = 1;\n        rootTree.hasMoreChildren = responses.some((response, index) => {\n          const pageSize = rootTree.lazyLoadChildrenArr[index]?.pageSize || 50;\n          return response?.data?.total > pageSize;\n        });\n      }\n      expandAllNodes(rootTree, true);\n    }\n\n    setMenuList(currentMenuList);\n    setExpandAllClicked(!expandAllClicked);\n  }, [\n    expandAllClicked,\n    menuList,\n    tree,\n    executeQueryAdHoc,\n    catalogObjects,\n    promotedEntities\n  ]);\n\n  const handleCollapseAll = useCallback(() => {\n    setMenuList((prevState) => {\n      const updatedMenuList = cloneDeep(prevState);\n      updatedMenuList.forEach((tree) => {\n        collapseAllNodes(tree);\n      });\n      return updatedMenuList;\n    });\n  }, []);\n\n  // @TODO: Add back click handling for move to top\n  // const handleBackClick = useCallback(() => {\n  //   if (!nodeHistory.length) return;\n  //   const lastIndex = nodeHistory.length - 1;\n  //   const lastSelectedNode = nodeHistory[lastIndex];\n  //   setSelectedNode(lastSelectedNode);\n  //   const updatedNodeHistory = nodeHistory.map(node => node);\n  //   updatedNodeHistory.pop();\n  //   setNodeHistory(updatedNodeHistory);\n  // }, [nodeHistory]);\n\n  const inquiryTabList = useMemo(() => {\n    if (!selectedNode || !selectedNode?.properties?.tabs) return [];\n    const tabList = [];\n    const orderedTabs = orderBySequence(selectedNode.properties.tabs);\n    orderedTabs.forEach((tab) => {\n      if (tab?.propertyMapping && tab?.jsonLogic) {\n        const rule = mapRule(tab?.propertyMapping, tab?.jsonLogic);\n\n        if (!evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n          return;\n        }\n      }\n\n      let label = '';\n      if (tab?.displayName && tab?.displayName.trim()) {\n        label = tab?.displayName.trim();\n      } else if (tab?.page?.name && tab?.page?.name.trim()) {\n        label = tab?.page?.name.trim();\n      }\n\n      const page = {\n        label: label,\n        icon: null,\n        pageId: tab?.page?.pageId || null,\n        trees: tab?.trees || [],\n        requiredFieldMapping: tab?.requiredFieldMapping || {},\n        queryId: tab?.queryId || '',\n        queryParamMapping: tab?.queryParamMapping || null\n      };\n      tabList.push(page);\n    });\n    setSelectedPageId(tabList[0]?.pageId);\n    return tabList;\n  }, [selectedNode]);\n\n  const inquiryFluentTabList = useMemo(\n    () =>\n      inquiryTabList.map((tab, index) => ({\n        id: String(index),\n        label: tab.label\n      })),\n    [inquiryTabList]\n  );\n\n  const inquiryWorkflowFluentTabList = useMemo(\n    () => [\n      {\n        id: '0',\n        label: t('inquiry.container.inquiry', { defaultValue: 'Inquiry' })\n      },\n      {\n        id: '1',\n        label: t('inquiry.container.workflow', { defaultValue: 'Workflow' })\n      }\n    ],\n    [t]\n  );\n\n  const handlePageChange = useCallback(\n    (value) => {\n      if (Number.isNaN(value)) return;\n      setTabValue(value);\n      if (selectedPageId !== inquiryTabList[value]?.pageId) {\n        setSelectedPageId(inquiryTabList[value]?.pageId);\n      }\n    },\n    [inquiryTabList, selectedPageId]\n  );\n\n  const handleFluentInquiryTabChange = useCallback(\n    (e) => {\n      handlePageChange(Number(e.detail));\n    },\n    [handlePageChange]\n  );\n\n  const handleLoadingSpecificNode = useCallback(\n    async (obj) => {\n      setMenuLoading(true);\n      setNodesRequested([1]);\n      const currentTabValue = inquiryTabList?.length\n        ? inquiryTabList[tabValue]\n        : null;\n      let error = false;\n      let errorMessage = t('inquiry.container.unableToLoadEntity', {\n        defaultValue: 'Unable to load entity'\n      });\n      if (!obj?.businessObjectKey) {\n        error = true;\n        errorMessage = t('inquiry.container.unableToLoadEntityNoKey', {\n          defaultValue: 'Unable to load entity: No Business Object Key'\n        });\n      } else if (!currentTabValue?.trees?.length) {\n        error = true;\n        errorMessage = t('inquiry.container.unableToLoadEntityNoTrees', {\n          defaultValue: 'Unable to load entity: No Trees Configured for Tab'\n        });\n      }\n\n      if (error) {\n        setMenuLoading(false);\n        setNodesRequested([]);\n        enqueueSnackbar(errorMessage, {\n          variant: 'error',\n          anchorOrigin: {\n            vertical: 'top',\n            horizontal: 'center'\n          }\n        });\n        return;\n      }\n\n      const fullyQualifiedName = obj.businessObjectKey.split('|')[0];\n      const sanitizedName = getSanitizedName(fullyQualifiedName);\n      const matchingCtlgFullyQualifiedNameComponent = catalogObjects.find(\n        (domain) => domain.catalogObjectName === fullyQualifiedName\n      );\n      const catObjName = matchingCtlgFullyQualifiedNameComponent\n        ? fullyQualifiedName\n        : sanitizedName;\n\n      const matchingTabValueTree = currentTabValue.trees.find(\n        (tabTree) => tabTree.catalogReturnObject === catObjName\n      );\n\n      if (!matchingTabValueTree) {\n        setMenuLoading(false);\n        setNodesRequested([]);\n        enqueueSnackbar(\n          t('inquiry.container.unableToLoadEntityIncorrectTrees', {\n            defaultValue:\n              'Unable to load entity: Incorrect tree(s) configured for Node trying to load'\n          }),\n          {\n            variant: 'error',\n            anchorOrigin: {\n              vertical: 'top',\n              horizontal: 'center'\n            }\n          }\n        );\n        return;\n      }\n      let nodeTree = null;\n      const detailedTreeResponse = await executeGetDetailedTree(\n        matchingTabValueTree.treeId\n      );\n      if (detailedTreeResponse.status === 200) {\n        nodeTree = detailedTreeResponse.data;\n      } else {\n        setMenuLoading(false);\n        setNodesRequested([]);\n        enqueueSnackbar(\n          t('inquiry.container.unableToLoadEntityTreeFailed', {\n            defaultValue: 'Unable to load entity: Tree for item failed to load'\n          }),\n          {\n            variant: 'error',\n            anchorOrigin: {\n              vertical: 'top',\n              horizontal: 'center'\n            }\n          }\n        );\n        return;\n      }\n\n      if (!nodeTree) {\n        setMenuLoading(false);\n        setNodesRequested([]);\n        enqueueSnackbar(\n          t('inquiry.container.unableToLoadEntityTreeFailed', {\n            defaultValue: 'Unable to load entity: Tree for item failed to load'\n          }),\n          {\n            variant: 'error',\n            anchorOrigin: {\n              vertical: 'top',\n              horizontal: 'center'\n            }\n          }\n        );\n        return;\n      }\n\n      const searchIdentifiers = getSearchIdentifiers(\n        catalogObjects,\n        catObjName\n      );\n\n      const filterElements = [];\n      const searchValues = [];\n      searchIdentifiers.forEach((searchIdentifier) => {\n        const searchField = searchIdentifier\n          ? searchIdentifier.charAt(0).toUpperCase() + searchIdentifier.slice(1)\n          : '';\n        filterElements.push({\n          searchField: searchField,\n          searchOperator: '=',\n          searchValue: obj[searchIdentifier] ?? ''\n        });\n        searchValues.push(obj[searchIdentifier]);\n      });\n      const apiMethodId = nodeTree.apiMethodInstance.apiMethodId;\n      const lazyLoad = !!nodeTree?.properties?.lazyLoad;\n\n      const searchObject = getSearchObject(filterElements, 1, 50, !lazyLoad);\n      const data = { data: searchObject };\n      // const loadedNodesList = [];\n      const searchResponse = await executeQueryAdHoc(data, apiMethodId);\n      if (searchResponse.status === 200) {\n        if (searchResponse?.data?.pageList?.length) {\n          const treeStructure = makeTreeStructure(\n            nodeTree.treeStructure,\n            'id',\n            'parentId'\n          );\n          const displayTree = formatTreeMenuItem(\n            searchResponse.data.pageList[0],\n            treeStructure,\n            catalogObjects,\n            promotedEntities,\n            nodeTree,\n            lazyLoad\n          );\n          // loadedNodesList.push(\n          //   getLoadedNodeObject(\n          //     apiMethodId,\n          //     searchObject,\n          //     displayTree?.properties?.nodeLabel,\n          //     displayTree?.properties?.catalogReturnObject,\n          //     treeStructure.id\n          //   )\n          // );\n          // executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n          setMenuList((prevState) => [...prevState, displayTree]);\n          setNodesRequested([]);\n          setMenuLoading(false);\n        }\n      }\n    },\n    [\n      inquiryTabList,\n      tabValue,\n      catalogObjects,\n      enqueueSnackbar,\n      t,\n      executeGetDetailedTree,\n      executeQueryAdHoc,\n      // getLoadedNodeObject,\n      promotedEntities\n      // executeAddRecentlyLoadedNodes\n    ]\n  );\n\n  const handleSideBarValueChange = useCallback((value) => {\n    setSidebarTabValue(value);\n  }, []);\n\n  const handleAdvancedSearchClick = useCallback(\n    (values, selectedSearchOperators, entity, lookupPropertyNames) => {\n      setIsAdvancedSearch(true);\n      setInSearch(true);\n      const foundSearchItem = searchItems.find(\n        (item) => item.catalogReturnObject === entity\n      );\n      const searchFilterElements = [];\n      const searchFields = Object.keys(values).filter((field) =>\n        field.startsWith(`${getSanitizedName(entity)}:`)\n      );\n\n      searchFields.forEach((searchField) => {\n        const filterElement = {\n          searchField: '',\n          searchOperator: '',\n          searchValue: ''\n        };\n        const configuredSearchField = searchField.replace(\n          `${getSanitizedName(entity)}:`,\n          ''\n        );\n        filterElement.searchField =\n          configuredSearchField.charAt(0).toUpperCase() +\n          configuredSearchField.slice(1);\n        filterElement.searchOperator =\n          (selectedSearchOperators &&\n            selectedSearchOperators[configuredSearchField]?.value) ||\n          '=';\n\n        if (\n          configuredSearchField.includes(':between') ||\n          !values[searchField]\n        ) {\n          return;\n        }\n\n        // Handle between operator\n        if (filterElement.searchOperator === 'BETWEEN') {\n          let fromValue =\n            values[searchField] instanceof Date\n              ? values[searchField].toISOString()\n              : values[searchField];\n          let toValue =\n            values[`${searchField}:between`] instanceof Date\n              ? values[`${searchField}:between`].toISOString()\n              : values[`${searchField}:between`];\n          filterElement.searchValue = `${fromValue}${\n            toValue ? `,${toValue}` : ''\n          }`;\n        } else {\n          filterElement.searchValue =\n            values[searchField] instanceof Date\n              ? values[searchField].toISOString()\n              : values[searchField];\n        }\n        // Handle lookup values\n        if (lookupPropertyNames.includes(configuredSearchField)) {\n          filterElement.searchValue = values[searchField]['value'];\n        }\n        searchFilterElements.push(filterElement);\n      });\n\n      foundSearchItem.searchFilterElements = searchFilterElements;\n      setAdvancedSearchItems([foundSearchItem]);\n    },\n    [searchItems]\n  );\n\n  const entityList = useMemo(() => {\n    if (!searchItems?.length) {\n      return [];\n    }\n    return searchItems.reduce((entities, item) => {\n      if (item.catalogReturnObject) {\n        entities.push({\n          label: getSanitizedName(item.catalogReturnObject),\n          value: item.catalogReturnObject\n        });\n      }\n      return entities;\n    }, []);\n  }, [searchItems]);\n\n  const secondaryButtons = useMemo(() => {\n    if (inSearch) {\n      return [\n        {\n          component: ClearIcon,\n          label: t('inquiry.container.clearSearch', {\n            defaultValue: 'Clear Search'\n          }),\n          click: clearSearch,\n          id: 1\n        }\n      ];\n    }\n    return [];\n  }, [clearSearch, inSearch, t]);\n\n  const pageHeightOffSet = useMemo(() => {\n    let offset = 0;\n    if (primaryExpanded) {\n      offset = offset + 180;\n    }\n    if (secondaryExpanded) {\n      offset = offset + 270;\n    }\n\n    if (selectedNode?.properties?.tabs?.length > 1) {\n      offset = offset + 44;\n    }\n\n    return offset;\n  }, [primaryExpanded, secondaryExpanded, selectedNode]);\n\n  const onTreeViewModeChange = useCallback(() => {\n    if (treeViewMode === TreeViewModeEnums.Classic) {\n      setTreeViewMode(TreeViewModeEnums.Compact);\n    } else if (treeViewMode === TreeViewModeEnums.Compact) {\n      setTreeViewMode(TreeViewModeEnums.Classic);\n    }\n  }, [treeViewMode]);\n\n  const selectedNodeChildren = useMemo(() => {\n    if (!!!selectedNode?.children?.length) return [];\n    return selectedNode?.children?.filter(\n      (child) => !(child instanceof GroupNode)\n    );\n  }, [selectedNode]);\n\n  const udpPageWidgetParams = useMemo(() => {\n    const currentTabValue = inquiryTabList?.length\n      ? inquiryTabList[tabValue]\n      : null;\n    return {\n      pageId: currentTabValue?.pageId || '',\n      entityName: selectedNode?.properties?.catalogReturnObject,\n      contentId: selectedNode?.properties?.searchValue,\n      nodeObj: selectedNode?.nodeObj,\n      nodeId: selectedNode?.id,\n      manytoManyNodeObjKey:\n        selectedNode?.properties?.joiningEntityCatalogObjectKey,\n      parentNodeObj: selectedNode?.parentNode?.nodeObj,\n      parentGroupName: selectedNode?.parentGroupName,\n      inquiryParams: selectedNode?.inquiryParams,\n      inquiryNodeProperties: selectedNode?.properties,\n      refreshTree: handleMenuTreesRefreshFromPage,\n      loadInquiryNode: handleLoadingSpecificNode,\n      requiredFieldsMap: currentTabValue?.requiredFieldMapping || {},\n      displayLoadNodeButton: !!currentTabValue?.trees?.length,\n      nodeChildren: selectedNodeChildren,\n      catalogObjects,\n      queryId: currentTabValue?.queryId,\n      queryParamMapping: currentTabValue?.queryParamMapping,\n      refreshNodeHeaderData: refreshNodeHeaderPageData,\n      refreshPageHeaderData: refreshPageHeaderPageData,\n      inquiryContainerId: containerId\n    };\n  }, [\n    inquiryTabList,\n    selectedNode,\n    catalogObjects,\n    handleMenuTreesRefreshFromPage,\n    handleLoadingSpecificNode,\n    tabValue,\n    selectedNodeChildren,\n    refreshNodeHeaderPageData,\n    refreshPageHeaderPageData,\n    containerId\n  ]);\n\n  const pageWidgetParams = useMemo(() => {\n    const currentTabValue = inquiryTabList?.length\n      ? inquiryTabList[tabValue]\n      : null;\n    return {\n      pageId: currentTabValue?.pageId || '',\n      entityName: selectedNode?.properties?.catalogReturnObject,\n      contentId: selectedNode?.properties?.searchValue,\n      nodeObj: selectedNode?.nodeObj,\n      nodeId: selectedNode?.id,\n      manytoManyNodeObjKey:\n        selectedNode?.properties?.joiningEntityCatalogObjectKey,\n      parentNodeObj: selectedNode?.parentNode?.nodeObj,\n      parentGroupName: selectedNode?.parentGroupName,\n      inquiryParams: selectedNode?.inquiryParams,\n      inquiryNodeProperties: selectedNode?.properties,\n      heightOffset: pageHeightOffSet,\n      refreshTree: handleMenuTreesRefreshFromPage,\n      loadInquiryNode: handleLoadingSpecificNode,\n      requiredFieldsMap: currentTabValue?.requiredFieldMapping || {},\n      displayLoadNodeButton: !!currentTabValue?.trees?.length,\n      nodeChildren: selectedNodeChildren,\n      catalogObjects,\n      queryId: currentTabValue?.queryId,\n      queryParamMapping: currentTabValue?.queryParamMapping,\n      refreshNodeHeaderData: refreshNodeHeaderPageData,\n      refreshPageHeaderData: refreshPageHeaderPageData,\n      inquiryContainerId: containerId\n    };\n  }, [\n    inquiryTabList,\n    selectedNode,\n    catalogObjects,\n    handleMenuTreesRefreshFromPage,\n    handleLoadingSpecificNode,\n    pageHeightOffSet,\n    tabValue,\n    selectedNodeChildren,\n    refreshNodeHeaderPageData,\n    refreshPageHeaderPageData,\n    containerId\n  ]);\n\n  const pageContainer = useMemo(() => {\n    return (\n      <PageContainer\n        user={user}\n        key={`${moveToTopCount}-${selectedNode?.properties?.searchValue}`}\n        pageData={pageData}\n        pageLoading={pageLoading}\n        widgetParams={\n          pageData?.isUdpPage ? udpPageWidgetParams : pageWidgetParams\n        }\n        disableMargins={true}\n      />\n    );\n  }, [\n    user,\n    pageData,\n    pageLoading,\n    udpPageWidgetParams,\n    selectedNode,\n    pageWidgetParams,\n    moveToTopCount\n  ]);\n\n  const handleSidebarExpandClick = useCallback(() => {\n    setSidebarExpanded((expanded) => !expanded);\n  }, []);\n\n  useEffect(() => {\n    setSubHeaderActionHasChildren(false);\n  }, [setSubHeaderActionHasChildren]);\n\n  useEffect(() => {\n    clearNodes();\n    clearSearch();\n    // If the treeId changes we want to clear all nodes and search\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [treeId]);\n\n  useEffect(() => {\n    if (inSearch) {\n      setHeaderTitle('');\n      setPrimaryExpanded(false);\n      setSecondaryExpanded(false);\n      setShowToggle1(false);\n      setShowToggle2(false);\n    } else if (!inSearch && selectedNode) {\n      setHeaderTitle(\n        selectedNode?.isGroupNode\n          ? selectedNode.properties?.label\n          : selectedNode.properties?.headerTitle\n      );\n      if (\n        !selectedNode.properties?.defaultNodeHeaderExpanded ||\n        selectedNode.properties?.defaultNodeHeaderExpanded === 'hidden'\n      ) {\n        setShowToggle1(false);\n        setPrimaryExpanded(false);\n      } else {\n        setShowToggle1(true);\n        setPrimaryExpanded(\n          selectedNode.properties?.defaultNodeHeaderExpanded\n            ? selectedNode.properties?.defaultNodeHeaderExpanded === 'expanded'\n            : false\n        );\n      }\n      if (\n        !selectedNode.properties?.defaultPageHeaderExpanded ||\n        selectedNode.properties?.defaultPageHeaderExpanded === 'hidden'\n      ) {\n        setShowToggle2(false);\n        setSecondaryExpanded(false);\n      } else {\n        setShowToggle2(true);\n        setSecondaryExpanded(\n          selectedNode.properties?.defaultPageHeaderExpanded\n            ? selectedNode.properties?.defaultPageHeaderExpanded === 'expanded'\n            : true\n        );\n      }\n    }\n  }, [inSearch, selectedNode]);\n\n  useEffect(() => {\n    if (!nodeLoaded) {\n      setHeaderTitle('');\n      setShowToggle1(false);\n      setShowToggle2(false);\n      setPrimaryExpanded(false);\n      setSecondaryExpanded(false);\n    }\n  }, [nodeLoaded]);\n\n  useEffect(() => {\n    if (!sidebarExpanded) {\n      setSidebarTabValue(0);\n    }\n  }, [sidebarExpanded]);\n\n  useEffect(() => {\n    if (setPageId) {\n      if (selectedNode) {\n        if (selectedNode?.properties?.tabs?.length > 1) {\n          setPageId(selectedPageId || null);\n        } else {\n          const pageTabs = selectedNode?.properties?.tabs;\n          if (pageTabs?.[0]) {\n            setPageId(pageTabs[0].page?.pageId || null);\n          } else {\n            setPageId(null);\n          }\n        }\n      } else {\n        setPageId(null);\n      }\n    }\n  }, [setPageId, selectedNode, selectedPageId]);\n\n  useEffect(() => {\n    if (initialSearchValue) {\n      setIsAdvancedSearch(false);\n      setInSearch(true);\n      setSearchValue(initialSearchValue);\n    }\n  }, [initialSearchValue]);\n\n  useEffect(() => {\n    setTabValue(0);\n  }, [selectedNode]);\n\n  useEffect(() => {\n    if (inSearch) {\n      setShowInquiryHeaderActions(false);\n    } else {\n      setShowInquiryHeaderActions(true);\n    }\n  }, [inSearch, setShowInquiryHeaderActions]);\n\n  useEffect(() => {\n    setInquiryParams(\n      {\n        selectedNode,\n        selectedNodeParent: selectedNode?.parentNode,\n        refreshTree: handleMenuTreesRefresh\n      },\n      containerId\n    );\n  }, [selectedNode, handleMenuTreesRefresh, setInquiryParams, containerId]);\n\n  useEffect(() => {\n    setMenuListState({\n      menuList: menuList,\n      handleRemoveMenuItem: handleRemoveMenuItem,\n      selectedMenuIndex\n    });\n  }, [setMenuListState, menuList, handleRemoveMenuItem, selectedMenuIndex]);\n\n  useEffect(() => {\n    if (tree) {\n      const getPreloadedTree = async () => {\n        setMenuLoading(true);\n        setNodesRequested([1]);\n        const response = await executeQueryInstance(\n          { data: {} },\n          tree.apiMethodInstance?.apiMethodInstanceId\n        );\n        if (response.status === 200) {\n          if (response?.data?.pageList?.length) {\n            const clonedTree = cloneDeep(tree.treeStructure);\n            const treeStructure = makeTreeStructure(\n              clonedTree,\n              'id',\n              'parentId'\n            );\n            const preloadedList = constructPreloadedTree(\n              treeStructure,\n              response.data.pageList,\n              catalogObjects\n            );\n            setMenuList(preloadedList || []);\n            if (preloadedList?.length) {\n              setSelectedNode(preloadedList[0]);\n              setSelectedMenuIndex(0);\n            }\n            setAppNavigationExpanded(false);\n          }\n        }\n        setMenuLoading(false);\n        setNodesRequested([]);\n      };\n\n      if (tree) {\n        // inquiry title is stored in the properties of the top node of the tree\n        const topNode = tree?.treeStructure?.find((node) => !node.parentId);\n        setInquiryTitleHeader(topNode?.properties?.inquiryTitle || '');\n      }\n\n      setIsPreloaded(tree.isPreloaded);\n      if (tree.isPreloaded) {\n        setNodeLoaded(true);\n        getPreloadedTree();\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [tree, setAppNavigationExpanded, catalogObjects]);\n\n  useEffect(() => {\n    setSelectedNodeForStore(selectedNode || null);\n  }, [selectedNode, setSelectedNodeForStore]);\n\n  /* useEffects for workflow */\n\n  useEffect(() => {\n    if (workflowPlay) {\n      setWorkflow(workflowPlay);\n    }\n  }, [workflowPlay]);\n\n  // this is used for updating the state node for page use\n  useEffect(() => {\n    if (workflow) {\n      setSelectedWorkflowNode((prevNode) => {\n        if (!!prevNode) {\n          const foundNode = workflow.workflowPlayNode?.children?.find(\n            (child) => child.id === prevNode.id\n          );\n          if (!!foundNode) {\n            const updatedNode = { ...prevNode };\n            // TODO: using this to update state for now but may need to update\n            // other properties of the selected node when we pull workflow tree\n            updatedNode.properties.state = foundNode.state;\n            return updatedNode;\n          } else {\n            return prevNode;\n          }\n        }\n      });\n    }\n  }, [workflow]);\n\n  useEffect(() => {\n    if (workflow) {\n      if (!workflowInitialized) {\n        let initialized = false;\n        if (workflow.workflowPlayNode?.children?.length) {\n          const firstWorkflowNode = workflow.workflowPlayNode.children[0];\n          if (firstWorkflowNode.state !== UnitStateType.Initial) {\n            initialized = true;\n            setWorkflowInitialized(true);\n          }\n        }\n\n        if (\n          !initialized &&\n          getWorkflowInitializedCount < WORKFLOW_MAX_NETWORK_CALLS &&\n          inquiryWorkflow?.currentWorkflowPlayId\n        ) {\n          const timer = setTimeout(async () => {\n            await reloadWorkflow();\n            setGetWorkflowInitializedCount((prevCount) => prevCount + 1);\n          }, 1000);\n\n          return () => clearTimeout(timer);\n        }\n        if (getWorkflowInitializedCount === WORKFLOW_MAX_NETWORK_CALLS) {\n          enqueueSnackbar(\n            t('inquiry.container.unableToInitializeWorkflow', {\n              defaultValue: 'Unable to initialize workflow'\n            }),\n            {\n              variant: 'error',\n              anchorOrigin: {\n                vertical: 'top',\n                horizontal: 'center'\n              }\n            }\n          );\n        }\n      }\n      if (workflowInitialized) {\n        const list = [];\n        const updatedMenu = transformWorkflowPlayTree(\n          workflow.workflowPlayNode\n        );\n        if (updatedMenu) {\n          list.push(updatedMenu);\n        }\n        setWorkflowMenuItemsList(list);\n      }\n    }\n  }, [\n    workflow,\n    workflowInitialized,\n    reloadWorkflow,\n    getWorkflowInitializedCount,\n    inquiryWorkflow,\n    enqueueSnackbar,\n    t\n  ]);\n\n  useEffect(() => {\n    if (inquiryWorkflow?.inWorkflowMode && inquiryWorkflowTabValue === 1) {\n      setHideActions(true);\n    } else if (\n      inquiryWorkflow?.inWorkflowMode &&\n      inquiryWorkflowTabValue === 0\n    ) {\n      setHideActions(false);\n    }\n  }, [setHideActions, inquiryWorkflowTabValue, inquiryWorkflow]);\n\n  useEffect(() => {\n    if (!selectedWorkflowNode) {\n      const menu = workflowMenuItemsList[0];\n      // Use Task Id to find the first matching node in tree\n      if (menu) {\n        const firstSelectableMenuItem = menu?.children?.find(\n          (item) => item.isSelectable\n        );\n        setSelectedWorkflowNode(firstSelectableMenuItem || null);\n        if (autoCollapseNav) {\n          setNavigationExpanded(false);\n        }\n      }\n    }\n  }, [\n    // udpTaskId,\n    workflowMenuItemsList,\n    selectedWorkflowNode,\n    setNavigationExpanded,\n    autoCollapseNav\n  ]);\n\n  useEffect(() => {\n    if (\n      !!workflowPlayError &&\n      getWorkflowPlayErrorCount < WORKFLOW_MAX_NETWORK_CALLS &&\n      inquiryWorkflow?.currentWorkflowPlayId\n    ) {\n      const timer = setTimeout(() => {\n        reloadWorkflow();\n        setGetWorkflowPlayErrorCount((prevCount) => prevCount + 1);\n      }, 1000);\n\n      return () => clearTimeout(timer);\n    }\n    if (getWorkflowPlayErrorCount === WORKFLOW_MAX_NETWORK_CALLS) {\n      enqueueSnackbar(\n        t('inquiry.container.unableToLoadWorkflow', {\n          defaultValue: 'Unable to load workflow'\n        }),\n        {\n          variant: 'error',\n          anchorOrigin: {\n            vertical: 'top',\n            horizontal: 'center'\n          }\n        }\n      );\n    }\n  }, [\n    workflowPlayError,\n    reloadWorkflow,\n    getWorkflowPlayErrorCount,\n    enqueueSnackbar,\n    t,\n    inquiryWorkflow\n  ]);\n\n  // Setting location state label so that if this page was saved to favorites\n  // we can determine the bread crumb\n  useEffect(() => {\n    setLocationState({\n      label:\n        t(inquiryTitle) ||\n        t('inquiry.container.inquiry', { defaultValue: 'Inquiry' })\n    });\n  }, [setLocationState, t, inquiryTitle]);\n\n  return (\n    <DndProvider backend={HTML5Backend}>\n      <LoadingOverlay open={workflowStarting} />\n      <div key={treeId} className={classes.root}>\n        {!inquiryMenuHidden && (\n          <UtilitySideBar\n            title={\n              t(inquiryTitle) ||\n              t('inquiry.container.inquiry', { defaultValue: 'Inquiry' })\n            }\n            isUsingChildren={true}\n            resizable={true}\n            removePadding={true}\n            removeTopLayoutUnit={true}\n            onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n            collapsedWidth={78}\n            handleResize={(width) => setUtilitySideBarWidth(width)}\n            hideTitleBar={inquiryWorkflow?.inWorkflowMode}\n          >\n            {(moveToTopLoading || dragAndDropLoading || refreshing) && (\n              <LinearProgress />\n            )}\n            {sidebarTabValue === 0 && (\n              <>\n                {inquiryWorkflow?.inWorkflowMode && (\n                  <>\n                    <div className={classes.workflowTablist}>\n                      <UdpTablist\n                        activeId={String(inquiryWorkflowTabValue)}\n                        tabList={inquiryWorkflowFluentTabList}\n                        onTabChange={(e) =>\n                          setInquiryWorkflowTabValue(Number(e.detail))\n                        }\n                      />\n                    </div>\n                    <Divider />\n                  </>\n                )}\n                {(!inquiryWorkflow?.inWorkflowMode ||\n                  (inquiryWorkflow?.inWorkflowMode &&\n                    inquiryWorkflowTabValue === 0)) && (\n                  <>\n                    <InquiryNodeControls\n                      remove={() => handleRemoveMenuItem(null)}\n                      moveToTop={handleMoveToTop}\n                      expandAll={handleExpandAll}\n                      collapseAll={handleCollapseAll}\n                      clearAll={clearNodes}\n                      switchTreeViewMode={onTreeViewModeChange}\n                      treeViewMode={treeViewMode}\n                      changeSideBarView={handleSideBarValueChange}\n                      handleKeyDown={handleSearch}\n                      disableMoveToTop={disableMoveToTop}\n                      entityList={entityList}\n                      entityValue={entityValue}\n                      setEntityValue={setEntityValue}\n                      hiddenControls={\n                        sidebarExpanded\n                          ? isPreloaded\n                            ? ['remove', 'clearAll']\n                            : []\n                          : isPreloaded\n                            ? ['remove', 'expandAll', 'clearAll', 'collapseAll']\n                            : ['remove', 'expandAll', 'clearAll', 'collapseAll']\n                      }\n                      showControls={!treeLoading && !treeError && nodeLoaded}\n                      showSearch={!treeLoading && !treeError}\n                      defaultValue={initialSearchValue}\n                      clearSearchStr={clearSearchStr}\n                      setClearSearchStr={setClearSearchStr}\n                      isPreloadedTree={isPreloaded}\n                      treeLoading={treeLoading}\n                    >\n                      {!treeLoading && treeError && (\n                        <div style={{ marginLeft: 4, marginBottom: 12 }}>\n                          <LayoutUnit unit='nudge' />\n                          <Typography>\n                            {t('inquiry.container.treeDataError', {\n                              defaultValue:\n                                'Error getting tree data from tree id'\n                            })}\n                          </Typography>\n                        </div>\n                      )}\n                    </InquiryNodeControls>\n                    <NodeList\n                      menuItemsList={menuList}\n                      onSelectNode={handleSelectedNode}\n                      onDropNode={handleDroppedNode}\n                      selectedNodeId={selectedNode?.id ?? ''}\n                      selectedNodeParentId={selectedNode?.parentId ?? ''}\n                      expandAllClicked={expandAllClicked}\n                      classes={{\n                        root: !treeLoading\n                          ? nodeLoaded\n                            ? classes.nodeListRootLoaded\n                            : classes.nodeListRoot\n                          : classes.nodeListRootLoading\n                      }}\n                      menuLoading={menuLoading}\n                      nodesRequested={nodesRequested}\n                      sidebarExpanded={sidebarExpanded}\n                      executeQueryAdHoc={executeQueryAdHoc}\n                      catalogObjects={catalogObjects}\n                      promotedEntities={promotedEntities}\n                      treeStructureArr={tree?.treeStructure || []}\n                      setMenuList={setMenuList}\n                      treeViewMode={treeViewMode || TreeViewModeEnums.Classic}\n                      onExpandedChange={handleExpandedChange}\n                    />\n                  </>\n                )}\n              </>\n            )}\n            {sidebarTabValue === 1 && (\n              <InquiryAdvancedSearch\n                entityList={entityList}\n                entityValue={advancedSearchEntityValue}\n                setEntityValue={setAdvancedSearchEntityValue}\n                onSubmit={handleAdvancedSearchClick}\n                currentNodeCatalogReturnObject={\n                  selectedNode?.properties?.catalogReturnObject\n                }\n                changeSideBarView={handleSideBarValueChange}\n                catalogObjects={catalogObjects}\n                tree={tree}\n                executeQueryWithParameters={executeQueryWithParameters}\n              />\n            )}\n            {inquiryWorkflow?.inWorkflowMode &&\n              inquiryWorkflowTabValue === 1 && (\n                <div\n                  className={classes.workflowMenuContent}\n                  key={inquiryWorkflow?.currentWorkflowPlayId}\n                >\n                  {workflowMenuItemsList?.length > 0 &&\n                    (!workflowPlayLoading || reloadWorkflowFromPage) &&\n                    workflowMenuItemsList.map((workflowMenuItems, index) => (\n                      <div\n                        key={workflowMenuItems.id}\n                        className={classes.nodeContainer}\n                      >\n                        <WorkflowTreeMenu\n                          menuItems={workflowMenuItems}\n                          onSelectNode={handleSelectedWorkflowNode}\n                          // onDropNode={handleDropNode}\n                          menuIndex={index}\n                          selectedNodeId={selectedWorkflowNode?.id}\n                          selectedNodeParentId={selectedWorkflowNode?.parentId}\n                          sidebarExpanded={sidebarExpanded}\n                          treeViewMode={TreeViewModeEnums.Classic}\n                        />\n                      </div>\n                    ))}\n                  {(workflowPlayLoading ||\n                    workflowPlayError ||\n                    !workflowInitialized) &&\n                    !reloadWorkflowFromPage && (\n                      <div className={classes.workflowTreeLoader}>\n                        <NodeLoader\n                          loading={\n                            workflowPlayLoading ||\n                            workflowPlayError ||\n                            !workflowInitialized\n                          }\n                        />\n                      </div>\n                    )}\n                </div>\n              )}\n          </UtilitySideBar>\n        )}\n        <OpenPage\n          disableGutters\n          style={{\n            position: 'relative',\n            top: 0,\n            width: `calc(100% - ${utilitySideBarWidth}px)`\n          }}\n        >\n          <Form\n            onSubmit={executeApiForDroppedNode}\n            key={promotedMethodsToExecute}\n          >\n            <ExecuteApiDialog\n              open={executeApiDialogOpen}\n              handleCloseDialog={handleCloseExecuteApiDialog}\n              apiMethods={promotedMethodsToExecute}\n              progress={executeApiProgress}\n            />\n          </Form>\n          <div className={classes.content}>\n            {(!inquiryWorkflow?.inWorkflowMode ||\n              (inquiryWorkflow?.inWorkflowMode &&\n                inquiryWorkflowTabValue === 0)) && (\n              <InquiryWrapper nodeLoaded={false} collapsedWidth={32}>\n                {(inSearch || nodeLoaded) && (\n                  <Card square>\n                    <PrimaryActionHeader\n                      key={`${selectedNode?.id}-${inSearch}`}\n                      title={headerTitle}\n                      buttonLabel={t('inquiry.container.load', {\n                        defaultValue: 'Load'\n                      })}\n                      single\n                      secondaryButtons={secondaryButtons}\n                      handleClick={handlePrimaryAction}\n                      hidePAB={nodeLoaded && !inSearch}\n                      allowAdditionalTitleComponent={true}\n                      additionalComponentId={containerId}\n                    />\n                  </Card>\n                )}\n                {!!selectedNode && (\n                  <Card square className={classes.nodeHeader}>\n                    <div>\n                      <Collapse in={primaryExpanded} timeout='auto'>\n                        {nodeHeaderPageIdToLoad && showToggle1 ? (\n                          <PageContainer\n                            user={user}\n                            key={nodeHeaderPageIdToLoad}\n                            pageData={nodeHeaderPageData}\n                            pageLoading={nodeHeaderPageLoading}\n                            widgetParams={{\n                              nodeObj: selectedNode?.nodeObj,\n                              nodeId: selectedNode?.id,\n                              selectedNode: selectedNode,\n                              setRefreshNodeHeaderPageData:\n                                setRefreshNodeHeaderPageData,\n                              inquiryContainerId: containerId\n                            }}\n                            disableMargins={true}\n                            loadingHeight={32}\n                            autoHeight={true}\n                          />\n                        ) : (\n                          <NodeDetails node={selectedNode} />\n                        )}\n                      </Collapse>\n\n                      {showToggle1 && (\n                        <div\n                          className={clsx(\n                            primaryExpanded\n                              ? classes.chevronButtons\n                              : classes.chevronButtonClosed\n                          )}\n                        >\n                          <FluentIconButton\n                            onClick={() => setPrimaryExpanded(!primaryExpanded)}\n                            icon={\n                              primaryExpanded ? ChevronUpIcon : ChevronDownIcon\n                            }\n                          />\n                        </div>\n                      )}\n                    </div>\n                    <Divider />\n                    <Collapse in={secondaryExpanded} timeout='auto'>\n                      <div className={classes.inquiryHeader}>\n                        {pageHeaderPageIdToLoad && showToggle2 ? (\n                          <PageContainer\n                            user={user}\n                            key={pageHeaderPageIdToLoad}\n                            pageData={pageHeaderPageData}\n                            pageLoading={pageHeaderPageLoading}\n                            widgetParams={{\n                              nodeObj: selectedNode?.nodeObj,\n                              nodeId: selectedNode?.id,\n                              selectedNode: selectedNode,\n                              setRefreshPageHeaderPageData:\n                                setRefreshPageHeaderPageData,\n                              inquiryContainerId: containerId\n                            }}\n                            disableMargins={true}\n                            loadingHeight={32}\n                            autoHeight={true}\n                          />\n                        ) : (\n                          <>\n                            <InquiryHeaderSecondaryTarget\n                              className={classes.actions}\n                            />\n                            <InquiryHeaderSecondaryAlertTarget\n                              className={classes.actions}\n                            />\n                          </>\n                        )}\n                      </div>\n                    </Collapse>\n                    {selectedNode?.properties?.tabs?.length > 1 && !inSearch ? (\n                      <div className={classes.tabRoot}>\n                        <UdpTablist\n                          activeId={tabValue}\n                          tabList={inquiryFluentTabList}\n                          onTabChange={handleFluentInquiryTabChange}\n                        />\n                      </div>\n                    ) : null}\n                  </Card>\n                )}\n                {!!selectedNode && showToggle2 && (\n                  <Card square className={classes.entityHeader}>\n                    <div className={classes.chevronButtons}>\n                      <FluentIconButton\n                        onClick={() => setSecondaryExpanded(!secondaryExpanded)}\n                        icon={\n                          secondaryExpanded ? ChevronUpIcon : ChevronDownIcon\n                        }\n                        className={classes.icon}\n                      />\n                    </div>\n                  </Card>\n                )}\n                {!treeError && (\n                  <PageActionWrapper\n                    forPageContainer={true}\n                    splitScreenStateKey={'pageContainerSplitScreen'}\n                  >\n                    <div\n                      className={classes.mainWrapper}\n                      style={{ width: '100%' }}\n                    >\n                      {inSearch ? (\n                        <InquirySearchContainer\n                          searchItems={entitySearchItems}\n                          isAdvancedSearch={isAdvancedSearch}\n                          advancedSearchItems={advancedSearchItems}\n                          setSelectedSearchRows={handleSelectedSearchRows}\n                          catalogObjects={catalogObjects}\n                          loadSingleNode={handleSingleNodeLoad}\n                          onRowDoubleClick={handleRowDoubleClick}\n                          classes={{ root: classes.searchContainerRoot }}\n                          executeQueryAdHoc={executeQueryAdHoc}\n                          apiMethodInstanceId={\n                            tree?.apiMethodInstance?.apiMethodInstanceId\n                          } // The original apiMethodInstanceId that the tree uses\n                        />\n                      ) : !tree || !catalogObjects ? (\n                        <LinearProgress />\n                      ) : !nodeLoaded && !tree?.isPreloaded ? (\n                        tree?.explorePageId ? (\n                          <PageContainer\n                            user={user}\n                            key={selectedNode?.properties?.searchValue}\n                            pageData={explorePageData}\n                            pageLoading={explorePageLoading}\n                            widgetParams={{\n                              tree: tree,\n                              recentlyLoadedNodes: litnHistory,\n                              loading: litnHistoryLoading,\n                              onLoadedNodeClick: handleRecentlyLoadedNodeClick,\n                              tableHeight: 'calc(100vh - 172px)',\n                              catalogObjects\n                            }}\n                            disableMargins={true}\n                          />\n                        ) : (\n                          <InquiryDashboard\n                            treeId={treeId}\n                            recentlyLoadedNodeOnClick={\n                              handleRecentlyLoadedNodeClick\n                            }\n                          >\n                            <RecentlyLoadedNodesTable\n                              recentlyLoadedNodes={litnHistory}\n                              loading={litnHistoryLoading}\n                              onLoadedNodeClick={handleRecentlyLoadedNodeClick}\n                              tableHeight={'calc(100vh - 172px)'}\n                              tree={tree}\n                            />\n                          </InquiryDashboard>\n                        )\n                      ) : (\n                        selectedNode?.properties?.tabs?.length > 0 &&\n                        (selectedNode?.properties?.tabs?.length > 1\n                          ? pageId && pageContainer\n                          : pageId\n                            ? pageContainer\n                            : null)\n                      )}\n                    </div>\n                  </PageActionWrapper>\n                )}\n                <InquiryHeaderSecondary secondExtended>\n                  <div className={classes.information}>\n                    <div className={classes.summaryCard}>\n                      {/* Add Child component here for the Node header */}\n                    </div>\n                  </div>\n                </InquiryHeaderSecondary>\n              </InquiryWrapper>\n            )}\n            {inquiryWorkflow?.inWorkflowMode &&\n              inquiryWorkflowTabValue === 1 && (\n                <WorkflowContent\n                  selectedNode={selectedWorkflowNode}\n                  workflow={workflow}\n                  reloadWorkflow={handleReloadWorkflow}\n                  users={users}\n                  groups={groups}\n                  handleClose={handleCloseWorkflow}\n                  inquiryPageParams={\n                    pageData?.isUdpPage ? udpPageWidgetParams : pageWidgetParams\n                  }\n                />\n              )}\n          </div>\n        </OpenPage>\n      </div>\n    </DndProvider>\n  );\n};\n\nInquiryContainer.propTypes = {\n  user: PropTypes.object,\n  litnHistory: PropTypes.array,\n  litnHistoryLoading: PropTypes.bool,\n  tree: PropTypes.object,\n  treeId: PropTypes.string,\n  catalogObjects: PropTypes.array,\n  executeQueryAdHoc: PropTypes.func,\n  executeQueryWithParameters: PropTypes.func,\n  executeGetDetailedTree: PropTypes.func,\n  executeAddRecentlyLoadedNodes: PropTypes.func,\n  treeLoading: PropTypes.bool,\n  treeError: PropTypes.object,\n  pageData: PropTypes.object,\n  pageLoading: PropTypes.bool,\n  pageError: PropTypes.object,\n  setPageId: PropTypes.func,\n  pageId: PropTypes.string,\n  isValidWidget: PropTypes.func,\n  productId: PropTypes.string,\n  initialSearchValue: PropTypes.string,\n  promotedEntities: PropTypes.array,\n  apiCatalogId: PropTypes.string\n};\n"],"mappings":"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"}