udp-react-enterprise-component-library 25.18.1-beta.4 → 25.18.1-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Accordion-gB7-h8x2.js → Accordion-CaMSRkVt.js} +2 -2
- package/dist/{Accordion-gB7-h8x2.js.map → Accordion-CaMSRkVt.js.map} +1 -1
- package/dist/{ActionProvider-Bac2QDAs.js → ActionProvider-CXHkH2mP.js} +2 -2
- package/dist/{ActionProvider-Bac2QDAs.js.map → ActionProvider-CXHkH2mP.js.map} +1 -1
- package/dist/{ActionSplitScreen-sKnNHSHa.js → ActionSplitScreen-D-Ao-Oc1.js} +3 -3
- package/dist/{ActionSplitScreen-sKnNHSHa.js.map → ActionSplitScreen-D-Ao-Oc1.js.map} +1 -1
- package/dist/{ActionWrapper-CVOfJ5oR.js → ActionWrapper-h7Itpcl5.js} +3 -3
- package/dist/{ActionWrapper-CVOfJ5oR.js.map → ActionWrapper-h7Itpcl5.js.map} +1 -1
- package/dist/AmbientCardButton-DOnaCczn.js.map +1 -1
- package/dist/{BaseTreeMenu-sWv-qaul.js → BaseTreeMenu-C3azNZ0b.js} +2 -2
- package/dist/{BaseTreeMenu-sWv-qaul.js.map → BaseTreeMenu-C3azNZ0b.js.map} +1 -1
- package/dist/{CircleButton-DpVIcx-w.js → CircleButton-DZtXx7uN.js} +2 -2
- package/dist/{CircleButton-DpVIcx-w.js.map → CircleButton-DZtXx7uN.js.map} +1 -1
- package/dist/{CustomMenuPage-BhA0LNhM.js → CustomMenuPage-iBhLu1TK.js} +2 -2
- package/dist/{CustomMenuPage-BhA0LNhM.js.map → CustomMenuPage-iBhLu1TK.js.map} +1 -1
- package/dist/{EntityHeader-BLt_uxQ3.js → EntityHeader--gf9BpbJ.js} +2 -2
- package/dist/{EntityHeader-BLt_uxQ3.js.map → EntityHeader--gf9BpbJ.js.map} +1 -1
- package/dist/{FileViewer-Cqrlt60_.js → FileViewer-qG1dw7RF.js} +2 -2
- package/dist/{FileViewer-Cqrlt60_.js.map → FileViewer-qG1dw7RF.js.map} +1 -1
- package/dist/{FluentCell-C2Qfg1ve.js → FluentCell-Ce9_3cOY.js} +2 -2
- package/dist/{FluentCell-C2Qfg1ve.js.map → FluentCell-Ce9_3cOY.js.map} +1 -1
- package/dist/{FluentDataTable-DuDb9VVl.js → FluentDataTable-BjCP7-Vf.js} +2 -2
- package/dist/{FluentDataTable-DuDb9VVl.js.map → FluentDataTable-BjCP7-Vf.js.map} +1 -1
- package/dist/FluentProfileMenuCard-BMGWsjyD.js.map +1 -1
- package/dist/{FluentTimeline-CCQ3mUhk.js → FluentTimeline-ExazqTRJ.js} +2 -2
- package/dist/{FluentTimeline-CCQ3mUhk.js.map → FluentTimeline-ExazqTRJ.js.map} +1 -1
- package/dist/{IconRenderer-BB7NMX-b.js → IconRenderer-DAfBq9qv.js} +2 -2
- package/dist/{IconRenderer-BB7NMX-b.js.map → IconRenderer-DAfBq9qv.js.map} +1 -1
- package/dist/{MenuPage-BhPLgI_i.js → MenuPage-BtPJFNys.js} +3 -3
- package/dist/{MenuPage-BhPLgI_i.js.map → MenuPage-BtPJFNys.js.map} +1 -1
- package/dist/{MenuPage-DNq_eYJy.js → MenuPage-VDT9iycc.js} +3 -3
- package/dist/{MttMainTimeline-uB-YMlPd.js → MttMainTimeline-_6Fpr66g.js} +2 -2
- package/dist/{MttMainTimeline-uB-YMlPd.js.map → MttMainTimeline-_6Fpr66g.js.map} +1 -1
- package/dist/{MttSummary-dlQbfqex.js → MttSummary-BBsBlhgF.js} +3 -3
- package/dist/{MttSummary-dlQbfqex.js.map → MttSummary-BBsBlhgF.js.map} +1 -1
- package/dist/{NotesScreen-BjY_InsP.js → NotesScreen-B7hLzUOl.js} +2 -2
- package/dist/{NotesScreen-BjY_InsP.js.map → NotesScreen-B7hLzUOl.js.map} +1 -1
- package/dist/{PageActionWrapper-5hXS8BiL.js → PageActionWrapper-BBCjuj8x.js} +2 -2
- package/dist/{PageActionWrapper-5hXS8BiL.js.map → PageActionWrapper-BBCjuj8x.js.map} +1 -1
- package/dist/{PaymentForm-C9djfH5t.js → PaymentForm-OijJFr0S.js} +2 -2
- package/dist/{PaymentForm-C9djfH5t.js.map → PaymentForm-OijJFr0S.js.map} +1 -1
- package/dist/{RecentlyLoadedNodesTable-BaUKwrK6.js → RecentlyLoadedNodesTable-ScWvY2Bk.js} +2 -2
- package/dist/{RecentlyLoadedNodesTable-BaUKwrK6.js.map → RecentlyLoadedNodesTable-ScWvY2Bk.js.map} +1 -1
- package/dist/{RecentlyLoadedNodesWidget-Bwmkdavm.js → RecentlyLoadedNodesWidget-5538JENZ.js} +2 -2
- package/dist/{RecentlyLoadedNodesWidget-Bwmkdavm.js.map → RecentlyLoadedNodesWidget-5538JENZ.js.map} +1 -1
- package/dist/{RemindersCard-D1M4Z5Tm.js → RemindersCard-BVT2iuT4.js} +2 -2
- package/dist/{RemindersCard-D1M4Z5Tm.js.map → RemindersCard-BVT2iuT4.js.map} +1 -1
- package/dist/{RemindersScreen-BiRcMvRs.js → RemindersScreen-NaO3jhh9.js} +2 -2
- package/dist/{RemindersScreen-BiRcMvRs.js.map → RemindersScreen-NaO3jhh9.js.map} +1 -1
- package/dist/{RemindersWidget-DBgk6Ibq.js → RemindersWidget-cUps1X7r.js} +2 -2
- package/dist/{RemindersWidget-DBgk6Ibq.js.map → RemindersWidget-cUps1X7r.js.map} +1 -1
- package/dist/{Shell-DtiGFd4z.js → Shell-DbVTLfw8.js} +3 -3
- package/dist/{Shell-DtiGFd4z.js.map → Shell-DbVTLfw8.js.map} +1 -1
- package/dist/{Statistic-CdpPX5KV.js → Statistic-BMkpqkol.js} +2 -2
- package/dist/{Statistic-CdpPX5KV.js.map → Statistic-BMkpqkol.js.map} +1 -1
- package/dist/TokenGroupItem-DEZAU-Gs.js.map +1 -1
- package/dist/{TreeUtilities-BnHT4nq0.js → TreeUtilities-DWgARig7.js} +3 -3
- package/dist/{TreeUtilities-BnHT4nq0.js.map → TreeUtilities-DWgARig7.js.map} +1 -1
- package/dist/UI/accordion/index.js +2 -2
- package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js +2 -2
- package/dist/UI/dataDisplay/FluentDataTable/index.js +3 -3
- package/dist/UI/dataDisplay/entityHeader/index.js +3 -3
- package/dist/UI/dataDisplay/index.js +3 -3
- package/dist/UI/fileViewer/index.js +2 -2
- package/dist/UI/index.js +6 -6
- package/dist/UI/mapLayout/ui/index.js +2 -2
- package/dist/UI/templates/ui/renderers/index.js +2 -2
- package/dist/UI/timeline/fluentTimeline/index.js +2 -2
- package/dist/UI/timeline/index.js +2 -2
- package/dist/UI/widgets/library/RecentlyLoadedNodesWidget/index.js +4 -4
- package/dist/UI/widgets/library/RemindersWidget/index.js +3 -3
- package/dist/{UdpDataBrowserPage-BlxXko_I.js → UdpDataBrowserPage-8NLQuSA9.js} +2 -2
- package/dist/{UdpDataBrowserPage-BlxXko_I.js.map → UdpDataBrowserPage-8NLQuSA9.js.map} +1 -1
- package/dist/{UdpInquiryMaintenanceEnginePage-hLsxBDt2.js → UdpInquiryMaintenanceEnginePage-CgfEuu7m.js} +2 -2
- package/dist/{UdpInquiryMaintenanceEnginePage-hLsxBDt2.js.map → UdpInquiryMaintenanceEnginePage-CgfEuu7m.js.map} +1 -1
- package/dist/{UdpMaintenanceEnginePage-CWdToHMY.js → UdpMaintenanceEnginePage-BrWw5TD0.js} +2 -2
- package/dist/{UdpMaintenanceEnginePage-CWdToHMY.js.map → UdpMaintenanceEnginePage-BrWw5TD0.js.map} +1 -1
- package/dist/{UdpNotesPage-DVow0aLq.js → UdpNotesPage-DfICgZRs.js} +2 -2
- package/dist/{UdpNotesPage-DVow0aLq.js.map → UdpNotesPage-DfICgZRs.js.map} +1 -1
- package/dist/{UdpPages-DS_z-6mU.js → UdpPages-CZRR6uL_.js} +9 -9
- package/dist/{UdpPages-DS_z-6mU.js.map → UdpPages-CZRR6uL_.js.map} +1 -1
- package/dist/{UdpRemindersPage-CYBm84GL.js → UdpRemindersPage-KAHur1Oo.js} +2 -2
- package/dist/{UdpRemindersPage-CYBm84GL.js.map → UdpRemindersPage-KAHur1Oo.js.map} +1 -1
- package/dist/{UdpRoutes-98S-kqBV.js → UdpRoutes-BvnliB-h.js} +3 -3
- package/dist/{UdpRoutes-98S-kqBV.js.map → UdpRoutes-BvnliB-h.js.map} +1 -1
- package/dist/{UdpVerticalManagementPage-D9bK-UMW.js → UdpVerticalManagementPage-hpHkwE6I.js} +2 -2
- package/dist/{UdpVerticalManagementPage-D9bK-UMW.js.map → UdpVerticalManagementPage-hpHkwE6I.js.map} +1 -1
- package/dist/{UdpVerticalManagementSidesheet-DQJpNJaQ.js → UdpVerticalManagementSidesheet-CVU_tQ17.js} +2 -2
- package/dist/{UdpVerticalManagementSidesheet-DQJpNJaQ.js.map → UdpVerticalManagementSidesheet-CVU_tQ17.js.map} +1 -1
- package/dist/{WorkflowContainer-hbA-EyK-.js → WorkflowContainer-CNAbhsJK.js} +2 -2
- package/dist/{WorkflowContainer-hbA-EyK-.js.map → WorkflowContainer-CNAbhsJK.js.map} +1 -1
- package/dist/{WorkflowContainer-CzQerfwt.js → WorkflowContainer-DNf1UcY5.js} +3 -3
- package/dist/{WorkflowTreeMenu-BDolYqHx.js → WorkflowTreeMenu-U3JYFWVn.js} +2 -2
- package/dist/{WorkflowTreeMenu-BDolYqHx.js.map → WorkflowTreeMenu-U3JYFWVn.js.map} +1 -1
- package/dist/actions/index.js +6 -6
- package/dist/componentSystems/multiThreadTimeline/index.js +5 -5
- package/dist/componentSystems/multiThreadTimeline/mttMainTimeline/index.js +3 -3
- package/dist/componentSystems/multiThreadTimeline/mttSummary/index.js +4 -4
- package/dist/componentSystems/multiThreadTimeline/ui/index.js +3 -3
- package/dist/index.js +39 -39
- package/dist/inquiry/dashboard/index.js +3 -3
- package/dist/inquiry/index.js +9 -9
- package/dist/{inquiry-KrLF1JVq.js → inquiry-BurQFtZD.js} +44 -21
- package/dist/inquiry-BurQFtZD.js.map +1 -0
- package/dist/menuPage/index.js +4 -4
- package/dist/notes/index.js +2 -2
- package/dist/reminders/index.js +3 -3
- package/dist/routes/index.js +1 -1
- package/dist/shell/index.js +8 -8
- package/dist/treeMenu/index.js +2 -2
- package/dist/types/src/inquiry/InquiryContainer.d.ts.map +1 -1
- package/dist/types/src/utilities/tree/TreeUtilities.d.ts +1 -1
- package/dist/types/src/utilities/tree/TreeUtilities.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/udp/pages/UdpDataBrowserPage/index.js +2 -2
- package/dist/udp/pages/UdpGridPanelManagementPage/index.js +2 -2
- package/dist/udp/pages/UdpInquiryMaintenanceEnginePage/index.js +11 -11
- package/dist/udp/pages/UdpMaintenanceEnginePage/index.js +10 -10
- package/dist/udp/pages/UdpNotesPage/index.js +3 -3
- package/dist/udp/pages/UdpPages/index.js +20 -20
- package/dist/udp/pages/UdpRemindersPage/index.js +3 -3
- package/dist/udp/pages/UdpVerticalManagementPage/index.js +3 -3
- package/dist/udp/pages/UdpVerticalManagementSidesheet/index.js +2 -2
- package/dist/udp/pages/index.js +20 -20
- package/dist/utilities/form/paymentForm/index.js +2 -2
- package/dist/utilities/provider/index.js +6 -6
- package/dist/utilities/tree/index.js +1 -1
- package/dist/workflow/index.js +3 -3
- package/dist/workflow/menus/index.js +2 -2
- package/export-map.json +1 -1
- package/package.json +1 -1
- package/dist/inquiry-KrLF1JVq.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeUtilities-BnHT4nq0.js","names":["uuid","property","searchIdentifier"],"sources":["../src/utilities/tree/TreeUtilities.js"],"sourcesContent":["import * as Icons from '@fluentui/react-icons';\nimport { cloneDeep, orderBy } from 'lodash';\nimport { v4 as uuid } from 'uuid';\nimport { evaluateRule, mapRule } from '../rules/RuleUtilities';\nimport {\n getSearchIdentifiers,\n getSearchObject\n} from '../search/SearchUtilities';\nimport { toLowerFirstChar, toUpperFirstChar } from '../input/StringUtilities';\nimport {\n CardinalityTypeEnums,\n NodeGroupTypeEnums,\n NodeGroupOutlierEnums\n} from '../../enums/unitySystemEnums';\nimport GroupNode from '../../models/GroupNode';\n\nexport const makeTreeStructure = (\n treeData,\n key,\n parentKey,\n parentGroupKey = 'parentGroupId'\n) => {\n if (!treeData) {\n return [];\n }\n const keys = [];\n\n treeData.forEach((node) => {\n node.children = [];\n if (node['isExpanded'] === undefined && !node.isGroupNode) {\n if (\n node.properties.defaultDisplay === 'collapsed' ||\n node.properties.lazyLoad\n ) {\n node.isExpanded = false;\n } else {\n node.isExpanded = true;\n }\n }\n keys.push(node[key]);\n });\n const roots = treeData.filter((node) => {\n return !(node?.isGroupNode ? node[parentGroupKey] : node[parentKey]);\n });\n const nodes = [];\n const existingGroups = [];\n roots.forEach((root) => {\n nodes.push(root);\n });\n while (nodes.length > 0) {\n const node = nodes.pop();\n let children = treeData.filter(\n (data) =>\n data[parentKey] === node[key] || data[parentGroupKey] === node[key]\n );\n children.forEach((child) => {\n if (child?.isGroupNode) {\n const existingGroup = existingGroups.find(\n (eg) => eg.id === child.id && eg.parentGroupId === child.parentGroupId\n );\n if (!existingGroup) {\n existingGroups.push(child);\n node.children.push(child);\n nodes.push(child);\n }\n } else {\n if (\n (node.isGroupNode && child.parentGroupId) ||\n (!node.isGroupNode && !child.parentGroupId)\n ) {\n node.children.push(child);\n nodes.push(child);\n }\n }\n });\n }\n\n const removeEmptyGroupNodes = (node) => {\n if (node?.isGroupNode && node?.hideEmptyGroups && !node?.children?.length) {\n return null;\n }\n node.children = node.children\n .map(removeEmptyGroupNodes)\n .filter((child) => child !== null);\n return node;\n };\n\n const filteredRoots = roots\n .map(removeEmptyGroupNodes)\n .filter((root) => root !== null);\n if (filteredRoots.length === 1) return filteredRoots[0];\n return filteredRoots;\n};\n\nexport const makeTreeStaticGroupStructure = (\n treeData,\n key,\n parentKey,\n groupType = NodeGroupTypeEnums.Static,\n hideEmptyGroups\n) => {\n if (!treeData) {\n return [];\n }\n const keys = [];\n\n treeData.forEach((node, index) => {\n const {\n id,\n hideEmptyGroups,\n children,\n apiMethodInstanceId,\n parentGroupId,\n order,\n isExpanded,\n ...groupProperties\n } = node;\n treeData[index] = new GroupNode({\n id: id,\n groupType,\n children,\n parentId: parentGroupId,\n parentGroupId,\n isExpanded,\n properties: { ...groupProperties }\n });\n\n keys.push(node[key]);\n });\n const roots = treeData.filter((node) => keys.indexOf(node[parentKey]) === -1);\n const nodes = [];\n roots.forEach((root) => {\n nodes.push(root);\n });\n while (nodes.length > 0) {\n const node = nodes.pop();\n let children = treeData.filter((data) => data[parentKey] === node[key]);\n children.forEach((child) => {\n node.children.push(child);\n nodes.push(child);\n });\n }\n if (roots.length === 1) return roots[0];\n return roots;\n};\n\nexport const makeDynamicGroupStructures = (treeStructure, results) => {\n if (!treeStructure) {\n return [];\n }\n const groupStructures = [];\n results.forEach((item) => {\n processDynamicGroupForCurrentNodeLevel(\n item,\n treeStructure,\n groupStructures,\n groupStructures\n );\n });\n\n return groupStructures;\n};\n\nconst processDynamicGroupForCurrentNodeLevel = (\n item,\n node,\n groupStructures,\n previousFilteredGroups = []\n) => {\n const { property, id } = node;\n const label = property ? getLabelFromProperty(item, property) : null;\n // stores the next set of nodes for the current level of the tree\n let filteredGroups = [];\n previousFilteredGroups.forEach((group) => {\n if (group) {\n const foundGroups = findNodesByIdAndLabel(group, id, label);\n if (foundGroups.length) {\n filteredGroups = filteredGroups.concat(foundGroups);\n }\n }\n });\n if (filteredGroups.length) {\n if (node?.children?.length) {\n node.children.forEach((child) =>\n processDynamicGroupForCurrentNodeLevel(\n item,\n child,\n groupStructures,\n filteredGroups\n )\n );\n }\n } else {\n if (label) {\n const dynamicGroupTree = makeDynamicGroupTree(node, item);\n if (node.parentGroupId) {\n // find the parent group structure and make it's children = dynamicGroupTree\n previousFilteredGroups.forEach((filteredGroup) => {\n const matchingGroupNode = findNodeById(\n filteredGroup,\n node.parentGroupId\n );\n if (matchingGroupNode) {\n // set the parentGroupId of the groupTree to matchingGroupNode parent in case\n // parentGroupId does not exist\n dynamicGroupTree.parentGroupId = matchingGroupNode.id;\n matchingGroupNode.children.push(dynamicGroupTree);\n }\n });\n } else {\n groupStructures.push(dynamicGroupTree);\n }\n }\n }\n};\n\nconst makeDynamicGroupTree = (node, item, parentGroupNode) => {\n const {\n id,\n children,\n apiMethodInstanceId,\n parentGroupId,\n order,\n property,\n label,\n isExpanded,\n ...groupProperties\n } = node;\n const updatedLabel = property ? getLabelFromProperty(item, property) : null;\n if (updatedLabel) {\n const groupNode = new GroupNode({\n id: `${id}`,\n groupType: NodeGroupTypeEnums.Dynamic,\n children: [],\n parentGroupId: parentGroupNode?.id || null,\n isExpanded,\n properties: {\n label: updatedLabel,\n ...groupProperties,\n propertyKey: property\n }\n });\n if (parentGroupNode) {\n parentGroupNode.children.push(groupNode);\n }\n if (children?.length) {\n children.forEach((child) => makeDynamicGroupTree(child, item, groupNode));\n }\n\n return groupNode;\n }\n};\n\nexport const makeDynamicTreeStructure = (treeData, key, parentKey) => {\n if (!treeData) {\n return [];\n }\n const keys = [];\n\n treeData.forEach((node, index) => {\n keys.push(node[key]);\n });\n const roots = treeData.filter((node) => keys.indexOf(node[parentKey]) === -1);\n const nodes = [];\n roots.forEach((root) => {\n nodes.push(root);\n });\n while (nodes.length > 0) {\n const node = nodes.pop();\n let children = treeData.filter((data) => data[parentKey] === node[key]);\n children.forEach((child) => {\n node.children.push(child);\n nodes.push(child);\n });\n }\n if (roots.length === 1) return roots[0];\n return roots;\n};\n\nexport const getIconFromName = (name) => {\n if (!name) {\n return null;\n }\n const substr = name.slice(-4);\n if (substr.toLowerCase() !== 'icon') {\n const updatedName = `${name}Icon`;\n return Icons[updatedName] || null;\n } else {\n return Icons[name] || null;\n }\n};\n\nexport const findLastNode = (tree) => {\n let result = null;\n if (!tree?.children?.length) {\n return tree;\n } else {\n if (tree?.children) {\n tree.children.forEach((node) => (result = findLastNode(node)));\n }\n return result;\n }\n};\n\nexport const searchTree = (tree, id) => {\n let result = null;\n if (tree.id === id) {\n return tree;\n } else {\n if (tree.children) {\n tree.children.some((node) => (result = searchTree(node, id)));\n }\n return result;\n }\n};\n\nexport const deleteNode = (treeData, nodeId) => {\n const updatedTreeData = [...treeData];\n const foundNode = updatedTreeData.find((node) => node.id === nodeId);\n const nodeIndex = updatedTreeData.findIndex((node) => node.id === nodeId);\n\n // If it's node is first or last...\n if (\n !foundNode.parentId ||\n !updatedTreeData.some((node) => node.parentId === nodeId)\n ) {\n if (nodeIndex > -1) {\n // Delete the node\n updatedTreeData.splice(nodeIndex, 1);\n }\n const immediateChild = updatedTreeData.find(\n (node) => node.parentId === nodeId\n );\n // Set the immediate child's parent id to null\n if (immediateChild) {\n immediateChild.parentId = null;\n }\n } else {\n foundNode.isDeleted = true;\n foundNode.properties = {};\n }\n return updatedTreeData;\n};\n\nexport const deleteNodeAndChildren = (treeData, nodeId) => {\n const updatedTreeData = [...treeData];\n const nodeIdsToDelete = [];\n nodeIdsToDelete.push(nodeId);\n getAllChildrenNodesToDelete(updatedTreeData, nodeId, nodeIdsToDelete);\n return updatedTreeData.filter((node) => !nodeIdsToDelete.includes(node.id));\n};\n\nexport const getAllChildrenNodesToDelete = (\n treeData,\n nodeId,\n nodeIdsToDelete\n) => {\n const nodesToDelete = treeData.filter((node) => node.parentId === nodeId);\n nodesToDelete.forEach((node) => {\n nodeIdsToDelete.push(node.id);\n getAllChildrenNodesToDelete(treeData, node.id, nodeIdsToDelete);\n });\n};\n\nexport const processCatalogObjectKeysInOrder = (tree, keys) => {\n if (!tree?.children?.length) {\n keys.push(tree?.properties?.catalogObjectKey);\n } else {\n if (tree?.children) {\n if (tree?.properties?.catalogObjectKey) {\n keys.push(tree?.properties?.catalogObjectKey);\n }\n tree.children.forEach((node) =>\n processCatalogObjectKeysInOrder(node, keys)\n );\n }\n }\n};\n\nexport const processOrderedTreeData = (tree, treeData) => {\n if (!tree?.children?.length) {\n treeData.push(tree);\n } else {\n if (tree?.children) {\n treeData.push(tree);\n tree.children.forEach((node) => processOrderedTreeData(node, treeData));\n }\n }\n};\n\n// treeData is ordered by heirarchy\nexport const processObjectToTree = (\n result,\n treeData,\n objectReferenceKeys,\n treeList,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n) => {\n const treeArr = { ...treeData };\n processReferences(\n result,\n objectReferenceKeys,\n treeArr,\n 0,\n treeList,\n null,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n );\n};\n\n/*\n example parameters:\n objectReferenceKeys : [\"customers\", \"customerAccounts\", \"usagePoints\"]\n*/\nexport const processReferences = (\n reference,\n objectReferenceKeys,\n treeData,\n index,\n treeList,\n parentId,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n) => {\n const newIndex = index + 1;\n if (reference) {\n let node = parentId ? treeData[newIndex] : treeData[0];\n let nodeGroups = [];\n if (parentId) {\n if (\n node?.properties?.groupConfiguration?.groupType ===\n NodeGroupTypeEnums.Static\n ) {\n nodeGroups = constructStaticNodeGroups(node, true);\n } else if (\n node?.properties?.groupConfiguration?.groupType ===\n NodeGroupTypeEnums.Dynamic\n ) {\n nodeGroups = constructDynamicNodeGroups(reference, node, true);\n }\n }\n if (Array.isArray(reference) && reference.length) {\n reference.forEach((ref, i) => {\n if (node) {\n const nodeCopy = cloneDeep(node);\n processObjIndex(\n nodeCopy,\n ref,\n i,\n parentId,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n );\n if (nodeGroups.length) {\n if (\n node?.properties?.groupConfiguration?.groupType ===\n NodeGroupTypeEnums.Static\n ) {\n const groupedItemIndexes = new Set();\n let processedItem = { itemAdded: false, nodeChildren: [] };\n nodeGroups.forEach((nodeGroup) => {\n let nodeGroupChildren = [];\n processedItem = processItemForStaticNodeGroup(\n nodeGroup,\n ref,\n groupedItemIndexes,\n nodeCopy,\n i,\n new Set(),\n treeList\n );\n nodeGroupChildren = nodeGroupChildren.concat(\n processedItem.nodeChildren\n );\n mapNodeGroupChildren(nodeGroup, nodeGroupChildren);\n nodeGroup.parentGroupId = nodeCopy.parentId;\n });\n if (\n !processedItem.itemAdded &&\n node?.properties?.groupConfiguration?.outlier ===\n NodeGroupOutlierEnums.Individual\n ) {\n const nodeIsHidden = checkNodeIsHidden(\n nodeCopy,\n ref,\n wasLazyLoaded\n );\n !nodeIsHidden && treeList.push(nodeCopy);\n }\n } else if (\n node?.properties?.groupConfiguration?.groupType ===\n NodeGroupTypeEnums.Dynamic\n ) {\n // Handle constructing dynamic node groups\n // There's a nodeCopy and we want to check what group it belongs to\n nodeGroups.forEach((nodeGroup) => {\n nodeGroup.parentGroupId = nodeCopy.parentId;\n nodeGroup.parentId = nodeCopy.parentId;\n processGroupNodesAndAddToTreeList(\n nodeGroup,\n treeList,\n nodeCopy.parentId,\n ref,\n wasLazyLoaded\n );\n });\n }\n } else {\n const nodeIsHidden = checkNodeIsHidden(\n nodeCopy,\n ref,\n wasLazyLoaded\n );\n !nodeIsHidden && treeList.push(nodeCopy);\n }\n\n if (nodeCopy?.children?.length) {\n const objectReferenceKeysCopy = [...objectReferenceKeys];\n nodeCopy.children.forEach((childNode, i) => {\n const catalogObjectKey = childNode?.properties?.catalogObjectKey;\n const nextIndex =\n objectReferenceKeysCopy.indexOf(catalogObjectKey);\n if (!parentId) {\n objectReferenceKeysCopy[nextIndex] = null;\n }\n processReferences(\n ref[catalogObjectKey],\n objectReferenceKeys,\n treeData,\n nextIndex,\n treeList,\n nodeCopy.id,\n catalogObjects,\n promotedEntities,\n nodeCopy.properties.lazyLoad\n );\n });\n }\n }\n });\n } else if (typeof reference === 'object' && !Array.isArray(reference)) {\n processObjIndex(\n node,\n reference,\n 0,\n parentId,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n );\n if (node) {\n const nodeCopy = cloneDeep(node);\n const nodeIsHidden = checkNodeIsHidden(\n nodeCopy,\n reference,\n wasLazyLoaded\n );\n !nodeIsHidden && treeList.push(nodeCopy);\n if (nodeCopy?.children?.length) {\n const objectReferenceKeysCopy = [...objectReferenceKeys];\n nodeCopy.children.forEach((childNode, i) => {\n const catalogObjectKey = childNode?.properties?.catalogObjectKey;\n const nextIndex = parentId\n ? newIndex\n : objectReferenceKeysCopy.indexOf(catalogObjectKey);\n if (!parentId) {\n objectReferenceKeysCopy[nextIndex] = null;\n }\n processReferences(\n reference[catalogObjectKey],\n objectReferenceKeys,\n treeData,\n nextIndex,\n treeList,\n nodeCopy.id,\n catalogObjects,\n promotedEntities,\n nodeCopy.properties.lazyLoad\n );\n });\n }\n }\n }\n }\n};\n\n// Updates current node object properties with data it needs to be rendered\nexport const processObjIndex = (\n node,\n obj,\n index,\n parentId,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n) => {\n if (node.properties.conditionalNodeIconExpression) {\n const conditionalNodeIcon = evaluateRule(\n node.properties.conditionalNodeIconExpression,\n obj,\n node.properties?.joiningEntityCatalogObjectKey,\n wasLazyLoaded\n );\n if (conditionalNodeIcon) {\n node.properties['conditionalNodeIconName'] =\n conditionalNodeIcon?.name || '';\n node.properties['conditionalNodeIconColor'] =\n conditionalNodeIcon?.iconColor?.hex;\n node.properties['conditionalNodeIconType'] =\n conditionalNodeIcon?.type || '';\n } else {\n // explicitly sets it to empty string due to other conditional icons setting the node properties\n node.properties['conditionalNodeIconName'] = '';\n node.properties['conditionalNodeIconColor'] = '';\n node.properties['conditionalNodeIconType'] = '';\n }\n }\n // due to the original adornments being stored as conditionalIcons, we need to check the conditionalIconExpression as a fallback\n if (\n node.properties.conditionalNodeAdornmentExpression ||\n node.properties.conditionalIconExpression\n ) {\n const conditionalNodeAdornment = node.properties\n .conditionalNodeAdornmentExpression\n ? evaluateRule(\n node.properties.conditionalNodeAdornmentExpression,\n obj,\n node.properties?.joiningEntityCatalogObjectKey,\n wasLazyLoaded\n )\n : evaluateRule(\n node.properties.conditionalIconExpression,\n obj,\n node.properties?.joiningEntityCatalogObjectKey,\n wasLazyLoaded\n );\n\n if (conditionalNodeAdornment) {\n node.properties['conditionalNodeAdornmentName'] =\n conditionalNodeAdornment?.name || '';\n node.properties['conditionalNodeAdornmentColor'] =\n conditionalNodeAdornment?.iconColor?.hex;\n node.properties['conditionalNodeAdornmentType'] =\n conditionalNodeAdornment?.type || '';\n } else {\n // explicitly sets it to empty string due to other conditional icons setting the node properties\n node.properties['conditionalNodeAdornmentName'] = '';\n node.properties['conditionalNodeAdornmentColor'] = '';\n node.properties['conditionalNodeAdornmentType'] = '';\n }\n }\n\n if (node.properties.catalogReturnObject) {\n let searchIdentifiers = getSearchIdentifiers(\n catalogObjects,\n node.properties.catalogReturnObject\n );\n node.properties['searchIdentifier'] = searchIdentifiers?.join(',');\n const associatedTreePrimaryKeyMap =\n node.properties.associatedTreePrimaryKeyMap;\n if (!!associatedTreePrimaryKeyMap) {\n searchIdentifiers = Object.keys(associatedTreePrimaryKeyMap);\n node.properties['searchIdentifier'] = searchIdentifiers;\n }\n\n node.properties['filterElements'] = [];\n const searchValues = [];\n const joiningEntityCatalogObjectKey =\n node?.properties?.joiningEntityCatalogObjectKey;\n searchIdentifiers.forEach((searchIdentifier) => {\n const searchField = searchIdentifier\n ? searchIdentifier.charAt(0).toUpperCase() + searchIdentifier.slice(1)\n : '';\n let searchValue = '';\n let si = associatedTreePrimaryKeyMap?.[searchIdentifier]\n ? associatedTreePrimaryKeyMap?.[searchIdentifier]\n : searchIdentifier;\n if (obj[si]) {\n searchValue = obj[si];\n } else if (joiningEntityCatalogObjectKey) {\n searchValue = obj[joiningEntityCatalogObjectKey]\n ? obj[joiningEntityCatalogObjectKey][si]\n : '';\n }\n node.properties['filterElements'].push({\n searchField: searchField,\n searchOperator: '=',\n searchValue: searchValue ?? ''\n });\n searchValues.push(searchValue);\n });\n node.properties['searchValue'] = searchValues.toString();\n }\n node.properties['nodeLabel'] = getDisplayName(node, obj);\n node.properties['nodeSubLabel'] = getDisplayDetails(node, obj);\n node.properties['headerTitle'] = getHeaderTitle(node, obj);\n\n node.parentId = parentId;\n node['entityNodeParentId'] = parentId;\n node.id = uuid();\n node.nodeObj = obj;\n\n if (node?.properties?.lazyLoad) {\n node.lazyLoadChildrenArr = getLazyLoadChildrenArr(\n node,\n catalogObjects,\n promotedEntities\n );\n }\n};\n\nconst getEntityAssoc = (nodeEntity, node) => {\n let entityAssoc = null;\n if (nodeEntity) {\n const referenceProperty = nodeEntity.properties.find((property) => {\n if (node.properties?.joiningEntityName) {\n return property.reference === node.properties?.joiningEntityName;\n } else {\n return property.reference === node.properties?.catalogReturnObject;\n }\n });\n entityAssoc = referenceProperty\n ? referenceProperty.extendedProperties?.childEntityAssoc\n : null;\n }\n return entityAssoc;\n};\n\nexport const getLazyLoadChildrenArr = (\n node,\n catalogObjects,\n promotedEntities\n) => {\n const lazyLoadChildrenArr = [];\n let defaultSearchIdentifiers = [];\n if (node?.properties?.catalogReturnObject) {\n defaultSearchIdentifiers = getSearchIdentifiers(\n catalogObjects,\n node.properties.catalogReturnObject\n );\n }\n node &&\n node.children &&\n node.children.forEach((childNode) => {\n const lazyNodeSearchObj = {\n apiMethodId: null,\n data: null,\n parentNodeRefKey: childNode.properties?.catalogObjectKey,\n catalogReturnObject: childNode.properties?.catalogReturnObject\n };\n const entityName = childNode.properties?.catalogReturnObject;\n const promotedEntity = promotedEntities?.find(\n (pe) => pe.entityName === entityName\n );\n let searchIdentifiers = [];\n const filterElements = [];\n if (promotedEntity) {\n // Use base search method to be the method for lazy loading node\n let baseSearch = promotedEntity.unityBaseSearchMethod;\n // Used for many-to-many subsequent entity search\n let childBaseSearch = promotedEntity.unityBaseSearchMethod;\n const nodeEntity = catalogObjects?.find(\n (co) => co.catalogObjectName === node.properties?.catalogReturnObject\n );\n let isManyToManySearch = false;\n let usingJoiningTableForSearch = false;\n if (nodeEntity) {\n const childEntityAssoc = getEntityAssoc(nodeEntity, childNode);\n let joiningEntityName = null;\n let promotedEntityForJoiningTable = null;\n // process many-to-many association to get the joined table information\n if (\n childEntityAssoc.Cardinality === CardinalityTypeEnums.Many_To_Many\n ) {\n isManyToManySearch = true;\n lazyNodeSearchObj['manyToManyKeys'] = [];\n joiningEntityName = childNode.properties?.joiningEntityName;\n promotedEntityForJoiningTable = promotedEntities?.find(\n (pe) => pe.entityName === joiningEntityName\n );\n\n // if there is a many-to-many joining table search method, we should use that for searching\n if (promotedEntityForJoiningTable?.unityBaseSearchMethod) {\n baseSearch = promotedEntityForJoiningTable.unityBaseSearchMethod;\n // this is basically the property that identifies whether or not to make an additional network call\n // to get the entity data\n lazyNodeSearchObj.manyToManyJointEntityApiMethodId =\n childBaseSearch?.apiMethodId;\n usingJoiningTableForSearch = true;\n }\n\n const childNodeEntity = catalogObjects.find(\n (co) =>\n co.catalogObjectName ===\n childNode.properties?.catalogReturnObject\n );\n\n const entityAssoc = getEntityAssoc(childNodeEntity, childNode);\n if (entityAssoc && Object.keys(entityAssoc).length) {\n entityAssoc.Keys.forEach((keyVal) => {\n const keyValArr = keyVal.split(',');\n const foreignKeyName = keyValArr[0] ? keyValArr[0].trim() : '';\n const parentIdentifierName = keyValArr[1]\n ? keyValArr[1].trim()\n : '';\n const searchValueKey = /^[A-Z]*$/.test(parentIdentifierName)\n ? parentIdentifierName.toLowerCase()\n : toLowerFirstChar(parentIdentifierName);\n lazyNodeSearchObj['manyToManyKeys'].push({\n searchItemIdentifier: usingJoiningTableForSearch\n ? /^[A-Z]*$/.test(foreignKeyName)\n ? foreignKeyName.toLowerCase()\n : toLowerFirstChar(foreignKeyName)\n : searchValueKey,\n searchNameKey: foreignKeyName,\n // check name string: if 1 word, lowercase. if 2 words, lower first char\n searchValueKey: searchValueKey\n });\n });\n }\n }\n\n if (childEntityAssoc && Object.keys(childEntityAssoc).length) {\n childEntityAssoc.Keys.forEach((keyVal) => {\n const keyValArr = keyVal.split(',');\n let searchJoiningEntity = '';\n if (\n !isManyToManySearch &&\n node.nodeObj.hasOwnProperty(\n node.properties.joiningEntityCatalogObjectKey\n )\n ) {\n searchJoiningEntity =\n node.properties.joiningEntityCatalogObjectKey;\n }\n const foreignKeyName = keyValArr[0] ? keyValArr[0].trim() : '';\n const parentIdentifierName = keyValArr[1]\n ? keyValArr[1].trim()\n : '';\n let siObj = {\n searchNameKey: parentIdentifierName,\n // check name string: if 1 word, lowercase. if 2 words, lower first char\n searchValueKey: /^[A-Z]*$/.test(foreignKeyName)\n ? foreignKeyName.toLowerCase()\n : toLowerFirstChar(foreignKeyName),\n searchJoiningEntity: searchJoiningEntity\n };\n if (isManyToManySearch && !usingJoiningTableForSearch) {\n siObj = {\n searchNameKey: foreignKeyName,\n // check name string: if 1 word, lowercase. if 2 words, lower first char\n searchValueKey: /^[A-Z]*$/.test(foreignKeyName)\n ? foreignKeyName.toLowerCase()\n : toLowerFirstChar(foreignKeyName)\n };\n }\n if (isManyToManySearch) {\n if (\n childNode.properties?.catalogObjectKey &&\n childNode.properties?.joiningEntityCatalogObjectLeftKey\n ) {\n siObj['joiningEntityKeyName'] = toUpperFirstChar(\n !usingJoiningTableForSearch\n ? childNode.properties?.joiningEntityChildKey\n : childNode.properties?.catalogObjectKey\n );\n siObj['joiningEntityCatalogObjectLeftKeyName'] =\n toUpperFirstChar(\n childNode.properties?.joiningEntityCatalogObjectLeftKey\n );\n }\n if (promotedEntityForJoiningTable?.unityBaseSearchMethod) {\n siObj['joiningEntityKeyName'] = null;\n siObj['joiningEntityCatalogObjectLeftKeyName'] = null;\n }\n }\n searchIdentifiers.push(siObj);\n });\n }\n }\n\n // If there are no search identifiers, then use the default one retrieved from catalog entities\n if (!searchIdentifiers.length) {\n defaultSearchIdentifiers.forEach((searchIdentifier) => {\n const siObj = {\n searchNameKey: searchIdentifier,\n searchValueKey: searchIdentifier\n };\n if (\n childNode.properties?.catalogObjectKey &&\n childNode.properties?.joiningEntityCatalogObjectLeftKey\n ) {\n siObj['joiningEntityKeyName'] = toUpperFirstChar(\n childNode.properties?.catalogObjectKey\n );\n siObj['joiningEntityCatalogObjectLeftKeyName'] = toUpperFirstChar(\n childNode.properties?.joiningEntityCatalogObjectLeftKey\n );\n }\n searchIdentifiers.push(siObj);\n });\n }\n\n searchIdentifiers.forEach((si) => {\n // value come's from parent node object\n let searchValue = '';\n if (si?.searchJoiningEntity) {\n searchValue =\n node.nodeObj[si.searchJoiningEntity][si.searchValueKey];\n } else {\n if (usingJoiningTableForSearch) {\n const joiningEntityCatalogObjectKey =\n node?.properties?.joiningEntityCatalogObjectKey;\n const value = node?.nodeObj?.[joiningEntityCatalogObjectKey];\n searchValue = value\n ? value[si.searchValueKey]\n : node.nodeObj[si.searchValueKey];\n } else {\n searchValue = node.nodeObj[si.searchValueKey];\n }\n }\n let formattedPropertyName = toUpperFirstChar(si.searchNameKey);\n if (\n si['joiningEntityKeyName'] &&\n si['joiningEntityCatalogObjectLeftKeyName']\n ) {\n formattedPropertyName = `${si['joiningEntityKeyName']}.${si['joiningEntityCatalogObjectLeftKeyName']}.${formattedPropertyName}`;\n }\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: searchValue,\n searchOperator: '='\n });\n });\n lazyNodeSearchObj.data = getSearchObject(filterElements, 1, 50);\n lazyNodeSearchObj.apiMethodId = baseSearch?.apiMethodId || null;\n lazyLoadChildrenArr.push(lazyNodeSearchObj);\n } else {\n console.log('Error: Promote ' + entityName + ' entity');\n node.errorRetrievingChildren =\n 'Error: Promote ' + entityName + ' child entity';\n }\n });\n return lazyLoadChildrenArr;\n};\n\nexport const formatTreeMenuItem = (\n responseObject,\n treeStructure,\n catalogObjects,\n promotedEntities,\n associatedInquiryTree,\n wasLazyLoaded\n) => {\n if (!responseObject) return null;\n const tree = cloneDeep(treeStructure);\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(\n responseObject,\n orderedTreeData,\n orderedKeys,\n treeArr,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n );\n\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n displayTree['associatedInquiryTree'] = associatedInquiryTree;\n displayTree['wasLazyLoaded'] = wasLazyLoaded;\n return displayTree;\n};\n\nexport const expandAllNodes = (tree) => {\n tree.isExpanded = true;\n if (tree?.children) {\n tree.children.forEach((node) => expandAllNodes(node));\n }\n};\n\nexport const collapseAllNodes = (tree) => {\n tree.isExpanded = false;\n if (tree?.children) {\n tree.children.forEach((node) => collapseAllNodes(node));\n }\n};\n\nexport const findAllParentIds = (\n menuItems,\n currentParentNode,\n allParentIds = []\n) => {\n if (currentParentNode?.parentId) {\n allParentIds.push(currentParentNode?.parentId);\n const newParentNode = searchTree(menuItems, currentParentNode?.parentId);\n findAllParentIds(menuItems, newParentNode, allParentIds);\n }\n\n return allParentIds;\n};\n\nexport const formatTreeLabel = (label, obj) => {\n const fields = label?.split('+');\n const keys = fields?.map((field) => field.trim());\n if (keys) {\n const skippableKeys = [];\n const updatedKeys = keys.map((key, index) => {\n const matchedKey = key.charAt(0) === '\"';\n if (matchedKey) {\n skippableKeys.push(index);\n key = key.replace(/\"/g, '');\n }\n return key;\n });\n const values = [];\n for (let j = 0; j < keys.length; j++) {\n let property = keys[j];\n if (property) {\n const splitProperties = property.split('.');\n if (splitProperties.length > 1) {\n let constructedValue = null;\n splitProperties.forEach((property) => {\n const matches = property.match(/\\[(.*?)\\]/);\n let objIndex = null;\n let arrIndex = null;\n if (matches) {\n arrIndex = parseInt(matches[1]);\n objIndex = matches.index;\n }\n if (typeof arrIndex === 'number' && objIndex) {\n const formattedProperty = property.substring(0, objIndex);\n if (!constructedValue) {\n if (obj[formattedProperty]) {\n constructedValue = obj[formattedProperty][arrIndex];\n }\n } else {\n if (constructedValue[formattedProperty]) {\n constructedValue =\n constructedValue[formattedProperty][arrIndex];\n }\n }\n } else {\n if (!constructedValue) {\n constructedValue = obj[property];\n } else {\n constructedValue = constructedValue[property];\n }\n }\n });\n if (\n typeof constructedValue === 'boolean' ||\n typeof constructedValue === 'number'\n ) {\n constructedValue = constructedValue.toString();\n }\n values.push(constructedValue);\n continue;\n }\n }\n let value = obj[property];\n if (typeof value === 'boolean' || typeof value === 'number') {\n value = value.toString();\n }\n values.push(value);\n }\n let displayName = updatedKeys.join('+');\n for (let k = 0; k < updatedKeys.length; k++) {\n if (!skippableKeys.includes(k)) {\n if (values[k]) {\n displayName = displayName.replace(`${updatedKeys[k]}`, values[k]);\n } else {\n displayName = displayName.replace(`${updatedKeys[k]}`, '');\n }\n }\n }\n\n return displayName.replaceAll('+', ' ');\n } else {\n return label;\n }\n};\n\nexport const getDisplayName = (node, obj) => {\n return formatTreeLabel(node.properties['displayName'], obj);\n};\n\nexport const getDisplayDetails = (node, obj) => {\n return formatTreeLabel(node.properties['displayDetails'], obj);\n};\n\nexport const getHeaderTitle = (node, obj) => {\n return formatTreeLabel(node.properties['headerName'], obj);\n};\n\nexport const searchForMatchingNode = (\n tree,\n nodeObj = {},\n searchIdentifiers = []\n) => {\n let result = null;\n let match = true;\n searchIdentifiers.forEach((searchIdentifier) => {\n if (tree?.nodeObj[searchIdentifier] !== nodeObj[searchIdentifier]) {\n match = false;\n }\n });\n if (match && searchIdentifiers.length) {\n return tree;\n } else {\n if (tree.children) {\n tree.children.some(\n (node) =>\n (result = searchForMatchingNode(node, nodeObj, searchIdentifiers))\n );\n }\n return result;\n }\n};\n\nexport const getNodeIdForRightBorder = (expandedNodeIds, node, parentId) => {\n if (!expandedNodeIds.includes(node?.id)) {\n return node.id;\n }\n if (!expandedNodeIds.includes(parentId)) {\n const foundParentNode = node.children.find((item) => item.id === parentId);\n if (foundParentNode) {\n if (expandedNodeIds.includes(foundParentNode?.parentId)) {\n return parentId;\n } else {\n return getNodeIdForRightBorder(\n expandedNodeIds,\n foundParentNode,\n foundParentNode?.parentId\n );\n }\n }\n } else {\n return parentId;\n }\n};\n\nexport const findNodeById = (tree, id) => {\n let result = null;\n if (tree?.id === id) {\n return tree;\n } else {\n if (tree.children) {\n tree.children.some((node) => (result = findNodeById(node, id)));\n }\n return result;\n }\n};\n\nexport const findNodeByIdAndLabel = (tree, id, label) => {\n let result = null;\n if (tree?.id === id && tree?.properties?.label === label) {\n return tree;\n } else {\n if (tree.children) {\n tree.children.some((node) => (result = findNodeById(node, id, label)));\n }\n return result;\n }\n};\n\nexport const findNodesByIdAndLabel = (tree, id, label) => {\n let results = [];\n if (tree?.id === id && tree?.properties?.label === label) {\n results.push(tree);\n }\n if (tree.children) {\n tree.children.forEach((node) => {\n results = results.concat(findNodesByIdAndLabel(node, id, label));\n });\n }\n return results;\n};\n\nconst updateNodeForStaticGrouping = (\n displayTree,\n nodeGroup,\n nodeChildren,\n treeList,\n scopedGroupItemIndexes,\n groupedItemIndexes,\n index,\n item\n) => {\n // Only clone deep on children to handle multiple of same node\n // references in different groups.\n const updatedDisplayTree = { ...displayTree };\n const nodeIsHidden = checkNodeIsHidden(updatedDisplayTree, item, false);\n if (!nodeIsHidden) {\n updatedDisplayTree.children = displayTree.children\n ? cloneDeep(displayTree.children)\n : displayTree.children;\n updatedDisplayTree['parentId'] = nodeGroup.id;\n updatedDisplayTree['parentGroupId'] = nodeGroup.id;\n updatedDisplayTree['parentGroupName'] = nodeGroup.properties.label;\n if (updatedDisplayTree.isGroupNode) {\n nodeGroup.children.push(updatedDisplayTree);\n } else {\n nodeChildren.push(updatedDisplayTree);\n }\n if (treeList) {\n treeList.push(updatedDisplayTree);\n }\n scopedGroupItemIndexes.add(index);\n groupedItemIndexes.add(index);\n }\n};\n\nexport const processItemForStaticNodeGroup = (\n nodeGroup,\n item,\n groupedItemIndexes,\n displayTree,\n index,\n scopedGroupItemIndexes = new Set(),\n treeList,\n nodeChildren = []\n) => {\n if (\n nodeGroup?.properties?.propertyMapping &&\n nodeGroup?.properties?.jsonLogic\n ) {\n const rule = mapRule(\n nodeGroup?.properties?.propertyMapping,\n nodeGroup?.properties?.jsonLogic\n );\n if (\n rule &&\n evaluateRule(\n rule,\n item,\n item.properties?.joiningEntityCatalogObjectKey,\n false\n )\n ) {\n let itemAdded = false;\n nodeGroup.children.forEach((childGroup) => {\n if (childGroup.isGroupNode) {\n const processedItem = processItemForStaticNodeGroup(\n childGroup,\n item,\n groupedItemIndexes,\n displayTree,\n index,\n childGroup.children.length ? new Set() : scopedGroupItemIndexes,\n treeList,\n nodeChildren\n ) || { itemAdded };\n itemAdded = processedItem?.itemAdded;\n }\n });\n if (!itemAdded) {\n updateNodeForStaticGrouping(\n displayTree,\n nodeGroup,\n nodeChildren,\n treeList,\n scopedGroupItemIndexes,\n groupedItemIndexes,\n index,\n item\n );\n itemAdded = true;\n }\n }\n } else {\n if (nodeGroup.isOutlierGroup && !groupedItemIndexes.has(index)) {\n updateNodeForStaticGrouping(\n displayTree,\n nodeGroup,\n nodeChildren,\n treeList,\n scopedGroupItemIndexes,\n groupedItemIndexes,\n index,\n item\n );\n }\n }\n if (treeList && nodeGroup.isGroupNode) {\n // Handles duplicates\n const existingGroup = treeList\n .filter((node) => node.isGroupNode)\n .find((eg) => eg.id === nodeGroup.id);\n if (!existingGroup) {\n const nodeIsHidden = checkNodeIsHidden(nodeGroup, item, false);\n !nodeIsHidden && treeList.push(nodeGroup);\n }\n }\n return { itemAdded: groupedItemIndexes.has(index), nodeChildren };\n};\nexport const constructStaticNodeGroups = (tree, shouldUseNewId = false) => {\n const nodeGroups = [];\n const groupConfiguration = tree?.properties?.groupConfiguration;\n const groupType = groupConfiguration?.groupType || NodeGroupTypeEnums.Static;\n const hideEmptyGroups = groupConfiguration?.hideEmptyGroups;\n\n if (\n groupConfiguration?.enabled &&\n groupConfiguration?.groupings[groupType]?.length\n ) {\n groupConfiguration.groupings[groupType].forEach((grouping) => {\n // Order By Group order\n const orderedGroups = orderByGroupOrder(grouping?.groups);\n // key is old id value is new id\n const newIdMap = {};\n orderedGroups.forEach((group) => {\n if (shouldUseNewId) {\n newIdMap[group.id] = uuid();\n }\n group['children'] = [];\n });\n if (Object.keys(newIdMap).length) {\n orderedGroups.forEach((group) => {\n if (newIdMap[group.id]) {\n group.id = newIdMap[group.id];\n }\n if (newIdMap[group.parentGroupId]) {\n group.parentGroupId = newIdMap[group.parentGroupId];\n }\n });\n }\n if (orderedGroups?.length) {\n // Get the first group where it doesn't have parentGroupId\n const firstGroup =\n orderedGroups.find((group) => !group.parentGroupId) ||\n orderedGroups[0];\n orderedGroups.shift();\n // make tree group structure\n const displayTree = makeTreeStaticGroupStructure(\n orderedGroups,\n 'id',\n 'parentGroupId',\n groupType,\n hideEmptyGroups\n );\n const { id, isExpanded, ...firstGroupProperties } = firstGroup;\n const groupNode = new GroupNode({\n id,\n hideEmptyGroups,\n groupType,\n children: Array.isArray(displayTree) ? displayTree : [displayTree],\n isExpanded,\n properties: { ...firstGroupProperties }\n });\n nodeGroups.push(groupNode);\n }\n });\n\n if (groupConfiguration?.outlier === 'group') {\n const outlierGroup = new GroupNode({\n groupType,\n isOutlierGroup: true,\n properties: {\n label:\n groupConfiguration?.outlierGroupLabel || 'Unlabeled Outlier Group',\n icon: groupConfiguration?.outlierIcon\n }\n });\n nodeGroups.push(outlierGroup);\n }\n }\n\n return nodeGroups;\n};\n\nexport const getOrderedDynamicGroups = (tree, shouldUseNewId = false) => {\n const groupConfiguration = tree?.properties?.groupConfiguration;\n const groupType = groupConfiguration?.groupType || NodeGroupTypeEnums.Dynamic;\n let orderedGroups = [];\n\n if (\n groupConfiguration?.enabled &&\n groupConfiguration?.groupings[groupType]?.length\n ) {\n groupConfiguration.groupings[groupType].forEach((grouping) => {\n // Order By Group order\n orderedGroups = orderByGroupOrder(grouping?.groups);\n // key is old id value is new id\n const newIdMap = {};\n orderedGroups.forEach((group) => {\n if (shouldUseNewId) {\n newIdMap[group.id] = uuid();\n }\n group['children'] = [];\n });\n if (Object.keys(newIdMap).length) {\n orderedGroups.forEach((group) => {\n if (newIdMap[group.id]) {\n group.id = newIdMap[group.id];\n }\n if (newIdMap[group.parentGroupId]) {\n group.parentGroupId = newIdMap[group.parentGroupId];\n }\n });\n }\n });\n }\n return orderedGroups;\n};\n\nexport const constructDynamicNodeGroups = (\n results,\n tree,\n shouldUseNewId = false\n) => {\n let nodeGroups = [];\n const groupConfiguration = tree?.properties?.groupConfiguration;\n const groupType = groupConfiguration?.groupType || NodeGroupTypeEnums.Dynamic;\n\n if (\n groupConfiguration?.enabled &&\n groupConfiguration?.groupings[groupType]?.length\n ) {\n groupConfiguration.groupings[groupType].forEach((grouping) => {\n // Order By Group order\n const orderedGroups = orderByGroupOrder(grouping?.groups);\n // key is old id value is new id\n const newIdMap = {};\n orderedGroups.forEach((group) => {\n if (shouldUseNewId) {\n newIdMap[group.id] = uuid();\n }\n group['children'] = [];\n });\n if (Object.keys(newIdMap).length) {\n orderedGroups.forEach((group) => {\n if (newIdMap[group.id]) {\n group.id = newIdMap[group.id];\n }\n if (newIdMap[group.parentGroupId]) {\n group.parentGroupId = newIdMap[group.parentGroupId];\n }\n });\n }\n if (orderedGroups?.length) {\n const isSingleGroup = orderedGroups.length === 1;\n const dynamicTreeStructure = makeDynamicTreeStructure(\n orderedGroups,\n 'id',\n 'parentGroupId'\n );\n\n const groupSet = makeDynamicGroupStructures(\n dynamicTreeStructure,\n results\n );\n\n results.forEach((item, index) => {\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n const innerGroupList = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(\n item,\n orderedTreeData,\n orderedKeys,\n treeArr,\n null,\n null,\n false,\n innerGroupList\n );\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n const updatedDisplayTree = cloneDeep(displayTree);\n const nodeIsHidden = checkNodeIsHidden(\n updatedDisplayTree,\n item,\n false\n );\n !nodeIsHidden &&\n processItemForDynamicNodeGroups(\n updatedDisplayTree,\n dynamicTreeStructure,\n groupSet,\n groupSet,\n isSingleGroup\n );\n });\n groupSet.forEach((group) =>\n updateTreeIds(group, null, uuid(), uuid(), null)\n );\n nodeGroups = nodeGroups.concat(groupSet);\n }\n });\n }\n\n return nodeGroups;\n};\n\nconst getLabelFromProperty = (item, property) => {\n const splitProperties = property.split('.');\n if (splitProperties.length) {\n let constructedValue = null;\n splitProperties.forEach((property) => {\n const matches = property.match(/\\[(.*?)\\]/);\n let objIndex = null;\n let arrIndex = null;\n if (matches) {\n arrIndex = parseInt(matches[1]);\n objIndex = matches.index;\n }\n if (typeof arrIndex === 'number' && objIndex) {\n const formattedProperty = property.substring(0, objIndex);\n if (!constructedValue) {\n if (item[formattedProperty]) {\n constructedValue = item[formattedProperty][arrIndex];\n }\n } else {\n if (constructedValue[formattedProperty]) {\n constructedValue = constructedValue[formattedProperty][arrIndex];\n }\n }\n } else {\n if (!constructedValue) {\n constructedValue = item ? item[property] : '';\n } else {\n constructedValue = constructedValue[property];\n }\n }\n });\n return constructedValue;\n }\n return null;\n};\n\nexport const constructBusinessObjectArrFromTree = (\n node,\n businessObjects = []\n) => {\n if (node?.nodeObj) {\n // construct the businessObject\n const businessObject = { label: '', value: '', domainObject: '' };\n const joiningEntityCatalogObjectKey =\n node.properties?.joiningEntityCatalogObjectKey;\n const displayName = node.properties?.displayName;\n if (joiningEntityCatalogObjectKey) {\n const jointEntity = node.nodeObj[joiningEntityCatalogObjectKey];\n businessObject.label =\n formatTreeLabel(displayName, node.nodeObj) ||\n jointEntity?.businessObjectKey;\n businessObject.value = jointEntity?.businessObjectKey;\n businessObject.domainObject = node.properties?.catalogReturnObject;\n } else {\n const entity = node.nodeObj;\n businessObject.label =\n formatTreeLabel(displayName, node.nodeObj) || entity?.businessObjectKey;\n businessObject.value = entity?.businessObjectKey;\n businessObject.domainObject = node.properties?.catalogReturnObject;\n }\n businessObjects.push(businessObject);\n }\n if (node?.children?.length) {\n node.children.forEach((childNode) =>\n constructBusinessObjectArrFromTree(childNode, businessObjects)\n );\n }\n return businessObjects;\n};\n\nexport const processItemForDynamicNodeGroups = (\n displayTree,\n node,\n groupNodes,\n previousFilteredGroups = [],\n isSingleGroup = false\n) => {\n const { property, id } = node;\n const item = displayTree?.nodeObj;\n const label = property ? getLabelFromProperty(item, property) : null;\n // stores the next set of nodes for the current level of the tree\n let filteredGroups = [];\n previousFilteredGroups.forEach((group) => {\n if (group) {\n const foundGroups = findNodesByIdAndLabel(group, id, label);\n if (foundGroups.length) {\n filteredGroups = filteredGroups.concat(foundGroups);\n }\n }\n });\n if (filteredGroups.length) {\n if (node?.children?.length) {\n node.children.forEach((child) =>\n processItemForDynamicNodeGroups(\n displayTree,\n child,\n groupNodes,\n filteredGroups,\n isSingleGroup\n )\n );\n } else {\n filteredGroups.forEach((filteredGroup) => {\n const matchingGroupNode = findNodeByIdAndLabel(\n filteredGroup,\n node.id,\n label\n );\n if (matchingGroupNode) {\n displayTree['parentGroupId'] = matchingGroupNode.id;\n matchingGroupNode.children.push(displayTree);\n }\n });\n }\n } else {\n if (isSingleGroup) {\n groupNodes.push(displayTree);\n } else {\n // if there isn't a match for the current level of the tree for the item,\n // if there are any previous level groups, then add it to their children\n previousFilteredGroups.forEach((filteredGroup) => {\n if (filteredGroup) {\n displayTree['parentGroupId'] = filteredGroup.id;\n filteredGroup.children.push(displayTree);\n }\n });\n }\n }\n};\n\nconst orderByGroupOrder = (groups = []) => {\n return orderBy(groups, ['order'], ['asc']);\n};\n\nexport const updateTreeIds = (\n node,\n lastEntityNodeId,\n newId = uuid(),\n newParentId = uuid(),\n parentGroupName = null\n) => {\n let entityNodeParentId = lastEntityNodeId;\n if (node) {\n node.id = newId;\n if (node.parentId || node.parentGroupId) {\n node.parentId = newParentId;\n node.parentGroupId = newParentId;\n }\n if (parentGroupName) {\n node['parentGroupName'] = parentGroupName;\n }\n\n if (!node.isGroupNode && entityNodeParentId) {\n node['entityNodeParentId'] = entityNodeParentId;\n }\n if (!node.isGroupNode) {\n entityNodeParentId = node.id;\n }\n }\n\n // traverse the children recursively and update their ids and parentIds\n if (node?.children?.length) {\n node.children.forEach((child) =>\n updateTreeIds(child, entityNodeParentId, uuid(), newId, parentGroupName)\n );\n }\n};\n\nconst processGroupNodesAndAddToTreeList = (\n node,\n treeList,\n lastEntityNodeId,\n item,\n wasLazyLoaded\n) => {\n let entityNodeParentId = lastEntityNodeId;\n if (treeList) {\n // handle duplicates\n if (!treeList.find((tree) => tree.id === node.id)) {\n if (!node.isGroupNode && entityNodeParentId) {\n node['entityNodeParentId'] = entityNodeParentId;\n }\n if (!node.isGroupNode) {\n entityNodeParentId = node.id;\n }\n const nodeIsHidden = checkNodeIsHidden(node, item, wasLazyLoaded);\n !nodeIsHidden && treeList.push(node);\n }\n }\n\n // traverse the children and add to treeList\n if (node?.children?.length) {\n node.children.forEach((child) =>\n processGroupNodesAndAddToTreeList(\n child,\n treeList,\n entityNodeParentId,\n item,\n wasLazyLoaded\n )\n );\n }\n};\n\nexport const mapNodeGroupChildren = (nodeGroup, nodeGroupChildren = []) => {\n nodeGroupChildren.forEach((node) => {\n if (nodeGroup.id === node.parentGroupId) {\n nodeGroup.children.push(node);\n }\n });\n\n if (nodeGroup?.children?.length) {\n nodeGroup.children.forEach((childGroup) => {\n if (childGroup.isGroupNode) {\n mapNodeGroupChildren(childGroup, nodeGroupChildren); // recursively call function to traverse child node groups\n }\n });\n }\n\n return nodeGroup; // return the updated object\n};\n\nexport const checkNodeIsHidden = (node, item, wasLazyLoaded = false) => {\n if (!node || (node && !Object.keys(node).length)) {\n return true;\n }\n let rule = null;\n if (node.isGroupNode) {\n if (node.properties?.hiddenNode?.enabled) {\n // TODO: handle conditional hiding for group node\n }\n } else {\n if (node.properties?.hiddenNode?.enabled) {\n // Handle conditional hiding of node\n rule = mapRule(\n node.properties.hiddenNode.propertyMapping,\n node.properties.hiddenNode.jsonLogic\n );\n if (\n rule &&\n evaluateRule(\n rule,\n item,\n node.properties?.joiningEntityCatalogObjectKey,\n wasLazyLoaded\n )\n ) {\n return true;\n }\n }\n }\n return false;\n};\n\nexport const constructPreloadedTree = (treeStructure, pageList) => {\n if (!pageList) return null;\n let preloadedList = [];\n const tree = cloneDeep(treeStructure);\n if (\n tree.properties?.groupConfiguration?.enabled &&\n tree.properties?.groupConfiguration.groupType ===\n NodeGroupTypeEnums.Static &&\n tree.properties?.groupConfiguration?.groupings?.static?.length\n ) {\n const topNodeGroups = constructStaticNodeGroups(tree);\n const groupedItemIndexes = new Set();\n topNodeGroups.forEach((nodeGroup) => {\n // Loop through each response item and group them\n let nodeGroupChildren = [];\n pageList.forEach((item, index) => {\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n const innerGroupList = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(\n item,\n orderedTreeData,\n orderedKeys,\n treeArr,\n null,\n null,\n false,\n innerGroupList\n );\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n const processedItem = processItemForStaticNodeGroup(\n nodeGroup,\n item,\n groupedItemIndexes,\n displayTree,\n index,\n new Set()\n );\n nodeGroupChildren = nodeGroupChildren.concat(\n processedItem?.nodeChildren || []\n );\n });\n // map nodeGroupChildren to the node groups\n const updatedNodeGroup = mapNodeGroupChildren(\n nodeGroup,\n nodeGroupChildren\n );\n // handles having the same node in multiple groups\n updatedNodeGroup.children.forEach((child) => {\n updateTreeIds(\n child,\n null,\n uuid(),\n updatedNodeGroup.id || uuid(),\n updatedNodeGroup?.properties.label || null\n );\n });\n preloadedList.push(updatedNodeGroup);\n });\n if (\n tree.properties?.groupConfiguration?.outlier ===\n NodeGroupOutlierEnums.Individual\n ) {\n pageList.forEach((item, index) => {\n if (!groupedItemIndexes.has(index)) {\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(\n item,\n orderedTreeData,\n orderedKeys,\n treeArr,\n null,\n null,\n false\n );\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n const nodeIsHidden = checkNodeIsHidden(displayTree, item, false);\n if (!nodeIsHidden) {\n updateTreeIds(displayTree, null, uuid(), uuid(), null);\n preloadedList.push(displayTree);\n }\n }\n });\n }\n } else if (\n tree.properties?.groupConfiguration?.enabled &&\n tree.properties?.groupConfiguration.groupType ===\n NodeGroupTypeEnums.Dynamic &&\n tree.properties?.groupConfiguration?.groupings?.dynamic?.length\n ) {\n // Handle Dynamic GroupType for single tree\n //const nodeGroups = constructDynamicNodeGroups(pageList, tree);\n // Use the new methods for constructing the dynamic group nodes\n const nodeGroups = constructDynamicNodeGroups2(pageList, tree);\n preloadedList = preloadedList.concat(nodeGroups);\n } else {\n pageList.forEach((item) => {\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(item, orderedTreeData, orderedKeys, treeArr);\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n const nodeIsHidden = checkNodeIsHidden(displayTree, item, false);\n !nodeIsHidden && preloadedList.push(displayTree);\n });\n }\n return preloadedList;\n};\n\n// Dynamic Group Functions\n// SF - 20230531\n\n// Compare function to be used when sorting groups by order\nconst CompareGroupByOrder = (a, b) => {\n if (a.order > b.order) return 1;\n if (a.order < b.order) return -1;\n\n return 0;\n};\n\n// Compare function to be used when sorting sibling nodes so that all group nodes appear first in the list\nconst CompareSiblingNodes = (a, b) => {\n if (a.hasOwnProperty('isGroupNode') && !b.hasOwnProperty('isGroupNode'))\n return -1;\n if (!a.hasOwnProperty('isGroupNode') && b.hasOwnProperty('isGroupNode'))\n return 1;\n\n // If both nodes are groups then sort by the order property\n if (a.hasOwnProperty('isGroupNode') && b.hasOwnProperty('isGroupNode')) {\n if (a.properties?.order > b.properties?.order) return 1;\n if (a.properties?.order < b.properties?.order) return -1;\n }\n\n return 0;\n};\n\n// Util function to map child groups to their parent collections\nconst GetGroupChildMap = (_map, groupKey) => {\n //If no child map for the group exists yet then create it\n if (_map[groupKey] === undefined) {\n _map[groupKey] = [];\n }\n return _map[groupKey];\n};\n\n// Util function to add a group node to a parent groups child mapping\nconst AddGroupToChildMap = (_map, groupKey, groupNode) => {\n // Get the child map for the parent node. If none exists, create it.\n let childMap = GetGroupChildMap(_map, groupKey);\n // Add the child node to the map\n childMap.push(groupNode);\n // Order the groups based on their 'order' property\n childMap.sort(CompareGroupByOrder);\n};\n\nconst createDynamicGroups2 = (\n _treeConfig,\n _groupConfig,\n _item,\n _curItem,\n _pList,\n _siblings,\n _parentId\n) => {\n let _groupCreated = false;\n if (_pList.length > 0) {\n let tmpProp = _pList[0];\n // Check if the current item has the property the dynamic group should be created from\n if (_curItem.hasOwnProperty(tmpProp)) {\n let newItem = _curItem[tmpProp];\n // Check if there are additional parts to the property the group should be created from\n if (_pList.length > 1) {\n // Arrays are also considered Objects, so check for it first\n if (Array.isArray(newItem)) {\n // If it's an array then loop through each of the items and carry on to check the next part of the group property\n for (let i = 0, numOfItems = newItem.length; i < numOfItems; i++) {\n let aGroupWasCreated = createDynamicGroups2(\n _treeConfig,\n _groupConfig,\n _item,\n newItem[i],\n _pList.slice(1),\n _siblings,\n _parentId\n );\n _groupCreated = aGroupWasCreated ? aGroupWasCreated : _groupCreated;\n }\n } else if (typeof newItem === 'object' && newItem !== null) {\n let aGroupWasCreated = createDynamicGroups2(\n _treeConfig,\n _groupConfig,\n _item,\n newItem,\n _pList.slice(1),\n _siblings,\n _parentId\n );\n _groupCreated = aGroupWasCreated ? aGroupWasCreated : _groupCreated;\n }\n } else {\n // If newItem is not an array, object, or null, then create a group for the config entry\n if (typeof newItem !== 'object' && newItem !== null && newItem !== '') {\n let groupName = newItem.toString();\n\n // Check if a group with this name already exists in the list of siblings\n let groupNode = null;\n for (\n let siblingIdx = 0, numOfSiblings = _siblings.length;\n siblingIdx < numOfSiblings;\n siblingIdx++\n ) {\n let sibling = _siblings[siblingIdx];\n if (\n sibling.hasOwnProperty('isGroupNode') &&\n sibling.isGroupNode === true\n ) {\n if (sibling.properties.label === groupName) {\n groupNode = sibling;\n break;\n }\n }\n }\n // If no groupNode was found in the list of siblings, create one\n if (groupNode == null) {\n let newGroupNodeId = uuid();\n groupNode = new GroupNode({\n id: `${newGroupNodeId}`,\n groupType: NodeGroupTypeEnums.Dynamic,\n children: [],\n parentGroupId: _parentId,\n parentId: _parentId,\n isExpanded: _groupConfig.isExpanded,\n properties: {\n label: groupName,\n propertyIsCustom: _groupConfig.propertyIsCustom,\n propertyKey: _groupConfig.property,\n order: _groupConfig.order\n }\n });\n // Add the groupNode to the list of siblings\n _siblings.push(groupNode);\n }\n // Now that we have a groupNode, set groupCreated to true, as it means that a groupNode for this name was either created\n // or an existing groupNode with the same name was found.\n _groupCreated = true;\n\n let subGroupWasCreated = false;\n // Check if the config group has subgroups\n for (\n let subGroupIdx = 0, numOfSubGroups = _groupConfig.children.length;\n subGroupIdx < numOfSubGroups;\n subGroupIdx++\n ) {\n let subGroupConfig = _groupConfig.children[subGroupIdx];\n // Get the the property name used to create the subgroup\n let subGroupPropList = subGroupConfig.property\n ? subGroupConfig.property.split('.')\n : [];\n // For each subgroup config tree, pass see if groups need to be created for the result record\n let subGroupCreated = createDynamicGroups2(\n _treeConfig,\n subGroupConfig,\n _item,\n _item,\n subGroupPropList,\n groupNode.children,\n groupNode.id\n );\n subGroupWasCreated = subGroupCreated\n ? subGroupCreated\n : subGroupWasCreated;\n }\n // If there were no subgroups found or created for this record then create a normal node for this result record and add it to the list of group children\n if (!subGroupWasCreated) {\n let tmpNode = cloneDeep(_treeConfig);\n processObjIndex(\n tmpNode,\n _item,\n null,\n groupNode.id,\n null,\n null,\n false\n );\n groupNode.children.push(tmpNode);\n\n let newChildNodes = [];\n // If there are child config nodes, we need to process them now\n for (\n let childNodeIdx = 0, numOfChildNodes = tmpNode.children.length;\n childNodeIdx < numOfChildNodes;\n childNodeIdx++\n ) {\n let childConfigNode = tmpNode.children[childNodeIdx];\n // Get the property of the current node that represents the associated child node(s)\n let propToGetRecords =\n childConfigNode.properties.catalogObjectKey;\n // Check if the current node has the property of the associated childe node(s)\n if (\n propToGetRecords &&\n propToGetRecords != null &&\n _item.hasOwnProperty(propToGetRecords)\n ) {\n let newResultSet = _item[propToGetRecords];\n if (newResultSet && newResultSet != null) {\n // constructDynamicNodeGroups2 expects the result set to be passed in as an array\n if (Array.isArray(newResultSet)) {\n newChildNodes.push(\n ...constructDynamicNodeGroups2(\n newResultSet,\n childConfigNode,\n tmpNode.id\n )\n );\n } else {\n let tmpNewResultSet = [];\n tmpNewResultSet.push(newResultSet);\n newChildNodes.push(\n ...constructDynamicNodeGroups2(\n newResultSet,\n childConfigNode,\n tmpNode.id\n )\n );\n }\n }\n }\n }\n tmpNode.children = newChildNodes;\n }\n\n groupNode.children.sort(CompareSiblingNodes);\n }\n }\n }\n }\n return _groupCreated;\n};\n\nconst constructDynamicGroupConfigTrees2 = (configNode) => {\n // List of the top level group nodes for this configNode\n let topLevelConfigGroupNodes = [];\n\n // tree is really the current config node we're looking at\n const groupConfiguration = configNode?.properties?.groupConfiguration;\n const groupType = groupConfiguration?.groupType || NodeGroupTypeEnums.Dynamic;\n\n // Check if there are groupings for this current level of config\n if (\n groupConfiguration?.enabled &&\n groupConfiguration?.groupings[groupType]?.length\n ) {\n // Each grouping of groups is treated as its own tree and should be constructed as such\n let dynamicGroupings = groupConfiguration.groupings[groupType];\n for (\n let groupingIdx = 0, numOfGroupings = dynamicGroupings.length;\n groupingIdx < numOfGroupings;\n groupingIdx++\n ) {\n let grouping = dynamicGroupings[groupingIdx];\n\n // If the grouping has no groups, continue to the next grouping in the list\n if (grouping.groups === undefined || grouping.groups === null) continue;\n\n // Map of each groups collection of childeren\n let groupChildMap = {};\n\n // loop through the groups in the config grouping and build out the tree\n for (\n let groupIdx = 0, numOfGroups = grouping.groups.length;\n groupIdx < numOfGroups;\n groupIdx++\n ) {\n let group = grouping.groups[groupIdx];\n // initialize list of childeren\n group['children'] = GetGroupChildMap(groupChildMap, group.id);\n // add node to parents list of childeren\n if (group.parentGroupId === undefined || group.parentGroupId === null) {\n topLevelConfigGroupNodes.push(group);\n } else {\n // Add the group to the child map of the parent\n AddGroupToChildMap(groupChildMap, group.parentGroupId, group);\n }\n }\n }\n }\n\n for (\n let configIdx = 0, numOfChildConfigNodes = configNode.children.length;\n configIdx < numOfChildConfigNodes;\n configIdx++\n ) {\n let childConfigNode = configNode.children[configIdx];\n constructDynamicGroupConfigTrees2(childConfigNode);\n }\n\n configNode.groupConfigTrees = topLevelConfigGroupNodes;\n};\n\nexport const constructDynamicNodeGroups2 = (\n results,\n configNode,\n parentId = null\n) => {\n let levelNodes = [];\n\n if (!configNode.groupConfigTrees) {\n // Take the flat list of dynamic groupings and build a tree for them\n constructDynamicGroupConfigTrees2(configNode);\n }\n\n // Now that we have a config tree with each level having a tree of for dynamic group config\n // We need to iterate through each record of the resultset and construct a tree of nodes and group nodesuse it with each record of the results to build out a tree of GroupNodes\n // Each of the Config Group Trees in topLevelConfigGroupNodes may result in a GroupNode being created and added to the levelNodes list\n for (\n let rIdx = 0, numOfResults = results.length;\n rIdx < numOfResults;\n rIdx++\n ) {\n let item = results[rIdx];\n let groupCreated = false;\n for (\n let ctlIdx = 0,\n numOfGroupConfigTrees = configNode.groupConfigTrees.length;\n ctlIdx < numOfGroupConfigTrees;\n ctlIdx++\n ) {\n let groupConfigNode = configNode.groupConfigTrees[ctlIdx];\n // The property the dynamic group should be using to get the group name\n let gPropList = groupConfigNode.property\n ? groupConfigNode.property.split('.')\n : [];\n // Create and populate a GroupNode for the record based on its value of the property the group is configured against\n let aGroupWasCreated = createDynamicGroups2(\n configNode,\n groupConfigNode,\n item,\n item,\n gPropList,\n levelNodes,\n parentId\n );\n groupCreated = aGroupWasCreated ? aGroupWasCreated : groupCreated;\n }\n\n // If no dynamic group was created for the record then we need to add it as a sibling to the levelNodes list\n if (!groupCreated) {\n // TO DO: Create a Tree Node based on the record and add it to the levelNodes list\n let tmpNode = cloneDeep(configNode);\n processObjIndex(tmpNode, item, null, parentId, null, null, false);\n levelNodes.push(tmpNode);\n\n let newChildNodes = [];\n // If there are child config nodes, we need to process them now\n for (\n let childNodeIdx = 0, numOfChildNodes = tmpNode.children.length;\n childNodeIdx < numOfChildNodes;\n childNodeIdx++\n ) {\n let childConfigNode = tmpNode.children[childNodeIdx];\n let propToGetRecords = childConfigNode.properties.catalogObjectKey;\n if (\n propToGetRecords &&\n propToGetRecords != null &&\n item.hasOwnProperty(propToGetRecords)\n ) {\n let newResultSet = item[propToGetRecords];\n if (newResultSet && newResultSet != null) {\n if (Array.isArray(newResultSet)) {\n newChildNodes.push(\n ...constructDynamicNodeGroups2(\n newResultSet,\n childConfigNode,\n tmpNode.id\n )\n );\n } else {\n let tmpNewResultSet = [];\n tmpNewResultSet.push(newResultSet);\n newChildNodes.push(\n ...constructDynamicNodeGroups2(\n newResultSet,\n childConfigNode,\n tmpNode.id\n )\n );\n }\n }\n }\n }\n tmpNode.children = newChildNodes;\n }\n }\n levelNodes.sort(CompareSiblingNodes);\n\n return levelNodes;\n};\n\n// End of Dynamic Group functions\n// SF - 20230531\n\nexport const transformMenuPageTree = (node) => {\n if (!node?.menuItemInstance?.isActive) return null;\n const parameters =\n node.menuItemInstance?.parameters &&\n JSON.parse(node.menuItemInstance.parameters);\n const label = node.title || '';\n const expanded = parameters?.defaultDisplay === 'expanded';\n\n const updatedNode = {\n id: node.menuStructureId,\n parentId: node.parentId,\n isExpanded: expanded,\n properties: {\n defaultIcon: { type: '', name: parameters?.FluentIcon, color: '' },\n nodeLabel: label,\n nodeSubLabel: '',\n // carry through optional item count into node properties\n itemCount: parameters?.itemCount ?? node.menuItemInstance?.itemCount ?? null,\n page: {\n id: parameters?.PageId,\n entity: {\n entityName: parameters?.entityName\n },\n pbiReportCode: parameters?.pbiReportCode,\n udpTagId: parameters?.udpTagId,\n queryId: parameters?.queryId,\n inquiryTreeId: parameters?.InquiryTreeId,\n requiredFieldMapping: parameters?.requiredFieldMapping\n },\n aggregateThresholdId: parameters?.aggregateThresholdId || ''\n },\n children: []\n };\n\n for (const child of node.menuItemInstanceStructures) {\n const updatedChild = transformMenuPageTree(child);\n if (updatedChild) {\n updatedNode.children.push(updatedChild);\n }\n }\n\n return updatedNode;\n};\n\nexport const mapNodeObjValuesToSearchParameters = (\n nodeObj,\n aggregateThresholdParamMappings\n) => {\n if (!aggregateThresholdParamMappings || !nodeObj) {\n return {};\n }\n const mappings = { ...aggregateThresholdParamMappings };\n Object.keys(mappings).forEach((key) => {\n const nodeObjKey = mappings[key];\n if (nodeObjKey) {\n const nodeObjValue = nodeObj[nodeObjKey];\n mappings[key] = nodeObjValue || '';\n }\n });\n return mappings;\n};\n\nexport const getSearchValueString = (nodeObj, searchIdentifier) => {\n const searchIdentifiers = searchIdentifier.split(',');\n const searchValues = [];\n searchIdentifiers.forEach((searchIdentifier) => {\n searchValues.push(nodeObj[searchIdentifier]);\n });\n return searchValues.toString();\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeUtilities-DWgARig7.js","names":["uuid","property","searchIdentifier"],"sources":["../src/utilities/tree/TreeUtilities.js"],"sourcesContent":["import * as Icons from '@fluentui/react-icons';\nimport { cloneDeep, orderBy } from 'lodash';\nimport { v4 as uuid } from 'uuid';\nimport { evaluateRule, mapRule } from '../rules/RuleUtilities';\nimport {\n getSearchIdentifiers,\n getSearchObject\n} from '../search/SearchUtilities';\nimport { toLowerFirstChar, toUpperFirstChar } from '../input/StringUtilities';\nimport {\n CardinalityTypeEnums,\n NodeGroupTypeEnums,\n NodeGroupOutlierEnums\n} from '../../enums/unitySystemEnums';\nimport GroupNode from '../../models/GroupNode';\n\nexport const makeTreeStructure = (\n treeData,\n key,\n parentKey,\n parentGroupKey = 'parentGroupId'\n) => {\n if (!treeData) {\n return [];\n }\n const keys = [];\n\n treeData.forEach((node) => {\n node.children = [];\n if (node['isExpanded'] === undefined && !node.isGroupNode) {\n if (\n node.properties.defaultDisplay === 'collapsed' ||\n node.properties.lazyLoad\n ) {\n node.isExpanded = false;\n } else {\n node.isExpanded = true;\n }\n }\n keys.push(node[key]);\n });\n const roots = treeData.filter((node) => {\n return !(node?.isGroupNode ? node[parentGroupKey] : node[parentKey]);\n });\n const nodes = [];\n const existingGroups = [];\n roots.forEach((root) => {\n nodes.push(root);\n });\n while (nodes.length > 0) {\n const node = nodes.pop();\n let children = treeData.filter(\n (data) =>\n data[parentKey] === node[key] || data[parentGroupKey] === node[key]\n );\n children.forEach((child) => {\n if (child?.isGroupNode) {\n const existingGroup = existingGroups.find(\n (eg) => eg.id === child.id && eg.parentGroupId === child.parentGroupId\n );\n if (!existingGroup) {\n existingGroups.push(child);\n node.children.push(child);\n nodes.push(child);\n }\n } else {\n if (\n (node.isGroupNode && child.parentGroupId) ||\n (!node.isGroupNode && !child.parentGroupId)\n ) {\n node.children.push(child);\n nodes.push(child);\n }\n }\n });\n }\n\n const removeEmptyGroupNodes = (node) => {\n if (node?.isGroupNode && node?.hideEmptyGroups && !node?.children?.length) {\n return null;\n }\n node.children = node.children\n .map(removeEmptyGroupNodes)\n .filter((child) => child !== null);\n return node;\n };\n\n const filteredRoots = roots\n .map(removeEmptyGroupNodes)\n .filter((root) => root !== null);\n if (filteredRoots.length === 1) return filteredRoots[0];\n return filteredRoots;\n};\n\nexport const makeTreeStaticGroupStructure = (\n treeData,\n key,\n parentKey,\n groupType = NodeGroupTypeEnums.Static,\n hideEmptyGroups\n) => {\n if (!treeData) {\n return [];\n }\n const keys = [];\n\n treeData.forEach((node, index) => {\n const {\n id,\n hideEmptyGroups,\n children,\n apiMethodInstanceId,\n parentGroupId,\n order,\n isExpanded,\n ...groupProperties\n } = node;\n treeData[index] = new GroupNode({\n id: id,\n groupType,\n children,\n parentId: parentGroupId,\n parentGroupId,\n isExpanded,\n properties: { ...groupProperties }\n });\n\n keys.push(node[key]);\n });\n const roots = treeData.filter((node) => keys.indexOf(node[parentKey]) === -1);\n const nodes = [];\n roots.forEach((root) => {\n nodes.push(root);\n });\n while (nodes.length > 0) {\n const node = nodes.pop();\n let children = treeData.filter((data) => data[parentKey] === node[key]);\n children.forEach((child) => {\n node.children.push(child);\n nodes.push(child);\n });\n }\n if (roots.length === 1) return roots[0];\n return roots;\n};\n\nexport const makeDynamicGroupStructures = (treeStructure, results) => {\n if (!treeStructure) {\n return [];\n }\n const groupStructures = [];\n results.forEach((item) => {\n processDynamicGroupForCurrentNodeLevel(\n item,\n treeStructure,\n groupStructures,\n groupStructures\n );\n });\n\n return groupStructures;\n};\n\nconst processDynamicGroupForCurrentNodeLevel = (\n item,\n node,\n groupStructures,\n previousFilteredGroups = []\n) => {\n const { property, id } = node;\n const label = property ? getLabelFromProperty(item, property) : null;\n // stores the next set of nodes for the current level of the tree\n let filteredGroups = [];\n previousFilteredGroups.forEach((group) => {\n if (group) {\n const foundGroups = findNodesByIdAndLabel(group, id, label);\n if (foundGroups.length) {\n filteredGroups = filteredGroups.concat(foundGroups);\n }\n }\n });\n if (filteredGroups.length) {\n if (node?.children?.length) {\n node.children.forEach((child) =>\n processDynamicGroupForCurrentNodeLevel(\n item,\n child,\n groupStructures,\n filteredGroups\n )\n );\n }\n } else {\n if (label) {\n const dynamicGroupTree = makeDynamicGroupTree(node, item);\n if (node.parentGroupId) {\n // find the parent group structure and make it's children = dynamicGroupTree\n previousFilteredGroups.forEach((filteredGroup) => {\n const matchingGroupNode = findNodeById(\n filteredGroup,\n node.parentGroupId\n );\n if (matchingGroupNode) {\n // set the parentGroupId of the groupTree to matchingGroupNode parent in case\n // parentGroupId does not exist\n dynamicGroupTree.parentGroupId = matchingGroupNode.id;\n matchingGroupNode.children.push(dynamicGroupTree);\n }\n });\n } else {\n groupStructures.push(dynamicGroupTree);\n }\n }\n }\n};\n\nconst makeDynamicGroupTree = (node, item, parentGroupNode) => {\n const {\n id,\n children,\n apiMethodInstanceId,\n parentGroupId,\n order,\n property,\n label,\n isExpanded,\n ...groupProperties\n } = node;\n const updatedLabel = property ? getLabelFromProperty(item, property) : null;\n if (updatedLabel) {\n const groupNode = new GroupNode({\n id: `${id}`,\n groupType: NodeGroupTypeEnums.Dynamic,\n children: [],\n parentGroupId: parentGroupNode?.id || null,\n isExpanded,\n properties: {\n label: updatedLabel,\n ...groupProperties,\n propertyKey: property\n }\n });\n if (parentGroupNode) {\n parentGroupNode.children.push(groupNode);\n }\n if (children?.length) {\n children.forEach((child) => makeDynamicGroupTree(child, item, groupNode));\n }\n\n return groupNode;\n }\n};\n\nexport const makeDynamicTreeStructure = (treeData, key, parentKey) => {\n if (!treeData) {\n return [];\n }\n const keys = [];\n\n treeData.forEach((node, index) => {\n keys.push(node[key]);\n });\n const roots = treeData.filter((node) => keys.indexOf(node[parentKey]) === -1);\n const nodes = [];\n roots.forEach((root) => {\n nodes.push(root);\n });\n while (nodes.length > 0) {\n const node = nodes.pop();\n let children = treeData.filter((data) => data[parentKey] === node[key]);\n children.forEach((child) => {\n node.children.push(child);\n nodes.push(child);\n });\n }\n if (roots.length === 1) return roots[0];\n return roots;\n};\n\nexport const getIconFromName = (name) => {\n if (!name) {\n return null;\n }\n const substr = name.slice(-4);\n if (substr.toLowerCase() !== 'icon') {\n const updatedName = `${name}Icon`;\n return Icons[updatedName] || null;\n } else {\n return Icons[name] || null;\n }\n};\n\nexport const findLastNode = (tree) => {\n let result = null;\n if (!tree?.children?.length) {\n return tree;\n } else {\n if (tree?.children) {\n tree.children.forEach((node) => (result = findLastNode(node)));\n }\n return result;\n }\n};\n\nexport const searchTree = (tree, id) => {\n let result = null;\n if (tree.id === id) {\n return tree;\n } else {\n if (tree.children) {\n tree.children.some((node) => (result = searchTree(node, id)));\n }\n return result;\n }\n};\n\nexport const deleteNode = (treeData, nodeId) => {\n const updatedTreeData = [...treeData];\n const foundNode = updatedTreeData.find((node) => node.id === nodeId);\n const nodeIndex = updatedTreeData.findIndex((node) => node.id === nodeId);\n\n // If it's node is first or last...\n if (\n !foundNode.parentId ||\n !updatedTreeData.some((node) => node.parentId === nodeId)\n ) {\n if (nodeIndex > -1) {\n // Delete the node\n updatedTreeData.splice(nodeIndex, 1);\n }\n const immediateChild = updatedTreeData.find(\n (node) => node.parentId === nodeId\n );\n // Set the immediate child's parent id to null\n if (immediateChild) {\n immediateChild.parentId = null;\n }\n } else {\n foundNode.isDeleted = true;\n foundNode.properties = {};\n }\n return updatedTreeData;\n};\n\nexport const deleteNodeAndChildren = (treeData, nodeId) => {\n const updatedTreeData = [...treeData];\n const nodeIdsToDelete = [];\n nodeIdsToDelete.push(nodeId);\n getAllChildrenNodesToDelete(updatedTreeData, nodeId, nodeIdsToDelete);\n return updatedTreeData.filter((node) => !nodeIdsToDelete.includes(node.id));\n};\n\nexport const getAllChildrenNodesToDelete = (\n treeData,\n nodeId,\n nodeIdsToDelete\n) => {\n const nodesToDelete = treeData.filter((node) => node.parentId === nodeId);\n nodesToDelete.forEach((node) => {\n nodeIdsToDelete.push(node.id);\n getAllChildrenNodesToDelete(treeData, node.id, nodeIdsToDelete);\n });\n};\n\nexport const processCatalogObjectKeysInOrder = (tree, keys) => {\n if (!tree?.children?.length) {\n keys.push(tree?.properties?.catalogObjectKey);\n } else {\n if (tree?.children) {\n if (tree?.properties?.catalogObjectKey) {\n keys.push(tree?.properties?.catalogObjectKey);\n }\n tree.children.forEach((node) =>\n processCatalogObjectKeysInOrder(node, keys)\n );\n }\n }\n};\n\nexport const processOrderedTreeData = (tree, treeData) => {\n if (!tree?.children?.length) {\n treeData.push(tree);\n } else {\n if (tree?.children) {\n treeData.push(tree);\n tree.children.forEach((node) => processOrderedTreeData(node, treeData));\n }\n }\n};\n\n// treeData is ordered by heirarchy\nexport const processObjectToTree = (\n result,\n treeData,\n objectReferenceKeys,\n treeList,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n) => {\n const treeArr = { ...treeData };\n processReferences(\n result,\n objectReferenceKeys,\n treeArr,\n 0,\n treeList,\n null,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n );\n};\n\n/*\n example parameters:\n objectReferenceKeys : [\"customers\", \"customerAccounts\", \"usagePoints\"]\n*/\nexport const processReferences = (\n reference,\n objectReferenceKeys,\n treeData,\n index,\n treeList,\n parentId,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n) => {\n const newIndex = index + 1;\n if (reference) {\n let node = parentId ? treeData[newIndex] : treeData[0];\n let nodeGroups = [];\n if (parentId) {\n if (\n node?.properties?.groupConfiguration?.groupType ===\n NodeGroupTypeEnums.Static\n ) {\n nodeGroups = constructStaticNodeGroups(node, true);\n } else if (\n node?.properties?.groupConfiguration?.groupType ===\n NodeGroupTypeEnums.Dynamic\n ) {\n nodeGroups = constructDynamicNodeGroups(reference, node, true);\n }\n }\n if (Array.isArray(reference) && reference.length) {\n reference.forEach((ref, i) => {\n if (node) {\n const nodeCopy = cloneDeep(node);\n processObjIndex(\n nodeCopy,\n ref,\n i,\n parentId,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n );\n if (nodeGroups.length) {\n if (\n node?.properties?.groupConfiguration?.groupType ===\n NodeGroupTypeEnums.Static\n ) {\n const groupedItemIndexes = new Set();\n let processedItem = { itemAdded: false, nodeChildren: [] };\n nodeGroups.forEach((nodeGroup) => {\n let nodeGroupChildren = [];\n processedItem = processItemForStaticNodeGroup(\n nodeGroup,\n ref,\n groupedItemIndexes,\n nodeCopy,\n i,\n new Set(),\n treeList\n );\n nodeGroupChildren = nodeGroupChildren.concat(\n processedItem.nodeChildren\n );\n mapNodeGroupChildren(nodeGroup, nodeGroupChildren);\n nodeGroup.parentGroupId = nodeCopy.parentId;\n });\n if (\n !processedItem.itemAdded &&\n node?.properties?.groupConfiguration?.outlier ===\n NodeGroupOutlierEnums.Individual\n ) {\n const nodeIsHidden = checkNodeIsHidden(\n nodeCopy,\n ref,\n wasLazyLoaded\n );\n !nodeIsHidden && treeList.push(nodeCopy);\n }\n } else if (\n node?.properties?.groupConfiguration?.groupType ===\n NodeGroupTypeEnums.Dynamic\n ) {\n // Handle constructing dynamic node groups\n // There's a nodeCopy and we want to check what group it belongs to\n nodeGroups.forEach((nodeGroup) => {\n nodeGroup.parentGroupId = nodeCopy.parentId;\n nodeGroup.parentId = nodeCopy.parentId;\n processGroupNodesAndAddToTreeList(\n nodeGroup,\n treeList,\n nodeCopy.parentId,\n ref,\n wasLazyLoaded\n );\n });\n }\n } else {\n const nodeIsHidden = checkNodeIsHidden(\n nodeCopy,\n ref,\n wasLazyLoaded\n );\n !nodeIsHidden && treeList.push(nodeCopy);\n }\n\n if (nodeCopy?.children?.length) {\n const objectReferenceKeysCopy = [...objectReferenceKeys];\n nodeCopy.children.forEach((childNode, i) => {\n const catalogObjectKey = childNode?.properties?.catalogObjectKey;\n const nextIndex =\n objectReferenceKeysCopy.indexOf(catalogObjectKey);\n if (!parentId) {\n objectReferenceKeysCopy[nextIndex] = null;\n }\n processReferences(\n ref[catalogObjectKey],\n objectReferenceKeys,\n treeData,\n nextIndex,\n treeList,\n nodeCopy.id,\n catalogObjects,\n promotedEntities,\n nodeCopy.properties.lazyLoad\n );\n });\n }\n }\n });\n } else if (typeof reference === 'object' && !Array.isArray(reference)) {\n processObjIndex(\n node,\n reference,\n 0,\n parentId,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n );\n if (node) {\n const nodeCopy = cloneDeep(node);\n const nodeIsHidden = checkNodeIsHidden(\n nodeCopy,\n reference,\n wasLazyLoaded\n );\n !nodeIsHidden && treeList.push(nodeCopy);\n if (nodeCopy?.children?.length) {\n const objectReferenceKeysCopy = [...objectReferenceKeys];\n nodeCopy.children.forEach((childNode, i) => {\n const catalogObjectKey = childNode?.properties?.catalogObjectKey;\n const nextIndex = parentId\n ? newIndex\n : objectReferenceKeysCopy.indexOf(catalogObjectKey);\n if (!parentId) {\n objectReferenceKeysCopy[nextIndex] = null;\n }\n processReferences(\n reference[catalogObjectKey],\n objectReferenceKeys,\n treeData,\n nextIndex,\n treeList,\n nodeCopy.id,\n catalogObjects,\n promotedEntities,\n nodeCopy.properties.lazyLoad\n );\n });\n }\n }\n }\n }\n};\n\n// Updates current node object properties with data it needs to be rendered\nexport const processObjIndex = (\n node,\n obj,\n index,\n parentId,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n) => {\n if (node.properties.conditionalNodeIconExpression) {\n const conditionalNodeIcon = evaluateRule(\n node.properties.conditionalNodeIconExpression,\n obj,\n node.properties?.joiningEntityCatalogObjectKey,\n wasLazyLoaded\n );\n if (conditionalNodeIcon) {\n node.properties['conditionalNodeIconName'] =\n conditionalNodeIcon?.name || '';\n node.properties['conditionalNodeIconColor'] =\n conditionalNodeIcon?.iconColor?.hex;\n node.properties['conditionalNodeIconType'] =\n conditionalNodeIcon?.type || '';\n } else {\n // explicitly sets it to empty string due to other conditional icons setting the node properties\n node.properties['conditionalNodeIconName'] = '';\n node.properties['conditionalNodeIconColor'] = '';\n node.properties['conditionalNodeIconType'] = '';\n }\n }\n // due to the original adornments being stored as conditionalIcons, we need to check the conditionalIconExpression as a fallback\n if (\n node.properties.conditionalNodeAdornmentExpression ||\n node.properties.conditionalIconExpression\n ) {\n const conditionalNodeAdornment = node.properties\n .conditionalNodeAdornmentExpression\n ? evaluateRule(\n node.properties.conditionalNodeAdornmentExpression,\n obj,\n node.properties?.joiningEntityCatalogObjectKey,\n wasLazyLoaded\n )\n : evaluateRule(\n node.properties.conditionalIconExpression,\n obj,\n node.properties?.joiningEntityCatalogObjectKey,\n wasLazyLoaded\n );\n\n if (conditionalNodeAdornment) {\n node.properties['conditionalNodeAdornmentName'] =\n conditionalNodeAdornment?.name || '';\n node.properties['conditionalNodeAdornmentColor'] =\n conditionalNodeAdornment?.iconColor?.hex;\n node.properties['conditionalNodeAdornmentType'] =\n conditionalNodeAdornment?.type || '';\n } else {\n // explicitly sets it to empty string due to other conditional icons setting the node properties\n node.properties['conditionalNodeAdornmentName'] = '';\n node.properties['conditionalNodeAdornmentColor'] = '';\n node.properties['conditionalNodeAdornmentType'] = '';\n }\n }\n\n if (node.properties.catalogReturnObject) {\n let searchIdentifiers = getSearchIdentifiers(\n catalogObjects,\n node.properties.catalogReturnObject\n );\n node.properties['searchIdentifier'] = searchIdentifiers?.join(',');\n const associatedTreePrimaryKeyMap =\n node.properties.associatedTreePrimaryKeyMap;\n if (!!associatedTreePrimaryKeyMap) {\n searchIdentifiers = Object.keys(associatedTreePrimaryKeyMap);\n node.properties['searchIdentifier'] = searchIdentifiers;\n }\n\n node.properties['filterElements'] = [];\n const searchValues = [];\n const joiningEntityCatalogObjectKey =\n node?.properties?.joiningEntityCatalogObjectKey;\n searchIdentifiers.forEach((searchIdentifier) => {\n const searchField = searchIdentifier\n ? searchIdentifier.charAt(0).toUpperCase() + searchIdentifier.slice(1)\n : '';\n let searchValue = '';\n let si = associatedTreePrimaryKeyMap?.[searchIdentifier]\n ? associatedTreePrimaryKeyMap?.[searchIdentifier]\n : searchIdentifier;\n if (obj[si]) {\n searchValue = obj[si];\n } else if (joiningEntityCatalogObjectKey) {\n searchValue = obj[joiningEntityCatalogObjectKey]\n ? obj[joiningEntityCatalogObjectKey][si]\n : '';\n }\n node.properties['filterElements'].push({\n searchField: searchField,\n searchOperator: '=',\n searchValue: searchValue ?? ''\n });\n searchValues.push(searchValue);\n });\n node.properties['searchValue'] = searchValues.toString();\n }\n node.properties['nodeLabel'] = getDisplayName(node, obj);\n node.properties['nodeSubLabel'] = getDisplayDetails(node, obj);\n node.properties['headerTitle'] = getHeaderTitle(node, obj);\n\n node.parentId = parentId;\n node['entityNodeParentId'] = parentId;\n node.id = uuid();\n node.nodeObj = obj;\n\n if (node?.properties?.lazyLoad) {\n node.lazyLoadChildrenArr = getLazyLoadChildrenArr(\n node,\n catalogObjects,\n promotedEntities\n );\n }\n};\n\nconst getEntityAssoc = (nodeEntity, node) => {\n let entityAssoc = null;\n if (nodeEntity) {\n const referenceProperty = nodeEntity.properties.find((property) => {\n if (node.properties?.joiningEntityName) {\n return property.reference === node.properties?.joiningEntityName;\n } else {\n return property.reference === node.properties?.catalogReturnObject;\n }\n });\n entityAssoc = referenceProperty\n ? referenceProperty.extendedProperties?.childEntityAssoc\n : null;\n }\n return entityAssoc;\n};\n\nexport const getLazyLoadChildrenArr = (\n node,\n catalogObjects,\n promotedEntities\n) => {\n const lazyLoadChildrenArr = [];\n let defaultSearchIdentifiers = [];\n if (node?.properties?.catalogReturnObject) {\n defaultSearchIdentifiers = getSearchIdentifiers(\n catalogObjects,\n node.properties.catalogReturnObject\n );\n }\n node &&\n node.children &&\n node.children.forEach((childNode) => {\n const lazyNodeSearchObj = {\n apiMethodId: null,\n data: null,\n parentNodeRefKey: childNode.properties?.catalogObjectKey,\n catalogReturnObject: childNode.properties?.catalogReturnObject\n };\n const entityName = childNode.properties?.catalogReturnObject;\n const promotedEntity = promotedEntities?.find(\n (pe) => pe.entityName === entityName\n );\n let searchIdentifiers = [];\n const filterElements = [];\n if (promotedEntity) {\n // Use base search method to be the method for lazy loading node\n let baseSearch = promotedEntity.unityBaseSearchMethod;\n // Used for many-to-many subsequent entity search\n let childBaseSearch = promotedEntity.unityBaseSearchMethod;\n const nodeEntity = catalogObjects?.find(\n (co) => co.catalogObjectName === node.properties?.catalogReturnObject\n );\n let isManyToManySearch = false;\n let usingJoiningTableForSearch = false;\n if (nodeEntity) {\n const childEntityAssoc = getEntityAssoc(nodeEntity, childNode);\n let joiningEntityName = null;\n let promotedEntityForJoiningTable = null;\n // process many-to-many association to get the joined table information\n if (\n childEntityAssoc.Cardinality === CardinalityTypeEnums.Many_To_Many\n ) {\n isManyToManySearch = true;\n lazyNodeSearchObj['manyToManyKeys'] = [];\n joiningEntityName = childNode.properties?.joiningEntityName;\n promotedEntityForJoiningTable = promotedEntities?.find(\n (pe) => pe.entityName === joiningEntityName\n );\n\n // if there is a many-to-many joining table search method, we should use that for searching\n if (promotedEntityForJoiningTable?.unityBaseSearchMethod) {\n baseSearch = promotedEntityForJoiningTable.unityBaseSearchMethod;\n // this is basically the property that identifies whether or not to make an additional network call\n // to get the entity data\n lazyNodeSearchObj.manyToManyJointEntityApiMethodId =\n childBaseSearch?.apiMethodId;\n usingJoiningTableForSearch = true;\n }\n\n const childNodeEntity = catalogObjects.find(\n (co) =>\n co.catalogObjectName ===\n childNode.properties?.catalogReturnObject\n );\n\n const entityAssoc = getEntityAssoc(childNodeEntity, childNode);\n if (entityAssoc && Object.keys(entityAssoc).length) {\n entityAssoc.Keys.forEach((keyVal) => {\n const keyValArr = keyVal.split(',');\n const foreignKeyName = keyValArr[0] ? keyValArr[0].trim() : '';\n const parentIdentifierName = keyValArr[1]\n ? keyValArr[1].trim()\n : '';\n const searchValueKey = /^[A-Z]*$/.test(parentIdentifierName)\n ? parentIdentifierName.toLowerCase()\n : toLowerFirstChar(parentIdentifierName);\n lazyNodeSearchObj['manyToManyKeys'].push({\n searchItemIdentifier: usingJoiningTableForSearch\n ? /^[A-Z]*$/.test(foreignKeyName)\n ? foreignKeyName.toLowerCase()\n : toLowerFirstChar(foreignKeyName)\n : searchValueKey,\n searchNameKey: foreignKeyName,\n // check name string: if 1 word, lowercase. if 2 words, lower first char\n searchValueKey: searchValueKey\n });\n });\n }\n }\n\n if (childEntityAssoc && Object.keys(childEntityAssoc).length) {\n childEntityAssoc.Keys.forEach((keyVal) => {\n const keyValArr = keyVal.split(',');\n let searchJoiningEntity = '';\n if (\n !isManyToManySearch &&\n node.nodeObj.hasOwnProperty(\n node.properties.joiningEntityCatalogObjectKey\n )\n ) {\n searchJoiningEntity =\n node.properties.joiningEntityCatalogObjectKey;\n }\n const foreignKeyName = keyValArr[0] ? keyValArr[0].trim() : '';\n const parentIdentifierName = keyValArr[1]\n ? keyValArr[1].trim()\n : '';\n let siObj = {\n searchNameKey: parentIdentifierName,\n // check name string: if 1 word, lowercase. if 2 words, lower first char\n searchValueKey: /^[A-Z]*$/.test(foreignKeyName)\n ? foreignKeyName.toLowerCase()\n : toLowerFirstChar(foreignKeyName),\n searchJoiningEntity: searchJoiningEntity\n };\n if (isManyToManySearch && !usingJoiningTableForSearch) {\n siObj = {\n searchNameKey: foreignKeyName,\n // check name string: if 1 word, lowercase. if 2 words, lower first char\n searchValueKey: /^[A-Z]*$/.test(foreignKeyName)\n ? foreignKeyName.toLowerCase()\n : toLowerFirstChar(foreignKeyName)\n };\n }\n if (isManyToManySearch) {\n if (\n childNode.properties?.catalogObjectKey &&\n childNode.properties?.joiningEntityCatalogObjectLeftKey\n ) {\n siObj['joiningEntityKeyName'] = toUpperFirstChar(\n !usingJoiningTableForSearch\n ? childNode.properties?.joiningEntityChildKey\n : childNode.properties?.catalogObjectKey\n );\n siObj['joiningEntityCatalogObjectLeftKeyName'] =\n toUpperFirstChar(\n childNode.properties?.joiningEntityCatalogObjectLeftKey\n );\n }\n if (promotedEntityForJoiningTable?.unityBaseSearchMethod) {\n siObj['joiningEntityKeyName'] = null;\n siObj['joiningEntityCatalogObjectLeftKeyName'] = null;\n }\n }\n searchIdentifiers.push(siObj);\n });\n }\n }\n\n // If there are no search identifiers, then use the default one retrieved from catalog entities\n if (!searchIdentifiers.length) {\n defaultSearchIdentifiers.forEach((searchIdentifier) => {\n const siObj = {\n searchNameKey: searchIdentifier,\n searchValueKey: searchIdentifier\n };\n if (\n childNode.properties?.catalogObjectKey &&\n childNode.properties?.joiningEntityCatalogObjectLeftKey\n ) {\n siObj['joiningEntityKeyName'] = toUpperFirstChar(\n childNode.properties?.catalogObjectKey\n );\n siObj['joiningEntityCatalogObjectLeftKeyName'] = toUpperFirstChar(\n childNode.properties?.joiningEntityCatalogObjectLeftKey\n );\n }\n searchIdentifiers.push(siObj);\n });\n }\n\n searchIdentifiers.forEach((si) => {\n // value come's from parent node object\n let searchValue = '';\n if (si?.searchJoiningEntity) {\n searchValue =\n node.nodeObj[si.searchJoiningEntity][si.searchValueKey];\n } else {\n if (usingJoiningTableForSearch) {\n const joiningEntityCatalogObjectKey =\n node?.properties?.joiningEntityCatalogObjectKey;\n const value = node?.nodeObj?.[joiningEntityCatalogObjectKey];\n searchValue = value\n ? value[si.searchValueKey]\n : node.nodeObj[si.searchValueKey];\n } else {\n searchValue = node.nodeObj[si.searchValueKey];\n }\n }\n let formattedPropertyName = toUpperFirstChar(si.searchNameKey);\n if (\n si['joiningEntityKeyName'] &&\n si['joiningEntityCatalogObjectLeftKeyName']\n ) {\n formattedPropertyName = `${si['joiningEntityKeyName']}.${si['joiningEntityCatalogObjectLeftKeyName']}.${formattedPropertyName}`;\n }\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: searchValue,\n searchOperator: '='\n });\n });\n lazyNodeSearchObj.data = getSearchObject(filterElements, 1, 50);\n lazyNodeSearchObj.apiMethodId = baseSearch?.apiMethodId || null;\n lazyLoadChildrenArr.push(lazyNodeSearchObj);\n } else {\n console.log('Error: Promote ' + entityName + ' entity');\n node.errorRetrievingChildren =\n 'Error: Promote ' + entityName + ' child entity';\n }\n });\n return lazyLoadChildrenArr;\n};\n\nexport const formatTreeMenuItem = (\n responseObject,\n treeStructure,\n catalogObjects,\n promotedEntities,\n associatedInquiryTree,\n wasLazyLoaded\n) => {\n if (!responseObject) return null;\n const tree = cloneDeep(treeStructure);\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(\n responseObject,\n orderedTreeData,\n orderedKeys,\n treeArr,\n catalogObjects,\n promotedEntities,\n wasLazyLoaded\n );\n\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n displayTree['associatedInquiryTree'] = associatedInquiryTree;\n displayTree['wasLazyLoaded'] = wasLazyLoaded;\n return displayTree;\n};\n\nexport const expandAllNodes = (tree) => {\n tree.isExpanded = true;\n if (tree?.children) {\n tree.children.forEach((node) => expandAllNodes(node));\n }\n};\n\nexport const collapseAllNodes = (tree) => {\n tree.isExpanded = false;\n if (tree?.children) {\n tree.children.forEach((node) => collapseAllNodes(node));\n }\n};\n\nexport const findAllParentIds = (\n menuItems,\n currentParentNode,\n allParentIds = []\n) => {\n if (currentParentNode?.parentId) {\n allParentIds.push(currentParentNode?.parentId);\n const newParentNode = searchTree(menuItems, currentParentNode?.parentId);\n findAllParentIds(menuItems, newParentNode, allParentIds);\n }\n\n return allParentIds;\n};\n\nexport const formatTreeLabel = (label, obj) => {\n const fields = label?.split('+');\n const keys = fields?.map((field) => field.trim());\n if (keys) {\n const skippableKeys = [];\n const updatedKeys = keys.map((key, index) => {\n const matchedKey = key.charAt(0) === '\"';\n if (matchedKey) {\n skippableKeys.push(index);\n key = key.replace(/\"/g, '');\n }\n return key;\n });\n const values = [];\n for (let j = 0; j < keys.length; j++) {\n let property = keys[j];\n if (property) {\n const splitProperties = property.split('.');\n if (splitProperties.length > 1) {\n let constructedValue = null;\n splitProperties.forEach((property) => {\n const matches = property.match(/\\[(.*?)\\]/);\n let objIndex = null;\n let arrIndex = null;\n if (matches) {\n arrIndex = parseInt(matches[1]);\n objIndex = matches.index;\n }\n if (typeof arrIndex === 'number' && objIndex) {\n const formattedProperty = property.substring(0, objIndex);\n if (!constructedValue) {\n if (obj[formattedProperty]) {\n constructedValue = obj[formattedProperty][arrIndex];\n }\n } else {\n if (constructedValue[formattedProperty]) {\n constructedValue =\n constructedValue[formattedProperty][arrIndex];\n }\n }\n } else {\n if (!constructedValue) {\n constructedValue = obj[property];\n } else {\n constructedValue = constructedValue[property];\n }\n }\n });\n if (\n typeof constructedValue === 'boolean' ||\n typeof constructedValue === 'number'\n ) {\n constructedValue = constructedValue.toString();\n }\n values.push(constructedValue);\n continue;\n }\n }\n let value = obj[property];\n if (typeof value === 'boolean' || typeof value === 'number') {\n value = value.toString();\n }\n values.push(value);\n }\n let displayName = updatedKeys.join('+');\n for (let k = 0; k < updatedKeys.length; k++) {\n if (!skippableKeys.includes(k)) {\n if (values[k]) {\n displayName = displayName.replace(`${updatedKeys[k]}`, values[k]);\n } else {\n displayName = displayName.replace(`${updatedKeys[k]}`, '');\n }\n }\n }\n\n return displayName.replaceAll('+', ' ');\n } else {\n return label;\n }\n};\n\nexport const getDisplayName = (node, obj) => {\n return formatTreeLabel(node.properties['displayName'], obj);\n};\n\nexport const getDisplayDetails = (node, obj) => {\n return formatTreeLabel(node.properties['displayDetails'], obj);\n};\n\nexport const getHeaderTitle = (node, obj) => {\n return formatTreeLabel(node.properties['headerName'], obj);\n};\n\nexport const searchForMatchingNode = (\n tree,\n nodeObj = {},\n searchIdentifiers = []\n) => {\n let result = null;\n let match = true;\n searchIdentifiers.forEach((searchIdentifier) => {\n if (tree?.nodeObj[searchIdentifier] !== nodeObj[searchIdentifier]) {\n match = false;\n }\n });\n if (match && searchIdentifiers.length) {\n return tree;\n } else {\n if (tree.children) {\n tree.children.some(\n (node) =>\n (result = searchForMatchingNode(node, nodeObj, searchIdentifiers))\n );\n }\n return result;\n }\n};\n\nexport const getNodeIdForRightBorder = (expandedNodeIds, node, parentId) => {\n if (!expandedNodeIds.includes(node?.id)) {\n return node.id;\n }\n if (!expandedNodeIds.includes(parentId)) {\n const foundParentNode = node.children.find((item) => item.id === parentId);\n if (foundParentNode) {\n if (expandedNodeIds.includes(foundParentNode?.parentId)) {\n return parentId;\n } else {\n return getNodeIdForRightBorder(\n expandedNodeIds,\n foundParentNode,\n foundParentNode?.parentId\n );\n }\n }\n } else {\n return parentId;\n }\n};\n\nexport const findNodeById = (tree, id) => {\n let result = null;\n if (tree?.id === id) {\n return tree;\n } else {\n if (tree.children) {\n tree.children.some((node) => (result = findNodeById(node, id)));\n }\n return result;\n }\n};\n\nexport const findNodeByIdAndLabel = (tree, id, label) => {\n let result = null;\n if (tree?.id === id && tree?.properties?.label === label) {\n return tree;\n } else {\n if (tree.children) {\n tree.children.some((node) => (result = findNodeById(node, id, label)));\n }\n return result;\n }\n};\n\nexport const findNodesByIdAndLabel = (tree, id, label) => {\n let results = [];\n if (tree?.id === id && tree?.properties?.label === label) {\n results.push(tree);\n }\n if (tree.children) {\n tree.children.forEach((node) => {\n results = results.concat(findNodesByIdAndLabel(node, id, label));\n });\n }\n return results;\n};\n\nconst updateNodeForStaticGrouping = (\n displayTree,\n nodeGroup,\n nodeChildren,\n treeList,\n scopedGroupItemIndexes,\n groupedItemIndexes,\n index,\n item\n) => {\n // Only clone deep on children to handle multiple of same node\n // references in different groups.\n const updatedDisplayTree = { ...displayTree };\n const nodeIsHidden = checkNodeIsHidden(updatedDisplayTree, item, false);\n if (!nodeIsHidden) {\n updatedDisplayTree.children = displayTree.children\n ? cloneDeep(displayTree.children)\n : displayTree.children;\n updatedDisplayTree['parentId'] = nodeGroup.id;\n updatedDisplayTree['parentGroupId'] = nodeGroup.id;\n updatedDisplayTree['parentGroupName'] = nodeGroup.properties.label;\n if (updatedDisplayTree.isGroupNode) {\n nodeGroup.children.push(updatedDisplayTree);\n } else {\n nodeChildren.push(updatedDisplayTree);\n }\n if (treeList) {\n treeList.push(updatedDisplayTree);\n }\n scopedGroupItemIndexes.add(index);\n groupedItemIndexes.add(index);\n }\n};\n\nexport const processItemForStaticNodeGroup = (\n nodeGroup,\n item,\n groupedItemIndexes,\n displayTree,\n index,\n scopedGroupItemIndexes = new Set(),\n treeList,\n nodeChildren = []\n) => {\n if (\n nodeGroup?.properties?.propertyMapping &&\n nodeGroup?.properties?.jsonLogic\n ) {\n const rule = mapRule(\n nodeGroup?.properties?.propertyMapping,\n nodeGroup?.properties?.jsonLogic\n );\n if (\n rule &&\n evaluateRule(\n rule,\n item,\n item.properties?.joiningEntityCatalogObjectKey,\n false\n )\n ) {\n let itemAdded = false;\n nodeGroup.children.forEach((childGroup) => {\n if (childGroup.isGroupNode) {\n const processedItem = processItemForStaticNodeGroup(\n childGroup,\n item,\n groupedItemIndexes,\n displayTree,\n index,\n childGroup.children.length ? new Set() : scopedGroupItemIndexes,\n treeList,\n nodeChildren\n ) || { itemAdded };\n itemAdded = processedItem?.itemAdded;\n }\n });\n if (!itemAdded) {\n updateNodeForStaticGrouping(\n displayTree,\n nodeGroup,\n nodeChildren,\n treeList,\n scopedGroupItemIndexes,\n groupedItemIndexes,\n index,\n item\n );\n itemAdded = true;\n }\n }\n } else {\n if (nodeGroup.isOutlierGroup && !groupedItemIndexes.has(index)) {\n updateNodeForStaticGrouping(\n displayTree,\n nodeGroup,\n nodeChildren,\n treeList,\n scopedGroupItemIndexes,\n groupedItemIndexes,\n index,\n item\n );\n }\n }\n if (treeList && nodeGroup.isGroupNode) {\n // Handles duplicates\n const existingGroup = treeList\n .filter((node) => node.isGroupNode)\n .find((eg) => eg.id === nodeGroup.id);\n if (!existingGroup) {\n const nodeIsHidden = checkNodeIsHidden(nodeGroup, item, false);\n !nodeIsHidden && treeList.push(nodeGroup);\n }\n }\n return { itemAdded: groupedItemIndexes.has(index), nodeChildren };\n};\nexport const constructStaticNodeGroups = (tree, shouldUseNewId = false) => {\n const nodeGroups = [];\n const groupConfiguration = tree?.properties?.groupConfiguration;\n const groupType = groupConfiguration?.groupType || NodeGroupTypeEnums.Static;\n const hideEmptyGroups = groupConfiguration?.hideEmptyGroups;\n\n if (\n groupConfiguration?.enabled &&\n groupConfiguration?.groupings[groupType]?.length\n ) {\n groupConfiguration.groupings[groupType].forEach((grouping) => {\n // Order By Group order\n const orderedGroups = orderByGroupOrder(grouping?.groups);\n // key is old id value is new id\n const newIdMap = {};\n orderedGroups.forEach((group) => {\n if (shouldUseNewId) {\n newIdMap[group.id] = uuid();\n }\n group['children'] = [];\n });\n if (Object.keys(newIdMap).length) {\n orderedGroups.forEach((group) => {\n if (newIdMap[group.id]) {\n group.id = newIdMap[group.id];\n }\n if (newIdMap[group.parentGroupId]) {\n group.parentGroupId = newIdMap[group.parentGroupId];\n }\n });\n }\n if (orderedGroups?.length) {\n // Get the first group where it doesn't have parentGroupId\n const firstGroup =\n orderedGroups.find((group) => !group.parentGroupId) ||\n orderedGroups[0];\n orderedGroups.shift();\n // make tree group structure\n const displayTree = makeTreeStaticGroupStructure(\n orderedGroups,\n 'id',\n 'parentGroupId',\n groupType,\n hideEmptyGroups\n );\n const { id, isExpanded, ...firstGroupProperties } = firstGroup;\n const groupNode = new GroupNode({\n id,\n hideEmptyGroups,\n groupType,\n children: Array.isArray(displayTree) ? displayTree : [displayTree],\n isExpanded,\n properties: { ...firstGroupProperties }\n });\n nodeGroups.push(groupNode);\n }\n });\n\n if (groupConfiguration?.outlier === 'group') {\n const outlierGroup = new GroupNode({\n groupType,\n isOutlierGroup: true,\n properties: {\n label:\n groupConfiguration?.outlierGroupLabel || 'Unlabeled Outlier Group',\n icon: groupConfiguration?.outlierIcon\n }\n });\n nodeGroups.push(outlierGroup);\n }\n }\n\n return nodeGroups;\n};\n\nexport const getOrderedDynamicGroups = (tree, shouldUseNewId = false) => {\n const groupConfiguration = tree?.properties?.groupConfiguration;\n const groupType = groupConfiguration?.groupType || NodeGroupTypeEnums.Dynamic;\n let orderedGroups = [];\n\n if (\n groupConfiguration?.enabled &&\n groupConfiguration?.groupings[groupType]?.length\n ) {\n groupConfiguration.groupings[groupType].forEach((grouping) => {\n // Order By Group order\n orderedGroups = orderByGroupOrder(grouping?.groups);\n // key is old id value is new id\n const newIdMap = {};\n orderedGroups.forEach((group) => {\n if (shouldUseNewId) {\n newIdMap[group.id] = uuid();\n }\n group['children'] = [];\n });\n if (Object.keys(newIdMap).length) {\n orderedGroups.forEach((group) => {\n if (newIdMap[group.id]) {\n group.id = newIdMap[group.id];\n }\n if (newIdMap[group.parentGroupId]) {\n group.parentGroupId = newIdMap[group.parentGroupId];\n }\n });\n }\n });\n }\n return orderedGroups;\n};\n\nexport const constructDynamicNodeGroups = (\n results,\n tree,\n shouldUseNewId = false\n) => {\n let nodeGroups = [];\n const groupConfiguration = tree?.properties?.groupConfiguration;\n const groupType = groupConfiguration?.groupType || NodeGroupTypeEnums.Dynamic;\n\n if (\n groupConfiguration?.enabled &&\n groupConfiguration?.groupings[groupType]?.length\n ) {\n groupConfiguration.groupings[groupType].forEach((grouping) => {\n // Order By Group order\n const orderedGroups = orderByGroupOrder(grouping?.groups);\n // key is old id value is new id\n const newIdMap = {};\n orderedGroups.forEach((group) => {\n if (shouldUseNewId) {\n newIdMap[group.id] = uuid();\n }\n group['children'] = [];\n });\n if (Object.keys(newIdMap).length) {\n orderedGroups.forEach((group) => {\n if (newIdMap[group.id]) {\n group.id = newIdMap[group.id];\n }\n if (newIdMap[group.parentGroupId]) {\n group.parentGroupId = newIdMap[group.parentGroupId];\n }\n });\n }\n if (orderedGroups?.length) {\n const isSingleGroup = orderedGroups.length === 1;\n const dynamicTreeStructure = makeDynamicTreeStructure(\n orderedGroups,\n 'id',\n 'parentGroupId'\n );\n\n const groupSet = makeDynamicGroupStructures(\n dynamicTreeStructure,\n results\n );\n\n results.forEach((item, index) => {\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n const innerGroupList = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(\n item,\n orderedTreeData,\n orderedKeys,\n treeArr,\n null,\n null,\n false,\n innerGroupList\n );\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n const updatedDisplayTree = cloneDeep(displayTree);\n const nodeIsHidden = checkNodeIsHidden(\n updatedDisplayTree,\n item,\n false\n );\n !nodeIsHidden &&\n processItemForDynamicNodeGroups(\n updatedDisplayTree,\n dynamicTreeStructure,\n groupSet,\n groupSet,\n isSingleGroup\n );\n });\n groupSet.forEach((group) =>\n updateTreeIds(group, null, uuid(), uuid(), null)\n );\n nodeGroups = nodeGroups.concat(groupSet);\n }\n });\n }\n\n return nodeGroups;\n};\n\nconst getLabelFromProperty = (item, property) => {\n const splitProperties = property.split('.');\n if (splitProperties.length) {\n let constructedValue = null;\n splitProperties.forEach((property) => {\n const matches = property.match(/\\[(.*?)\\]/);\n let objIndex = null;\n let arrIndex = null;\n if (matches) {\n arrIndex = parseInt(matches[1]);\n objIndex = matches.index;\n }\n if (typeof arrIndex === 'number' && objIndex) {\n const formattedProperty = property.substring(0, objIndex);\n if (!constructedValue) {\n if (item[formattedProperty]) {\n constructedValue = item[formattedProperty][arrIndex];\n }\n } else {\n if (constructedValue[formattedProperty]) {\n constructedValue = constructedValue[formattedProperty][arrIndex];\n }\n }\n } else {\n if (!constructedValue) {\n constructedValue = item ? item[property] : '';\n } else {\n constructedValue = constructedValue[property];\n }\n }\n });\n return constructedValue;\n }\n return null;\n};\n\nexport const constructBusinessObjectArrFromTree = (\n node,\n businessObjects = []\n) => {\n if (node?.nodeObj) {\n // construct the businessObject\n const businessObject = { label: '', value: '', domainObject: '' };\n const joiningEntityCatalogObjectKey =\n node.properties?.joiningEntityCatalogObjectKey;\n const displayName = node.properties?.displayName;\n if (joiningEntityCatalogObjectKey) {\n const jointEntity = node.nodeObj[joiningEntityCatalogObjectKey];\n businessObject.label =\n formatTreeLabel(displayName, node.nodeObj) ||\n jointEntity?.businessObjectKey;\n businessObject.value = jointEntity?.businessObjectKey;\n businessObject.domainObject = node.properties?.catalogReturnObject;\n } else {\n const entity = node.nodeObj;\n businessObject.label =\n formatTreeLabel(displayName, node.nodeObj) || entity?.businessObjectKey;\n businessObject.value = entity?.businessObjectKey;\n businessObject.domainObject = node.properties?.catalogReturnObject;\n }\n businessObjects.push(businessObject);\n }\n if (node?.children?.length) {\n node.children.forEach((childNode) =>\n constructBusinessObjectArrFromTree(childNode, businessObjects)\n );\n }\n return businessObjects;\n};\n\nexport const processItemForDynamicNodeGroups = (\n displayTree,\n node,\n groupNodes,\n previousFilteredGroups = [],\n isSingleGroup = false\n) => {\n const { property, id } = node;\n const item = displayTree?.nodeObj;\n const label = property ? getLabelFromProperty(item, property) : null;\n // stores the next set of nodes for the current level of the tree\n let filteredGroups = [];\n previousFilteredGroups.forEach((group) => {\n if (group) {\n const foundGroups = findNodesByIdAndLabel(group, id, label);\n if (foundGroups.length) {\n filteredGroups = filteredGroups.concat(foundGroups);\n }\n }\n });\n if (filteredGroups.length) {\n if (node?.children?.length) {\n node.children.forEach((child) =>\n processItemForDynamicNodeGroups(\n displayTree,\n child,\n groupNodes,\n filteredGroups,\n isSingleGroup\n )\n );\n } else {\n filteredGroups.forEach((filteredGroup) => {\n const matchingGroupNode = findNodeByIdAndLabel(\n filteredGroup,\n node.id,\n label\n );\n if (matchingGroupNode) {\n displayTree['parentGroupId'] = matchingGroupNode.id;\n matchingGroupNode.children.push(displayTree);\n }\n });\n }\n } else {\n if (isSingleGroup) {\n groupNodes.push(displayTree);\n } else {\n // if there isn't a match for the current level of the tree for the item,\n // if there are any previous level groups, then add it to their children\n previousFilteredGroups.forEach((filteredGroup) => {\n if (filteredGroup) {\n displayTree['parentGroupId'] = filteredGroup.id;\n filteredGroup.children.push(displayTree);\n }\n });\n }\n }\n};\n\nconst orderByGroupOrder = (groups = []) => {\n return orderBy(groups, ['order'], ['asc']);\n};\n\nexport const updateTreeIds = (\n node,\n lastEntityNodeId,\n newId = uuid(),\n newParentId = uuid(),\n parentGroupName = null\n) => {\n let entityNodeParentId = lastEntityNodeId;\n if (node) {\n node.id = newId;\n if (node.parentId || node.parentGroupId) {\n node.parentId = newParentId;\n node.parentGroupId = newParentId;\n }\n if (parentGroupName) {\n node['parentGroupName'] = parentGroupName;\n }\n\n if (!node.isGroupNode && entityNodeParentId) {\n node['entityNodeParentId'] = entityNodeParentId;\n }\n if (!node.isGroupNode) {\n entityNodeParentId = node.id;\n }\n }\n\n // traverse the children recursively and update their ids and parentIds\n if (node?.children?.length) {\n node.children.forEach((child) =>\n updateTreeIds(child, entityNodeParentId, uuid(), newId, parentGroupName)\n );\n }\n};\n\nconst processGroupNodesAndAddToTreeList = (\n node,\n treeList,\n lastEntityNodeId,\n item,\n wasLazyLoaded\n) => {\n let entityNodeParentId = lastEntityNodeId;\n if (treeList) {\n // handle duplicates\n if (!treeList.find((tree) => tree.id === node.id)) {\n if (!node.isGroupNode && entityNodeParentId) {\n node['entityNodeParentId'] = entityNodeParentId;\n }\n if (!node.isGroupNode) {\n entityNodeParentId = node.id;\n }\n const nodeIsHidden = checkNodeIsHidden(node, item, wasLazyLoaded);\n !nodeIsHidden && treeList.push(node);\n }\n }\n\n // traverse the children and add to treeList\n if (node?.children?.length) {\n node.children.forEach((child) =>\n processGroupNodesAndAddToTreeList(\n child,\n treeList,\n entityNodeParentId,\n item,\n wasLazyLoaded\n )\n );\n }\n};\n\nexport const mapNodeGroupChildren = (nodeGroup, nodeGroupChildren = []) => {\n nodeGroupChildren.forEach((node) => {\n if (nodeGroup.id === node.parentGroupId) {\n nodeGroup.children.push(node);\n }\n });\n\n if (nodeGroup?.children?.length) {\n nodeGroup.children.forEach((childGroup) => {\n if (childGroup.isGroupNode) {\n mapNodeGroupChildren(childGroup, nodeGroupChildren); // recursively call function to traverse child node groups\n }\n });\n }\n\n return nodeGroup; // return the updated object\n};\n\nexport const checkNodeIsHidden = (node, item, wasLazyLoaded = false) => {\n if (!node || (node && !Object.keys(node).length)) {\n return true;\n }\n let rule = null;\n if (node.isGroupNode) {\n if (node.properties?.hiddenNode?.enabled) {\n // TODO: handle conditional hiding for group node\n }\n } else {\n if (node.properties?.hiddenNode?.enabled) {\n // Handle conditional hiding of node\n rule = mapRule(\n node.properties.hiddenNode.propertyMapping,\n node.properties.hiddenNode.jsonLogic\n );\n if (\n rule &&\n evaluateRule(\n rule,\n item,\n node.properties?.joiningEntityCatalogObjectKey,\n wasLazyLoaded\n )\n ) {\n return true;\n }\n }\n }\n return false;\n};\n\nexport const constructPreloadedTree = (\n treeStructure,\n pageList,\n catalogObjects\n) => {\n if (!pageList) return null;\n let preloadedList = [];\n const tree = cloneDeep(treeStructure);\n if (\n tree.properties?.groupConfiguration?.enabled &&\n tree.properties?.groupConfiguration.groupType ===\n NodeGroupTypeEnums.Static &&\n tree.properties?.groupConfiguration?.groupings?.static?.length\n ) {\n const topNodeGroups = constructStaticNodeGroups(tree);\n const groupedItemIndexes = new Set();\n topNodeGroups.forEach((nodeGroup) => {\n // Loop through each response item and group them\n let nodeGroupChildren = [];\n pageList.forEach((item, index) => {\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n const innerGroupList = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(\n item,\n orderedTreeData,\n orderedKeys,\n treeArr,\n catalogObjects,\n null,\n false,\n innerGroupList\n );\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n const processedItem = processItemForStaticNodeGroup(\n nodeGroup,\n item,\n groupedItemIndexes,\n displayTree,\n index,\n new Set()\n );\n nodeGroupChildren = nodeGroupChildren.concat(\n processedItem?.nodeChildren || []\n );\n });\n // map nodeGroupChildren to the node groups\n const updatedNodeGroup = mapNodeGroupChildren(\n nodeGroup,\n nodeGroupChildren\n );\n // handles having the same node in multiple groups\n updatedNodeGroup.children.forEach((child) => {\n updateTreeIds(\n child,\n null,\n uuid(),\n updatedNodeGroup.id || uuid(),\n updatedNodeGroup?.properties.label || null\n );\n });\n preloadedList.push(updatedNodeGroup);\n });\n if (\n tree.properties?.groupConfiguration?.outlier ===\n NodeGroupOutlierEnums.Individual\n ) {\n pageList.forEach((item, index) => {\n if (!groupedItemIndexes.has(index)) {\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(\n item,\n orderedTreeData,\n orderedKeys,\n treeArr,\n null,\n null,\n false\n );\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n const nodeIsHidden = checkNodeIsHidden(displayTree, item, false);\n if (!nodeIsHidden) {\n updateTreeIds(displayTree, null, uuid(), uuid(), null);\n preloadedList.push(displayTree);\n }\n }\n });\n }\n } else if (\n tree.properties?.groupConfiguration?.enabled &&\n tree.properties?.groupConfiguration.groupType ===\n NodeGroupTypeEnums.Dynamic &&\n tree.properties?.groupConfiguration?.groupings?.dynamic?.length\n ) {\n // Handle Dynamic GroupType for single tree\n //const nodeGroups = constructDynamicNodeGroups(pageList, tree);\n // Use the new methods for constructing the dynamic group nodes\n const nodeGroups = constructDynamicNodeGroups2(pageList, tree);\n preloadedList = preloadedList.concat(nodeGroups);\n } else {\n pageList.forEach((item) => {\n const orderedKeys = [];\n const orderedTreeData = [];\n const treeArr = [];\n processCatalogObjectKeysInOrder(tree, orderedKeys);\n processOrderedTreeData(tree, orderedTreeData);\n processObjectToTree(item, orderedTreeData, orderedKeys, treeArr);\n const displayTree = makeTreeStructure(treeArr, 'id', 'parentId');\n const nodeIsHidden = checkNodeIsHidden(displayTree, item, false);\n !nodeIsHidden && preloadedList.push(displayTree);\n });\n }\n return preloadedList;\n};\n\n// Dynamic Group Functions\n// SF - 20230531\n\n// Compare function to be used when sorting groups by order\nconst CompareGroupByOrder = (a, b) => {\n if (a.order > b.order) return 1;\n if (a.order < b.order) return -1;\n\n return 0;\n};\n\n// Compare function to be used when sorting sibling nodes so that all group nodes appear first in the list\nconst CompareSiblingNodes = (a, b) => {\n if (a.hasOwnProperty('isGroupNode') && !b.hasOwnProperty('isGroupNode'))\n return -1;\n if (!a.hasOwnProperty('isGroupNode') && b.hasOwnProperty('isGroupNode'))\n return 1;\n\n // If both nodes are groups then sort by the order property\n if (a.hasOwnProperty('isGroupNode') && b.hasOwnProperty('isGroupNode')) {\n if (a.properties?.order > b.properties?.order) return 1;\n if (a.properties?.order < b.properties?.order) return -1;\n }\n\n return 0;\n};\n\n// Util function to map child groups to their parent collections\nconst GetGroupChildMap = (_map, groupKey) => {\n //If no child map for the group exists yet then create it\n if (_map[groupKey] === undefined) {\n _map[groupKey] = [];\n }\n return _map[groupKey];\n};\n\n// Util function to add a group node to a parent groups child mapping\nconst AddGroupToChildMap = (_map, groupKey, groupNode) => {\n // Get the child map for the parent node. If none exists, create it.\n let childMap = GetGroupChildMap(_map, groupKey);\n // Add the child node to the map\n childMap.push(groupNode);\n // Order the groups based on their 'order' property\n childMap.sort(CompareGroupByOrder);\n};\n\nconst createDynamicGroups2 = (\n _treeConfig,\n _groupConfig,\n _item,\n _curItem,\n _pList,\n _siblings,\n _parentId\n) => {\n let _groupCreated = false;\n if (_pList.length > 0) {\n let tmpProp = _pList[0];\n // Check if the current item has the property the dynamic group should be created from\n if (_curItem.hasOwnProperty(tmpProp)) {\n let newItem = _curItem[tmpProp];\n // Check if there are additional parts to the property the group should be created from\n if (_pList.length > 1) {\n // Arrays are also considered Objects, so check for it first\n if (Array.isArray(newItem)) {\n // If it's an array then loop through each of the items and carry on to check the next part of the group property\n for (let i = 0, numOfItems = newItem.length; i < numOfItems; i++) {\n let aGroupWasCreated = createDynamicGroups2(\n _treeConfig,\n _groupConfig,\n _item,\n newItem[i],\n _pList.slice(1),\n _siblings,\n _parentId\n );\n _groupCreated = aGroupWasCreated ? aGroupWasCreated : _groupCreated;\n }\n } else if (typeof newItem === 'object' && newItem !== null) {\n let aGroupWasCreated = createDynamicGroups2(\n _treeConfig,\n _groupConfig,\n _item,\n newItem,\n _pList.slice(1),\n _siblings,\n _parentId\n );\n _groupCreated = aGroupWasCreated ? aGroupWasCreated : _groupCreated;\n }\n } else {\n // If newItem is not an array, object, or null, then create a group for the config entry\n if (typeof newItem !== 'object' && newItem !== null && newItem !== '') {\n let groupName = newItem.toString();\n\n // Check if a group with this name already exists in the list of siblings\n let groupNode = null;\n for (\n let siblingIdx = 0, numOfSiblings = _siblings.length;\n siblingIdx < numOfSiblings;\n siblingIdx++\n ) {\n let sibling = _siblings[siblingIdx];\n if (\n sibling.hasOwnProperty('isGroupNode') &&\n sibling.isGroupNode === true\n ) {\n if (sibling.properties.label === groupName) {\n groupNode = sibling;\n break;\n }\n }\n }\n // If no groupNode was found in the list of siblings, create one\n if (groupNode == null) {\n let newGroupNodeId = uuid();\n groupNode = new GroupNode({\n id: `${newGroupNodeId}`,\n groupType: NodeGroupTypeEnums.Dynamic,\n children: [],\n parentGroupId: _parentId,\n parentId: _parentId,\n isExpanded: _groupConfig.isExpanded,\n properties: {\n label: groupName,\n propertyIsCustom: _groupConfig.propertyIsCustom,\n propertyKey: _groupConfig.property,\n order: _groupConfig.order\n }\n });\n // Add the groupNode to the list of siblings\n _siblings.push(groupNode);\n }\n // Now that we have a groupNode, set groupCreated to true, as it means that a groupNode for this name was either created\n // or an existing groupNode with the same name was found.\n _groupCreated = true;\n\n let subGroupWasCreated = false;\n // Check if the config group has subgroups\n for (\n let subGroupIdx = 0, numOfSubGroups = _groupConfig.children.length;\n subGroupIdx < numOfSubGroups;\n subGroupIdx++\n ) {\n let subGroupConfig = _groupConfig.children[subGroupIdx];\n // Get the the property name used to create the subgroup\n let subGroupPropList = subGroupConfig.property\n ? subGroupConfig.property.split('.')\n : [];\n // For each subgroup config tree, pass see if groups need to be created for the result record\n let subGroupCreated = createDynamicGroups2(\n _treeConfig,\n subGroupConfig,\n _item,\n _item,\n subGroupPropList,\n groupNode.children,\n groupNode.id\n );\n subGroupWasCreated = subGroupCreated\n ? subGroupCreated\n : subGroupWasCreated;\n }\n // If there were no subgroups found or created for this record then create a normal node for this result record and add it to the list of group children\n if (!subGroupWasCreated) {\n let tmpNode = cloneDeep(_treeConfig);\n processObjIndex(\n tmpNode,\n _item,\n null,\n groupNode.id,\n null,\n null,\n false\n );\n groupNode.children.push(tmpNode);\n\n let newChildNodes = [];\n // If there are child config nodes, we need to process them now\n for (\n let childNodeIdx = 0, numOfChildNodes = tmpNode.children.length;\n childNodeIdx < numOfChildNodes;\n childNodeIdx++\n ) {\n let childConfigNode = tmpNode.children[childNodeIdx];\n // Get the property of the current node that represents the associated child node(s)\n let propToGetRecords =\n childConfigNode.properties.catalogObjectKey;\n // Check if the current node has the property of the associated childe node(s)\n if (\n propToGetRecords &&\n propToGetRecords != null &&\n _item.hasOwnProperty(propToGetRecords)\n ) {\n let newResultSet = _item[propToGetRecords];\n if (newResultSet && newResultSet != null) {\n // constructDynamicNodeGroups2 expects the result set to be passed in as an array\n if (Array.isArray(newResultSet)) {\n newChildNodes.push(\n ...constructDynamicNodeGroups2(\n newResultSet,\n childConfigNode,\n tmpNode.id\n )\n );\n } else {\n let tmpNewResultSet = [];\n tmpNewResultSet.push(newResultSet);\n newChildNodes.push(\n ...constructDynamicNodeGroups2(\n newResultSet,\n childConfigNode,\n tmpNode.id\n )\n );\n }\n }\n }\n }\n tmpNode.children = newChildNodes;\n }\n\n groupNode.children.sort(CompareSiblingNodes);\n }\n }\n }\n }\n return _groupCreated;\n};\n\nconst constructDynamicGroupConfigTrees2 = (configNode) => {\n // List of the top level group nodes for this configNode\n let topLevelConfigGroupNodes = [];\n\n // tree is really the current config node we're looking at\n const groupConfiguration = configNode?.properties?.groupConfiguration;\n const groupType = groupConfiguration?.groupType || NodeGroupTypeEnums.Dynamic;\n\n // Check if there are groupings for this current level of config\n if (\n groupConfiguration?.enabled &&\n groupConfiguration?.groupings[groupType]?.length\n ) {\n // Each grouping of groups is treated as its own tree and should be constructed as such\n let dynamicGroupings = groupConfiguration.groupings[groupType];\n for (\n let groupingIdx = 0, numOfGroupings = dynamicGroupings.length;\n groupingIdx < numOfGroupings;\n groupingIdx++\n ) {\n let grouping = dynamicGroupings[groupingIdx];\n\n // If the grouping has no groups, continue to the next grouping in the list\n if (grouping.groups === undefined || grouping.groups === null) continue;\n\n // Map of each groups collection of childeren\n let groupChildMap = {};\n\n // loop through the groups in the config grouping and build out the tree\n for (\n let groupIdx = 0, numOfGroups = grouping.groups.length;\n groupIdx < numOfGroups;\n groupIdx++\n ) {\n let group = grouping.groups[groupIdx];\n // initialize list of childeren\n group['children'] = GetGroupChildMap(groupChildMap, group.id);\n // add node to parents list of childeren\n if (group.parentGroupId === undefined || group.parentGroupId === null) {\n topLevelConfigGroupNodes.push(group);\n } else {\n // Add the group to the child map of the parent\n AddGroupToChildMap(groupChildMap, group.parentGroupId, group);\n }\n }\n }\n }\n\n for (\n let configIdx = 0, numOfChildConfigNodes = configNode.children.length;\n configIdx < numOfChildConfigNodes;\n configIdx++\n ) {\n let childConfigNode = configNode.children[configIdx];\n constructDynamicGroupConfigTrees2(childConfigNode);\n }\n\n configNode.groupConfigTrees = topLevelConfigGroupNodes;\n};\n\nexport const constructDynamicNodeGroups2 = (\n results,\n configNode,\n parentId = null\n) => {\n let levelNodes = [];\n\n if (!configNode.groupConfigTrees) {\n // Take the flat list of dynamic groupings and build a tree for them\n constructDynamicGroupConfigTrees2(configNode);\n }\n\n // Now that we have a config tree with each level having a tree of for dynamic group config\n // We need to iterate through each record of the resultset and construct a tree of nodes and group nodesuse it with each record of the results to build out a tree of GroupNodes\n // Each of the Config Group Trees in topLevelConfigGroupNodes may result in a GroupNode being created and added to the levelNodes list\n for (\n let rIdx = 0, numOfResults = results.length;\n rIdx < numOfResults;\n rIdx++\n ) {\n let item = results[rIdx];\n let groupCreated = false;\n for (\n let ctlIdx = 0,\n numOfGroupConfigTrees = configNode.groupConfigTrees.length;\n ctlIdx < numOfGroupConfigTrees;\n ctlIdx++\n ) {\n let groupConfigNode = configNode.groupConfigTrees[ctlIdx];\n // The property the dynamic group should be using to get the group name\n let gPropList = groupConfigNode.property\n ? groupConfigNode.property.split('.')\n : [];\n // Create and populate a GroupNode for the record based on its value of the property the group is configured against\n let aGroupWasCreated = createDynamicGroups2(\n configNode,\n groupConfigNode,\n item,\n item,\n gPropList,\n levelNodes,\n parentId\n );\n groupCreated = aGroupWasCreated ? aGroupWasCreated : groupCreated;\n }\n\n // If no dynamic group was created for the record then we need to add it as a sibling to the levelNodes list\n if (!groupCreated) {\n // TO DO: Create a Tree Node based on the record and add it to the levelNodes list\n let tmpNode = cloneDeep(configNode);\n processObjIndex(tmpNode, item, null, parentId, null, null, false);\n levelNodes.push(tmpNode);\n\n let newChildNodes = [];\n // If there are child config nodes, we need to process them now\n for (\n let childNodeIdx = 0, numOfChildNodes = tmpNode.children.length;\n childNodeIdx < numOfChildNodes;\n childNodeIdx++\n ) {\n let childConfigNode = tmpNode.children[childNodeIdx];\n let propToGetRecords = childConfigNode.properties.catalogObjectKey;\n if (\n propToGetRecords &&\n propToGetRecords != null &&\n item.hasOwnProperty(propToGetRecords)\n ) {\n let newResultSet = item[propToGetRecords];\n if (newResultSet && newResultSet != null) {\n if (Array.isArray(newResultSet)) {\n newChildNodes.push(\n ...constructDynamicNodeGroups2(\n newResultSet,\n childConfigNode,\n tmpNode.id\n )\n );\n } else {\n let tmpNewResultSet = [];\n tmpNewResultSet.push(newResultSet);\n newChildNodes.push(\n ...constructDynamicNodeGroups2(\n newResultSet,\n childConfigNode,\n tmpNode.id\n )\n );\n }\n }\n }\n }\n tmpNode.children = newChildNodes;\n }\n }\n levelNodes.sort(CompareSiblingNodes);\n\n return levelNodes;\n};\n\n// End of Dynamic Group functions\n// SF - 20230531\n\nexport const transformMenuPageTree = (node) => {\n if (!node?.menuItemInstance?.isActive) return null;\n const parameters =\n node.menuItemInstance?.parameters &&\n JSON.parse(node.menuItemInstance.parameters);\n const label = node.title || '';\n const expanded = parameters?.defaultDisplay === 'expanded';\n\n const updatedNode = {\n id: node.menuStructureId,\n parentId: node.parentId,\n isExpanded: expanded,\n properties: {\n defaultIcon: { type: '', name: parameters?.FluentIcon, color: '' },\n nodeLabel: label,\n nodeSubLabel: '',\n // carry through optional item count into node properties\n itemCount:\n parameters?.itemCount ?? node.menuItemInstance?.itemCount ?? null,\n page: {\n id: parameters?.PageId,\n entity: {\n entityName: parameters?.entityName\n },\n pbiReportCode: parameters?.pbiReportCode,\n udpTagId: parameters?.udpTagId,\n queryId: parameters?.queryId,\n inquiryTreeId: parameters?.InquiryTreeId,\n requiredFieldMapping: parameters?.requiredFieldMapping\n },\n aggregateThresholdId: parameters?.aggregateThresholdId || ''\n },\n children: []\n };\n\n for (const child of node.menuItemInstanceStructures) {\n const updatedChild = transformMenuPageTree(child);\n if (updatedChild) {\n updatedNode.children.push(updatedChild);\n }\n }\n\n return updatedNode;\n};\n\nexport const mapNodeObjValuesToSearchParameters = (\n nodeObj,\n aggregateThresholdParamMappings\n) => {\n if (!aggregateThresholdParamMappings || !nodeObj) {\n return {};\n }\n const mappings = { ...aggregateThresholdParamMappings };\n Object.keys(mappings).forEach((key) => {\n const nodeObjKey = mappings[key];\n if (nodeObjKey) {\n const nodeObjValue = nodeObj[nodeObjKey];\n mappings[key] = nodeObjValue || '';\n }\n });\n return mappings;\n};\n\nexport const getSearchValueString = (nodeObj, searchIdentifier) => {\n const searchIdentifiers = searchIdentifier.split(',');\n const searchValues = [];\n searchIdentifiers.forEach((searchIdentifier) => {\n searchValues.push(nodeObj[searchIdentifier]);\n });\n return searchValues.toString();\n};\n"],"mappings":"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"}
|
|
@@ -6,10 +6,10 @@ import "../../unitySystemEnums-DQSkCr3D.js";
|
|
|
6
6
|
import "../../RuleUtilities-D5ACzikQ.js";
|
|
7
7
|
import "../../SearchUtilities-Df1gkDw9.js";
|
|
8
8
|
import "../../GroupNode-BxnXH0gG.js";
|
|
9
|
-
import "../../TreeUtilities-
|
|
9
|
+
import "../../TreeUtilities-DWgARig7.js";
|
|
10
10
|
import "../../StatusChip-DZAN88VU.js";
|
|
11
11
|
import "../../IconButtonWithToolTip-BL60Lfj0.js";
|
|
12
|
-
import { t as Accordion } from "../../Accordion-
|
|
12
|
+
import { t as Accordion } from "../../Accordion-CaMSRkVt.js";
|
|
13
13
|
import "../../accordion-b0s-0-RI.js";
|
|
14
14
|
|
|
15
15
|
export { Accordion };
|
|
@@ -6,8 +6,8 @@ import "../../../../UnityFluentIcon-DkZ-zXku.js";
|
|
|
6
6
|
import "../../../../RuleUtilities-D5ACzikQ.js";
|
|
7
7
|
import "../../../../SearchUtilities-Df1gkDw9.js";
|
|
8
8
|
import "../../../../GroupNode-BxnXH0gG.js";
|
|
9
|
-
import "../../../../TreeUtilities-
|
|
9
|
+
import "../../../../TreeUtilities-DWgARig7.js";
|
|
10
10
|
import "../../../../StatusChip-DZAN88VU.js";
|
|
11
|
-
import { t as FluentCell_default } from "../../../../FluentCell-
|
|
11
|
+
import { t as FluentCell_default } from "../../../../FluentCell-Ce9_3cOY.js";
|
|
12
12
|
|
|
13
13
|
export { FluentCell_default as default };
|
|
@@ -6,13 +6,13 @@ import "../../../UnityFluentIcon-DkZ-zXku.js";
|
|
|
6
6
|
import "../../../RuleUtilities-D5ACzikQ.js";
|
|
7
7
|
import "../../../SearchUtilities-Df1gkDw9.js";
|
|
8
8
|
import "../../../GroupNode-BxnXH0gG.js";
|
|
9
|
-
import "../../../TreeUtilities-
|
|
9
|
+
import "../../../TreeUtilities-DWgARig7.js";
|
|
10
10
|
import "../../../StatusChip-DZAN88VU.js";
|
|
11
11
|
import "../../../FluentBody-BObfuo5B.js";
|
|
12
|
-
import "../../../FluentCell-
|
|
12
|
+
import "../../../FluentCell-Ce9_3cOY.js";
|
|
13
13
|
import "../../../FluentHead-B9Abo5q9.js";
|
|
14
14
|
import "../../../FluentRow-BvNBfdSg.js";
|
|
15
|
-
import { t as FluentDataTable } from "../../../FluentDataTable-
|
|
15
|
+
import { t as FluentDataTable } from "../../../FluentDataTable-BjCP7-Vf.js";
|
|
16
16
|
import "../../../FluentDataTable-DaeSnPVT.js";
|
|
17
17
|
|
|
18
18
|
export { FluentDataTable };
|
|
@@ -19,18 +19,18 @@ import "../../../useActions-CBGNxEKr.js";
|
|
|
19
19
|
import "../../../RuleUtilities-D5ACzikQ.js";
|
|
20
20
|
import "../../../SearchUtilities-Df1gkDw9.js";
|
|
21
21
|
import "../../../GroupNode-BxnXH0gG.js";
|
|
22
|
-
import "../../../TreeUtilities-
|
|
22
|
+
import "../../../TreeUtilities-DWgARig7.js";
|
|
23
23
|
import "../../../UnityIconLibrary-CjIwzfjv.js";
|
|
24
24
|
import "../../../useAxiosGet-BMoXHfLN.js";
|
|
25
25
|
import "../../../StatusChip-DZAN88VU.js";
|
|
26
26
|
import "../../../methodUtils-DEk9B4A8.js";
|
|
27
|
-
import "../../../IconRenderer-
|
|
27
|
+
import "../../../IconRenderer-DAfBq9qv.js";
|
|
28
28
|
import "../../../NumberOperator-k6iXs38S.js";
|
|
29
29
|
import "../../../aggregateUtils-BTBSWD8I.js";
|
|
30
30
|
import "../../../AggregateChip-BF6RL_4_.js";
|
|
31
31
|
import "../../../AvatarAlphabet-CX-usWH_.js";
|
|
32
32
|
import "../../../ChipAlphabet-Co4gOUVP.js";
|
|
33
|
-
import { t as EntityHeader } from "../../../EntityHeader
|
|
33
|
+
import { t as EntityHeader } from "../../../EntityHeader--gf9BpbJ.js";
|
|
34
34
|
import "../../../UdpAlertsContainer-DexXCrFZ.js";
|
|
35
35
|
|
|
36
36
|
export { EntityHeader };
|
|
@@ -10,7 +10,7 @@ import "../../colorConverter-x64WSLsF.js";
|
|
|
10
10
|
import "../../Typography-BMsa1JYd.js";
|
|
11
11
|
import "../../SearchUtilities-Df1gkDw9.js";
|
|
12
12
|
import "../../GroupNode-BxnXH0gG.js";
|
|
13
|
-
import "../../TreeUtilities-
|
|
13
|
+
import "../../TreeUtilities-DWgARig7.js";
|
|
14
14
|
import "../../LayoutUnit-D4jJvonh.js";
|
|
15
15
|
import "../../StatusChip-DZAN88VU.js";
|
|
16
16
|
import "../../Ellipse-DGTaApGj.js";
|
|
@@ -29,10 +29,10 @@ import { n as FluentListElement, t as AmbientList } from "../../AmbientList-Nlsz
|
|
|
29
29
|
import "../../ExtenderToggle-h0uJXXsa.js";
|
|
30
30
|
import { t as HeaderExpander } from "../../HeaderExpander-ubASH9Tk.js";
|
|
31
31
|
import "../../FluentBody-BObfuo5B.js";
|
|
32
|
-
import "../../FluentCell-
|
|
32
|
+
import "../../FluentCell-Ce9_3cOY.js";
|
|
33
33
|
import "../../FluentHead-B9Abo5q9.js";
|
|
34
34
|
import "../../FluentRow-BvNBfdSg.js";
|
|
35
|
-
import { t as FluentDataTable } from "../../FluentDataTable-
|
|
35
|
+
import { t as FluentDataTable } from "../../FluentDataTable-BjCP7-Vf.js";
|
|
36
36
|
import { t as HintPanel } from "../../dataDisplay-nJIK_NjC.js";
|
|
37
37
|
import "../../FluentDataTable-DaeSnPVT.js";
|
|
38
38
|
import "../../FluentActivity-CSTNwtbg.js";
|