udp-react-enterprise-component-library 25.18.1-beta.41 → 25.18.1-beta.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/dist/{AadCallback-DL4V3BBL.js → AadCallback-DI_SnmOU.js} +1 -1
  2. package/dist/{AadCallback-DL4V3BBL.js.map → AadCallback-DI_SnmOU.js.map} +1 -1
  3. package/dist/{ActionProvider-2AAAOm9H.js → ActionProvider-C_rohJIr.js} +2 -2
  4. package/dist/{ActionProvider-2AAAOm9H.js.map → ActionProvider-C_rohJIr.js.map} +1 -1
  5. package/dist/{ActionSplitScreen-DeU-9YQb.js → ActionSplitScreen-OFqIncG9.js} +3 -3
  6. package/dist/{ActionSplitScreen-DeU-9YQb.js.map → ActionSplitScreen-OFqIncG9.js.map} +1 -1
  7. package/dist/{ActionWrapper-Btbpz4rx.js → ActionWrapper-d9dIOSYB.js} +4 -4
  8. package/dist/{ActionWrapper-Btbpz4rx.js.map → ActionWrapper-d9dIOSYB.js.map} +1 -1
  9. package/dist/{AmChart-BM2HoPa4.js → AmChart-WvmHsOdz.js} +1 -1
  10. package/dist/{AmChart-BM2HoPa4.js.map → AmChart-WvmHsOdz.js.map} +1 -1
  11. package/dist/{AmbientSingleDateSelector-BQY1Nals.js → AmbientSingleDateSelector-8uylQ-tc.js} +1 -1
  12. package/dist/{AmbientSingleDateSelector-BQY1Nals.js.map → AmbientSingleDateSelector-8uylQ-tc.js.map} +1 -1
  13. package/dist/{AmbientVisualizationCard-Dig-Mh_G.js → AmbientVisualizationCard-Cov8RODG.js} +3 -3
  14. package/dist/{AmbientVisualizationCard-Dig-Mh_G.js.map → AmbientVisualizationCard-Cov8RODG.js.map} +1 -1
  15. package/dist/{AmbientVisualizer-B1Xwwe0J.js → AmbientVisualizer-Bo7NLGfw.js} +1 -1
  16. package/dist/{AmbientVisualizer-B1Xwwe0J.js.map → AmbientVisualizer-Bo7NLGfw.js.map} +1 -1
  17. package/dist/{BarChartWidget-Dwav8_8e.js → BarChartWidget-D-_ZVpMh.js} +1 -1
  18. package/dist/{BarChartWidget-Dwav8_8e.js.map → BarChartWidget-D-_ZVpMh.js.map} +1 -1
  19. package/dist/{BaseTreeMenu-koW5kjhb.js → BaseTreeMenu-nKjw3cil.js} +2 -2
  20. package/dist/{BaseTreeMenu-koW5kjhb.js.map → BaseTreeMenu-nKjw3cil.js.map} +1 -1
  21. package/dist/{BubbleWidget-CsIheJTW.js → BubbleWidget-SplMEBJm.js} +2 -2
  22. package/dist/{BubbleWidget-CsIheJTW.js.map → BubbleWidget-SplMEBJm.js.map} +1 -1
  23. package/dist/{CardList-BPNGTxsh.js → CardList-B_F1Qgqh.js} +1 -1
  24. package/dist/{CardList-BPNGTxsh.js.map → CardList-B_F1Qgqh.js.map} +1 -1
  25. package/dist/{CircleButton-cl6mmDmn.js → CircleButton-B9JAMG53.js} +2 -2
  26. package/dist/{CircleButton-cl6mmDmn.js.map → CircleButton-B9JAMG53.js.map} +1 -1
  27. package/dist/{ContentContainer-DmKz5kvq.js → ContentContainer-DuDrf5lL.js} +1 -1
  28. package/dist/{ContentContainer-DmKz5kvq.js.map → ContentContainer-DuDrf5lL.js.map} +1 -1
  29. package/dist/{DataBrowserContainer-DPB12XVR.js → DataBrowserContainer-DZGhEt9N.js} +3 -3
  30. package/dist/{DataBrowserContainer-DPB12XVR.js.map → DataBrowserContainer-DZGhEt9N.js.map} +1 -1
  31. package/dist/{DateTrendWidget-DzqqUeZv.js → DateTrendWidget-F6hBnYej.js} +1 -1
  32. package/dist/{DateTrendWidget-DzqqUeZv.js.map → DateTrendWidget-F6hBnYej.js.map} +1 -1
  33. package/dist/{DensePlotWidget-CsRmVbqu.js → DensePlotWidget-BEhHNh53.js} +1 -1
  34. package/dist/{DensePlotWidget-CsRmVbqu.js.map → DensePlotWidget-BEhHNh53.js.map} +1 -1
  35. package/dist/{Directory-CoEKdRkU.js → Directory-CFTCLxWZ.js} +1 -1
  36. package/dist/{Directory-CoEKdRkU.js.map → Directory-CFTCLxWZ.js.map} +1 -1
  37. package/dist/{EntityHeader-CuiVOsA7.js → EntityHeader-D_gYzj76.js} +2 -2
  38. package/dist/{EntityHeader-CuiVOsA7.js.map → EntityHeader-D_gYzj76.js.map} +1 -1
  39. package/dist/{FieldArrayCard-CgM6q87c.js → FieldArrayCard-Bv9h9akG.js} +1 -1
  40. package/dist/{FieldArrayCard-CgM6q87c.js.map → FieldArrayCard-Bv9h9akG.js.map} +1 -1
  41. package/dist/{FileUpload-t3PZx_yE.js → FileUpload-BCxrOds_.js} +1 -1
  42. package/dist/{FileUpload-t3PZx_yE.js.map → FileUpload-BCxrOds_.js.map} +1 -1
  43. package/dist/{FluentCardHeader-CRJaqkV3.js → FluentCardHeader-BdMB2qzK.js} +1 -1
  44. package/dist/{FluentCardHeader-CRJaqkV3.js.map → FluentCardHeader-BdMB2qzK.js.map} +1 -1
  45. package/dist/{FluentCell-C1d53Ct2.js → FluentCell-D2lpxw4O.js} +2 -2
  46. package/dist/{FluentCell-C1d53Ct2.js.map → FluentCell-D2lpxw4O.js.map} +1 -1
  47. package/dist/{FluentDataTable-C1rFIP0M.js → FluentDataTable-ChpZUwal.js} +2 -2
  48. package/dist/{FluentDataTable-C1rFIP0M.js.map → FluentDataTable-ChpZUwal.js.map} +1 -1
  49. package/dist/{FluentLink-D-gKioCQ.js → FluentLink-DP2eDAH2.js} +1 -1
  50. package/dist/{FluentLink-D-gKioCQ.js.map → FluentLink-DP2eDAH2.js.map} +1 -1
  51. package/dist/{FluentRadioGroup-Cfldr9dO.js → FluentRadioGroup-CCKelZVk.js} +1 -1
  52. package/dist/{FluentRadioGroup-Cfldr9dO.js.map → FluentRadioGroup-CCKelZVk.js.map} +1 -1
  53. package/dist/{FluentSelectMenu-BEREJbe-.js → FluentSelectMenu-yQMFZWEg.js} +1 -1
  54. package/dist/{FluentSelectMenu-BEREJbe-.js.map → FluentSelectMenu-yQMFZWEg.js.map} +1 -1
  55. package/dist/{FluentSimpleSelect-Djff-up8.js → FluentSimpleSelect-DxxbQV37.js} +2 -2
  56. package/dist/{FluentSimpleSelect-Djff-up8.js.map → FluentSimpleSelect-DxxbQV37.js.map} +1 -1
  57. package/dist/{FluentTimeline-D8sfgLj1.js → FluentTimeline-BEPJHsgi.js} +1 -1
  58. package/dist/{FluentTimeline-D8sfgLj1.js.map → FluentTimeline-BEPJHsgi.js.map} +1 -1
  59. package/dist/{GraphCard-Dv4a99wo.js → GraphCard-CcXwOERk.js} +1 -1
  60. package/dist/{GraphCard-Dv4a99wo.js.map → GraphCard-CcXwOERk.js.map} +1 -1
  61. package/dist/{IconKey-D7fZ_U4O.js → IconKey-CbK8_rol.js} +1 -1
  62. package/dist/{IconKey-D7fZ_U4O.js.map → IconKey-CbK8_rol.js.map} +1 -1
  63. package/dist/{IconRenderer-B6ZoqrTX.js → IconRenderer-JdCm70xC.js} +2 -2
  64. package/dist/{IconRenderer-B6ZoqrTX.js.map → IconRenderer-JdCm70xC.js.map} +1 -1
  65. package/dist/Inquiry-C1q14Yyd.js +3 -0
  66. package/dist/{Inquiry-CeZgX9ls.js → Inquiry-Cjz91wf_.js} +7 -7
  67. package/dist/{Inquiry-CeZgX9ls.js.map → Inquiry-Cjz91wf_.js.map} +1 -1
  68. package/dist/{InquirySearchContainer-BIpngula.js → InquirySearchContainer-BnHwUWFC.js} +2 -2
  69. package/dist/{InquirySearchContainer-BIpngula.js.map → InquirySearchContainer-BnHwUWFC.js.map} +1 -1
  70. package/dist/{LineAndSparklinesWidget-B7U_tk1Y.js → LineAndSparklinesWidget-KVAnvpKl.js} +1 -1
  71. package/dist/{LineAndSparklinesWidget-B7U_tk1Y.js.map → LineAndSparklinesWidget-KVAnvpKl.js.map} +1 -1
  72. package/dist/{LineGraphWidget-vAqCb_aI.js → LineGraphWidget-CYjLiV5B.js} +1 -1
  73. package/dist/{LineGraphWidget-vAqCb_aI.js.map → LineGraphWidget-CYjLiV5B.js.map} +1 -1
  74. package/dist/{MenuPage-CkV002Ni.js → MenuPage-BS8ti9lx.js} +3 -3
  75. package/dist/{MenuPage-CkV002Ni.js.map → MenuPage-BS8ti9lx.js.map} +1 -1
  76. package/dist/MenuPage-DV20TjmL.js +3 -0
  77. package/dist/{MttMainTimeline-DIzQDgmK.js → MttMainTimeline-nusYDWg_.js} +2 -2
  78. package/dist/{MttMainTimeline-DIzQDgmK.js.map → MttMainTimeline-nusYDWg_.js.map} +1 -1
  79. package/dist/{MttSummary-Ctibq7Eu.js → MttSummary-DWESRW7k.js} +3 -3
  80. package/dist/{MttSummary-Ctibq7Eu.js.map → MttSummary-DWESRW7k.js.map} +1 -1
  81. package/dist/MyExportsPage-B3A6lwaV.js +3 -0
  82. package/dist/{MyExportsPage-DAYh16lE.js → MyExportsPage-BwcVZASe.js} +3 -3
  83. package/dist/{MyExportsPage-DAYh16lE.js.map → MyExportsPage-BwcVZASe.js.map} +1 -1
  84. package/dist/{NewsCard-C3y9a_OJ.js → NewsCard-Y-exMCuK.js} +1 -1
  85. package/dist/{NewsCard-C3y9a_OJ.js.map → NewsCard-Y-exMCuK.js.map} +1 -1
  86. package/dist/{Notes-UkwV2z4D.js → Notes-i2G6Ugsq.js} +1 -1
  87. package/dist/{Notes-UkwV2z4D.js.map → Notes-i2G6Ugsq.js.map} +1 -1
  88. package/dist/{NotesScreen-Xj0vl0v1.js → NotesScreen-DE3fhpjW.js} +4 -4
  89. package/dist/{NotesScreen-Xj0vl0v1.js.map → NotesScreen-DE3fhpjW.js.map} +1 -1
  90. package/dist/{OutlookCallback-ClSfPtyN.js → OutlookCallback-teOtztm6.js} +1 -1
  91. package/dist/{OutlookCallback-ClSfPtyN.js.map → OutlookCallback-teOtztm6.js.map} +1 -1
  92. package/dist/{PageActionWrapper-DonuC2VZ.js → PageActionWrapper-C-irIPLE.js} +2 -2
  93. package/dist/{PageActionWrapper-DonuC2VZ.js.map → PageActionWrapper-C-irIPLE.js.map} +1 -1
  94. package/dist/{PageNotFoundRoute-BfkErQJB.js → PageNotFoundRoute-B_mbfK8s.js} +1 -1
  95. package/dist/{PageNotFoundRoute-dmLyzuH3.js → PageNotFoundRoute-i_Tf23jB.js} +1 -1
  96. package/dist/{PageNotFoundRoute-dmLyzuH3.js.map → PageNotFoundRoute-i_Tf23jB.js.map} +1 -1
  97. package/dist/{PaymentForm-jJcVd3Du.js → PaymentForm-BTLh5bXJ.js} +3 -3
  98. package/dist/{PaymentForm-jJcVd3Du.js.map → PaymentForm-BTLh5bXJ.js.map} +1 -1
  99. package/dist/{RecentlyLoadedNodesTable-CIR8D1c4.js → RecentlyLoadedNodesTable-8WQBaAl4.js} +2 -2
  100. package/dist/{RecentlyLoadedNodesTable-CIR8D1c4.js.map → RecentlyLoadedNodesTable-8WQBaAl4.js.map} +1 -1
  101. package/dist/{RecentlyLoadedNodesWidget-D0lhioMn.js → RecentlyLoadedNodesWidget--NDwNQQF.js} +2 -2
  102. package/dist/{RecentlyLoadedNodesWidget-D0lhioMn.js.map → RecentlyLoadedNodesWidget--NDwNQQF.js.map} +1 -1
  103. package/dist/{RejectIcon-lx34XeEL.js → RejectIcon-CNSkW92y.js} +1 -1
  104. package/dist/{RejectIcon-lx34XeEL.js.map → RejectIcon-CNSkW92y.js.map} +1 -1
  105. package/dist/{RemindersCard-rF51zmWF.js → RemindersCard-CSJ8buYt.js} +2 -2
  106. package/dist/{RemindersCard-rF51zmWF.js.map → RemindersCard-CSJ8buYt.js.map} +1 -1
  107. package/dist/{RemindersScreen-Cg6_SGJI.js → RemindersScreen-CyT18piP.js} +4 -4
  108. package/dist/{RemindersScreen-Cg6_SGJI.js.map → RemindersScreen-CyT18piP.js.map} +1 -1
  109. package/dist/{RemindersWidget-BcLn4sdk.js → RemindersWidget-B3qlh8K-.js} +3 -3
  110. package/dist/{RemindersWidget-BcLn4sdk.js.map → RemindersWidget-B3qlh8K-.js.map} +1 -1
  111. package/dist/Reports-CLowSLq9.js +3 -0
  112. package/dist/{Reports-CxRaLcxr.js → Reports-Cz5Pl1rM.js} +1 -1
  113. package/dist/{Reports-CxRaLcxr.js.map → Reports-Cz5Pl1rM.js.map} +1 -1
  114. package/dist/{SearchServiceDatasource-CeBOfTB0.js → SearchServiceDatasource-BrfkHkEq.js} +2 -2
  115. package/dist/{SearchServiceDatasource-CeBOfTB0.js.map → SearchServiceDatasource-BrfkHkEq.js.map} +1 -1
  116. package/dist/{SearchUtilities-CNz302LN.js → SearchUtilities-B1TCyppF.js} +20 -2
  117. package/dist/SearchUtilities-B1TCyppF.js.map +1 -0
  118. package/dist/{Shell-9TXRPvXM.js → Shell-CAPPm490.js} +5 -5
  119. package/dist/{Shell-9TXRPvXM.js.map → Shell-CAPPm490.js.map} +1 -1
  120. package/dist/{ShortcutContentFinder-B66kZQLM.js → ShortcutContentFinder-DTkqEgtI.js} +2 -2
  121. package/dist/{ShortcutContentFinder-B66kZQLM.js.map → ShortcutContentFinder-DTkqEgtI.js.map} +1 -1
  122. package/dist/{SimpleTable-lLaKKBvn.js → SimpleTable-z8tz6B0B.js} +1 -1
  123. package/dist/{SimpleTable-lLaKKBvn.js.map → SimpleTable-z8tz6B0B.js.map} +1 -1
  124. package/dist/{SiteHeader-DUNj1MrC.js → SiteHeader-wIcmMhx9.js} +3 -3
  125. package/dist/{SiteHeader-DUNj1MrC.js.map → SiteHeader-wIcmMhx9.js.map} +1 -1
  126. package/dist/{SparsePlotWidget-Ct-6iTAs.js → SparsePlotWidget-B3wtNHo2.js} +1 -1
  127. package/dist/{SparsePlotWidget-Ct-6iTAs.js.map → SparsePlotWidget-B3wtNHo2.js.map} +1 -1
  128. package/dist/{Statistic-CllW32VF.js → Statistic-IWynWCev.js} +2 -2
  129. package/dist/{Statistic-CllW32VF.js.map → Statistic-IWynWCev.js.map} +1 -1
  130. package/dist/{StatusCellRenderer-CVOARrth.js → StatusCellRenderer-BuPuvngw.js} +1 -1
  131. package/dist/{StatusCellRenderer-CVOARrth.js.map → StatusCellRenderer-BuPuvngw.js.map} +1 -1
  132. package/dist/{TableContainer-CcBkqd33.js → TableContainer-CcHjtMCa.js} +2 -2
  133. package/dist/{TableContainer-CcBkqd33.js.map → TableContainer-CcHjtMCa.js.map} +1 -1
  134. package/dist/{TicketCard-IqCCKSc0.js → TicketCard-D-FtADsb.js} +1 -1
  135. package/dist/{TicketCard-IqCCKSc0.js.map → TicketCard-D-FtADsb.js.map} +1 -1
  136. package/dist/{TimelineCalendar-D7T32gIH.js → TimelineCalendar-Mi4baqsg.js} +1 -1
  137. package/dist/{TimelineCalendar-D7T32gIH.js.map → TimelineCalendar-Mi4baqsg.js.map} +1 -1
  138. package/dist/{TokenGroupItem-BK0dx4cD.js → TokenGroupItem-DKbm__Kc.js} +1 -1
  139. package/dist/{TokenGroupItem-BK0dx4cD.js.map → TokenGroupItem-DKbm__Kc.js.map} +1 -1
  140. package/dist/{TreeUtilities-kiPupulY.js → TreeUtilities-VCy2z4Qv.js} +2 -2
  141. package/dist/{TreeUtilities-kiPupulY.js.map → TreeUtilities-VCy2z4Qv.js.map} +1 -1
  142. package/dist/UI/accordion/index.js +1 -1
  143. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js +1 -1
  144. package/dist/UI/dataDisplay/FluentDataTable/index.js +1 -1
  145. package/dist/UI/dataDisplay/GraphCard/index.js +1 -1
  146. package/dist/UI/dataDisplay/calendar/index.js +1 -1
  147. package/dist/UI/dataDisplay/cardList/index.js +1 -1
  148. package/dist/UI/dataDisplay/directory/index.js +1 -1
  149. package/dist/UI/dataDisplay/entityHeader/index.js +1 -1
  150. package/dist/UI/dataDisplay/index.js +1 -1
  151. package/dist/UI/dataDisplay/map/index.js +1 -1
  152. package/dist/UI/dataDisplay/notes/index.js +1 -1
  153. package/dist/UI/dataDisplay/ticketCard/index.js +1 -1
  154. package/dist/UI/dataDisplay/visualization/amCharts/index.js +1 -1
  155. package/dist/UI/dataDisplay/visualization/index.js +1 -1
  156. package/dist/UI/fileViewer/index.js +1 -1
  157. package/dist/UI/forms/index.js +1 -1
  158. package/dist/UI/index.js +5 -5
  159. package/dist/UI/inputs/calendar/index.js +1 -1
  160. package/dist/UI/inputs/dateRangeSelector/index.js +1 -1
  161. package/dist/UI/inputs/fieldArrayCard/index.js +1 -1
  162. package/dist/UI/inputs/link/index.js +1 -1
  163. package/dist/UI/inputs/menus/index.js +2 -2
  164. package/dist/UI/inputs/radio/index.js +1 -1
  165. package/dist/UI/mapLayout/ui/index.js +1 -1
  166. package/dist/UI/surfaces/cards/chartDisplayCards/index.js +1 -1
  167. package/dist/UI/surfaces/cards/fluentCards/index.js +1 -1
  168. package/dist/UI/surfaces/cards/newsCard/index.js +1 -1
  169. package/dist/UI/surfaces/cards/workOrderCard/index.js +1 -1
  170. package/dist/UI/templates/calendar/index.js +1 -1
  171. package/dist/UI/templates/deprecated/UdpGridTemplate/index.js +1 -1
  172. package/dist/UI/templates/ui/index.js +1 -1
  173. package/dist/UI/templates/ui/renderers/index.js +2 -2
  174. package/dist/UI/timeline/fluentTimeline/index.js +1 -1
  175. package/dist/UI/timeline/index.js +1 -1
  176. package/dist/UI/widgets/library/BarChartWidget/index.js +1 -1
  177. package/dist/UI/widgets/library/BubbleWidget/index.js +1 -1
  178. package/dist/UI/widgets/library/CircleGaugeWidget/index.js +110 -2
  179. package/dist/UI/widgets/library/CircleGaugeWidget/index.js.map +1 -0
  180. package/dist/UI/widgets/library/DateTrendWidget/index.js +1 -1
  181. package/dist/UI/widgets/library/DensePlotWidget/index.js +1 -1
  182. package/dist/UI/widgets/library/GaugeWidget/index.js +381 -2
  183. package/dist/UI/widgets/library/GaugeWidget/index.js.map +1 -0
  184. package/dist/UI/widgets/library/LineAndSparklinesWidget/index.js +1 -1
  185. package/dist/UI/widgets/library/LineGraphWidget/index.js +1 -1
  186. package/dist/UI/widgets/library/RecentlyLoadedNodesWidget/index.js +1 -1
  187. package/dist/UI/widgets/library/RemindersWidget/index.js +1 -1
  188. package/dist/UI/widgets/library/SparsePlotWidget/index.js +1 -1
  189. package/dist/UI/widgets/library/TableWidget/index.js +1 -1
  190. package/dist/{UdpAppProvider-C6fH--WD.js → UdpAppProvider-BRyRY8zN.js} +2 -2
  191. package/dist/{UdpAppProvider-C6fH--WD.js.map → UdpAppProvider-BRyRY8zN.js.map} +1 -1
  192. package/dist/{UdpCalendarYearView-BEdW-myL.js → UdpCalendarYearView-BSR8CGHt.js} +1 -1
  193. package/dist/{UdpCalendarYearView-BEdW-myL.js.map → UdpCalendarYearView-BSR8CGHt.js.map} +1 -1
  194. package/dist/{UdpDataBrowserPage-CQ0vS2GN.js → UdpDataBrowserPage-B-afkKoz.js} +4 -4
  195. package/dist/{UdpDataBrowserPage-CQ0vS2GN.js.map → UdpDataBrowserPage-B-afkKoz.js.map} +1 -1
  196. package/dist/{UdpDateRangeSelector-BivfBlPa.js → UdpDateRangeSelector-C_gpkHul.js} +1 -1
  197. package/dist/{UdpDateRangeSelector-BivfBlPa.js.map → UdpDateRangeSelector-C_gpkHul.js.map} +1 -1
  198. package/dist/{UdpFormsSubmissionGrid-i3P4ZwQx.js → UdpFormsSubmissionGrid-PWsnFyYB.js} +239 -64
  199. package/dist/UdpFormsSubmissionGrid-PWsnFyYB.js.map +1 -0
  200. package/dist/{UdpGridTemplate-OsS_O6jR.js → UdpGridTemplate-U9YcYLUf.js} +1 -1
  201. package/dist/{UdpGridTemplate-OsS_O6jR.js.map → UdpGridTemplate-U9YcYLUf.js.map} +1 -1
  202. package/dist/{UdpInquiryMaintenanceEnginePage-D7HFcJQu.js → UdpInquiryMaintenanceEnginePage-BiKDpo6a.js} +2 -2
  203. package/dist/{UdpInquiryMaintenanceEnginePage-D7HFcJQu.js.map → UdpInquiryMaintenanceEnginePage-BiKDpo6a.js.map} +1 -1
  204. package/dist/{UdpMaintenanceEnginePage-CX5L5k-E.js → UdpMaintenanceEnginePage-C1UcnDlL.js} +3 -3
  205. package/dist/{UdpMaintenanceEnginePage-CX5L5k-E.js.map → UdpMaintenanceEnginePage-C1UcnDlL.js.map} +1 -1
  206. package/dist/{UdpNotesPage-CgIdQgVV.js → UdpNotesPage-Deug2da_.js} +3 -3
  207. package/dist/{UdpNotesPage-CgIdQgVV.js.map → UdpNotesPage-Deug2da_.js.map} +1 -1
  208. package/dist/{UdpRemindersPage-CfLAOWP_.js → UdpRemindersPage-B8vCglBX.js} +3 -3
  209. package/dist/{UdpRemindersPage-CfLAOWP_.js.map → UdpRemindersPage-B8vCglBX.js.map} +1 -1
  210. package/dist/{UdpTransactionsPage-llP_6pYr.js → UdpTransactionsPage-B5uhMoFg.js} +32 -26
  211. package/dist/UdpTransactionsPage-B5uhMoFg.js.map +1 -0
  212. package/dist/{UdpVerticalManagementPage-ndwqxjDI.js → UdpVerticalManagementPage-DHK7-w0K.js} +2 -2
  213. package/dist/{UdpVerticalManagementPage-ndwqxjDI.js.map → UdpVerticalManagementPage-DHK7-w0K.js.map} +1 -1
  214. package/dist/{UdpVerticalManagementSidesheet-DomJyrvo.js → UdpVerticalManagementSidesheet-C2kuDXac.js} +2 -2
  215. package/dist/{UdpVerticalManagementSidesheet-DomJyrvo.js.map → UdpVerticalManagementSidesheet-C2kuDXac.js.map} +1 -1
  216. package/dist/{UserFormSideSheet-Bzw3AVnY.js → UserFormSideSheet-B6Mn3bZ0.js} +1 -1
  217. package/dist/{UserFormSideSheet-Bzw3AVnY.js.map → UserFormSideSheet-B6Mn3bZ0.js.map} +1 -1
  218. package/dist/UserFormSideSheet-C1G_jBcu.js +3 -0
  219. package/dist/VirtualBrowser-BoHR4EBJ.js +3 -0
  220. package/dist/{VirtualBrowser-BWflR1ah.js → VirtualBrowser-C2oPh3YY.js} +1 -1
  221. package/dist/{VirtualBrowser-BWflR1ah.js.map → VirtualBrowser-C2oPh3YY.js.map} +1 -1
  222. package/dist/{WorkOrderCard-s-6QK3Re.js → WorkOrderCard-Ce5WrpnX.js} +1 -1
  223. package/dist/{WorkOrderCard-s-6QK3Re.js.map → WorkOrderCard-Ce5WrpnX.js.map} +1 -1
  224. package/dist/{WorkflowContainer-CA0eMzMU.js → WorkflowContainer-Cd5H4mpf.js} +2 -2
  225. package/dist/{WorkflowContainer-CA0eMzMU.js.map → WorkflowContainer-Cd5H4mpf.js.map} +1 -1
  226. package/dist/{WorkflowContainer-LP2LBBn6.js → WorkflowContainer-Iq8fmnGR.js} +1 -1
  227. package/dist/{WorkflowTreeMenu-CTxpL6vb.js → WorkflowTreeMenu-D2Uc09jP.js} +2 -2
  228. package/dist/{WorkflowTreeMenu-CTxpL6vb.js.map → WorkflowTreeMenu-D2Uc09jP.js.map} +1 -1
  229. package/dist/{accordion-SICjF7Th.js → accordion-CT8euUVM.js} +2 -2
  230. package/dist/{accordion-SICjF7Th.js.map → accordion-CT8euUVM.js.map} +1 -1
  231. package/dist/actions/index.js +5 -3
  232. package/dist/{aggridHelpers-af9idKBD.js → aggridHelpers-BeUZvPIv.js} +2 -2
  233. package/dist/{aggridHelpers-af9idKBD.js.map → aggridHelpers-BeUZvPIv.js.map} +1 -1
  234. package/dist/componentSystems/multiThreadTimeline/index.js +7 -3
  235. package/dist/componentSystems/multiThreadTimeline/mttMainTimeline/index.js +1 -1
  236. package/dist/componentSystems/multiThreadTimeline/mttSummary/index.js +1 -1
  237. package/dist/componentSystems/multiThreadTimeline/ui/index.js +1 -1
  238. package/dist/componentSystems/pageRenderer/index.js +4 -0
  239. package/dist/dataBrowser/index.js +2 -1
  240. package/dist/{fileViewer-BmTE1zuM.js → fileViewer-BVzlhb3g.js} +2 -2
  241. package/dist/{fileViewer-BmTE1zuM.js.map → fileViewer-BVzlhb3g.js.map} +1 -1
  242. package/dist/{fluentTimeline-BCLxH23f.js → fluentTimeline-BWoLOxF_.js} +2 -2
  243. package/dist/{fluentTimeline-BCLxH23f.js.map → fluentTimeline-BWoLOxF_.js.map} +1 -1
  244. package/dist/{forms-CuTE3vcQ.js → forms-Eqr3TUUl.js} +2 -1
  245. package/dist/{forms-CuTE3vcQ.js.map → forms-Eqr3TUUl.js.map} +1 -1
  246. package/dist/{gridVisualizationFunctions-D4fd_Ceb.js → gridVisualizationFunctions-jnvPACJD.js} +1 -1
  247. package/dist/{gridVisualizationFunctions-D4fd_Ceb.js.map → gridVisualizationFunctions-jnvPACJD.js.map} +1 -1
  248. package/dist/index.js +95 -80
  249. package/dist/index.js.map +1 -0
  250. package/dist/inquiry/dashboard/index.js +1 -1
  251. package/dist/inquiry/index.js +3 -3
  252. package/dist/inquiry/search/index.js +1 -1
  253. package/dist/maintenanceEngine/index.js +5 -2
  254. package/dist/maintenanceEngine/tableBrowser/index.js +1 -1
  255. package/dist/maintenanceEngine/virtualBrowser/index.js +1 -1
  256. package/dist/menuPage/index.js +1 -1
  257. package/dist/{menuPage-C0cuD8I3.js → menuPage-B9NwQJVt.js} +2 -2
  258. package/dist/{menuPage-C0cuD8I3.js.map → menuPage-B9NwQJVt.js.map} +1 -1
  259. package/dist/notes/index.js +1 -1
  260. package/dist/providers/index.js +1 -1
  261. package/dist/reminders/index.js +2 -2
  262. package/dist/routes/components/index.js +1 -1
  263. package/dist/routes/index.js +1 -1
  264. package/dist/{routes-C-KBRkwM.js → routes-DG4NLFP9.js} +9 -9
  265. package/dist/{routes-C-KBRkwM.js.map → routes-DG4NLFP9.js.map} +1 -1
  266. package/dist/shell/index.js +3 -2
  267. package/dist/shell/ui/index.js +1 -1
  268. package/dist/{theme-C-5VosEn.js → theme-IKiRfNgl.js} +1 -1
  269. package/dist/{theme-C-5VosEn.js.map → theme-IKiRfNgl.js.map} +1 -1
  270. package/dist/treeMenu/index.js +1 -1
  271. package/dist/types/src/UI/forms/UdpTransactionEmailForm.d.ts.map +1 -1
  272. package/dist/types/src/index.d.ts +3 -0
  273. package/dist/types/src/index.d.ts.map +1 -1
  274. package/dist/types/src/kpi/UdpKpiCard.d.ts +4 -0
  275. package/dist/types/src/kpi/UdpKpiCard.d.ts.map +1 -0
  276. package/dist/types/src/kpi/UdpKpiCards.d.ts +4 -0
  277. package/dist/types/src/kpi/UdpKpiCards.d.ts.map +1 -0
  278. package/dist/types/src/kpi/type.d.ts +36 -0
  279. package/dist/types/src/kpi/type.d.ts.map +1 -0
  280. package/dist/types/src/udp/pages/UdpFormsSubmissionGrid/UdpFormsSubmissionGrid.d.ts.map +1 -1
  281. package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionGrid.d.ts.map +1 -1
  282. package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionsPage.d.ts +21 -0
  283. package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionsPage.d.ts.map +1 -1
  284. package/dist/types/src/udp/pages/UdpTransactionsPage/components/transactionAttachment/TransactionAttachments.d.ts.map +1 -1
  285. package/dist/types/src/utilities/search/Search.d.ts +3 -1
  286. package/dist/types/src/utilities/search/Search.d.ts.map +1 -1
  287. package/dist/types/src/utilities/search/SearchUtilities.d.ts +4 -1
  288. package/dist/types/src/utilities/search/SearchUtilities.d.ts.map +1 -1
  289. package/dist/types/tsconfig.tsbuildinfo +1 -1
  290. package/dist/udp/ShortcutContent/index.js +1 -1
  291. package/dist/udp/export/index.js +1 -1
  292. package/dist/udp/fileImportMapping/index.js +1 -1
  293. package/dist/udp/pages/UdpDataBrowserPage/index.js +1 -1
  294. package/dist/udp/pages/UdpFormsSubmissionGrid/index.js +1 -1
  295. package/dist/udp/pages/UdpInquiryMaintenanceEnginePage/index.js +1 -1
  296. package/dist/udp/pages/UdpMaintenanceEnginePage/index.js +1 -1
  297. package/dist/udp/pages/UdpNotesPage/index.js +1 -1
  298. package/dist/udp/pages/UdpPages/index.js +51 -2
  299. package/dist/udp/pages/UdpPages/index.js.map +1 -0
  300. package/dist/udp/pages/UdpPagesLazy/index.js +55 -2
  301. package/dist/udp/pages/UdpPagesLazy/index.js.map +1 -0
  302. package/dist/udp/pages/UdpRemindersPage/index.js +1 -1
  303. package/dist/udp/pages/UdpTransactionsPage/index.js +1 -1
  304. package/dist/udp/pages/UdpVerticalManagementPage/index.js +1 -1
  305. package/dist/udp/pages/UdpVerticalManagementSidesheet/index.js +1 -1
  306. package/dist/udp/pages/index.js +1 -1
  307. package/dist/utilities/aggrid/datasources/index.js +1 -1
  308. package/dist/utilities/aggrid/index.js +1 -1
  309. package/dist/utilities/customIcons/index.js +1 -1
  310. package/dist/utilities/floorplanFunctions/index.js +1 -1
  311. package/dist/utilities/form/paymentForm/index.js +1 -1
  312. package/dist/utilities/provider/index.js +1 -1
  313. package/dist/utilities/redirect/pages/index.js +1 -1
  314. package/dist/utilities/search/index.js +2 -2
  315. package/dist/utilities/style/index.js +1 -1
  316. package/dist/utilities/theme/index.js +1 -1
  317. package/dist/utilities/tree/index.js +1 -1
  318. package/dist/utilities/uploader/index.js +1 -1
  319. package/dist/workflow/index.js +4 -2
  320. package/dist/workflow/menus/index.js +1 -1
  321. package/export-map.json +5 -2
  322. package/package.json +2 -2
  323. package/dist/CircleGaugeWidget-Dbn-Hfs9.js +0 -111
  324. package/dist/CircleGaugeWidget-Dbn-Hfs9.js.map +0 -1
  325. package/dist/GaugeWidget-GvHtWlDn.js +0 -382
  326. package/dist/GaugeWidget-GvHtWlDn.js.map +0 -1
  327. package/dist/Inquiry-Cs1kj7m_.js +0 -3
  328. package/dist/MenuPage-IThq2ihD.js +0 -3
  329. package/dist/MyExportsPage-DMLtTRuJ.js +0 -3
  330. package/dist/Reports-Dsm8UDrt.js +0 -3
  331. package/dist/SearchUtilities-CNz302LN.js.map +0 -1
  332. package/dist/UdpFormsSubmissionGrid-i3P4ZwQx.js.map +0 -1
  333. package/dist/UdpPages-iGKLrxEq.js +0 -52
  334. package/dist/UdpPages-iGKLrxEq.js.map +0 -1
  335. package/dist/UdpPagesLazy-DAB_UwLn.js +0 -56
  336. package/dist/UdpPagesLazy-DAB_UwLn.js.map +0 -1
  337. package/dist/UdpTransactionsPage-llP_6pYr.js.map +0 -1
  338. package/dist/UserFormSideSheet-D6a35hXn.js +0 -3
  339. package/dist/VirtualBrowser-BLWKTPvM.js +0 -3
  340. package/dist/hocs-CyRt-7I7.js +0 -1
  341. package/dist/hooks-CZjs7TAZ.js +0 -1
  342. package/dist/menus-CETPr-Rz.js +0 -1
  343. package/dist/modified-BJdpgdkg.js +0 -1
  344. package/dist/mttMainTimeline-8er52lk7.js +0 -1
  345. package/dist/mttSummary-DjO6x1z3.js +0 -1
  346. package/dist/redirect-CiRW3aom.js +0 -1
  347. package/dist/renderers-CWJe-F-V.js +0 -1
  348. package/dist/sidebar-D6ohji9U.js +0 -1
  349. package/dist/storage-BH6-5v7t.js +0 -1
  350. package/dist/tableBrowser-DOXhQA7W.js +0 -1
  351. package/dist/ui-C4kNul8N.js +0 -1
  352. package/dist/ui-DKHa8sM6.js +0 -1
  353. package/dist/utils-DfHe3cg_.js +0 -1
  354. package/dist/utils-kACkfC1q.js +0 -1
  355. package/dist/virtualBrowser-CGrDP18C.js +0 -1
  356. package/dist/wrappers-RliXkfVO.js +0 -1
  357. /package/dist/{addUser-dW2T5ebz.js → addUser-B8dGyltZ.js} +0 -0
  358. /package/dist/{appSwitcher-Cc_raXX2.js → appSwitcher-Bcd4Cwcx.js} +0 -0
  359. /package/dist/{components-C06UZfZG.js → modified-BZxg92lm.js} +0 -0
  360. /package/dist/{crudBrowser-lDw1oxV2.js → redirect-dbCS_8ib.js} +0 -0
  361. /package/dist/{forms-CywZzmBr.js → renderers-DTo5-0ZY.js} +0 -0
  362. /package/dist/{functions-XSah-gNz.js → storage-C9onsVtI.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Inquiry-CeZgX9ls.js","names":["Field","useStyles","useStyles","ListItem","useStyles","other","useStyles","joiningEntityCatalogObjectKey","tree","useStyles","useStyles","uuid","tree","t","selectedTree","tabValue","LoadingOverlay","Form","treeId"],"sources":["../src/inquiry/ExecuteApiDialog.jsx","../src/inquiry/InquiryWrapper.jsx","../src/inquiry/NodeDetails.jsx","../src/inquiry/InquiryTreeMenuItem.jsx","../src/inquiry/InquiryTreeMenu.jsx","../src/inquiry/NodeList.jsx","../src/inquiry/InquiryContainer.jsx","../src/inquiry/Inquiry.jsx"],"sourcesContent":["import React from 'react';\nimport { Field } from '../utilities/form';\nimport { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { FluentDialog } from '../UI/feedback/FluentDialog';\nimport { useTranslation } from 'react-i18next';\nimport { useForm } from 'react-final-form';\n\nexport const ExecuteApiDialog = (props) => {\n const {\n open,\n handleCloseDialog,\n actionLabel = 'Execute',\n title = 'Execute the below Api',\n message,\n apiMethods = [],\n ...other\n } = props;\n const form = useForm();\n const { t } = useTranslation();\n\n const handleSubmit = () => {\n form.submit();\n };\n\n return (\n <div>\n <FluentDialog\n open={open}\n title={title}\n actionOne={handleCloseDialog}\n actionTwo={handleSubmit}\n labelOne={t('Cancel')}\n labelTwo={actionLabel}\n onClose={handleCloseDialog}\n message={message}\n maxWidth='sm'\n {...other}\n >\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Api(s)')}\n id='apis'\n name='apiMethod'\n fullWidth\n variant='outlined'\n margin='normal'\n size='small'\n options={apiMethods || []}\n initialValue={apiMethods[0] || null}\n required\n optionKey='name'\n />\n </FluentDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { makeStyles, Slide } from '@material-ui/core';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n width: '100%',\n position: 'relative'\n },\n sideBar: {\n width: (props) => (props.nodeMinimized ? props.collapsedWidth : 350),\n // height: '100vh',\n background: theme.palette.common.white,\n borderRight: `1px solid ${theme.palette.divider}`\n },\n children: {\n width: '100%'\n }\n}));\n\nexport const InquiryWrapper = (props) => {\n const classes = useStyles(props);\n\n const {\n children,\n sideBar,\n nodeLoaded,\n onMouseEnter,\n onMouseLeave,\n className,\n sidebarClassName,\n childrenClassName\n } = props;\n\n return (\n <div className={clsx(classes.root, className)}>\n <Slide direction='right' in={nodeLoaded} mountOnEnter unmountOnExit>\n <div\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n className={clsx(classes.sideBar, sidebarClassName)}\n >\n {sideBar}\n </div>\n </Slide>\n\n <div className={clsx(classes.children, childrenClassName)}>\n {children}\n </div>\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { LayoutUnit } from '../layout/LayoutUnit';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginLeft: theme.spacing(2)\n },\n wrapper: {\n // display: 'flex'\n },\n columnOne: {\n height: 164,\n // maxWidth: 700,\n overflowX: 'auto',\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap'\n },\n listItem: {\n marginRight: theme.spacing(1)\n // height: theme.spacing(14),\n }\n}));\n\nconst ListItem = (props) => {\n const { label, value } = props;\n const classes = useStyles();\n return (\n <div \n className={classes.listItem}\n >\n <Typography color='secondary' variant='caption'>\n {label}\n </Typography>\n <Typography>{value}</Typography>\n <LayoutUnit unit='xxs' />\n </div>\n );\n};\n\nexport const NodeDetails = (props) => {\n const { node } = props;\n const classes = useStyles();\n\n const details = useMemo(() => {\n if (!node || !node?.nodeObj || !node?.properties?.pageHeaderConfiguration) {\n return [];\n }\n const shownPageHeaderConfigurations =\n node.properties.pageHeaderConfiguration.filter((phc) => phc.isShown);\n const list = [];\n shownPageHeaderConfigurations.forEach((sphc) => {\n const propertyName = sphc.propertyName;\n const property = sphc.property;\n let value = node.nodeObj[propertyName];\n if (sphc.joiningEntityKey) {\n if (sphc.joiningEntityKey === node.properties?.catalogObjectKey) {\n value = node.nodeObj[property ? property : propertyName];\n } else {\n const valueObj = node.nodeObj[sphc.joiningEntityKey];\n if (valueObj) {\n value = valueObj[property ? property : propertyName];\n }\n if (!value) {\n value = node.nodeObj[property ? property : propertyName];\n }\n }\n }\n\n const item = {\n label: sphc.name,\n value: value ? value.toString() : 'N/A'\n };\n list.push(item);\n });\n return list;\n }, [node]);\n\n return (\n <div className={classes.root}>\n <div className={classes.wrapper}>\n <div className={classes.columnOne}>\n {details.map((item) => {\n return (\n <ListItem\n key={item.label}\n label={item.label}\n value={item.value}\n />\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useCallback } from 'react';\nimport {\n makeStyles,\n lighten,\n Typography,\n CircularProgress,\n darken,\n useTheme,\n Tooltip\n} from '@material-ui/core';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport { getIconFromName } from '../utilities/tree/TreeUtilities';\nimport clsx from 'clsx';\nimport { UnityFluentIcon } from '../utilities/iconLibrary/UnityFluentIcon';\nimport { getUnityIconFromName } from '../utilities/iconLibrary/UnityIconLibrary';\nimport { FluentButton } from '../UI/inputs/buttons/FluentButton';\nimport { FluentIcon } from '../utilities/iconLibrary/FluentIcon';\nimport { CaretUpSolid8Icon, CaretDownSolid8Icon } from '@fluentui/react-icons';\nimport { useDrag, useDrop } from 'react-dnd';\nimport {\n NodeActionTriggerEnums,\n TreeViewModeEnums\n} from '../enums/unitySystemEnums.ts';\nimport { AggregateChip } from '../UI/utilityDisplay/AggregateChip';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n '&.Mui-selected > .MuiTreeItem-content': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300]\n },\n '&.Mui-selected > .MuiTreeItem-content .MuiTreeItem-label': {\n backgroundColor: 'transparent',\n paddingLeft: 0\n },\n '&.Mui-selected > .MuiTreeItem-content > .MuiCollapse-wrapperInner': {\n backgroundColor:\n theme?.getThemeData()?.mode !== 'dark' && theme.palette.grey[50]\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer': {\n display: (props) => (props.sidebarExpanded ? 'flex' : 'none')\n }\n },\n content: {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' &&\n props.adornmentName &&\n props.adornmentColor\n ? lighten(props.adornmentColor, 0.92)\n : ''\n },\n labelRoot: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: (props) => (props.sidebarExpanded ? 0 : theme.spacing(1.5)),\n width: '100%'\n },\n labelContainer: {\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `calc(100% - ${theme.spacing(6.25)}px)`\n : `calc(100% - ${theme.spacing(7.75)}px)`\n },\n conditionalAdornmentContainer: {\n display: 'inline-flex'\n },\n labelText: {\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: '1rem',\n letterSpacing: 0.1\n },\n captionText: {\n marginLeft: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact ? theme.spacing(1) : '',\n fontSize: '0.65rem',\n fontWeight: 400,\n lineHeight: 1,\n letterSpacing: 0.4\n },\n labelOverflow: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n group: {\n width: '100%',\n '& .MuiTreeItem-group': {\n marginLeft: 0\n },\n '& .MuiTreeItem-content': {\n paddingLeft: (props) =>\n props.sidebarExpanded ? (props.depth || 1) * theme.spacing(1) : 0,\n borderRight: (props) =>\n props.showRightBorderColor\n ? `4px solid ${theme.palette.primary.main}`\n : '',\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n '& .MuiTreeItem-content .MuiTreeItem-label': {\n paddingLeft: 0,\n width: (props) =>\n props.sidebarExpanded && `calc(100% - ${theme.spacing(2.5)}px)`\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer span': {\n display: (props) => (props.hideExpansion ? 'none' : '')\n },\n '& .MuiCollapse-wrapperInner': {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' && props.isSelectedNode\n ? theme.palette.grey[50]\n : ''\n }\n },\n iconContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 50,\n marginTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginRight: theme.spacing(1),\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4),\n height: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4),\n border: (props) =>\n props.iconColor\n ? `1px solid ${darken(props.iconColor, 0.1)}`\n : `1px solid ${theme.palette.secondary.main}`,\n backgroundColor: '#ffffff'\n },\n dropTarget: {\n backgroundColor: theme.palette.action.hover,\n border: `2px dashed ${theme.palette.primary.main}`\n }\n}));\n\nexport const InquiryTreeMenuItem = (props) => {\n const {\n parentId,\n nodeId,\n iconName,\n iconType,\n iconColor,\n adornmentName,\n adornmentType,\n adornmentColor,\n label,\n onNodeSelect,\n isSelectedNode,\n subLabel,\n sidebarExpanded,\n isLastNode,\n loading,\n node,\n onDropNode,\n treeViewMode,\n menuIndex,\n aggregateThresholdId,\n aggregateThresholdNodeMapping,\n ...other\n } = props;\n const classes = useStyles(props);\n const theme = useTheme();\n\n const [{ isDragging }, dragRef] = useDrag({\n type: 'InquiryTreeMenuItem',\n item: { ...node, sourceNodeMenuIndex: menuIndex },\n collect: (monitor) => ({\n isDragging: monitor.isDragging()\n })\n });\n\n const handleOnDrop = useCallback(\n (sourceNode, monitor) => {\n if (!monitor.didDrop()) {\n if (onDropNode) {\n const { sourceNodeMenuIndex, ...other } = sourceNode;\n onDropNode({ ...other }, node, sourceNodeMenuIndex, menuIndex);\n }\n }\n },\n [onDropNode, node, menuIndex]\n );\n\n const [{ canDrop, isOver }, dropRef] = useDrop(\n () => ({\n accept: ['InquiryTreeMenuItem'],\n drop: (sourceNode, monitor) => {\n // condition to only handle first drop\n handleOnDrop(sourceNode, monitor);\n },\n canDrop: (sourceNode) => checkCanDrop(sourceNode),\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n canDrop: !!monitor.canDrop()\n })\n }),\n [handleOnDrop]\n );\n\n const checkCanDrop = useCallback(\n (sourceNode) => {\n if (sourceNode) {\n const onDropActions = node?.properties?.nodeActions?.filter(\n (na) => na?.triggerType === NodeActionTriggerEnums.On_Node_Drop\n );\n if (!onDropActions) {\n return false;\n }\n const nodeDragEntities = onDropActions?.map(\n (action) => action?.dragEntityName\n );\n return nodeDragEntities.includes(\n sourceNode?.properties?.catalogReturnObject\n );\n }\n },\n [node]\n );\n\n const handleOnLabelClick = useCallback(\n (e) => {\n e.preventDefault();\n onNodeSelect(e, nodeId);\n },\n [onNodeSelect, nodeId]\n );\n\n return (\n <TreeItem\n id={'udpRecord-InquiryTreeMenuItem-TreeItem-' + label}\n udprecordid={'udpRecord-InquiryTreeMenuItem-TreeItem-' + label}\n className={classes.group}\n key={nodeId}\n nodeId={nodeId}\n collapseIcon={\n <FluentIcon\n id={'udpRecord-InquiryTreeMenuItem-Icon-' + label}\n size='small'\n component={CaretUpSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n expandIcon={\n <FluentIcon\n id={'udpRecord-InquiryTreeMenuItem-Icon-' + label}\n size='small'\n component={CaretDownSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n label={\n <div\n ref={dropRef}\n id={'udpRecord-InquiryTreeMenuItem-' + label}\n udprecordid={'udpRecord-InquiryTreeMenuItem-' + label}\n className={clsx({\n [classes.dropTarget]: canDrop && isOver\n })}\n >\n <Tooltip title={sidebarExpanded ? '' : label}>\n <div\n ref={(node?.properties?.isDraggable && dragRef) || null}\n style={{ opacity: isDragging ? 0.5 : 1 }}\n >\n {loading ? (\n <CircularProgress size={12} />\n ) : (\n <div\n className={classes.labelRoot}\n style={{\n fontWeight: isSelectedNode ? 'bold' : ''\n }}\n >\n {iconName && (\n <div className={classes.iconContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'medium'\n }\n color={iconColor}\n type={iconType}\n icon={\n iconType === 'unity'\n ? getUnityIconFromName(iconName)\n : getIconFromName(iconName)\n }\n style={{\n color: iconColor\n ? darken(iconColor, 0.1)\n : theme.palette.secondary.main\n }}\n />\n </div>\n )}\n {sidebarExpanded && (\n <div className={classes.labelContainer}>\n <Typography\n variant='subtitle2'\n className={clsx(\n classes.labelText,\n classes.labelOverflow\n )}\n >\n {label}\n {subLabel &&\n treeViewMode === TreeViewModeEnums.Compact && (\n <Typography\n variant='caption'\n className={clsx(\n classes.captionText,\n classes.labelOverflow\n )}\n >\n {subLabel}\n </Typography>\n )}\n </Typography>\n {subLabel &&\n treeViewMode === TreeViewModeEnums.Classic && (\n <div className={classes.labelOverflow}>\n <Typography\n variant='caption'\n className={clsx(classes.captionText)}\n >\n {subLabel}\n </Typography>\n </div>\n )}\n </div>\n )}\n <AggregateChip\n aggregateThresholdId={aggregateThresholdId}\n aggregateThresholdParamMappings={\n aggregateThresholdNodeMapping\n }\n />\n {adornmentName && sidebarExpanded && (\n <div className={classes.conditionalAdornmentContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'medium'\n }\n color={adornmentColor}\n type={adornmentType}\n icon={\n adornmentType === 'unity'\n ? getUnityIconFromName(adornmentName)\n : getIconFromName(adornmentName)\n }\n style={{\n color: adornmentColor\n }}\n />\n </div>\n )}\n </div>\n )}\n {isLastNode && (\n <FluentButton\n onClick={() => console.log('Last Node')}\n className={classes.button}\n >\n <Typography variant='caption'>Last Node</Typography>\n </FluentButton>\n )}\n </div>\n </Tooltip>\n </div>\n }\n onLabelClick={handleOnLabelClick}\n classes={{ root: classes.root, content: classes.content }}\n {...other}\n />\n );\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport {\n makeStyles,\n useTheme,\n lighten,\n CircularProgress,\n Typography\n} from '@material-ui/core';\nimport TreeView from '@material-ui/lab/TreeView';\nimport { InquiryTreeMenuItem } from './InquiryTreeMenuItem';\nimport {\n searchTree,\n findAllParentIds,\n getNodeIdForRightBorder,\n findNodeById,\n formatTreeMenuItem,\n mapNodeObjValuesToSearchParameters\n} from '../utilities/tree/TreeUtilities';\nimport { FluentIcon } from '../utilities/iconLibrary/FluentIcon';\nimport { CaretUpSolid8Icon, CaretDownSolid8Icon } from '@fluentui/react-icons';\nimport { cloneDeep, difference } from 'lodash';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums.ts';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\nimport { toUpperFirstChar } from '../utilities/input/StringUtilities';\nimport { useSnackbar } from 'notistack';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginBottom: theme.spacing(1.75),\n borderTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n noChildrenContainer: {\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n }\n}));\n\nexport const InquiryTreeMenu = (props) => {\n const {\n menuItems,\n onSelectNode,\n onDropNode,\n menuIndex,\n selectedNodeId,\n selectedNodeParentId,\n expandAllClicked,\n sidebarExpanded,\n executeQueryAdHoc,\n catalogObjects,\n promotedEntities,\n treeStructureArr,\n setMenuList,\n treeViewMode\n } = props;\n const [defaultExpanded, setDefaultExpanded] = useState(null);\n const [isCurrentActiveTree, setIsCurrentActiveTree] = useState(false);\n const [selectedNodeIsHidden, setSelectedNodeIsHidden] = useState(false);\n const [loadingChildren, setLoadingChildren] = useState(false);\n const [tree, setTree] = useState(menuItems);\n const theme = useTheme();\n const classes = useStyles(props);\n const { enqueueSnackbar } = useSnackbar();\n\n const handleSelectedNode = useCallback(\n (e, value) => {\n const selectedNode = searchTree(tree, value);\n const parentNode = findNodeById(\n menuItems,\n selectedNode.entityNodeParentId\n ? selectedNode.entityNodeParentId\n : selectedNode.parentId\n );\n selectedNode.parentNode = parentNode;\n if (onSelectNode) {\n onSelectNode(selectedNode, menuIndex, tree);\n setSelectedNodeIsHidden(false);\n }\n },\n [tree, menuIndex, onSelectNode, menuItems]\n );\n\n const renderTree = useCallback(\n (node, depth = 1) => {\n let nodeId = node.id;\n let iconName = node.properties?.defaultIcon?.name;\n let iconType = node.properties?.defaultIcon?.type;\n let iconColor = node.properties?.defaultIcon?.color?.hex;\n\n if (node.properties?.conditionalNodeIconName) {\n iconName = node.properties?.conditionalNodeIconName;\n iconType = node.properties?.conditionalNodeIconType;\n iconColor = node.properties?.conditionalNodeIconName\n ? node.properties?.conditionalNodeIconColor ??\n node.properties?.defaultIcon?.color?.hex\n : node.properties?.defaultIcon?.color?.hex;\n }\n\n let adornmentName = node.properties?.conditionalNodeAdornmentName || '';\n let adornmentType = node.properties?.conditionalNodeAdornmentName\n ? node.properties.conditionalNodeAdornmentType\n : '';\n let adornmentColor = node.properties?.conditionalNodeAdornmentName\n ? node.properties?.conditionalNodeAdornmentColor ??\n node.properties?.defaultIcon?.color?.hex\n : '';\n\n let aggregateThresholdId = node.properties?.aggregateThresholdId || '';\n let aggregateThresholdNodeMapping = mapNodeObjValuesToSearchParameters(\n node?.nodeObj,\n node.properties?.aggregateThresholdParamMappings\n );\n\n let label = node.properties?.nodeLabel || node.properties?.name;\n let subLabel = node.properties?.nodeSubLabel;\n if (node.isGroupNode) {\n label = node.properties?.label;\n subLabel = node.properties?.subLabel;\n iconName = node.properties?.icon?.name;\n iconType = node.properties?.icon?.type;\n iconColor = node.properties?.icon?.color?.hex;\n }\n\n return (\n <InquiryTreeMenuItem\n key={nodeId}\n nodeId={nodeId}\n label={label}\n subLabel={subLabel}\n iconName={iconName}\n iconType={iconType}\n iconColor={iconColor}\n adornmentName={adornmentName}\n adornmentType={adornmentType}\n adornmentColor={adornmentColor}\n parentId={node.parentId}\n onNodeSelect={handleSelectedNode}\n selectedNodeId={selectedNodeId}\n isSelectedNode={selectedNodeId === node.id}\n showRightBorderColor={\n selectedNodeIsHidden &&\n isCurrentActiveTree &&\n getNodeIdForRightBorder(\n defaultExpanded,\n tree,\n selectedNodeParentId\n ) === node.id\n }\n isCurrentActiveTree={isCurrentActiveTree}\n sidebarExpanded={sidebarExpanded}\n depth={depth}\n hideExpansion={!node.properties?.lazyLoad && !!!node.children?.length}\n node={node}\n onDropNode={onDropNode}\n treeViewMode={treeViewMode}\n menuIndex={menuIndex}\n aggregateThresholdId={aggregateThresholdId}\n aggregateThresholdNodeMapping={aggregateThresholdNodeMapping}\n >\n {node.properties?.lazyLoad &&\n !!!node.children?.length &&\n !node.completedLoadingChildren &&\n !node.errorRetrievingChildren && (\n <CircularProgress\n size={12}\n style={{ marginLeft: (depth || 1) * theme.spacing(1) }}\n />\n )}\n {node.properties?.lazyLoad &&\n !!!node.children?.length &&\n node.completedLoadingChildren &&\n sidebarExpanded &&\n !node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n No Children\n </Typography>\n </div>\n )}\n {node.properties?.lazyLoad &&\n sidebarExpanded &&\n node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n {node.completedLoadingChildren\n ? `Error Retrieving ${\n !!node.children?.length ? `Additional ` : ''\n }Children`\n : node.errorRetrievingChildren}\n </Typography>\n </div>\n )}\n {Array.isArray(node.children)\n ? node.children.map((n, i) => renderTree(n, depth + 1))\n : null}\n </InquiryTreeMenuItem>\n );\n },\n [\n handleSelectedNode,\n selectedNodeId,\n selectedNodeIsHidden,\n isCurrentActiveTree,\n sidebarExpanded,\n defaultExpanded,\n tree,\n selectedNodeParentId,\n theme,\n classes,\n onDropNode,\n treeViewMode,\n menuIndex\n ]\n );\n\n const handleNodeExpansion = useCallback(\n async (evt, nodeIds) => {\n const expandingNodes = nodeIds.filter(\n (x) => !defaultExpanded.includes(x)\n );\n let currentExpandedNodeId = null;\n let currentExpandedNode = null;\n // Check to see if we're expanding\n if (nodeIds.length > defaultExpanded.length) {\n currentExpandedNodeId = expandingNodes[0];\n }\n const treeCopy = cloneDeep(tree);\n // Handle collapsing of a node.\n if (!currentExpandedNodeId) {\n const collapsingNodeList = difference(defaultExpanded, nodeIds);\n if (collapsingNodeList.length) {\n const collapsingNodeId = collapsingNodeList[0];\n const nodeMatch = findNodeById(treeCopy, collapsingNodeId);\n if (nodeMatch) {\n nodeMatch.isExpanded = false;\n setMenuList((prevState) => {\n const menuItemsListCopy = cloneDeep(prevState);\n menuItemsListCopy[menuIndex] = treeCopy;\n return menuItemsListCopy;\n });\n }\n }\n }\n setDefaultExpanded(nodeIds);\n if (currentExpandedNodeId) {\n currentExpandedNode = searchTree(treeCopy, currentExpandedNodeId);\n if (currentExpandedNode?.properties?.lazyLoad) {\n setLoadingChildren(true);\n const promises = [];\n const parentNodeRefKeys = [];\n const treeStructuresList = [];\n const searchObjList = [];\n const manyToManyPromises = [];\n const manyToManyValueMap = {};\n const manyToManyObjectList = [];\n const matchingNode = findNodeById(treeCopy, currentExpandedNodeId);\n if (matchingNode) {\n matchingNode.children = [];\n }\n currentExpandedNode.lazyLoadChildrenArr.forEach((searchMethod) => {\n parentNodeRefKeys.push(searchMethod.parentNodeRefKey);\n const childTree = treeStructureArr.find(\n (ts) =>\n ts.properties.catalogReturnObject ===\n searchMethod.catalogReturnObject\n );\n childTree && treeStructuresList.push(childTree);\n promises.push(\n executeQueryAdHoc(\n { data: searchMethod.data },\n searchMethod.apiMethodId\n )\n );\n searchObjList.push({\n wasLazyLoaded: currentExpandedNode?.properties?.lazyLoad\n });\n if (searchMethod.manyToManyJointEntityApiMethodId) {\n manyToManyObjectList.push({\n manyToManyKeys: searchMethod['manyToManyKeys'],\n apiMethodId: searchMethod.manyToManyJointEntityApiMethodId\n });\n } else {\n manyToManyObjectList.push(null);\n }\n });\n const updatedNodeObj = cloneDeep(currentExpandedNode.nodeObj);\n let errorExists = false;\n await Promise.all(\n promises.map((p) =>\n p.catch((e) => {\n errorExists = true;\n setLoadingChildren(false);\n })\n )\n ).then((responses) => {\n responses.forEach((response, index) => {\n if (response?.status === 200) {\n if (response?.data?.pageList?.length) {\n const manyToManyJoiningObject = manyToManyObjectList[index];\n if (manyToManyJoiningObject) {\n const childFilterElements = [];\n const items = response.data.pageList;\n manyToManyJoiningObject.manyToManyKeys.forEach((mtmKey) => {\n const searchNameKey = mtmKey.searchNameKey;\n const searchValueKey = mtmKey.searchValueKey;\n const searchValue = [];\n let formattedPropertyName =\n toUpperFirstChar(searchNameKey);\n items.forEach((item) => {\n if (item[searchValueKey]) {\n searchValue.push(item[searchValueKey]);\n }\n });\n childFilterElements.push({\n searchField: formattedPropertyName,\n searchValue: searchValue.toString(),\n searchOperator: 'IN'\n });\n });\n\n const data = getSearchObject(childFilterElements, 1, 50);\n const newIndex = Object.keys(manyToManyValueMap).length;\n manyToManyValueMap[newIndex] = {\n treeStructure: treeStructuresList[index],\n searchObj: searchObjList[index],\n joiningTableEntities: items,\n joiningObject: manyToManyJoiningObject\n };\n\n manyToManyPromises.push(\n executeQueryAdHoc(\n { data: data },\n manyToManyJoiningObject.apiMethodId\n )\n );\n } else {\n if (treeStructuresList[index]) {\n const items = response.data.pageList;\n items?.length &&\n items.forEach((item) => {\n const displayTree = formatTreeMenuItem(\n item,\n treeStructuresList[index],\n catalogObjects,\n promotedEntities,\n null,\n searchObjList[index].wasLazyLoaded\n );\n displayTree.parentId = currentExpandedNode.id;\n if (\n displayTree.wasLazyLoaded &&\n displayTree.properties\n ?.isUsingJointEntityAdditionalProperties\n ) {\n enqueueSnackbar(\n `Promote ${displayTree.properties?.joiningEntityName} search method to view additional joining properties`,\n {\n variant: 'warning',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n },\n preventDuplicate: true,\n autoHideDuration: 5000\n }\n );\n }\n if (matchingNode) {\n if (\n displayTree.wasLazyLoaded &&\n !displayTree.properties\n ?.isUsingJointEntityAdditionalProperties &&\n matchingNode.children.some(\n (child) =>\n child?.nodeObj?.businessObjectKey &&\n child?.nodeObj?.businessObjectKey ===\n displayTree?.nodeObj?.businessObjectKey\n )\n ) {\n return;\n }\n matchingNode.children.push(displayTree);\n }\n });\n }\n }\n const parentNodeCatalogObjKey = parentNodeRefKeys[index];\n if (parentNodeCatalogObjKey) {\n updatedNodeObj[parentNodeCatalogObjKey] =\n response.data.pageList;\n }\n }\n }\n });\n });\n\n await Promise.all(\n manyToManyPromises.map((p) =>\n p.catch((e) => {\n errorExists = true;\n setLoadingChildren(false);\n })\n )\n ).then((responses) => {\n responses.forEach((response, index) => {\n if (response?.status === 200) {\n if (response?.data?.pageList?.length) {\n const manytoManyValue = manyToManyValueMap[index];\n if (manytoManyValue) {\n const joiningEntityCatalogObjectKey =\n manytoManyValue.treeStructure?.properties\n ?.joiningEntityCatalogObjectKey;\n const items = response.data.pageList;\n manytoManyValue.joiningTableEntities.forEach(\n (entityRow) => {\n const manyToManyJoiningObject =\n manytoManyValue.joiningObject;\n if (\n manyToManyJoiningObject &&\n entityRow.hasOwnProperty(\n joiningEntityCatalogObjectKey\n )\n ) {\n manyToManyJoiningObject.manyToManyKeys.forEach(\n (mtmKey) => {\n const searchValueKey = mtmKey.searchValueKey;\n const searchItemIdentifier =\n mtmKey.searchItemIdentifier;\n if (entityRow[searchValueKey]) {\n entityRow[joiningEntityCatalogObjectKey] =\n items.find(\n (item) =>\n item[searchItemIdentifier] ===\n entityRow[searchValueKey]\n );\n }\n }\n );\n }\n }\n );\n\n manytoManyValue.joiningTableEntities.length &&\n manytoManyValue.joiningTableEntities.forEach((item) => {\n const displayTree = formatTreeMenuItem(\n item,\n manytoManyValue.treeStructure,\n catalogObjects,\n promotedEntities,\n null,\n manytoManyValue.searchObj.wasLazyLoaded\n );\n displayTree.parentId = currentExpandedNode.id;\n if (matchingNode) {\n if (\n displayTree.wasLazyLoaded &&\n !displayTree.properties\n ?.isUsingJointEntityAdditionalProperties &&\n matchingNode.children.some((child) => {\n const joiningEntityCatalogObjectKey =\n child.properties?.joiningEntityCatalogObjectKey;\n if (displayTree?.nodeObj) {\n return false;\n }\n return (\n child?.nodeObj?.[joiningEntityCatalogObjectKey]\n ?.businessObjectKey ===\n displayTree?.nodeObj?.[\n joiningEntityCatalogObjectKey\n ]?.businessObjectKey\n );\n })\n ) {\n return;\n }\n matchingNode.children.push(displayTree);\n }\n });\n }\n }\n }\n });\n });\n\n if (matchingNode) {\n // Property to be used to signal that lazy load for children request is completed\n matchingNode.completedLoadingChildren = true;\n }\n if (currentExpandedNode.lazyLoadChildrenArr.length) {\n if (matchingNode) {\n matchingNode.nodeObj = updatedNodeObj;\n matchingNode.isExpanded = true;\n if (errorExists) {\n matchingNode.errorRetrievingChildren = true;\n }\n }\n setMenuList((prevState) => {\n const menuItemsListCopy = cloneDeep(prevState);\n menuItemsListCopy[menuIndex] = treeCopy;\n return menuItemsListCopy;\n });\n setLoadingChildren(false);\n }\n } else {\n const foundNode = findNodeById(treeCopy, currentExpandedNodeId);\n if (foundNode) {\n foundNode.isExpanded = true;\n } else {\n foundNode.isExpanded = false;\n }\n setMenuList((prevState) => {\n const menuItemsListCopy = cloneDeep(prevState);\n menuItemsListCopy[menuIndex] = treeCopy;\n return menuItemsListCopy;\n });\n }\n }\n const parentNode = searchTree(treeCopy, selectedNodeParentId);\n const initialAllParentNodeIds = selectedNodeParentId\n ? [selectedNodeParentId]\n : [];\n const allParentNodeIds = findAllParentIds(\n treeCopy,\n parentNode,\n initialAllParentNodeIds\n );\n const selectedNodeShown = allParentNodeIds.every((id) =>\n nodeIds.includes(id)\n );\n if (\n isCurrentActiveTree &&\n allParentNodeIds.length &&\n !selectedNodeShown\n ) {\n setSelectedNodeIsHidden(true);\n } else {\n setSelectedNodeIsHidden(false);\n }\n },\n [\n defaultExpanded,\n tree,\n selectedNodeParentId,\n isCurrentActiveTree,\n menuIndex,\n setMenuList,\n treeStructureArr,\n executeQueryAdHoc,\n catalogObjects,\n promotedEntities,\n enqueueSnackbar\n ]\n );\n\n const getDefaultExpandedRecursively = useCallback((tree) => {\n if (!tree) return [];\n return tree.reduce((defaultExpandedIds, item) => {\n if (item?.isExpanded) {\n defaultExpandedIds.push(item.id);\n }\n if (item?.children?.length) {\n defaultExpandedIds = defaultExpandedIds.concat(\n getDefaultExpandedRecursively(item.children)\n );\n }\n return defaultExpandedIds;\n }, []);\n }, []);\n\n useEffect(() => {\n setTree(menuItems);\n }, [menuItems]);\n\n useEffect(() => {\n if (!tree) {\n return;\n }\n let expanded = [];\n if (tree?.isExpanded) {\n expanded.push(tree.id);\n }\n expanded = expanded.concat(getDefaultExpandedRecursively(tree.children));\n setDefaultExpanded(expanded);\n }, [getDefaultExpandedRecursively, tree]);\n\n useEffect(() => {\n if (!!searchTree(tree, selectedNodeId)) {\n setIsCurrentActiveTree(true);\n } else {\n setIsCurrentActiveTree(false);\n }\n }, [tree, selectedNodeId]);\n\n useEffect(() => {\n setSelectedNodeIsHidden(false);\n }, [expandAllClicked]);\n\n if (!defaultExpanded) {\n return null;\n }\n\n return (\n <TreeView\n key={tree}\n className={classes.root}\n defaultCollapseIcon={\n <FluentIcon\n size='small'\n component={CaretUpSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n expanded={defaultExpanded || []}\n onNodeToggle={handleNodeExpansion}\n defaultExpandIcon={\n <FluentIcon\n size='small'\n component={CaretDownSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n // onNodeSelect={handleSelectedNode}\n selected={selectedNodeId}\n >\n {tree && renderTree(tree)}\n </TreeView>\n );\n};\n","import React, { useCallback } from 'react';\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport { InquiryTreeMenu } from './InquiryTreeMenu';\nimport clsx from 'clsx';\nimport NoEntityOpenedUrl from '../assets/unityIcons/NoEntityOpened.svg';\nimport { SvgIcon } from '../utilities/iconLibrary/SvgIcon';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n overflowX: 'auto'\n },\n nodeContainer: {\n width: '100%'\n },\n loader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n empty: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n emptyIcon: {\n textAlign: 'center'\n },\n emptyIconText: {\n color: theme.palette.secondary\n }\n}));\n\nexport const NodeList = (props) => {\n const {\n menuItemsList,\n onSelectNode,\n onDropNode,\n selectedNodeId,\n selectedNodeParentId,\n expandAllClicked,\n classes: classProps,\n menuLoading,\n nodesRequested,\n sidebarExpanded,\n executeQueryAdHoc,\n catalogObjects,\n promotedEntities,\n treeStructureArr,\n setMenuList,\n treeViewMode\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n\n const handleSelectNode = useCallback(\n (selectedNode, menuIndex, selectedTree) => {\n onSelectNode(selectedNode, menuIndex, selectedTree);\n },\n [onSelectNode]\n );\n\n return (\n <div\n className={clsx(\n classes.root,\n root,\n !!!menuItemsList?.length && !menuLoading && classes.empty\n )}\n >\n {!!!menuItemsList?.length && !menuLoading && (\n <div className={classes.emptyIcon}>\n <SvgIcon src={NoEntityOpenedUrl} size={42} />\n <Typography variant='subtitle1' className={classes.emptyIconText}>\n No Entity Opened\n </Typography>\n </div>\n )}\n {menuItemsList?.length > 0 &&\n menuItemsList.map((menuItems, index) => (\n <div key={menuItems.id} className={classes.nodeContainer}>\n <InquiryTreeMenu\n menuItems={menuItems}\n onSelectNode={handleSelectNode}\n onDropNode={onDropNode}\n menuIndex={index}\n selectedNodeId={selectedNodeId}\n selectedNodeParentId={selectedNodeParentId}\n expandAllClicked={expandAllClicked}\n sidebarExpanded={sidebarExpanded}\n executeQueryAdHoc={executeQueryAdHoc}\n catalogObjects={catalogObjects}\n promotedEntities={promotedEntities}\n treeStructureArr={treeStructureArr || []}\n setMenuList={setMenuList}\n treeViewMode={treeViewMode}\n />\n </div>\n ))}\n {menuLoading && (\n <div className={classes.loader}>\n <NodeLoader loading={menuLoading} nodesRequested={nodesRequested} />\n </div>\n )}\n </div>\n );\n};\n","import {\n ChevronDownIcon,\n ChevronUpIcon,\n ClearIcon\n} from '@fluentui/react-icons';\nimport {\n LinearProgress,\n makeStyles,\n Typography,\n Card,\n Collapse,\n Divider\n} from '@material-ui/core';\nimport { cloneDeep, orderBy } from 'lodash';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useTranslation } from 'react-i18next';\nimport {\n collapseAllNodes,\n constructPreloadedTree,\n getSearchValueString\n} from '../utilities/tree/TreeUtilities';\nimport { expandAllNodes } from '../utilities/tree/TreeUtilities';\nimport { Form } from '../utilities/form';\nimport { formatTreeMenuItem } from '../utilities/tree/TreeUtilities';\nimport { getSearchIdentifiers } from '../utilities/search/SearchUtilities';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\nimport { InquiryAdvancedSearch } from './search/InquiryAdvancedSearch';\nimport { InquiryDashboard } from './dashboard/InquiryDashboard';\nimport {\n InquiryHeaderSecondary,\n InquiryHeaderSecondaryTarget\n} from '../utilities/utilityBar/InquiryHeaderSecondary';\nimport { InquiryNodeControls } from './inquiryBar/InquiryNodeControls';\nimport { InquirySearchContainer } from './search/InquirySearchContainer';\nimport { InquiryWrapper } from './InquiryWrapper';\nimport { LayoutUnit } from '../layout/LayoutUnit';\nimport { makeTreeStructure } from '../utilities/tree/TreeUtilities';\nimport { NodeDetails } from './NodeDetails';\nimport { NodeList } from './NodeList';\nimport { OpenPage } from '../UI/templates/OpenPage';\nimport { PageContainer } from '../page/PageContainer';\nimport { pluralize } from '../utilities/input/StringUtilities';\nimport { PrimaryActionHeader } from '../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { searchForMatchingNode } from '../utilities/tree/TreeUtilities';\nimport { useActions } from '../hooks/useActions';\nimport { v4 as uuid } from 'uuid';\nimport {\n NodeActionEnums,\n NodeActionTriggerEnums,\n TreeViewModeEnums\n} from '../enums/unitySystemEnums.ts';\nimport { RecentlyLoadedNodesTable } from './dashboard/RecentlyLoadedNodesTable';\nimport { ExecuteApiDialog } from './ExecuteApiDialog';\nimport { useSnackbar } from 'notistack';\nimport { executeQueryInstance } from '../udp/utilities/methodUtils';\nimport {\n useInquiryStore,\n useSetInitialInquiryMenuVisibility\n} from '../stores/inquiryStore';\nimport { evaluateRule, mapRule } from '../utilities/rules/RuleUtilities';\nimport GroupNode from '../models/GroupNode';\nimport { getSanitizedName } from '../utilities/entities/entityUtilities';\nimport { useShellStore } from '../stores/shellStore';\nimport { useActionStore } from '../stores/actionStore';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UdpTabs } from '../UI/navigation/tabs/UdpTabs';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { InquiryHeaderSecondaryAlertTarget } from '../utilities/utilityBar/InquiryHeaderSecondaryAlert';\nimport { FluentIconButton } from '../UI/inputs/buttons/FluentIconButton';\nimport clsx from 'clsx';\nimport { PageActionWrapper } from '../actions/PageActionWrapper';\nimport { WorkflowTreeMenu } from '../workflow/menus/WorkflowTreeMenu';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport {\n transformWorkflowPlayTree,\n updateWorkflowPlayNodeState\n} from '../utilities/workflow/workflowUtilities';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/useBuildEnvironment';\nimport { WorkflowContent } from '../workflow/WorkflowContent';\nimport LoadingOverlay from '../UI/loading/LoadingOverlay';\nimport { UnitStateType } from '../enums/workflowEnums';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { ConfigService } from '../configService';\nimport { usePromotedMethodEntity } from '../hooks/usePromotedMethodEntity';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`\n },\n mainWrapper: {\n padding: theme.spacing(2)\n },\n children: {\n height: 'calc(100vh - 150px)'\n },\n searchContainerRoot: {\n height: 'calc(100vh - 140px)'\n },\n nodeListRoot: {\n height: (props) => `calc(100vh - ${props.shellHidden ? '120px' : '176px'})`,\n overflowX: 'hidden'\n },\n nodeListRootLoaded: {\n height: (props) =>\n props.tree?.isPreloaded\n ? 'calc(100vh - 140px)'\n : `calc(100vh - ${props.shellHidden ? '130px' : '184px'})`,\n overflowX: 'hidden'\n },\n tabRoot: {\n width: '100%',\n minWidth: 0\n },\n nodeListRootLoading: {\n height: 'calc(100vh - 108px)'\n },\n chevronButtons: {\n display: 'flex',\n justifyContent: 'center',\n zIndex: theme.zIndex.appBar\n },\n chevronButtonClosed: {\n position: 'absolute',\n left: '50%',\n top: 14,\n marginLeft: -13,\n zIndex: theme.zIndex.appBar\n },\n entityHeader: {\n position: 'relative',\n zIndex: theme.zIndex.appBar,\n boxShadow:\n '0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 3px 3px 0px rgba(0, 0, 0, 0.12)'\n },\n nodeHeader: {\n boxShadow:\n '0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 3px 3px 0px rgba(0, 0, 0, 0.12)'\n },\n content: {\n overflowY: 'auto',\n height: 'calc(100vh - 50px)'\n },\n workflowMenuContent: {\n marginTop: theme.spacing(1),\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 120}px)`,\n overflowX: 'hidden',\n paddingTop: theme.spacing(1)\n },\n workflowTreeLoader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n }\n}));\n\nconst WORKFLOW_MAX_NETWORK_CALLS = 50;\n\nexport const InquiryContainer = (props) => {\n const {\n catalogObjects,\n executeQueryAdHoc,\n executeQueryWithParameters,\n executeGetDetailedTree,\n executeAddRecentlyLoadedNodes,\n initialSearchValue,\n litnHistory,\n litnHistoryLoading,\n pageId,\n pageData,\n pageLoading,\n pageError,\n productId,\n promotedEntities,\n promotedMethods,\n shellContext,\n setPageId,\n tree,\n treeId,\n treeLoading,\n treeError,\n user,\n autoCollapseNav = true,\n containerId = ''\n } = props;\n const shellHidden = useShellStore((state) => state.shellHidden);\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n shellHidden,\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const { t } = useTranslation();\n const { enqueueSnackbar } = useSnackbar();\n\n const [nodeLoaded, setNodeLoaded] = useState(false);\n const [searchValue, setSearchValue] = useState(initialSearchValue || '');\n const [clearSearchStr, setClearSearchStr] = useState(false);\n const [inSearch, setInSearch] = useState(false);\n const [selectedSearchRows, setSelectedSearchRows] = useState(null);\n const [menuList, setMenuList] = useState([]);\n const [menuLoading, setMenuLoading] = useState(false);\n const [selectedNode, setSelectedNode] = useState(null);\n const [selectedTree, setSelectedTree] = useState(null);\n const [selectedMenuIndex, setSelectedMenuIndex] = useState(null);\n const [disableMoveToTop, setDisableMoveToTop] = useState(true);\n const [nodeHistory, setNodeHistory] = useState([]);\n const [expandAllClicked, setExpandAllClicked] = useState(false);\n const [tabValue, setTabValue] = useState(0);\n const [selectedPageId, setSelectedPageId] = useState(null);\n const [nodesRequested, setNodesRequested] = useState([]);\n const [sidebarTabValue, setSidebarTabValue] = useState(0);\n const [advancedSearchItems, setAdvancedSearchItems] = useState([]);\n const [isAdvancedSearch, setIsAdvancedSearch] = useState(false);\n const [entityValue, setEntityValue] = useState('');\n const [treeViewMode, setTreeViewMode] = useState(TreeViewModeEnums.Classic);\n const [advancedSearchEntityValue, setAdvancedSearchEntityValue] =\n useState('');\n const [moveToTopLoading, setMoveToTopLoading] = useState(false);\n const [promotedMethodsToExecute, setPromotedMethodsToExecute] = useState([]);\n const [executeApiDialogOpen, setExecuteApiDialogOpen] = useState(false);\n const [executeApiData, setExecuteApiData] = useState(null);\n const [executeApiProgress, setExecuteApiProgress] = useState(false);\n const [isPreloaded, setIsPreloaded] = useState(false);\n const [headerTitle, setHeaderTitle] = useState('');\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const [primaryExpanded, setPrimaryExpanded] = useState(false);\n const [secondaryExpanded, setSecondaryExpanded] = useState(false);\n const [showToggle1, setShowToggle1] = useState(false);\n const [showToggle2, setShowToggle2] = useState(false);\n const [utilitySideBarWidth, setUtilitySideBarWidth] = useState(288);\n const [refreshNodeHeaderPageData, setRefreshNodeHeaderPageData] =\n useState(null);\n const [refreshPageHeaderPageData, setRefreshPageHeaderPageData] =\n useState(null);\n\n /* States for Workflow */\n const [inquiryWorkflowTabValue, setInquiryWorkflowTabValue] = useState(1);\n const [workflowMenuItemsList, setWorkflowMenuItemsList] = useState([]); // holds a list of workflow trees\n const [selectedWorkflowNode, setSelectedWorkflowNode] = useState(null);\n const [reloadWorkflowFromPage, setReloadWorkflowFromPage] = useState(false);\n const [getWorkflowPlayErrorCount, setGetWorkflowPlayErrorCount] = useState(0);\n const [getWorkflowInitializedCount, setGetWorkflowInitializedCount] =\n useState(0);\n const [workflowInitialized, setWorkflowInitialized] = useState(false);\n const [workflow, setWorkflow] = useState(null);\n // Checks if we should be hiding the Inquiry Left Menu\n useSetInitialInquiryMenuVisibility();\n const inquiryMenuHidden = useInquiryStore((state) => state.inquiryMenuHidden);\n\n const {\n setActionPanels,\n setShowInquiryHeaderActions,\n setMenuListState,\n setInquiryParams,\n closeAllSplitScreens\n } = useActions();\n\n const setSelectedNodeForStore = useActionStore(\n (state) => state.setSelectedNode\n );\n\n const setHideActions = useActionStore((state) => state.setHideActions);\n\n const setInquiryTitleHeader = useInquiryStore(\n (state) => state.setInquiryToolbarTitle\n );\n\n const setNavigationExpanded = useShellStore(\n (state) => state.setNavigationExpanded\n );\n\n const setSubHeaderActionHasChildren = useShellStore(\n (state) => state.setSubHeaderActionHasChildren\n );\n\n const inquiryTitle = useInquiryStore((state) => state.title);\n const workflowMap = useInquiryStore((state) => state.workflowMap);\n const setWorkflowMap = useInquiryStore((state) => state.setWorkflowMap);\n const workflowStarting = useInquiryStore((state) => state.workflowStarting);\n const setLocationState = useSetLocationState();\n\n const [{ data: explorePageData, loading: explorePageLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${tree?.explorePageId}`,\n {},\n !!!tree?.explorePageId,\n false\n );\n\n const orderBySequence = (list) => {\n return orderBy(list, ['sequenceNo'], ['asc']);\n };\n\n const inquiryWorkflow = useMemo(() => {\n if (workflowMap) {\n return workflowMap[containerId || 0];\n }\n }, [workflowMap, containerId]);\n\n const nodeHeaderPageIdToLoad = useMemo(() => {\n const nodeHeaderPages = selectedNode?.properties?.nodeHeaderPages;\n if (!nodeHeaderPages) {\n return null;\n }\n const orderedNodeHeaderPages = orderBySequence(nodeHeaderPages);\n let nodeHeaderPageId = null;\n for (let i = 0; i < orderedNodeHeaderPages.length; i++) {\n const nodeHeaderPage = orderedNodeHeaderPages[i];\n if (nodeHeaderPage?.propertyMapping && nodeHeaderPage?.jsonLogic) {\n const rule = mapRule(\n nodeHeaderPage?.propertyMapping,\n nodeHeaderPage?.jsonLogic\n );\n\n if (evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n nodeHeaderPageId = nodeHeaderPage.page?.pageId;\n break;\n } else {\n continue;\n }\n } else {\n nodeHeaderPageId = nodeHeaderPage.page?.pageId;\n break;\n }\n }\n return nodeHeaderPageId;\n }, [selectedNode]);\n\n const pageHeaderPageIdToLoad = useMemo(() => {\n if (!selectedPageId) {\n return null;\n }\n const matchingTab = selectedNode?.properties?.tabs?.find(\n (tab) => tab.page?.pageId === selectedPageId\n );\n if (!matchingTab) {\n return null;\n }\n const pageHeaderPages = matchingTab?.pageHeaderPages;\n if (!pageHeaderPages) {\n return null;\n }\n const orderedPageHeaderPages = orderBySequence(pageHeaderPages);\n let pageHeaderPageId = null;\n for (let i = 0; i < orderedPageHeaderPages.length; i++) {\n const pageHeaderPage = orderedPageHeaderPages[i];\n if (pageHeaderPage?.propertyMapping && pageHeaderPage?.jsonLogic) {\n const rule = mapRule(\n pageHeaderPage?.propertyMapping,\n pageHeaderPage?.jsonLogic\n );\n\n if (evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n pageHeaderPageId = pageHeaderPage.page?.pageId;\n break;\n } else {\n continue;\n }\n } else {\n pageHeaderPageId = pageHeaderPage.page?.pageId;\n break;\n }\n }\n return pageHeaderPageId;\n }, [selectedNode, selectedPageId]);\n\n const [{ data: nodeHeaderPageData, loading: nodeHeaderPageLoading }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${nodeHeaderPageIdToLoad}`,\n {},\n !!!nodeHeaderPageIdToLoad,\n false\n );\n\n const [{ data: pageHeaderPageData, loading: pageHeaderPageLoading }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${pageHeaderPageIdToLoad}`,\n {},\n !!!pageHeaderPageIdToLoad,\n false\n );\n\n /* Workflow Api calls */\n const [\n {\n data: workflowPlay,\n loading: workflowPlayLoading,\n error: workflowPlayError\n },\n reloadWorkflow\n ] = useAxiosGet(\n ConfigService.builderV1ApiUrl,\n `workflow/play/${inquiryWorkflow?.currentWorkflowPlayId}`,\n {},\n !!!inquiryWorkflow?.currentWorkflowPlayId,\n false\n );\n\n const [{ data: users }] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users?tenantId=${user?.currentTenantId || ''}`,\n {},\n !!!inquiryWorkflow?.inWorkflowMode && !!!user?.currentTenantId\n );\n\n const [{ data: groups }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `groups?tenantId=${user?.currentTenantId || ''}&productId=${\n ConfigService.config.UNITY_PRODUCT_ID\n }`,\n {},\n !!!inquiryWorkflow?.inWorkflowMode && !!!user?.currentTenantId\n );\n\n const handleReloadWorkflow = useCallback(async () => {\n setReloadWorkflowFromPage(true);\n if (inquiryWorkflow?.currentWorkflowPlayId) {\n await reloadWorkflow();\n }\n setReloadWorkflowFromPage(false);\n }, [reloadWorkflow, inquiryWorkflow]);\n\n const handleSelectedWorkflowNode = useCallback(\n async (node, menuIndex) => {\n if (node.isSelectable) {\n setSelectedWorkflowNode(node);\n await handleReloadWorkflow();\n }\n },\n [handleReloadWorkflow]\n );\n\n const searchItems = useMemo(() => {\n if (!tree) return [];\n\n const result = tree.treeStructure.reduce((items, node) => {\n let item = null;\n const matchingCatalogObject = catalogObjects?.find(\n (co) => co.catalogObjectName === node.properties.catalogReturnObject\n );\n const entityAttributes = matchingCatalogObject?.properties || null;\n const searchFilterElements = node.properties?.searchFilterElements;\n if (searchFilterElements) {\n searchFilterElements.forEach(\n (element) => (element.searchValue = searchValue)\n );\n }\n if (!node.parentId) {\n item = {\n apiMethodInstance: tree.apiMethodInstance,\n apiMethodId: tree.apiMethodInstance.apiMethodId,\n columns: entityAttributes || node.properties.searchTableColumns,\n searchFilterElements: searchFilterElements,\n id: `${uuid()}-${searchValue}`,\n catalogReturnObject: node.properties.catalogReturnObject,\n treeStructure: tree.treeStructure,\n associatedInquiryTree: null\n };\n } else {\n const associatedInquiryTree = node.properties?.associatedInquiryTree;\n if (associatedInquiryTree && node.properties?.isPrimarySearch) {\n item = {\n apiMethodInstance: associatedInquiryTree.apiMethodInstance,\n apiMethodId: associatedInquiryTree.apiMethodInstance?.apiMethodId,\n columns: entityAttributes || node.properties.searchTableColumns,\n searchFilterElements: searchFilterElements,\n id: `${uuid()}-${searchValue}`,\n catalogReturnObject: node.properties.catalogReturnObject,\n treeStructure: associatedInquiryTree.treeStructure,\n associatedInquiryTree: associatedInquiryTree\n };\n }\n }\n if (item) {\n items.push(item);\n }\n return items;\n }, []);\n return result;\n }, [tree, searchValue, catalogObjects]);\n\n const entitySearchItems = useMemo(() => {\n if (!searchItems) {\n return [];\n }\n if (!entityValue?.value) {\n return searchItems;\n } else {\n return searchItems.filter(\n (item) => item.catalogReturnObject === entityValue.value\n );\n }\n }, [searchItems, entityValue]);\n\n const getLoadedNodeObject = useCallback(\n (\n apiMethodId,\n queryPayload,\n nodeLabel,\n catalogReturnObject,\n treeStructureId\n ) => {\n const loadedNode = {\n productId: productId,\n inquiryTreeId: treeId,\n userId: user.id,\n apiMethodId: apiMethodId,\n nodeDetails: {},\n queryPayload: {}\n };\n loadedNode.nodeDetails = {\n nodeLabel: nodeLabel,\n catalogReturnObject: catalogReturnObject,\n treeStructureId: treeStructureId\n };\n loadedNode.queryPayload = queryPayload;\n return loadedNode;\n },\n [treeId, user, productId]\n );\n\n const setAppNavigationExpanded = useCallback(\n (value) => {\n if (autoCollapseNav) {\n setNavigationExpanded(value);\n }\n },\n [autoCollapseNav, setNavigationExpanded]\n );\n\n const loadNodes = useCallback(\n (searchRows) => {\n if (searchRows && Object.keys(searchRows).length) {\n setSidebarTabValue(0);\n setNodeLoaded(true);\n setInSearch(false);\n setMenuLoading(true);\n const catalogObjectKeys = Object.keys(searchRows);\n const promises = [];\n const searchObjList = [];\n const loadedNodesList = [];\n const nodesRequestedArr = [];\n catalogObjectKeys.forEach((key) => {\n const searchObj = searchRows[key];\n const currentSearchTree = searchObj?.treeStructure.find(\n (tree) => tree?.properties?.catalogReturnObject === key\n );\n\n const lazyLoad = !!currentSearchTree?.properties?.lazyLoad;\n\n const rows = searchObj.rows;\n const searchIdentifier = searchObj.searchIdentifier;\n const apiMethodId = searchObj.apiMethodId;\n const associatedInquiryTree = searchObj?.associatedInquiryTree;\n\n rows.forEach((row) => {\n const filterElements = [];\n const searchIdentifiers = searchIdentifier.split(',');\n searchIdentifiers.forEach((si) => {\n const formattedPropertyName =\n si.charAt(0).toUpperCase() + si.slice(1);\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: row[si] ?? '',\n searchOperator: '='\n });\n });\n const searchObject = getSearchObject(\n filterElements,\n 1,\n 50,\n !lazyLoad\n );\n const data = { data: searchObject };\n promises.push(executeQueryAdHoc(data, apiMethodId));\n nodesRequestedArr.push(nodesRequestedArr.length + 1);\n searchObjList.push({\n searchObject,\n apiMethodId,\n treeStructure: searchObj.treeStructure,\n catalogReturnObject: key,\n associatedInquiryTree,\n wasLazyLoaded: lazyLoad,\n menuTree: currentSearchTree\n });\n });\n });\n setNodesRequested(nodesRequestedArr);\n Promise.all(promises).then((responses) => {\n const updatedMenuList = menuList.slice();\n responses.forEach((response, index) => {\n if (response.status === 200) {\n if (response?.data?.pageList?.length) {\n const treeStructure = makeTreeStructure(\n searchObjList[index].treeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n response.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n searchObjList[index].associatedInquiryTree,\n searchObjList[index].wasLazyLoaded\n );\n if (\n displayTree &&\n !Array.isArray(displayTree) &&\n Object.keys(displayTree).length\n ) {\n updatedMenuList.push(displayTree);\n loadedNodesList.push(\n getLoadedNodeObject(\n searchObjList[index].apiMethodId,\n searchObjList[index].searchObject,\n displayTree?.properties?.nodeLabel,\n searchObjList[index].catalogReturnObject,\n treeStructure.id\n )\n );\n if (index === 0) {\n displayTree.properties.searchValue = getSearchValueString(\n response.data.pageList[0],\n displayTree?.properties?.searchIdentifier\n );\n if (selectedNode) {\n const updatedNodeHistory = nodeHistory.map(\n (node) => node\n );\n updatedNodeHistory.push(selectedNode);\n setNodeHistory(updatedNodeHistory);\n }\n setActionPanels(\n displayTree?.properties.panels,\n containerId\n );\n setSelectedNode(displayTree);\n }\n }\n }\n }\n });\n\n if (menuList.length) {\n setSelectedMenuIndex(menuList.length);\n } else {\n setSelectedMenuIndex(0);\n }\n executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n\n setAppNavigationExpanded(false);\n setMenuList(updatedMenuList);\n setSelectedSearchRows(null);\n setMenuLoading(false);\n setNodesRequested([]);\n setSearchValue('');\n setClearSearchStr(true);\n });\n }\n },\n [\n menuList,\n executeQueryAdHoc,\n catalogObjects,\n selectedNode,\n nodeHistory,\n getLoadedNodeObject,\n executeAddRecentlyLoadedNodes,\n promotedEntities,\n setActionPanels,\n setAppNavigationExpanded,\n containerId\n ]\n );\n\n const handleCloseWorkflow = useCallback(() => {\n setWorkflowMap({\n [containerId || 0]: {\n inWorkflowMode: false,\n currentWorkflowPlayId: ''\n }\n });\n setHideActions(false);\n setSelectedWorkflowNode(null);\n setWorkflowMenuItemsList([]);\n setInquiryWorkflowTabValue(1);\n setGetWorkflowPlayErrorCount(0);\n setGetWorkflowInitializedCount(0);\n setWorkflowInitialized(false);\n setWorkflow(null);\n }, [setWorkflowMap, containerId, setHideActions]);\n\n // menus prop will only be passed from actions engine\n const handleRemoveMenuItem = useCallback(\n (menus) => {\n const updatedMenuList = menus ?? menuList.slice();\n updatedMenuList.splice(selectedMenuIndex, 1);\n setMenuList(updatedMenuList);\n setDisableMoveToTop(true);\n if (updatedMenuList?.length) {\n const newSelectedNode = updatedMenuList[0];\n setActionPanels(newSelectedNode?.properties.panels, containerId);\n setSelectedNode(newSelectedNode);\n setSelectedMenuIndex(0);\n } else {\n setActionPanels([], containerId);\n setSelectedNode(null);\n setSelectedMenuIndex(null);\n setNodeLoaded(false);\n closeAllSplitScreens();\n handleCloseWorkflow();\n }\n },\n [\n menuList,\n selectedMenuIndex,\n setActionPanels,\n closeAllSplitScreens,\n containerId,\n handleCloseWorkflow\n ]\n );\n\n const handleRecentlyLoadedNodeClick = useCallback(\n async (loadedNode, additionalAction = () => {}) => {\n setNodeLoaded(true);\n setMenuLoading(true);\n setSidebarTabValue(0);\n setNodesRequested([1]);\n const data = { data: loadedNode?.queryPayload };\n const currentTreeStructureArr = tree.treeStructure.filter(\n (node) =>\n loadedNode?.nodeDetails?.catalogReturnObject ===\n node.properties.catalogReturnObject\n );\n const currentTree =\n currentTreeStructureArr.find((t) => {\n if (t?.properties?.associatedInquiryTree?.treeStructure) {\n const foundTreeStructure =\n t?.properties?.associatedInquiryTree?.treeStructure.find(\n (n) => n.id === loadedNode?.nodeDetails?.treeStructureId\n );\n return foundTreeStructure;\n } else {\n return false;\n }\n }) || currentTreeStructureArr[0];\n // Update request data to be eager/lazy load based on current tree config\n if (currentTree) {\n if (currentTree.properties?.associatedInquiryTree) {\n const associatedTreeStructure =\n currentTree.properties.associatedInquiryTree?.treeStructure;\n const associatedTree = associatedTreeStructure.find(\n (node) => node.id === loadedNode?.nodeDetails?.treeStructureId\n );\n data.data.eagerLoad = !associatedTree?.properties?.lazyLoad;\n } else {\n data.data.eagerLoad = !currentTree?.properties?.lazyLoad;\n }\n }\n const apiMethodId = loadedNode?.apiMethodId;\n const response = await executeQueryAdHoc(data, apiMethodId).catch((e) => {\n console.error(e);\n });\n if (\n response?.status === 200 &&\n loadedNode?.nodeDetails?.catalogReturnObject\n ) {\n if (response?.data?.pageList?.length) {\n const matchingNode = tree?.treeStructure?.find(\n (node) =>\n node.properties.catalogReturnObject ===\n loadedNode?.nodeDetails?.catalogReturnObject\n );\n let nodeTreeStructure = tree?.treeStructure;\n if (matchingNode?.properties?.associatedInquiryTree) {\n nodeTreeStructure =\n matchingNode?.properties?.associatedInquiryTree.treeStructure;\n }\n const treeStructure = makeTreeStructure(\n nodeTreeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n response.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n matchingNode?.properties?.associatedInquiryTree,\n !data.data.eagerLoad\n );\n if (\n displayTree &&\n !Array.isArray(displayTree) &&\n Object.keys(displayTree).length\n ) {\n displayTree.properties.searchValue = getSearchValueString(\n response.data.pageList[0],\n displayTree?.properties?.searchIdentifier\n );\n\n if (selectedNode) {\n const updatedNodeHistory = nodeHistory.map((node) => node);\n updatedNodeHistory.push(selectedNode);\n setNodeHistory(updatedNodeHistory);\n }\n setActionPanels(displayTree?.properties.panels, containerId);\n setSelectedNode(displayTree);\n setAppNavigationExpanded(false);\n setMenuList([displayTree]);\n }\n setSelectedMenuIndex(0);\n setMenuLoading(false);\n setNodesRequested([]);\n }\n } else {\n // could not properly load the entity\n setMenuLoading(false);\n enqueueSnackbar(t(`Unable to load entity`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n additionalAction();\n },\n [\n tree,\n executeQueryAdHoc,\n catalogObjects,\n promotedEntities,\n selectedNode,\n setActionPanels,\n nodeHistory,\n enqueueSnackbar,\n t,\n setAppNavigationExpanded,\n containerId\n ]\n );\n\n const handleLoadNodes = useCallback(() => {\n loadNodes(selectedSearchRows);\n }, [selectedSearchRows, loadNodes]);\n\n const handleSingleNodeLoad = useCallback(\n (searchRow) => {\n loadNodes(searchRow);\n },\n [loadNodes]\n );\n\n const handleRowDoubleClick = useCallback(\n (rowData, catalogReturnObject) => {\n const node = {};\n const searchItem = searchItems.find(\n (item) => item.catalogReturnObject === catalogReturnObject\n );\n const identifiers =\n getSearchIdentifiers(catalogObjects, searchItem.catalogReturnObject) ||\n [];\n\n node[searchItem.catalogReturnObject] = {\n rows: [rowData],\n apiMethodId: searchItem.apiMethodId,\n searchIdentifier: identifiers.toString(),\n treeStructure: searchItem.treeStructure\n };\n loadNodes(node);\n },\n [loadNodes, searchItems, catalogObjects]\n );\n\n const clearNodes = useCallback(() => {\n setNodeLoaded(false);\n setMenuList([]);\n setActionPanels([], containerId);\n setSelectedNode(null);\n setSelectedMenuIndex(null);\n setNodeHistory([]);\n setTabValue(0);\n setSelectedPageId(null);\n setPageId(null);\n setHeaderTitle('');\n setNodesRequested([]);\n closeAllSplitScreens();\n handleCloseWorkflow();\n }, [\n setActionPanels,\n setPageId,\n closeAllSplitScreens,\n containerId,\n handleCloseWorkflow\n ]);\n\n const handlePrimaryAction = useCallback(() => {\n handleLoadNodes();\n }, [handleLoadNodes]);\n\n const handleSearch = useCallback((event) => {\n if (event.key === 'Enter') {\n setSearchValue(event.target.value);\n setIsAdvancedSearch(false);\n setInSearch(true);\n }\n }, []);\n\n const clearSearch = useCallback(() => {\n setInSearch(false);\n if (menuList.length > 0) {\n setShowToggle2(true);\n }\n setSearchValue('');\n setClearSearchStr(true);\n setSelectedSearchRows(null);\n }, [menuList]);\n\n const handleSelectedSearchRows = useCallback(\n (\n objectName,\n rows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n ) => {\n let searchRows = cloneDeep(selectedSearchRows);\n if (!searchRows) {\n searchRows = {};\n }\n searchRows[objectName] = {\n rows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n };\n setSelectedSearchRows(searchRows);\n },\n [selectedSearchRows]\n );\n\n const handleSelectedNode = useCallback(\n (newSelectedNode, menuIndex, selectedTree) => {\n setSelectedMenuIndex(menuIndex);\n setSelectedTree(selectedTree);\n setInSearch(false);\n if (newSelectedNode.properties.associatedTreeId) {\n setDisableMoveToTop(false);\n } else {\n setDisableMoveToTop(true);\n }\n if (selectedNode) {\n const updatedNodeHistory = nodeHistory?.map((node) => node) || [];\n updatedNodeHistory.push(selectedNode);\n setNodeHistory(updatedNodeHistory);\n }\n setActionPanels(newSelectedNode?.properties.panels, containerId);\n setSelectedNode(newSelectedNode);\n },\n [selectedNode, setActionPanels, nodeHistory, containerId]\n );\n\n const constructMenuItemForDroppedNode = useCallback(\n (\n loadPageNodeActions,\n targetNodeObj,\n sourceNodeObj,\n targetNodeEntityName,\n sourceNodeEntityName\n ) => {\n const menuItem = {\n children: [],\n id: uuid(),\n isExpanded: true,\n parentId: null,\n properties: {\n nodeLabel: '',\n tabs: [],\n searchValue: '',\n nodeSubLabel: null,\n defaultPageHeaderExpanded: 'hidden',\n defaultNodeHeaderExpanded: 'hidden',\n defaultIcon: {\n color: null,\n name: 'BranchCompareIcon',\n type: null\n },\n nodeActions: loadPageNodeActions,\n isDroppedLoadedPageNode: true,\n existingPageLoadEntities: [sourceNodeEntityName]\n },\n inquiryParams: [targetNodeObj, sourceNodeObj],\n // TODO: allow for use of targetNodeObj and sourceNodeObj for when config in Inquiry is added\n nodeObj: targetNodeObj\n };\n if (loadPageNodeActions?.length) {\n loadPageNodeActions.forEach((nodeAction) => {\n if (nodeAction?.dragEntityName === sourceNodeEntityName) {\n const tabObj = {\n id: uuid(),\n page: nodeAction.page,\n inquiryTreeRuleId: nodeAction.inquiryTreeRuleId || '',\n jsonLogic: nodeAction.jsonLogic || null,\n propertyIsCustomMapping: nodeAction.propertyIsCustomMapping || '',\n propertyMapping: nodeAction.propertyMapping || '',\n sequence: nodeAction.sequence || '1',\n requiredFieldMapping:\n nodeAction.parameters?.requiredFieldMapping || null\n };\n menuItem.properties.tabs.push(tabObj);\n }\n });\n }\n let nodeLabel = 'DnD Nodes';\n if (targetNodeEntityName === sourceNodeEntityName) {\n nodeLabel = pluralize(getSanitizedName(targetNodeEntityName));\n } else {\n nodeLabel = `${getSanitizedName(\n targetNodeEntityName\n )}/${getSanitizedName(sourceNodeEntityName)}`;\n }\n menuItem.properties.nodeLabel = nodeLabel;\n return menuItem;\n },\n []\n );\n\n const loadPageForDroppedNode = useCallback(\n (\n sourceNode,\n targetNode,\n loadPageNodeActions,\n targetNodeCatalogReturnObject,\n sourceNodeCatalogReturnObject\n ) => {\n // If the first drop has not occurred yet for a loaded page\n if (!targetNode?.properties?.isDroppedLoadedPageNode) {\n if (loadPageNodeActions.length) {\n setMoveToTopLoading(true);\n const orderedLoadPageNodeActions =\n orderBySequence(loadPageNodeActions);\n const pageMenuItem = constructMenuItemForDroppedNode(\n orderedLoadPageNodeActions,\n targetNode?.nodeObj,\n sourceNode?.nodeObj,\n targetNodeCatalogReturnObject,\n sourceNodeCatalogReturnObject\n );\n const updatedMenuList = cloneDeep(menuList);\n updatedMenuList.unshift(pageMenuItem);\n setActionPanels(updatedMenuList[0]?.properties.panels, containerId);\n setSelectedNode(updatedMenuList[0]);\n setMenuList(updatedMenuList);\n setMoveToTopLoading(false);\n }\n } else if (targetNode?.properties?.isDroppedLoadedPageNode) {\n setMoveToTopLoading(true);\n const updatedMenuList = cloneDeep(menuList);\n const targetMenuItem = updatedMenuList.find(\n (item) => item.id === targetNode.id\n );\n if (targetMenuItem) {\n const nodeLabel = targetMenuItem.properties?.nodeLabel;\n if (!nodeLabel.includes(sourceNodeCatalogReturnObject)) {\n targetMenuItem.properties.nodeLabel = `${nodeLabel}/${getSanitizedName(\n sourceNodeCatalogReturnObject\n )}`;\n }\n targetMenuItem.inquiryParams.push(sourceNode?.nodeObj);\n if (\n !targetNode?.properties?.existingPageLoadEntities?.includes(\n sourceNodeCatalogReturnObject\n ) &&\n loadPageNodeActions?.length\n ) {\n targetMenuItem.properties.existingPageLoadEntities.push(\n sourceNodeCatalogReturnObject\n );\n loadPageNodeActions.forEach((nodeAction) => {\n if (\n nodeAction?.dragEntityName === sourceNodeCatalogReturnObject\n ) {\n const tabObj = {\n id: uuid(),\n page: nodeAction.page,\n inquiryTreeRuleId: nodeAction.inquiryTreeRuleId || '',\n jsonLogic: nodeAction.jsonLogic || null,\n propertyIsCustomMapping:\n nodeAction.propertyIsCustomMapping || '',\n propertyMapping: nodeAction.propertyMapping || '',\n sequence: nodeAction.sequence || '1',\n requiredFieldMapping:\n nodeAction.parameters?.requiredFieldMapping || null\n };\n targetMenuItem.properties.tabs.push(tabObj);\n }\n });\n }\n setActionPanels(targetMenuItem?.properties.panels, containerId);\n setSelectedNode(targetMenuItem);\n }\n setMenuList(updatedMenuList);\n setMoveToTopLoading(false);\n }\n },\n [constructMenuItemForDroppedNode, menuList, setActionPanels, containerId]\n );\n\n const handleDroppedNodeForExecuteApi = useCallback(\n (\n sourceNode,\n targetNode,\n executeApiNodeActions,\n sourceNodeType,\n targetNodeType,\n sourceNodeMenuIndex,\n targetNodeMenuIndex\n ) => {\n if (!promotedMethods?.length) {\n return;\n }\n const apiMethodIds = executeApiNodeActions.map(\n (eana) => eana.actionValue\n );\n const pmte = promotedMethods.filter((method) =>\n apiMethodIds.includes(method?.apiMethodId)\n );\n setExecuteApiData({\n source: sourceNode?.nodeObj,\n target: targetNode?.nodeObj,\n sourceNodeType,\n targetNodeType,\n sourceNodeMenuIndex,\n targetNodeMenuIndex\n });\n setPromotedMethodsToExecute(pmte);\n setExecuteApiDialogOpen(true);\n },\n [promotedMethods]\n );\n\n const handleCloseExecuteApiDialog = useCallback(() => {\n setExecuteApiData(null);\n setPromotedMethodsToExecute([]);\n setExecuteApiDialogOpen(false);\n }, []);\n\n const handleMenuTreesRefresh = useCallback(\n async (menuIndexes) => {\n if (!menuList.length) {\n return;\n }\n const updatedMenuList = menuList.slice();\n const promises = [];\n let apiMethodId = tree.apiMethodInstance.apiMethodId;\n let workingTree = tree;\n let assocInquiryTreeMap = {};\n let searchObjList = [];\n if (!menuIndexes?.length) {\n menuIndexes = [selectedMenuIndex];\n }\n menuIndexes.forEach((index) => {\n const menuTree = menuList[index];\n if (menuTree) {\n const { properties, associatedInquiryTree } = menuTree;\n const { filterElements } = properties;\n\n if (associatedInquiryTree) {\n apiMethodId = associatedInquiryTree.apiMethodInstance.apiMethodId;\n workingTree = associatedInquiryTree;\n assocInquiryTreeMap[index] = associatedInquiryTree;\n }\n const lazyLoad = !!workingTree?.properties?.lazyLoad;\n\n const searchObject = getSearchObject(\n filterElements,\n 1,\n 50,\n !lazyLoad\n );\n const data = { data: searchObject };\n promises.push(executeQueryAdHoc(data, apiMethodId));\n searchObjList.push({\n wasLazyLoaded: lazyLoad\n });\n }\n });\n\n await Promise.all(promises.map((p) => p.catch((e) => e))).then(\n (responses) => {\n responses.forEach((response, index) => {\n if (response.status === 200) {\n if (response?.data?.pageList?.length) {\n const treeStructure = makeTreeStructure(\n workingTree.treeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n response.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n assocInquiryTreeMap[index],\n searchObjList[index].wasLazyLoaded\n );\n\n updatedMenuList[menuIndexes[index]] = displayTree;\n }\n }\n });\n }\n );\n const currentSelectedTree = updatedMenuList[selectedMenuIndex];\n const selectedNodeSearchIdentifier =\n selectedNode.properties.searchIdentifier || [];\n setMenuList(updatedMenuList);\n if (selectedNodeSearchIdentifier) {\n const matchingNode = searchForMatchingNode(\n currentSelectedTree,\n selectedNode.nodeObj,\n selectedNodeSearchIdentifier.split(',')\n );\n setActionPanels(matchingNode?.properties.panels, containerId);\n setSelectedNode(matchingNode);\n } else {\n setSelectedNode(selectedNode);\n }\n },\n [\n menuList,\n tree,\n selectedMenuIndex,\n catalogObjects,\n executeQueryAdHoc,\n selectedNode,\n promotedEntities,\n setActionPanels,\n containerId\n ]\n );\n\n const handleMenuTreesRefreshFromPage = useCallback(\n async (updateAllPreloadedTrees = false) => {\n if (!selectedNode) {\n return;\n }\n let selectedNodeIndex = -1;\n let apiMethodId = tree.apiMethodInstance.apiMethodId;\n let workingTree = tree;\n\n // selectedTree is always the top node of the tree that the current selectedNode is on\n if (selectedTree) {\n if (selectedTree.children.length > 0) {\n selectedNodeIndex = selectedTree.children.indexOf(selectedNode);\n }\n const { properties, associatedInquiryTree } = selectedTree;\n const { filterElements } = properties;\n\n if (associatedInquiryTree) {\n apiMethodId = associatedInquiryTree.apiMethodInstance.apiMethodId;\n workingTree = associatedInquiryTree;\n }\n const lazyLoad = !!workingTree?.properties?.lazyLoad;\n\n const searchObject = getSearchObject(filterElements, 1, 50, !lazyLoad);\n const data = { data: searchObject };\n let displayTree = null;\n let response = null;\n if (\n tree?.isPreloaded &&\n tree?.apiMethodInstance?.apiMethodInstanceId &&\n selectedTree.isGroupNode\n ) {\n response = await executeQueryInstance(\n { data: {} },\n tree.apiMethodInstance.apiMethodInstanceId\n );\n } else {\n response = await executeQueryAdHoc(data, apiMethodId);\n }\n if (response?.status === 200) {\n if (response?.data?.pageList?.length) {\n const treeStructure = makeTreeStructure(\n workingTree.treeStructure,\n 'id',\n 'parentId'\n );\n let responseObj = response.data.pageList[0];\n if (selectedTree.isGroupNode) {\n responseObj = response.data.pageList;\n }\n displayTree = formatTreeMenuItem(\n responseObj,\n treeStructure,\n catalogObjects,\n promotedEntities,\n associatedInquiryTree,\n lazyLoad\n );\n }\n }\n if (selectedTree.isGroupNode && selectedTree.children.length > 0) {\n displayTree.map((childNode) => {\n childNode.parentGroupId = selectedTree.id;\n childNode.parentId = selectedTree.id;\n childNode.parentGroupName = selectedTree.properties.label;\n });\n }\n const currentSelectedTree = displayTree;\n const selectedNodeSearchIdentifier =\n selectedNode.properties.searchIdentifier || '';\n setMenuList((prevState) => {\n const updatedMenuList = prevState.slice();\n if (updateAllPreloadedTrees && workingTree?.isPreloaded) {\n updatedMenuList.forEach((menuItem) => {\n const newGroupId = uuid();\n menuItem.id = newGroupId;\n // Update all group children parent ids to be the new group id\n menuItem.children?.forEach((childNode) => {\n childNode.parentGroupId = newGroupId;\n childNode.parentId = newGroupId;\n });\n });\n }\n if (selectedTree.isGroupNode) {\n if (\n selectedTree.children.length > 0 &&\n Array.isArray(displayTree)\n ) {\n updatedMenuList[selectedMenuIndex].children = displayTree;\n }\n if (!updateAllPreloadedTrees) {\n const newGroupId = uuid();\n updatedMenuList[selectedMenuIndex].id = newGroupId;\n // Update all group children parent ids to be the new group id\n updatedMenuList[selectedMenuIndex]?.children?.forEach(\n (childNode) => {\n childNode.parentGroupId = newGroupId;\n childNode.parentId = newGroupId;\n }\n );\n }\n } else if (!selectedTree.isGroupNode) {\n updatedMenuList[selectedMenuIndex] = displayTree;\n }\n return updatedMenuList;\n });\n if (selectedNodeSearchIdentifier) {\n let tree = currentSelectedTree;\n if (selectedTree.isGroupNode && selectedNodeIndex >= 0) {\n tree = currentSelectedTree[selectedNodeIndex];\n }\n const matchingNode = searchForMatchingNode(\n tree,\n selectedNode.nodeObj,\n selectedNodeSearchIdentifier.split(',')\n );\n setActionPanels(matchingNode?.properties.panels, containerId);\n setSelectedNode(matchingNode);\n } else if (selectedTree.isGroupNode && selectedNodeIndex >= 0) {\n setSelectedNode(displayTree[selectedNodeIndex]);\n } else {\n setSelectedNode(selectedNode);\n }\n }\n },\n [\n tree,\n selectedMenuIndex,\n catalogObjects,\n executeQueryAdHoc,\n selectedNode,\n promotedEntities,\n setActionPanels,\n containerId,\n selectedTree\n ]\n );\n\n const executeApiForDroppedNode = useCallback(\n async (value) => {\n setExecuteApiProgress(true);\n const { sourceNodeMenuIndex, targetNodeMenuIndex, ...apiData } =\n executeApiData;\n const response = await executeQueryWithParameters(\n { data: { requestBody: { ...apiData } } },\n value?.apiMethod?.apiMethodId\n ).catch((res) => {\n console.error(res);\n });\n if (response?.status === 200) {\n const menuIndexes = [sourceNodeMenuIndex];\n // if the menu indexes for the nodes are the same we only need to refresh 1 tree\n if (sourceNodeMenuIndex !== targetNodeMenuIndex) {\n menuIndexes.push(targetNodeMenuIndex);\n }\n handleMenuTreesRefresh(menuIndexes);\n }\n setExecuteApiProgress(false);\n handleCloseExecuteApiDialog();\n },\n [\n executeQueryWithParameters,\n handleCloseExecuteApiDialog,\n executeApiData,\n handleMenuTreesRefresh\n ]\n );\n\n const handleDroppedNode = useCallback(\n (sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {\n const sourceNodeCatalogReturnObject =\n sourceNode?.properties?.catalogReturnObject;\n const targetNodeCatalogReturnObject =\n targetNode?.properties?.catalogReturnObject;\n const targetNodeActions = targetNode?.properties?.nodeActions || [];\n const loadPageNodeActions = targetNodeActions.filter(\n (nodeAction) =>\n nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n nodeAction.actionTypeId === NodeActionEnums.Load_Inquiry_Page\n );\n // TODO: Implement query node actions\n const executeApiNodeActions = targetNodeActions.filter(\n (nodeAction) =>\n nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n nodeAction.actionTypeId === NodeActionEnums.Execute_Api &&\n sourceNodeCatalogReturnObject === nodeAction?.dragEntityName\n );\n // TODO: Implement workflow node actions\n const workflowNodeActions = targetNodeActions.filter(\n (nodeAction) =>\n nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n nodeAction.actionTypeId === NodeActionEnums.Start_Workflow &&\n sourceNodeCatalogReturnObject === nodeAction?.dragEntityName\n );\n if (\n targetNodeActions.some(\n (tna) =>\n tna.dragEntityName === sourceNodeCatalogReturnObject &&\n tna.actionTypeId === NodeActionEnums.Execute_Api\n )\n ) {\n handleDroppedNodeForExecuteApi(\n sourceNode,\n targetNode,\n executeApiNodeActions,\n sourceNodeCatalogReturnObject,\n targetNodeCatalogReturnObject,\n sourceNodeMenuIndex,\n targetNodeMenuIndex\n );\n }\n if (\n targetNodeActions.some(\n (tna) =>\n tna.dragEntityName === sourceNodeCatalogReturnObject &&\n tna.actionTypeId === NodeActionEnums.Load_Inquiry_Page\n )\n ) {\n loadPageForDroppedNode(\n sourceNode,\n targetNode,\n loadPageNodeActions,\n targetNodeCatalogReturnObject,\n sourceNodeCatalogReturnObject\n );\n }\n },\n [loadPageForDroppedNode, handleDroppedNodeForExecuteApi]\n );\n\n const handleMoveToTop = useCallback(async () => {\n if (!selectedNode) {\n return;\n }\n\n const associatedTreeId = selectedNode.properties.associatedTreeId;\n\n if (!associatedTreeId) return;\n setMenuLoading(true);\n setMoveToTopLoading(true);\n let associatedInquiryTree = selectedNode.properties.associatedInquiryTree;\n if (!associatedInquiryTree) {\n const detailedTreeResponse = await executeGetDetailedTree(\n associatedTreeId\n );\n if (detailedTreeResponse.status === 200) {\n associatedInquiryTree = detailedTreeResponse.data;\n }\n }\n const lazyLoad = !!associatedInquiryTree?.properties?.lazyLoad;\n const filterElements = selectedNode.properties.filterElements;\n const apiMethodId = associatedInquiryTree.apiMethodInstance.apiMethodId;\n\n const searchObject = getSearchObject(filterElements, 1, 50, !lazyLoad);\n const data = { data: searchObject };\n const loadedNodesList = [];\n const response = await executeQueryAdHoc(data, apiMethodId).catch((res) => {\n enqueueSnackbar(t(`Unable to move to top: ${res?.response?.data}`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n });\n if (response?.status === 200) {\n if (response?.data?.pageList?.length) {\n const updatedMenuList = menuList.slice();\n const treeStructure = makeTreeStructure(\n associatedInquiryTree.treeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n response.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n associatedInquiryTree,\n lazyLoad\n );\n loadedNodesList.push(\n getLoadedNodeObject(\n apiMethodId,\n searchObject,\n displayTree?.properties?.nodeLabel,\n displayTree?.properties?.catalogReturnObject,\n treeStructure.id\n )\n );\n if (\n displayTree &&\n !Array.isArray(displayTree) &&\n Object.keys(displayTree).length\n ) {\n displayTree.properties.searchValue = getSearchValueString(\n response.data.pageList[0],\n displayTree?.properties?.searchIdentifier\n );\n\n if (selectedNode) {\n const updatedNodeHistory = nodeHistory.map((node) => node);\n updatedNodeHistory.push(selectedNode);\n setNodeHistory(updatedNodeHistory);\n }\n setActionPanels(displayTree?.properties.panels, containerId);\n setSelectedNode(displayTree);\n executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n updatedMenuList[selectedMenuIndex] = displayTree;\n setMenuList(updatedMenuList);\n }\n setDisableMoveToTop(true);\n }\n }\n setMenuLoading(false);\n setMoveToTopLoading(false);\n }, [\n selectedNode,\n executeQueryAdHoc,\n executeGetDetailedTree,\n menuList,\n catalogObjects,\n promotedEntities,\n getLoadedNodeObject,\n setActionPanels,\n executeAddRecentlyLoadedNodes,\n selectedMenuIndex,\n nodeHistory,\n containerId,\n enqueueSnackbar,\n t\n ]);\n\n const handleExpandAll = useCallback(() => {\n setMenuList((prevState) => {\n const updatedMenuList = cloneDeep(prevState);\n updatedMenuList.forEach((tree) => {\n expandAllNodes(tree);\n });\n return updatedMenuList;\n });\n setExpandAllClicked(!expandAllClicked);\n }, [expandAllClicked]);\n\n const handleCollapseAll = useCallback(() => {\n setMenuList((prevState) => {\n const updatedMenuList = cloneDeep(prevState);\n updatedMenuList.forEach((tree) => {\n collapseAllNodes(tree);\n });\n return updatedMenuList;\n });\n }, []);\n\n // @TODO: Add back click handling for move to top\n // const handleBackClick = useCallback(() => {\n // if (!nodeHistory.length) return;\n // const lastIndex = nodeHistory.length - 1;\n // const lastSelectedNode = nodeHistory[lastIndex];\n // setSelectedNode(lastSelectedNode);\n // const updatedNodeHistory = nodeHistory.map(node => node);\n // updatedNodeHistory.pop();\n // setNodeHistory(updatedNodeHistory);\n // }, [nodeHistory]);\n\n const inquiryTabList = useMemo(() => {\n if (!selectedNode || !selectedNode?.properties?.tabs) return [];\n const tabList = [];\n const orderedTabs = orderBySequence(selectedNode.properties.tabs);\n orderedTabs.forEach((tab) => {\n if (tab?.propertyMapping && tab?.jsonLogic) {\n const rule = mapRule(tab?.propertyMapping, tab?.jsonLogic);\n\n if (!evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n return;\n }\n }\n\n let label = '';\n if (tab?.displayName && tab?.displayName.trim()) {\n label = tab?.displayName.trim();\n } else if (tab?.page?.name && tab?.page?.name.trim()) {\n label = tab?.page?.name.trim();\n }\n\n const page = {\n label: label,\n icon: null,\n pageId: tab?.page?.pageId || null,\n trees: tab?.trees || [],\n requiredFieldMapping: tab?.requiredFieldMapping || {},\n queryId: tab?.queryId || '',\n queryParamMapping: tab?.queryParamMapping || null\n };\n tabList.push(page);\n });\n setSelectedPageId(tabList[0]?.pageId);\n return tabList;\n }, [selectedNode]);\n\n const handlePageChange = useCallback(\n (event, value) => {\n setTabValue(value);\n if (selectedPageId !== inquiryTabList[value]?.pageId) {\n setSelectedPageId(inquiryTabList[value]?.pageId);\n }\n },\n [inquiryTabList, selectedPageId]\n );\n\n const handleLoadingSpecificNode = useCallback(\n async (obj) => {\n setMenuLoading(true);\n setNodesRequested([1]);\n const currentTabValue = inquiryTabList?.length\n ? inquiryTabList[tabValue]\n : null;\n let error = false;\n let errorMessage = t(`Unable to load entity`);\n if (!obj?.businessObjectKey) {\n error = true;\n errorMessage = t(`Unable to load entity: No Business Object Key`);\n } else if (!currentTabValue?.trees?.length) {\n error = true;\n errorMessage = t(`Unable to load entity: No Trees Configured for Tab`);\n }\n\n if (error) {\n setMenuLoading(false);\n setNodesRequested([]);\n enqueueSnackbar(errorMessage, {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n return;\n }\n\n const fullyQualifiedName = obj.businessObjectKey.split('|')[0];\n const sanitizedName = getSanitizedName(fullyQualifiedName);\n const matchingCtlgFullyQualifiedNameComponent = catalogObjects.find(\n (domain) => domain.catalogObjectName === fullyQualifiedName\n );\n const catObjName = matchingCtlgFullyQualifiedNameComponent\n ? fullyQualifiedName\n : sanitizedName;\n\n const matchingTabValueTree = currentTabValue.trees.find(\n (tabTree) => tabTree.catalogReturnObject === catObjName\n );\n\n if (!matchingTabValueTree) {\n setMenuLoading(false);\n setNodesRequested([]);\n enqueueSnackbar(\n t(\n `Unable to load entity: Incorrect tree(s) configured for Node trying to load`\n ),\n {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n }\n );\n return;\n }\n let nodeTree = null;\n const detailedTreeResponse = await executeGetDetailedTree(\n matchingTabValueTree.treeId\n );\n if (detailedTreeResponse.status === 200) {\n nodeTree = detailedTreeResponse.data;\n } else {\n setMenuLoading(false);\n setNodesRequested([]);\n enqueueSnackbar(\n t(`Unable to load entity: Tree for item failed to load`),\n {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n }\n );\n return;\n }\n\n if (!nodeTree) {\n setMenuLoading(false);\n setNodesRequested([]);\n enqueueSnackbar(\n t(`Unable to load entity: Tree for item failed to load`),\n {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n }\n );\n return;\n }\n\n const searchIdentifiers = getSearchIdentifiers(\n catalogObjects,\n catObjName\n );\n\n const filterElements = [];\n const searchValues = [];\n searchIdentifiers.forEach((searchIdentifier) => {\n const searchField = searchIdentifier\n ? searchIdentifier.charAt(0).toUpperCase() + searchIdentifier.slice(1)\n : '';\n filterElements.push({\n searchField: searchField,\n searchOperator: '=',\n searchValue: obj[searchIdentifier] ?? ''\n });\n searchValues.push(obj[searchIdentifier]);\n });\n const apiMethodId = nodeTree.apiMethodInstance.apiMethodId;\n const lazyLoad = !!nodeTree?.properties?.lazyLoad;\n\n const searchObject = getSearchObject(filterElements, 1, 50, !lazyLoad);\n const data = { data: searchObject };\n // const loadedNodesList = [];\n const searchResponse = await executeQueryAdHoc(data, apiMethodId);\n if (searchResponse.status === 200) {\n if (searchResponse?.data?.pageList?.length) {\n const treeStructure = makeTreeStructure(\n nodeTree.treeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n searchResponse.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n nodeTree,\n lazyLoad\n );\n // loadedNodesList.push(\n // getLoadedNodeObject(\n // apiMethodId,\n // searchObject,\n // displayTree?.properties?.nodeLabel,\n // displayTree?.properties?.catalogReturnObject,\n // treeStructure.id\n // )\n // );\n // executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n setMenuList((prevState) => [...prevState, displayTree]);\n setNodesRequested([]);\n setMenuLoading(false);\n }\n }\n },\n [\n inquiryTabList,\n tabValue,\n catalogObjects,\n enqueueSnackbar,\n t,\n executeGetDetailedTree,\n executeQueryAdHoc,\n // getLoadedNodeObject,\n promotedEntities\n // executeAddRecentlyLoadedNodes\n ]\n );\n\n const handleSideBarValueChange = useCallback((value) => {\n setSidebarTabValue(value);\n }, []);\n\n const handleAdvancedSearchClick = useCallback(\n (values, selectedSearchOperators, entity, lookupPropertyNames) => {\n setIsAdvancedSearch(true);\n setInSearch(true);\n const foundSearchItem = searchItems.find(\n (item) => item.catalogReturnObject === entity\n );\n const searchFilterElements = [];\n const searchFields = Object.keys(values).filter((field) =>\n field.startsWith(`${getSanitizedName(entity)}:`)\n );\n\n searchFields.forEach((searchField) => {\n const filterElement = {\n searchField: '',\n searchOperator: '',\n searchValue: ''\n };\n const configuredSearchField = searchField.replace(\n `${getSanitizedName(entity)}:`,\n ''\n );\n filterElement.searchField =\n configuredSearchField.charAt(0).toUpperCase() +\n configuredSearchField.slice(1);\n filterElement.searchOperator =\n (selectedSearchOperators &&\n selectedSearchOperators[configuredSearchField]?.value) ||\n '=';\n\n if (\n configuredSearchField.includes(':between') ||\n !values[searchField]\n ) {\n return;\n }\n\n // Handle between operator\n if (filterElement.searchOperator === 'BETWEEN') {\n let fromValue =\n values[searchField] instanceof Date\n ? values[searchField].toISOString()\n : values[searchField];\n let toValue =\n values[`${searchField}:between`] instanceof Date\n ? values[`${searchField}:between`].toISOString()\n : values[`${searchField}:between`];\n filterElement.searchValue = `${fromValue}${\n toValue ? `,${toValue}` : ''\n }`;\n } else {\n filterElement.searchValue =\n values[searchField] instanceof Date\n ? values[searchField].toISOString()\n : values[searchField];\n }\n // Handle lookup values\n if (lookupPropertyNames.includes(configuredSearchField)) {\n filterElement.searchValue = values[searchField]['value'];\n }\n searchFilterElements.push(filterElement);\n });\n\n foundSearchItem.searchFilterElements = searchFilterElements;\n setAdvancedSearchItems([foundSearchItem]);\n },\n [searchItems]\n );\n\n const entityList = useMemo(() => {\n if (!searchItems?.length) {\n return [];\n }\n return searchItems.reduce((entities, item) => {\n if (item.catalogReturnObject) {\n entities.push({\n label: getSanitizedName(item.catalogReturnObject),\n value: item.catalogReturnObject\n });\n }\n return entities;\n }, []);\n }, [searchItems]);\n\n const secondaryButtons = useMemo(() => {\n if (inSearch) {\n return [\n {\n component: ClearIcon,\n label: 'Clear Search',\n click: clearSearch,\n id: 1\n }\n ];\n }\n return [];\n }, [clearSearch, inSearch]);\n\n const pageHeightOffSet = useMemo(() => {\n let offset = 0;\n if (primaryExpanded) {\n offset = offset + 180;\n }\n if (secondaryExpanded) {\n offset = offset + 270;\n }\n\n if (selectedNode?.properties?.tabs?.length > 1) {\n offset = offset + 44;\n }\n\n return offset;\n }, [primaryExpanded, secondaryExpanded, selectedNode]);\n\n const onTreeViewModeChange = useCallback(() => {\n if (treeViewMode === TreeViewModeEnums.Classic) {\n setTreeViewMode(TreeViewModeEnums.Compact);\n } else if (treeViewMode === TreeViewModeEnums.Compact) {\n setTreeViewMode(TreeViewModeEnums.Classic);\n }\n }, [treeViewMode]);\n\n const selectedNodeChildren = useMemo(() => {\n if (!!!selectedNode?.children?.length) return [];\n return selectedNode?.children?.filter(\n (child) => !(child instanceof GroupNode)\n );\n }, [selectedNode]);\n\n const udpPageWidgetParams = useMemo(() => {\n const currentTabValue = inquiryTabList?.length\n ? inquiryTabList[tabValue]\n : null;\n return {\n pageId: currentTabValue?.pageId || '',\n entityName: selectedNode?.properties?.catalogReturnObject,\n contentId: selectedNode?.properties?.searchValue,\n nodeObj: selectedNode?.nodeObj,\n nodeId: selectedNode?.id,\n manytoManyNodeObjKey:\n selectedNode?.properties?.joiningEntityCatalogObjectKey,\n parentNodeObj: selectedNode?.parentNode?.nodeObj,\n parentGroupName: selectedNode?.parentGroupName,\n inquiryParams: selectedNode?.inquiryParams,\n inquiryNodeProperties: selectedNode?.properties,\n refreshTree: handleMenuTreesRefreshFromPage,\n loadInquiryNode: handleLoadingSpecificNode,\n requiredFieldsMap: currentTabValue?.requiredFieldMapping || {},\n displayLoadNodeButton: !!currentTabValue?.trees?.length,\n nodeChildren: selectedNodeChildren,\n catalogObjects,\n queryId: currentTabValue?.queryId,\n queryParamMapping: currentTabValue?.queryParamMapping,\n refreshNodeHeaderData: refreshNodeHeaderPageData,\n refreshPageHeaderData: refreshPageHeaderPageData,\n inquiryContainerId: containerId\n };\n }, [\n inquiryTabList,\n selectedNode,\n catalogObjects,\n handleMenuTreesRefreshFromPage,\n handleLoadingSpecificNode,\n tabValue,\n selectedNodeChildren,\n refreshNodeHeaderPageData,\n refreshPageHeaderPageData,\n containerId\n ]);\n\n const pageWidgetParams = useMemo(() => {\n const currentTabValue = inquiryTabList?.length\n ? inquiryTabList[tabValue]\n : null;\n return {\n pageId: currentTabValue?.pageId || '',\n entityName: selectedNode?.properties?.catalogReturnObject,\n contentId: selectedNode?.properties?.searchValue,\n nodeObj: selectedNode?.nodeObj,\n nodeId: selectedNode?.id,\n manytoManyNodeObjKey:\n selectedNode?.properties?.joiningEntityCatalogObjectKey,\n parentNodeObj: selectedNode?.parentNode?.nodeObj,\n parentGroupName: selectedNode?.parentGroupName,\n inquiryParams: selectedNode?.inquiryParams,\n inquiryNodeProperties: selectedNode?.properties,\n heightOffset: pageHeightOffSet,\n refreshTree: handleMenuTreesRefreshFromPage,\n loadInquiryNode: handleLoadingSpecificNode,\n requiredFieldsMap: currentTabValue?.requiredFieldMapping || {},\n displayLoadNodeButton: !!currentTabValue?.trees?.length,\n nodeChildren: selectedNodeChildren,\n catalogObjects,\n queryId: currentTabValue?.queryId,\n queryParamMapping: currentTabValue?.queryParamMapping,\n refreshNodeHeaderData: refreshNodeHeaderPageData,\n refreshPageHeaderData: refreshPageHeaderPageData,\n inquiryContainerId: containerId\n };\n }, [\n inquiryTabList,\n selectedNode,\n catalogObjects,\n handleMenuTreesRefreshFromPage,\n handleLoadingSpecificNode,\n pageHeightOffSet,\n tabValue,\n selectedNodeChildren,\n refreshNodeHeaderPageData,\n refreshPageHeaderPageData,\n containerId\n ]);\n\n const pageContainer = useMemo(() => {\n return (\n <PageContainer\n user={user}\n key={selectedNode?.properties?.searchValue}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={\n pageData?.isUdpPage ? udpPageWidgetParams : pageWidgetParams\n }\n disableMargins={true}\n />\n );\n }, [\n user,\n pageData,\n pageLoading,\n udpPageWidgetParams,\n selectedNode,\n pageWidgetParams\n ]);\n\n const handleSidebarExpandClick = useCallback(() => {\n setSidebarExpanded((expanded) => !expanded);\n }, []);\n\n const handleInquiryWorkflowTabChange = useCallback((value, tabValue) => {\n setInquiryWorkflowTabValue(tabValue);\n }, []);\n\n useEffect(() => {\n setSubHeaderActionHasChildren(false);\n }, [setSubHeaderActionHasChildren]);\n\n useEffect(() => {\n clearNodes();\n clearSearch();\n // If the treeId changes we want to clear all nodes and search\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [treeId]);\n\n useEffect(() => {\n if (shellContext) {\n shellContext.setSecondExtendedWindow(true);\n shellContext.setHeaderExpander(false);\n }\n }, [shellContext]);\n\n useEffect(() => {\n if (inSearch) {\n setHeaderTitle('');\n setPrimaryExpanded(false);\n setSecondaryExpanded(false);\n setShowToggle1(false);\n setShowToggle2(false);\n } else if (!inSearch && selectedNode) {\n setHeaderTitle(\n selectedNode?.isGroupNode\n ? selectedNode.properties?.label\n : selectedNode.properties?.headerTitle\n );\n if (\n !selectedNode.properties?.defaultNodeHeaderExpanded ||\n selectedNode.properties?.defaultNodeHeaderExpanded === 'hidden'\n ) {\n setShowToggle1(false);\n setPrimaryExpanded(false);\n } else {\n setShowToggle1(true);\n setPrimaryExpanded(\n selectedNode.properties?.defaultNodeHeaderExpanded\n ? selectedNode.properties?.defaultNodeHeaderExpanded === 'expanded'\n : false\n );\n }\n if (\n !selectedNode.properties?.defaultPageHeaderExpanded ||\n selectedNode.properties?.defaultPageHeaderExpanded === 'hidden'\n ) {\n setShowToggle2(false);\n setSecondaryExpanded(false);\n } else {\n setShowToggle2(true);\n setSecondaryExpanded(\n selectedNode.properties?.defaultPageHeaderExpanded\n ? selectedNode.properties?.defaultPageHeaderExpanded === 'expanded'\n : true\n );\n }\n }\n }, [inSearch, selectedNode]);\n\n useEffect(() => {\n if (!nodeLoaded) {\n setHeaderTitle('');\n setShowToggle1(false);\n setShowToggle2(false);\n setPrimaryExpanded(false);\n setSecondaryExpanded(false);\n }\n }, [nodeLoaded]);\n\n useEffect(() => {\n if (!sidebarExpanded) {\n setSidebarTabValue(0);\n }\n }, [sidebarExpanded]);\n\n useEffect(() => {\n if (setPageId) {\n if (selectedNode) {\n if (selectedNode?.properties?.tabs?.length > 1) {\n setPageId(selectedPageId || null);\n } else {\n const pageTabs = selectedNode?.properties?.tabs;\n if (pageTabs?.[0]) {\n setPageId(pageTabs[0].page?.pageId || null);\n } else {\n setPageId(null);\n }\n }\n } else {\n setPageId(null);\n }\n }\n }, [setPageId, selectedNode, selectedPageId]);\n\n useEffect(() => {\n if (initialSearchValue) {\n setIsAdvancedSearch(false);\n setInSearch(true);\n setSearchValue(initialSearchValue);\n }\n }, [initialSearchValue]);\n\n useEffect(() => {\n setTabValue(0);\n }, [selectedNode]);\n\n useEffect(() => {\n if (inSearch) {\n setShowInquiryHeaderActions(false);\n } else {\n setShowInquiryHeaderActions(true);\n }\n }, [inSearch, setShowInquiryHeaderActions]);\n\n useEffect(() => {\n setInquiryParams(\n {\n selectedNode,\n selectedNodeParent: selectedNode?.parentNode,\n refreshTree: handleMenuTreesRefresh\n },\n containerId\n );\n }, [selectedNode, handleMenuTreesRefresh, setInquiryParams, containerId]);\n\n useEffect(() => {\n setMenuListState({\n menuList: menuList,\n handleRemoveMenuItem: handleRemoveMenuItem,\n selectedMenuIndex\n });\n }, [setMenuListState, menuList, handleRemoveMenuItem, selectedMenuIndex]);\n\n useEffect(() => {\n if (tree) {\n const getPreloadedTree = async () => {\n setMenuLoading(true);\n setNodesRequested([1]);\n const response = await executeQueryInstance(\n { data: {} },\n tree.apiMethodInstance?.apiMethodInstanceId\n );\n if (response.status === 200) {\n if (response?.data?.pageList?.length) {\n const clonedTree = cloneDeep(tree.treeStructure);\n const treeStructure = makeTreeStructure(\n clonedTree,\n 'id',\n 'parentId'\n );\n const preloadedList = constructPreloadedTree(\n treeStructure,\n response.data.pageList,\n catalogObjects\n );\n setMenuList(preloadedList || []);\n if (preloadedList?.length) {\n setSelectedNode(preloadedList[0]);\n setSelectedTree(preloadedList[0]);\n setSelectedMenuIndex(0);\n }\n setAppNavigationExpanded(false);\n }\n }\n setMenuLoading(false);\n setNodesRequested([]);\n };\n\n if (tree) {\n // inquiry title is stored in the properties of the top node of the tree\n const topNode = tree?.treeStructure?.find((node) => !node.parentId);\n setInquiryTitleHeader(topNode?.properties?.inquiryTitle || '');\n }\n\n setIsPreloaded(tree.isPreloaded);\n if (tree.isPreloaded) {\n setNodeLoaded(true);\n getPreloadedTree();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tree, setAppNavigationExpanded, catalogObjects]);\n\n useEffect(() => {\n setSelectedNodeForStore(selectedNode || null);\n }, [selectedNode, setSelectedNodeForStore]);\n\n /* useEffects for workflow */\n\n useEffect(() => {\n if (workflowPlay) {\n setWorkflow(workflowPlay);\n }\n }, [workflowPlay]);\n\n // this is used for updating the state node for page use\n useEffect(() => {\n if (workflow) {\n setSelectedWorkflowNode((prevNode) => {\n if (!!prevNode) {\n const foundNode = workflow.workflowPlayNode?.children?.find(\n (child) => child.id === prevNode.id\n );\n if (!!foundNode) {\n const updatedNode = { ...prevNode };\n // TODO: using this to update state for now but may need to update\n // other properties of the selected node when we pull workflow tree\n updatedNode.properties.state = foundNode.state;\n return updatedNode;\n } else {\n return prevNode;\n }\n }\n });\n }\n }, [workflow]);\n\n useEffect(() => {\n if (workflow) {\n if (!workflowInitialized) {\n let initialized = false;\n if (workflow.workflowPlayNode?.children?.length) {\n const firstWorkflowNode = workflow.workflowPlayNode.children[0];\n if (firstWorkflowNode.state !== UnitStateType.Initial) {\n initialized = true;\n setWorkflowInitialized(true);\n }\n }\n\n if (\n !initialized &&\n getWorkflowInitializedCount < WORKFLOW_MAX_NETWORK_CALLS &&\n inquiryWorkflow?.currentWorkflowPlayId\n ) {\n const timer = setTimeout(async () => {\n await reloadWorkflow();\n setGetWorkflowInitializedCount((prevCount) => prevCount + 1);\n }, 1000);\n\n return () => clearTimeout(timer);\n }\n if (getWorkflowInitializedCount === WORKFLOW_MAX_NETWORK_CALLS) {\n enqueueSnackbar(t(`Unable to initialize workflow`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n }\n if (workflowInitialized) {\n const list = [];\n const updatedMenu = transformWorkflowPlayTree(\n workflow.workflowPlayNode\n );\n if (updatedMenu) {\n list.push(updatedMenu);\n }\n setWorkflowMenuItemsList(list);\n }\n }\n }, [\n workflow,\n workflowInitialized,\n reloadWorkflow,\n getWorkflowInitializedCount,\n inquiryWorkflow,\n enqueueSnackbar,\n t\n ]);\n\n useEffect(() => {\n if (inquiryWorkflow?.inWorkflowMode && inquiryWorkflowTabValue === 1) {\n setHideActions(true);\n } else if (\n inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 0\n ) {\n setHideActions(false);\n }\n }, [setHideActions, inquiryWorkflowTabValue, inquiryWorkflow]);\n\n useEffect(() => {\n if (!selectedWorkflowNode) {\n const menu = workflowMenuItemsList[0];\n // Use Task Id to find the first matching node in tree\n if (menu) {\n const firstSelectableMenuItem = menu?.children?.find(\n (item) => item.isSelectable\n );\n setSelectedWorkflowNode(firstSelectableMenuItem || null);\n if (autoCollapseNav) {\n setNavigationExpanded(false);\n }\n }\n }\n }, [\n // udpTaskId,\n workflowMenuItemsList,\n selectedWorkflowNode,\n setNavigationExpanded,\n autoCollapseNav\n ]);\n\n useEffect(() => {\n if (\n !!workflowPlayError &&\n getWorkflowPlayErrorCount < WORKFLOW_MAX_NETWORK_CALLS &&\n inquiryWorkflow?.currentWorkflowPlayId\n ) {\n const timer = setTimeout(() => {\n reloadWorkflow();\n setGetWorkflowPlayErrorCount((prevCount) => prevCount + 1);\n }, 1000);\n\n return () => clearTimeout(timer);\n }\n if (getWorkflowPlayErrorCount === WORKFLOW_MAX_NETWORK_CALLS) {\n enqueueSnackbar(t(`Unable to load workflow`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n }, [\n workflowPlayError,\n reloadWorkflow,\n getWorkflowPlayErrorCount,\n enqueueSnackbar,\n t,\n inquiryWorkflow\n ]);\n\n // Setting location state label so that if this page was saved to favorites\n // we can determine the bread crumb\n useEffect(() => {\n setLocationState({ label: t(inquiryTitle) || t('Inquiry') });\n }, [setLocationState, t, inquiryTitle]);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <LoadingOverlay open={workflowStarting} />\n <div key={treeId} className={classes.root}>\n {!inquiryMenuHidden && (\n <UtilitySideBar\n title={t(inquiryTitle) || t('Inquiry')}\n isUsingChildren={true}\n resizable={true}\n removePadding={true}\n removeTopLayoutUnit={true}\n onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n collapsedWidth={78}\n handleResize={(width) => setUtilitySideBarWidth(width)}\n hideTitleBar={inquiryWorkflow?.inWorkflowMode}\n >\n {moveToTopLoading && <LinearProgress />}\n {sidebarTabValue === 0 && (\n <>\n {inquiryWorkflow?.inWorkflowMode && (\n <>\n <UdpTabs\n value={inquiryWorkflowTabValue}\n onChange={handleInquiryWorkflowTabChange}\n tabList={[\n { label: t('Inquiry') },\n { label: t('Workflow') }\n ]}\n buttonWidth={'100%'}\n />\n <Divider />\n </>\n )}\n {(!inquiryWorkflow?.inWorkflowMode ||\n (inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 0)) && (\n <>\n <InquiryNodeControls\n remove={() => handleRemoveMenuItem(null)}\n moveToTop={handleMoveToTop}\n expandAll={handleExpandAll}\n collapseAll={handleCollapseAll}\n clearAll={clearNodes}\n switchTreeViewMode={onTreeViewModeChange}\n treeViewMode={treeViewMode}\n changeSideBarView={handleSideBarValueChange}\n handleKeyDown={handleSearch}\n disableMoveToTop={disableMoveToTop}\n entityList={entityList}\n entityValue={entityValue}\n setEntityValue={setEntityValue}\n hiddenControls={\n sidebarExpanded\n ? isPreloaded\n ? ['remove', 'clearAll']\n : []\n : isPreloaded\n ? ['remove', 'expandAll', 'clearAll', 'collapseAll']\n : ['remove', 'expandAll', 'clearAll', 'collapseAll']\n }\n showControls={!treeLoading && !treeError && nodeLoaded}\n showSearch={!treeLoading && !treeError}\n defaultValue={initialSearchValue}\n clearSearchStr={clearSearchStr}\n setClearSearchStr={setClearSearchStr}\n isPreloadedTree={isPreloaded}\n treeLoading={treeLoading}\n >\n {!treeLoading && treeError && (\n <div style={{ marginLeft: 4, marginBottom: 12 }}>\n <LayoutUnit unit='nudge' />\n <Typography>\n Error getting tree data from tree id\n </Typography>\n </div>\n )}\n </InquiryNodeControls>\n <NodeList\n menuItemsList={menuList}\n onSelectNode={handleSelectedNode}\n onDropNode={handleDroppedNode}\n selectedNodeId={selectedNode?.id ?? ''}\n selectedNodeParentId={selectedNode?.parentId ?? ''}\n expandAllClicked={expandAllClicked}\n classes={{\n root: !treeLoading\n ? nodeLoaded\n ? classes.nodeListRootLoaded\n : classes.nodeListRoot\n : classes.nodeListRootLoading\n }}\n menuLoading={menuLoading}\n nodesRequested={nodesRequested}\n sidebarExpanded={sidebarExpanded}\n executeQueryAdHoc={executeQueryAdHoc}\n catalogObjects={catalogObjects}\n promotedEntities={promotedEntities}\n treeStructureArr={tree?.treeStructure || []}\n setMenuList={setMenuList}\n treeViewMode={treeViewMode || TreeViewModeEnums.Classic}\n />\n </>\n )}\n </>\n )}\n {sidebarTabValue === 1 && (\n <InquiryAdvancedSearch\n entityList={entityList}\n entityValue={advancedSearchEntityValue}\n setEntityValue={setAdvancedSearchEntityValue}\n onSubmit={handleAdvancedSearchClick}\n currentNodeCatalogReturnObject={\n selectedNode?.properties?.catalogReturnObject\n }\n changeSideBarView={handleSideBarValueChange}\n catalogObjects={catalogObjects}\n tree={tree}\n executeQueryWithParameters={executeQueryWithParameters}\n />\n )}\n {inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 1 && (\n <div\n className={classes.workflowMenuContent}\n key={inquiryWorkflow?.currentWorkflowPlayId}\n >\n {workflowMenuItemsList?.length > 0 &&\n (!workflowPlayLoading || reloadWorkflowFromPage) &&\n workflowMenuItemsList.map((workflowMenuItems, index) => (\n <div\n key={workflowMenuItems.id}\n className={classes.nodeContainer}\n >\n <WorkflowTreeMenu\n menuItems={workflowMenuItems}\n onSelectNode={handleSelectedWorkflowNode}\n // onDropNode={handleDropNode}\n menuIndex={index}\n selectedNodeId={selectedWorkflowNode?.id}\n selectedNodeParentId={selectedWorkflowNode?.parentId}\n sidebarExpanded={sidebarExpanded}\n treeViewMode={TreeViewModeEnums.Classic}\n />\n </div>\n ))}\n {(workflowPlayLoading ||\n workflowPlayError ||\n !workflowInitialized) &&\n !reloadWorkflowFromPage && (\n <div className={classes.workflowTreeLoader}>\n <NodeLoader\n loading={\n workflowPlayLoading ||\n workflowPlayError ||\n !workflowInitialized\n }\n />\n </div>\n )}\n </div>\n )}\n </UtilitySideBar>\n )}\n <OpenPage\n disableGutters\n style={{\n position: 'relative',\n top: 0,\n width: `calc(100% - ${utilitySideBarWidth}px)`\n }}\n >\n <Form\n onSubmit={executeApiForDroppedNode}\n key={promotedMethodsToExecute}\n >\n <ExecuteApiDialog\n open={executeApiDialogOpen}\n handleCloseDialog={handleCloseExecuteApiDialog}\n apiMethods={promotedMethodsToExecute}\n progress={executeApiProgress}\n />\n </Form>\n <div className={classes.content}>\n {(!inquiryWorkflow?.inWorkflowMode ||\n (inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 0)) && (\n <InquiryWrapper nodeLoaded={false} collapsedWidth={32}>\n {(inSearch || nodeLoaded) && (\n <Card square>\n <PrimaryActionHeader\n key={`${selectedNode?.id}-${inSearch}`}\n title={headerTitle}\n buttonLabel={'Load'}\n single\n secondaryButtons={secondaryButtons}\n handleClick={handlePrimaryAction}\n hidePAB={nodeLoaded && !inSearch}\n allowAdditionalTitleComponent={true}\n additionalComponentId={containerId}\n />\n </Card>\n )}\n {!!selectedNode && (\n <Card square className={classes.nodeHeader}>\n <div>\n <Collapse in={primaryExpanded} timeout='auto'>\n {nodeHeaderPageIdToLoad && showToggle1 ? (\n <PageContainer\n user={user}\n key={nodeHeaderPageIdToLoad}\n pageData={nodeHeaderPageData}\n pageLoading={nodeHeaderPageLoading}\n widgetParams={{\n nodeObj: selectedNode?.nodeObj,\n nodeId: selectedNode?.id,\n selectedNode: selectedNode,\n setRefreshNodeHeaderPageData:\n setRefreshNodeHeaderPageData,\n inquiryContainerId: containerId\n }}\n disableMargins={true}\n loadingHeight={32}\n />\n ) : (\n <NodeDetails node={selectedNode} />\n )}\n </Collapse>\n\n {showToggle1 && (\n <div\n className={clsx(\n primaryExpanded\n ? classes.chevronButtons\n : classes.chevronButtonClosed\n )}\n >\n <FluentIconButton\n onClick={() => setPrimaryExpanded(!primaryExpanded)}\n icon={\n primaryExpanded ? ChevronUpIcon : ChevronDownIcon\n }\n />\n </div>\n )}\n </div>\n <Divider />\n <Collapse in={secondaryExpanded} timeout='auto'>\n <div className={classes.inquiryHeader}>\n {pageHeaderPageIdToLoad && showToggle2 ? (\n <PageContainer\n user={user}\n key={pageHeaderPageIdToLoad}\n pageData={pageHeaderPageData}\n pageLoading={pageHeaderPageLoading}\n widgetParams={{\n nodeObj: selectedNode?.nodeObj,\n nodeId: selectedNode?.id,\n selectedNode: selectedNode,\n setRefreshPageHeaderPageData:\n setRefreshPageHeaderPageData,\n inquiryContainerId: containerId\n }}\n disableMargins={true}\n loadingHeight={32}\n />\n ) : (\n <>\n <InquiryHeaderSecondaryTarget\n className={classes.actions}\n />\n <InquiryHeaderSecondaryAlertTarget\n className={classes.actions}\n />\n </>\n )}\n </div>\n </Collapse>\n {selectedNode?.properties?.tabs?.length > 1 && !inSearch ? (\n <UdpTabs\n value={tabValue}\n onChange={handlePageChange}\n tabList={inquiryTabList}\n />\n ) : null}\n </Card>\n )}\n {!!selectedNode && showToggle2 && (\n <Card square className={classes.entityHeader}>\n <div className={classes.chevronButtons}>\n <FluentIconButton\n onClick={() => setSecondaryExpanded(!secondaryExpanded)}\n icon={\n secondaryExpanded ? ChevronUpIcon : ChevronDownIcon\n }\n className={classes.icon}\n />\n </div>\n </Card>\n )}\n {!treeError && (\n <PageActionWrapper\n forPageContainer={true}\n splitScreenStateKey={'pageContainerSplitScreen'}\n >\n <div\n className={classes.mainWrapper}\n style={{ width: '100%' }}\n >\n {inSearch ? (\n <InquirySearchContainer\n searchItems={entitySearchItems}\n isAdvancedSearch={isAdvancedSearch}\n advancedSearchItems={advancedSearchItems}\n setSelectedSearchRows={handleSelectedSearchRows}\n catalogObjects={catalogObjects}\n loadSingleNode={handleSingleNodeLoad}\n onRowDoubleClick={handleRowDoubleClick}\n classes={{ root: classes.searchContainerRoot }}\n executeQueryAdHoc={executeQueryAdHoc}\n apiMethodInstanceId={\n tree?.apiMethodInstance?.apiMethodInstanceId\n } // The original apiMethodInstanceId that the tree uses\n />\n ) : !tree || !catalogObjects ? (\n <LinearProgress />\n ) : !nodeLoaded && !tree?.isPreloaded ? (\n tree?.explorePageId ? (\n <PageContainer\n user={user}\n key={selectedNode?.properties?.searchValue}\n pageData={explorePageData}\n pageLoading={explorePageLoading}\n widgetParams={{\n tree: tree,\n recentlyLoadedNodes: litnHistory,\n loading: litnHistoryLoading,\n onLoadedNodeClick: handleRecentlyLoadedNodeClick,\n tableHeight: 'calc(100vh - 172px)',\n catalogObjects\n }}\n disableMargins={true}\n />\n ) : (\n <InquiryDashboard\n treeId={treeId}\n recentlyLoadedNodeOnClick={\n handleRecentlyLoadedNodeClick\n }\n >\n <RecentlyLoadedNodesTable\n recentlyLoadedNodes={litnHistory}\n loading={litnHistoryLoading}\n onLoadedNodeClick={handleRecentlyLoadedNodeClick}\n tableHeight={'calc(100vh - 172px)'}\n tree={tree}\n />\n </InquiryDashboard>\n )\n ) : (\n selectedNode?.properties?.tabs?.length > 0 &&\n (selectedNode?.properties?.tabs?.length > 1\n ? pageId && pageContainer\n : pageId\n ? pageContainer\n : null)\n )}\n </div>\n </PageActionWrapper>\n )}\n {shellContext?.secondExtendedWindow && (\n <InquiryHeaderSecondary secondExtended>\n <div className={classes.information}>\n <div className={classes.summaryCard}>\n {/* Add Child component here for the Node header */}\n </div>\n </div>\n </InquiryHeaderSecondary>\n )}\n </InquiryWrapper>\n )}\n {inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 1 && (\n <WorkflowContent\n selectedNode={selectedWorkflowNode}\n workflow={workflow}\n reloadWorkflow={handleReloadWorkflow}\n users={users}\n groups={groups}\n handleClose={handleCloseWorkflow}\n inquiryPageParams={\n pageData?.isUdpPage ? udpPageWidgetParams : pageWidgetParams\n }\n />\n )}\n </div>\n </OpenPage>\n </div>\n </DndProvider>\n );\n};\n\nInquiryContainer.propTypes = {\n user: PropTypes.object,\n shellContext: PropTypes.object,\n litnHistory: PropTypes.array,\n litnHistoryLoading: PropTypes.bool,\n tree: PropTypes.object,\n treeId: PropTypes.string,\n catalogObjects: PropTypes.array,\n executeQueryAdHoc: PropTypes.func,\n executeQueryWithParameters: PropTypes.func,\n executeGetDetailedTree: PropTypes.func,\n executeAddRecentlyLoadedNodes: PropTypes.func,\n treeLoading: PropTypes.bool,\n treeError: PropTypes.object,\n pageData: PropTypes.object,\n pageLoading: PropTypes.bool,\n pageError: PropTypes.object,\n setPageId: PropTypes.func,\n pageId: PropTypes.string,\n isValidWidget: PropTypes.func,\n productId: PropTypes.string,\n initialSearchValue: PropTypes.string,\n promotedEntities: PropTypes.array,\n promotedMethods: PropTypes.array\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { useAuthedUser } from '../utilities/auth/useAuthedUser';\nimport { InquiryContainer } from './InquiryContainer';\nimport { useActions } from '../hooks/useActions';\nimport { useShellStore } from '../stores/shellStore';\nimport { ConfigService } from '../configService';\nimport { useCatalogStore } from '../stores/catalogStore';\nimport { buildCatalogObjectList } from '../utilities/catalog/CatalogUtilities';\nimport { CircularProgress, makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: (props) =>\n props.loadingHeight ? props.loadingHeight : 'calc(100vh - 160px)'\n }\n}));\n\n/**\n * Required Props:\n * user - current unity user\n * productId - current product id of application\n * shellContext - context of the shell in the application. Will be used for some global actions (ie. collapse menu bar from within inquiry container)\n * litnHistory (loaded inquiry tree node history) - array of tree node objects to be used in the recently loaded nodes\n * litnHistoryLoading - request status of the litnHistory request\n * tree - tree object which contains the tree structure and its properties\n * treeLoading - request status of tree request\n * treeError - error status of tree request\n * treeId - id of the tree that's being loaded (retreived from URL)\n * catalogObjects - array of catalog items and it's relationship and properties\n * executeQueryAdHoc - search callback\n * executeQueryWithParameters - search callback with extra parameters\n * executeGetDetailedTree - callback to get detailed tree information for the associated tree\n * executeAddRecentlyLoadedNodes - callback to add loaded nodes to history\n * pageData - data for the page to be displayed in inquiry\n * pageLoading - boolean value for if a page is loading\n * pageError - error status of page request\n * setPageId - setter for setting pageId when it changes\n * pageId - id of page\n * initialSearchValue - query parameter representing a value to search upon loading of this inquiry page\n * promotedEntities - promoted entities for the catalog used in the inquiry tree\n * promotedMethods - promoted methods for the catalog used in the inquiry tree\n *\n * @param {*} props\n * @returns Inquiry\n */\nexport const Inquiry = (props) => {\n const {\n shellContext,\n treeId,\n searchValue,\n autoCollapseNav = true,\n useNewUdpTab = true,\n containerId = ''\n } = props;\n const classes = useStyles(props);\n const user = useAuthedUser();\n const { location } = props;\n const udpTreeId = treeId || location?.pathname?.replace('/inquiry/', '');\n let searchParamStr = location?.search;\n let searchParams = new URLSearchParams(searchParamStr);\n const initialSearchValue =\n searchValue ||\n (searchParams.has('searchValue') === true\n ? searchParams.get('searchValue')\n : '');\n const [pageId, setPageId] = useState(null);\n\n const {\n setCatalogEntities,\n setCatalogPromotedEntities,\n setActionPanels,\n setInquiryParams\n } = useActions();\n\n const currentApiCatalogId = useCatalogStore(\n (state) => state.currentApiCatalogId\n );\n const catalogsMap = useCatalogStore((state) => state.catalogsMap);\n const promotedMethodEntitiesMap = useCatalogStore(\n (state) => state.promotedMethodEntitiesMap\n );\n\n const setCurrentContainerId = useShellStore(\n (state) => state.setCurrentContainerId\n );\n\n const [\n { data: litnHistory, loading: litnHistoryLoading },\n refetchLitnHistory\n ] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `inquirytree/loadedInquiryTreeNodes?inquiryTreeId=${udpTreeId}&userId=${user.id}&productId=${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !!!udpTreeId,\n false\n );\n\n const [{ data: tree, loading: treeLoading, error: treeError }] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `inquirytree/${udpTreeId}/detailed`,\n {},\n !!!udpTreeId,\n false\n );\n\n const executeQueryAdHoc = useCallback(\n async (data, apiMethodId) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryAdHoc/${apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const executeQueryWithParameters = useCallback(\n async (data, apiMethodId) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const executeGetDetailedTree = useCallback(\n async (treeId) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `inquirytree/${treeId}/detailed`,\n {\n method: 'get'\n }\n ),\n []\n );\n\n const executeAddRecentlyLoadedNodes = useCallback(\n async (data) => {\n await apiMutate(\n ConfigService.integrationV1ApiUrl,\n `inquirytree/${udpTreeId}/loadedInquiryTreeNodes/user/${user.id}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {\n method: 'post'\n },\n data\n );\n refetchLitnHistory();\n },\n [user, udpTreeId, refetchLitnHistory]\n );\n\n const [{ data: page, loading: pageLoading, error: pageError }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${pageId}`,\n {},\n !!!pageId,\n false\n );\n\n const catalogObjects = useMemo(() => {\n if (!currentApiCatalogId || !catalogsMap || !tree) {\n return null;\n }\n const catalogObjectList =\n catalogsMap[currentApiCatalogId]?.ctlg?.catalogObjectList;\n if (!catalogObjectList) {\n return null;\n }\n let matchingObject = null;\n let filteredCatalogObjects = [];\n if (catalogObjectList) {\n matchingObject = catalogObjectList.find(\n (obj) => obj.catalogObjectName === tree.apiMethodInstance?.returnObject\n );\n\n if (!!matchingObject) {\n const properties = matchingObject.properties;\n // Get the first child that returns\n const children = properties.filter(\n (property) => !!property.extendedProperties.childEntity\n );\n\n filteredCatalogObjects.push(matchingObject);\n\n buildCatalogObjectList(\n filteredCatalogObjects,\n children,\n catalogObjectList\n );\n }\n }\n return filteredCatalogObjects;\n }, [catalogsMap, currentApiCatalogId, tree]);\n\n const promotedMethods = useMemo(() => {\n if (!currentApiCatalogId || !catalogsMap) {\n return null;\n }\n return catalogsMap[currentApiCatalogId]?.promotedMethods;\n }, [catalogsMap, currentApiCatalogId]);\n\n const promotedEntities = useMemo(() => {\n if (!currentApiCatalogId || !promotedMethodEntitiesMap) {\n return null;\n }\n return promotedMethodEntitiesMap[currentApiCatalogId] || [];\n }, [promotedMethodEntitiesMap, currentApiCatalogId]);\n\n useEffect(() => {\n if (catalogObjects) {\n setCatalogEntities(catalogObjects);\n }\n }, [setCatalogEntities, catalogObjects]);\n\n useEffect(() => {\n if (promotedEntities) {\n setCatalogPromotedEntities(promotedEntities);\n }\n }, [setCatalogPromotedEntities, promotedEntities]);\n\n useEffect(() => {\n if (containerId) {\n setCurrentContainerId(containerId);\n }\n // unmount function\n return () => {\n if (containerId) {\n setCurrentContainerId(null);\n setActionPanels(null, containerId);\n setInquiryParams(null, containerId);\n }\n };\n }, [setActionPanels, setCurrentContainerId, containerId, setInquiryParams]);\n\n if (treeLoading && !treeError) {\n return (\n <div className={classes.loadingContent}>\n <CircularProgress size={64} />\n </div>\n );\n }\n\n return (\n <InquiryContainer\n user={user}\n productId={ConfigService.config.UNITY_PRODUCT_ID}\n shellContext={shellContext}\n litnHistory={litnHistory}\n litnHistoryLoading={litnHistoryLoading}\n tree={tree}\n treeLoading={treeLoading}\n treeError={treeError}\n treeId={udpTreeId}\n catalogObjects={catalogObjects}\n executeQueryAdHoc={executeQueryAdHoc}\n executeQueryWithParameters={executeQueryWithParameters}\n executeGetDetailedTree={executeGetDetailedTree}\n executeAddRecentlyLoadedNodes={executeAddRecentlyLoadedNodes}\n pageData={page}\n pageLoading={pageLoading}\n pageError={pageError}\n setPageId={setPageId}\n pageId={pageId}\n initialSearchValue={initialSearchValue}\n promotedEntities={promotedEntities}\n promotedMethods={promotedMethods}\n autoCollapseNav={autoCollapseNav}\n useNewUdpTab={useNewUdpTab}\n containerId={containerId}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Inquiry-Cjz91wf_.js","names":["Field","useStyles","useStyles","ListItem","useStyles","other","useStyles","joiningEntityCatalogObjectKey","tree","useStyles","useStyles","uuid","tree","t","selectedTree","tabValue","LoadingOverlay","Form","treeId"],"sources":["../src/inquiry/ExecuteApiDialog.jsx","../src/inquiry/InquiryWrapper.jsx","../src/inquiry/NodeDetails.jsx","../src/inquiry/InquiryTreeMenuItem.jsx","../src/inquiry/InquiryTreeMenu.jsx","../src/inquiry/NodeList.jsx","../src/inquiry/InquiryContainer.jsx","../src/inquiry/Inquiry.jsx"],"sourcesContent":["import React from 'react';\nimport { Field } from '../utilities/form';\nimport { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { FluentDialog } from '../UI/feedback/FluentDialog';\nimport { useTranslation } from 'react-i18next';\nimport { useForm } from 'react-final-form';\n\nexport const ExecuteApiDialog = (props) => {\n const {\n open,\n handleCloseDialog,\n actionLabel = 'Execute',\n title = 'Execute the below Api',\n message,\n apiMethods = [],\n ...other\n } = props;\n const form = useForm();\n const { t } = useTranslation();\n\n const handleSubmit = () => {\n form.submit();\n };\n\n return (\n <div>\n <FluentDialog\n open={open}\n title={title}\n actionOne={handleCloseDialog}\n actionTwo={handleSubmit}\n labelOne={t('Cancel')}\n labelTwo={actionLabel}\n onClose={handleCloseDialog}\n message={message}\n maxWidth='sm'\n {...other}\n >\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Api(s)')}\n id='apis'\n name='apiMethod'\n fullWidth\n variant='outlined'\n margin='normal'\n size='small'\n options={apiMethods || []}\n initialValue={apiMethods[0] || null}\n required\n optionKey='name'\n />\n </FluentDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { makeStyles, Slide } from '@material-ui/core';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n width: '100%',\n position: 'relative'\n },\n sideBar: {\n width: (props) => (props.nodeMinimized ? props.collapsedWidth : 350),\n // height: '100vh',\n background: theme.palette.common.white,\n borderRight: `1px solid ${theme.palette.divider}`\n },\n children: {\n width: '100%'\n }\n}));\n\nexport const InquiryWrapper = (props) => {\n const classes = useStyles(props);\n\n const {\n children,\n sideBar,\n nodeLoaded,\n onMouseEnter,\n onMouseLeave,\n className,\n sidebarClassName,\n childrenClassName\n } = props;\n\n return (\n <div className={clsx(classes.root, className)}>\n <Slide direction='right' in={nodeLoaded} mountOnEnter unmountOnExit>\n <div\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n className={clsx(classes.sideBar, sidebarClassName)}\n >\n {sideBar}\n </div>\n </Slide>\n\n <div className={clsx(classes.children, childrenClassName)}>\n {children}\n </div>\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { LayoutUnit } from '../layout/LayoutUnit';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginLeft: theme.spacing(2)\n },\n wrapper: {\n // display: 'flex'\n },\n columnOne: {\n height: 164,\n // maxWidth: 700,\n overflowX: 'auto',\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap'\n },\n listItem: {\n marginRight: theme.spacing(1)\n // height: theme.spacing(14),\n }\n}));\n\nconst ListItem = (props) => {\n const { label, value } = props;\n const classes = useStyles();\n return (\n <div \n className={classes.listItem}\n >\n <Typography color='secondary' variant='caption'>\n {label}\n </Typography>\n <Typography>{value}</Typography>\n <LayoutUnit unit='xxs' />\n </div>\n );\n};\n\nexport const NodeDetails = (props) => {\n const { node } = props;\n const classes = useStyles();\n\n const details = useMemo(() => {\n if (!node || !node?.nodeObj || !node?.properties?.pageHeaderConfiguration) {\n return [];\n }\n const shownPageHeaderConfigurations =\n node.properties.pageHeaderConfiguration.filter((phc) => phc.isShown);\n const list = [];\n shownPageHeaderConfigurations.forEach((sphc) => {\n const propertyName = sphc.propertyName;\n const property = sphc.property;\n let value = node.nodeObj[propertyName];\n if (sphc.joiningEntityKey) {\n if (sphc.joiningEntityKey === node.properties?.catalogObjectKey) {\n value = node.nodeObj[property ? property : propertyName];\n } else {\n const valueObj = node.nodeObj[sphc.joiningEntityKey];\n if (valueObj) {\n value = valueObj[property ? property : propertyName];\n }\n if (!value) {\n value = node.nodeObj[property ? property : propertyName];\n }\n }\n }\n\n const item = {\n label: sphc.name,\n value: value ? value.toString() : 'N/A'\n };\n list.push(item);\n });\n return list;\n }, [node]);\n\n return (\n <div className={classes.root}>\n <div className={classes.wrapper}>\n <div className={classes.columnOne}>\n {details.map((item) => {\n return (\n <ListItem\n key={item.label}\n label={item.label}\n value={item.value}\n />\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useCallback } from 'react';\nimport {\n makeStyles,\n lighten,\n Typography,\n CircularProgress,\n darken,\n useTheme,\n Tooltip\n} from '@material-ui/core';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport { getIconFromName } from '../utilities/tree/TreeUtilities';\nimport clsx from 'clsx';\nimport { UnityFluentIcon } from '../utilities/iconLibrary/UnityFluentIcon';\nimport { getUnityIconFromName } from '../utilities/iconLibrary/UnityIconLibrary';\nimport { FluentButton } from '../UI/inputs/buttons/FluentButton';\nimport { FluentIcon } from '../utilities/iconLibrary/FluentIcon';\nimport { CaretUpSolid8Icon, CaretDownSolid8Icon } from '@fluentui/react-icons';\nimport { useDrag, useDrop } from 'react-dnd';\nimport {\n NodeActionTriggerEnums,\n TreeViewModeEnums\n} from '../enums/unitySystemEnums.ts';\nimport { AggregateChip } from '../UI/utilityDisplay/AggregateChip';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n '&.Mui-selected > .MuiTreeItem-content': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300]\n },\n '&.Mui-selected > .MuiTreeItem-content .MuiTreeItem-label': {\n backgroundColor: 'transparent',\n paddingLeft: 0\n },\n '&.Mui-selected > .MuiTreeItem-content > .MuiCollapse-wrapperInner': {\n backgroundColor:\n theme?.getThemeData()?.mode !== 'dark' && theme.palette.grey[50]\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer': {\n display: (props) => (props.sidebarExpanded ? 'flex' : 'none')\n }\n },\n content: {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' &&\n props.adornmentName &&\n props.adornmentColor\n ? lighten(props.adornmentColor, 0.92)\n : ''\n },\n labelRoot: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: (props) => (props.sidebarExpanded ? 0 : theme.spacing(1.5)),\n width: '100%'\n },\n labelContainer: {\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `calc(100% - ${theme.spacing(6.25)}px)`\n : `calc(100% - ${theme.spacing(7.75)}px)`\n },\n conditionalAdornmentContainer: {\n display: 'inline-flex'\n },\n labelText: {\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: '1rem',\n letterSpacing: 0.1\n },\n captionText: {\n marginLeft: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact ? theme.spacing(1) : '',\n fontSize: '0.65rem',\n fontWeight: 400,\n lineHeight: 1,\n letterSpacing: 0.4\n },\n labelOverflow: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n group: {\n width: '100%',\n '& .MuiTreeItem-group': {\n marginLeft: 0\n },\n '& .MuiTreeItem-content': {\n paddingLeft: (props) =>\n props.sidebarExpanded ? (props.depth || 1) * theme.spacing(1) : 0,\n borderRight: (props) =>\n props.showRightBorderColor\n ? `4px solid ${theme.palette.primary.main}`\n : '',\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n '& .MuiTreeItem-content .MuiTreeItem-label': {\n paddingLeft: 0,\n width: (props) =>\n props.sidebarExpanded && `calc(100% - ${theme.spacing(2.5)}px)`\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer span': {\n display: (props) => (props.hideExpansion ? 'none' : '')\n },\n '& .MuiCollapse-wrapperInner': {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' && props.isSelectedNode\n ? theme.palette.grey[50]\n : ''\n }\n },\n iconContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 50,\n marginTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginRight: theme.spacing(1),\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4),\n height: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4),\n border: (props) =>\n props.iconColor\n ? `1px solid ${darken(props.iconColor, 0.1)}`\n : `1px solid ${theme.palette.secondary.main}`,\n backgroundColor: '#ffffff'\n },\n dropTarget: {\n backgroundColor: theme.palette.action.hover,\n border: `2px dashed ${theme.palette.primary.main}`\n }\n}));\n\nexport const InquiryTreeMenuItem = (props) => {\n const {\n parentId,\n nodeId,\n iconName,\n iconType,\n iconColor,\n adornmentName,\n adornmentType,\n adornmentColor,\n label,\n onNodeSelect,\n isSelectedNode,\n subLabel,\n sidebarExpanded,\n isLastNode,\n loading,\n node,\n onDropNode,\n treeViewMode,\n menuIndex,\n aggregateThresholdId,\n aggregateThresholdNodeMapping,\n ...other\n } = props;\n const classes = useStyles(props);\n const theme = useTheme();\n\n const [{ isDragging }, dragRef] = useDrag({\n type: 'InquiryTreeMenuItem',\n item: { ...node, sourceNodeMenuIndex: menuIndex },\n collect: (monitor) => ({\n isDragging: monitor.isDragging()\n })\n });\n\n const handleOnDrop = useCallback(\n (sourceNode, monitor) => {\n if (!monitor.didDrop()) {\n if (onDropNode) {\n const { sourceNodeMenuIndex, ...other } = sourceNode;\n onDropNode({ ...other }, node, sourceNodeMenuIndex, menuIndex);\n }\n }\n },\n [onDropNode, node, menuIndex]\n );\n\n const [{ canDrop, isOver }, dropRef] = useDrop(\n () => ({\n accept: ['InquiryTreeMenuItem'],\n drop: (sourceNode, monitor) => {\n // condition to only handle first drop\n handleOnDrop(sourceNode, monitor);\n },\n canDrop: (sourceNode) => checkCanDrop(sourceNode),\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n canDrop: !!monitor.canDrop()\n })\n }),\n [handleOnDrop]\n );\n\n const checkCanDrop = useCallback(\n (sourceNode) => {\n if (sourceNode) {\n const onDropActions = node?.properties?.nodeActions?.filter(\n (na) => na?.triggerType === NodeActionTriggerEnums.On_Node_Drop\n );\n if (!onDropActions) {\n return false;\n }\n const nodeDragEntities = onDropActions?.map(\n (action) => action?.dragEntityName\n );\n return nodeDragEntities.includes(\n sourceNode?.properties?.catalogReturnObject\n );\n }\n },\n [node]\n );\n\n const handleOnLabelClick = useCallback(\n (e) => {\n e.preventDefault();\n onNodeSelect(e, nodeId);\n },\n [onNodeSelect, nodeId]\n );\n\n return (\n <TreeItem\n id={'udpRecord-InquiryTreeMenuItem-TreeItem-' + label}\n udprecordid={'udpRecord-InquiryTreeMenuItem-TreeItem-' + label}\n className={classes.group}\n key={nodeId}\n nodeId={nodeId}\n collapseIcon={\n <FluentIcon\n id={'udpRecord-InquiryTreeMenuItem-Icon-' + label}\n size='small'\n component={CaretUpSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n expandIcon={\n <FluentIcon\n id={'udpRecord-InquiryTreeMenuItem-Icon-' + label}\n size='small'\n component={CaretDownSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n label={\n <div\n ref={dropRef}\n id={'udpRecord-InquiryTreeMenuItem-' + label}\n udprecordid={'udpRecord-InquiryTreeMenuItem-' + label}\n className={clsx({\n [classes.dropTarget]: canDrop && isOver\n })}\n >\n <Tooltip title={sidebarExpanded ? '' : label}>\n <div\n ref={(node?.properties?.isDraggable && dragRef) || null}\n style={{ opacity: isDragging ? 0.5 : 1 }}\n >\n {loading ? (\n <CircularProgress size={12} />\n ) : (\n <div\n className={classes.labelRoot}\n style={{\n fontWeight: isSelectedNode ? 'bold' : ''\n }}\n >\n {iconName && (\n <div className={classes.iconContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'medium'\n }\n color={iconColor}\n type={iconType}\n icon={\n iconType === 'unity'\n ? getUnityIconFromName(iconName)\n : getIconFromName(iconName)\n }\n style={{\n color: iconColor\n ? darken(iconColor, 0.1)\n : theme.palette.secondary.main\n }}\n />\n </div>\n )}\n {sidebarExpanded && (\n <div className={classes.labelContainer}>\n <Typography\n variant='subtitle2'\n className={clsx(\n classes.labelText,\n classes.labelOverflow\n )}\n >\n {label}\n {subLabel &&\n treeViewMode === TreeViewModeEnums.Compact && (\n <Typography\n variant='caption'\n className={clsx(\n classes.captionText,\n classes.labelOverflow\n )}\n >\n {subLabel}\n </Typography>\n )}\n </Typography>\n {subLabel &&\n treeViewMode === TreeViewModeEnums.Classic && (\n <div className={classes.labelOverflow}>\n <Typography\n variant='caption'\n className={clsx(classes.captionText)}\n >\n {subLabel}\n </Typography>\n </div>\n )}\n </div>\n )}\n <AggregateChip\n aggregateThresholdId={aggregateThresholdId}\n aggregateThresholdParamMappings={\n aggregateThresholdNodeMapping\n }\n />\n {adornmentName && sidebarExpanded && (\n <div className={classes.conditionalAdornmentContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'medium'\n }\n color={adornmentColor}\n type={adornmentType}\n icon={\n adornmentType === 'unity'\n ? getUnityIconFromName(adornmentName)\n : getIconFromName(adornmentName)\n }\n style={{\n color: adornmentColor\n }}\n />\n </div>\n )}\n </div>\n )}\n {isLastNode && (\n <FluentButton\n onClick={() => console.log('Last Node')}\n className={classes.button}\n >\n <Typography variant='caption'>Last Node</Typography>\n </FluentButton>\n )}\n </div>\n </Tooltip>\n </div>\n }\n onLabelClick={handleOnLabelClick}\n classes={{ root: classes.root, content: classes.content }}\n {...other}\n />\n );\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport {\n makeStyles,\n useTheme,\n lighten,\n CircularProgress,\n Typography\n} from '@material-ui/core';\nimport TreeView from '@material-ui/lab/TreeView';\nimport { InquiryTreeMenuItem } from './InquiryTreeMenuItem';\nimport {\n searchTree,\n findAllParentIds,\n getNodeIdForRightBorder,\n findNodeById,\n formatTreeMenuItem,\n mapNodeObjValuesToSearchParameters\n} from '../utilities/tree/TreeUtilities';\nimport { FluentIcon } from '../utilities/iconLibrary/FluentIcon';\nimport { CaretUpSolid8Icon, CaretDownSolid8Icon } from '@fluentui/react-icons';\nimport { cloneDeep, difference } from 'lodash';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums.ts';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\nimport { toUpperFirstChar } from '../utilities/input/StringUtilities';\nimport { useSnackbar } from 'notistack';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginBottom: theme.spacing(1.75),\n borderTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n noChildrenContainer: {\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n }\n}));\n\nexport const InquiryTreeMenu = (props) => {\n const {\n menuItems,\n onSelectNode,\n onDropNode,\n menuIndex,\n selectedNodeId,\n selectedNodeParentId,\n expandAllClicked,\n sidebarExpanded,\n executeQueryAdHoc,\n catalogObjects,\n promotedEntities,\n treeStructureArr,\n setMenuList,\n treeViewMode\n } = props;\n const [defaultExpanded, setDefaultExpanded] = useState(null);\n const [isCurrentActiveTree, setIsCurrentActiveTree] = useState(false);\n const [selectedNodeIsHidden, setSelectedNodeIsHidden] = useState(false);\n const [loadingChildren, setLoadingChildren] = useState(false);\n const [tree, setTree] = useState(menuItems);\n const theme = useTheme();\n const classes = useStyles(props);\n const { enqueueSnackbar } = useSnackbar();\n\n const handleSelectedNode = useCallback(\n (e, value) => {\n const selectedNode = searchTree(tree, value);\n const parentNode = findNodeById(\n menuItems,\n selectedNode.entityNodeParentId\n ? selectedNode.entityNodeParentId\n : selectedNode.parentId\n );\n selectedNode.parentNode = parentNode;\n if (onSelectNode) {\n onSelectNode(selectedNode, menuIndex, tree);\n setSelectedNodeIsHidden(false);\n }\n },\n [tree, menuIndex, onSelectNode, menuItems]\n );\n\n const renderTree = useCallback(\n (node, depth = 1) => {\n let nodeId = node.id;\n let iconName = node.properties?.defaultIcon?.name;\n let iconType = node.properties?.defaultIcon?.type;\n let iconColor = node.properties?.defaultIcon?.color?.hex;\n\n if (node.properties?.conditionalNodeIconName) {\n iconName = node.properties?.conditionalNodeIconName;\n iconType = node.properties?.conditionalNodeIconType;\n iconColor = node.properties?.conditionalNodeIconName\n ? node.properties?.conditionalNodeIconColor ??\n node.properties?.defaultIcon?.color?.hex\n : node.properties?.defaultIcon?.color?.hex;\n }\n\n let adornmentName = node.properties?.conditionalNodeAdornmentName || '';\n let adornmentType = node.properties?.conditionalNodeAdornmentName\n ? node.properties.conditionalNodeAdornmentType\n : '';\n let adornmentColor = node.properties?.conditionalNodeAdornmentName\n ? node.properties?.conditionalNodeAdornmentColor ??\n node.properties?.defaultIcon?.color?.hex\n : '';\n\n let aggregateThresholdId = node.properties?.aggregateThresholdId || '';\n let aggregateThresholdNodeMapping = mapNodeObjValuesToSearchParameters(\n node?.nodeObj,\n node.properties?.aggregateThresholdParamMappings\n );\n\n let label = node.properties?.nodeLabel || node.properties?.name;\n let subLabel = node.properties?.nodeSubLabel;\n if (node.isGroupNode) {\n label = node.properties?.label;\n subLabel = node.properties?.subLabel;\n iconName = node.properties?.icon?.name;\n iconType = node.properties?.icon?.type;\n iconColor = node.properties?.icon?.color?.hex;\n }\n\n return (\n <InquiryTreeMenuItem\n key={nodeId}\n nodeId={nodeId}\n label={label}\n subLabel={subLabel}\n iconName={iconName}\n iconType={iconType}\n iconColor={iconColor}\n adornmentName={adornmentName}\n adornmentType={adornmentType}\n adornmentColor={adornmentColor}\n parentId={node.parentId}\n onNodeSelect={handleSelectedNode}\n selectedNodeId={selectedNodeId}\n isSelectedNode={selectedNodeId === node.id}\n showRightBorderColor={\n selectedNodeIsHidden &&\n isCurrentActiveTree &&\n getNodeIdForRightBorder(\n defaultExpanded,\n tree,\n selectedNodeParentId\n ) === node.id\n }\n isCurrentActiveTree={isCurrentActiveTree}\n sidebarExpanded={sidebarExpanded}\n depth={depth}\n hideExpansion={!node.properties?.lazyLoad && !!!node.children?.length}\n node={node}\n onDropNode={onDropNode}\n treeViewMode={treeViewMode}\n menuIndex={menuIndex}\n aggregateThresholdId={aggregateThresholdId}\n aggregateThresholdNodeMapping={aggregateThresholdNodeMapping}\n >\n {node.properties?.lazyLoad &&\n !!!node.children?.length &&\n !node.completedLoadingChildren &&\n !node.errorRetrievingChildren && (\n <CircularProgress\n size={12}\n style={{ marginLeft: (depth || 1) * theme.spacing(1) }}\n />\n )}\n {node.properties?.lazyLoad &&\n !!!node.children?.length &&\n node.completedLoadingChildren &&\n sidebarExpanded &&\n !node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n No Children\n </Typography>\n </div>\n )}\n {node.properties?.lazyLoad &&\n sidebarExpanded &&\n node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n {node.completedLoadingChildren\n ? `Error Retrieving ${\n !!node.children?.length ? `Additional ` : ''\n }Children`\n : node.errorRetrievingChildren}\n </Typography>\n </div>\n )}\n {Array.isArray(node.children)\n ? node.children.map((n, i) => renderTree(n, depth + 1))\n : null}\n </InquiryTreeMenuItem>\n );\n },\n [\n handleSelectedNode,\n selectedNodeId,\n selectedNodeIsHidden,\n isCurrentActiveTree,\n sidebarExpanded,\n defaultExpanded,\n tree,\n selectedNodeParentId,\n theme,\n classes,\n onDropNode,\n treeViewMode,\n menuIndex\n ]\n );\n\n const handleNodeExpansion = useCallback(\n async (evt, nodeIds) => {\n const expandingNodes = nodeIds.filter(\n (x) => !defaultExpanded.includes(x)\n );\n let currentExpandedNodeId = null;\n let currentExpandedNode = null;\n // Check to see if we're expanding\n if (nodeIds.length > defaultExpanded.length) {\n currentExpandedNodeId = expandingNodes[0];\n }\n const treeCopy = cloneDeep(tree);\n // Handle collapsing of a node.\n if (!currentExpandedNodeId) {\n const collapsingNodeList = difference(defaultExpanded, nodeIds);\n if (collapsingNodeList.length) {\n const collapsingNodeId = collapsingNodeList[0];\n const nodeMatch = findNodeById(treeCopy, collapsingNodeId);\n if (nodeMatch) {\n nodeMatch.isExpanded = false;\n setMenuList((prevState) => {\n const menuItemsListCopy = cloneDeep(prevState);\n menuItemsListCopy[menuIndex] = treeCopy;\n return menuItemsListCopy;\n });\n }\n }\n }\n setDefaultExpanded(nodeIds);\n if (currentExpandedNodeId) {\n currentExpandedNode = searchTree(treeCopy, currentExpandedNodeId);\n if (currentExpandedNode?.properties?.lazyLoad) {\n setLoadingChildren(true);\n const promises = [];\n const parentNodeRefKeys = [];\n const treeStructuresList = [];\n const searchObjList = [];\n const manyToManyPromises = [];\n const manyToManyValueMap = {};\n const manyToManyObjectList = [];\n const matchingNode = findNodeById(treeCopy, currentExpandedNodeId);\n if (matchingNode) {\n matchingNode.children = [];\n }\n currentExpandedNode.lazyLoadChildrenArr.forEach((searchMethod) => {\n parentNodeRefKeys.push(searchMethod.parentNodeRefKey);\n const childTree = treeStructureArr.find(\n (ts) =>\n ts.properties.catalogReturnObject ===\n searchMethod.catalogReturnObject\n );\n childTree && treeStructuresList.push(childTree);\n promises.push(\n executeQueryAdHoc(\n { data: searchMethod.data },\n searchMethod.apiMethodId\n )\n );\n searchObjList.push({\n wasLazyLoaded: currentExpandedNode?.properties?.lazyLoad\n });\n if (searchMethod.manyToManyJointEntityApiMethodId) {\n manyToManyObjectList.push({\n manyToManyKeys: searchMethod['manyToManyKeys'],\n apiMethodId: searchMethod.manyToManyJointEntityApiMethodId\n });\n } else {\n manyToManyObjectList.push(null);\n }\n });\n const updatedNodeObj = cloneDeep(currentExpandedNode.nodeObj);\n let errorExists = false;\n await Promise.all(\n promises.map((p) =>\n p.catch((e) => {\n errorExists = true;\n setLoadingChildren(false);\n })\n )\n ).then((responses) => {\n responses.forEach((response, index) => {\n if (response?.status === 200) {\n if (response?.data?.pageList?.length) {\n const manyToManyJoiningObject = manyToManyObjectList[index];\n if (manyToManyJoiningObject) {\n const childFilterElements = [];\n const items = response.data.pageList;\n manyToManyJoiningObject.manyToManyKeys.forEach((mtmKey) => {\n const searchNameKey = mtmKey.searchNameKey;\n const searchValueKey = mtmKey.searchValueKey;\n const searchValue = [];\n let formattedPropertyName =\n toUpperFirstChar(searchNameKey);\n items.forEach((item) => {\n if (item[searchValueKey]) {\n searchValue.push(item[searchValueKey]);\n }\n });\n childFilterElements.push({\n searchField: formattedPropertyName,\n searchValue: searchValue.toString(),\n searchOperator: 'IN'\n });\n });\n\n const data = getSearchObject(childFilterElements, 1, 50);\n const newIndex = Object.keys(manyToManyValueMap).length;\n manyToManyValueMap[newIndex] = {\n treeStructure: treeStructuresList[index],\n searchObj: searchObjList[index],\n joiningTableEntities: items,\n joiningObject: manyToManyJoiningObject\n };\n\n manyToManyPromises.push(\n executeQueryAdHoc(\n { data: data },\n manyToManyJoiningObject.apiMethodId\n )\n );\n } else {\n if (treeStructuresList[index]) {\n const items = response.data.pageList;\n items?.length &&\n items.forEach((item) => {\n const displayTree = formatTreeMenuItem(\n item,\n treeStructuresList[index],\n catalogObjects,\n promotedEntities,\n null,\n searchObjList[index].wasLazyLoaded\n );\n displayTree.parentId = currentExpandedNode.id;\n if (\n displayTree.wasLazyLoaded &&\n displayTree.properties\n ?.isUsingJointEntityAdditionalProperties\n ) {\n enqueueSnackbar(\n `Promote ${displayTree.properties?.joiningEntityName} search method to view additional joining properties`,\n {\n variant: 'warning',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n },\n preventDuplicate: true,\n autoHideDuration: 5000\n }\n );\n }\n if (matchingNode) {\n if (\n displayTree.wasLazyLoaded &&\n !displayTree.properties\n ?.isUsingJointEntityAdditionalProperties &&\n matchingNode.children.some(\n (child) =>\n child?.nodeObj?.businessObjectKey &&\n child?.nodeObj?.businessObjectKey ===\n displayTree?.nodeObj?.businessObjectKey\n )\n ) {\n return;\n }\n matchingNode.children.push(displayTree);\n }\n });\n }\n }\n const parentNodeCatalogObjKey = parentNodeRefKeys[index];\n if (parentNodeCatalogObjKey) {\n updatedNodeObj[parentNodeCatalogObjKey] =\n response.data.pageList;\n }\n }\n }\n });\n });\n\n await Promise.all(\n manyToManyPromises.map((p) =>\n p.catch((e) => {\n errorExists = true;\n setLoadingChildren(false);\n })\n )\n ).then((responses) => {\n responses.forEach((response, index) => {\n if (response?.status === 200) {\n if (response?.data?.pageList?.length) {\n const manytoManyValue = manyToManyValueMap[index];\n if (manytoManyValue) {\n const joiningEntityCatalogObjectKey =\n manytoManyValue.treeStructure?.properties\n ?.joiningEntityCatalogObjectKey;\n const items = response.data.pageList;\n manytoManyValue.joiningTableEntities.forEach(\n (entityRow) => {\n const manyToManyJoiningObject =\n manytoManyValue.joiningObject;\n if (\n manyToManyJoiningObject &&\n entityRow.hasOwnProperty(\n joiningEntityCatalogObjectKey\n )\n ) {\n manyToManyJoiningObject.manyToManyKeys.forEach(\n (mtmKey) => {\n const searchValueKey = mtmKey.searchValueKey;\n const searchItemIdentifier =\n mtmKey.searchItemIdentifier;\n if (entityRow[searchValueKey]) {\n entityRow[joiningEntityCatalogObjectKey] =\n items.find(\n (item) =>\n item[searchItemIdentifier] ===\n entityRow[searchValueKey]\n );\n }\n }\n );\n }\n }\n );\n\n manytoManyValue.joiningTableEntities.length &&\n manytoManyValue.joiningTableEntities.forEach((item) => {\n const displayTree = formatTreeMenuItem(\n item,\n manytoManyValue.treeStructure,\n catalogObjects,\n promotedEntities,\n null,\n manytoManyValue.searchObj.wasLazyLoaded\n );\n displayTree.parentId = currentExpandedNode.id;\n if (matchingNode) {\n if (\n displayTree.wasLazyLoaded &&\n !displayTree.properties\n ?.isUsingJointEntityAdditionalProperties &&\n matchingNode.children.some((child) => {\n const joiningEntityCatalogObjectKey =\n child.properties?.joiningEntityCatalogObjectKey;\n if (displayTree?.nodeObj) {\n return false;\n }\n return (\n child?.nodeObj?.[joiningEntityCatalogObjectKey]\n ?.businessObjectKey ===\n displayTree?.nodeObj?.[\n joiningEntityCatalogObjectKey\n ]?.businessObjectKey\n );\n })\n ) {\n return;\n }\n matchingNode.children.push(displayTree);\n }\n });\n }\n }\n }\n });\n });\n\n if (matchingNode) {\n // Property to be used to signal that lazy load for children request is completed\n matchingNode.completedLoadingChildren = true;\n }\n if (currentExpandedNode.lazyLoadChildrenArr.length) {\n if (matchingNode) {\n matchingNode.nodeObj = updatedNodeObj;\n matchingNode.isExpanded = true;\n if (errorExists) {\n matchingNode.errorRetrievingChildren = true;\n }\n }\n setMenuList((prevState) => {\n const menuItemsListCopy = cloneDeep(prevState);\n menuItemsListCopy[menuIndex] = treeCopy;\n return menuItemsListCopy;\n });\n setLoadingChildren(false);\n }\n } else {\n const foundNode = findNodeById(treeCopy, currentExpandedNodeId);\n if (foundNode) {\n foundNode.isExpanded = true;\n } else {\n foundNode.isExpanded = false;\n }\n setMenuList((prevState) => {\n const menuItemsListCopy = cloneDeep(prevState);\n menuItemsListCopy[menuIndex] = treeCopy;\n return menuItemsListCopy;\n });\n }\n }\n const parentNode = searchTree(treeCopy, selectedNodeParentId);\n const initialAllParentNodeIds = selectedNodeParentId\n ? [selectedNodeParentId]\n : [];\n const allParentNodeIds = findAllParentIds(\n treeCopy,\n parentNode,\n initialAllParentNodeIds\n );\n const selectedNodeShown = allParentNodeIds.every((id) =>\n nodeIds.includes(id)\n );\n if (\n isCurrentActiveTree &&\n allParentNodeIds.length &&\n !selectedNodeShown\n ) {\n setSelectedNodeIsHidden(true);\n } else {\n setSelectedNodeIsHidden(false);\n }\n },\n [\n defaultExpanded,\n tree,\n selectedNodeParentId,\n isCurrentActiveTree,\n menuIndex,\n setMenuList,\n treeStructureArr,\n executeQueryAdHoc,\n catalogObjects,\n promotedEntities,\n enqueueSnackbar\n ]\n );\n\n const getDefaultExpandedRecursively = useCallback((tree) => {\n if (!tree) return [];\n return tree.reduce((defaultExpandedIds, item) => {\n if (item?.isExpanded) {\n defaultExpandedIds.push(item.id);\n }\n if (item?.children?.length) {\n defaultExpandedIds = defaultExpandedIds.concat(\n getDefaultExpandedRecursively(item.children)\n );\n }\n return defaultExpandedIds;\n }, []);\n }, []);\n\n useEffect(() => {\n setTree(menuItems);\n }, [menuItems]);\n\n useEffect(() => {\n if (!tree) {\n return;\n }\n let expanded = [];\n if (tree?.isExpanded) {\n expanded.push(tree.id);\n }\n expanded = expanded.concat(getDefaultExpandedRecursively(tree.children));\n setDefaultExpanded(expanded);\n }, [getDefaultExpandedRecursively, tree]);\n\n useEffect(() => {\n if (!!searchTree(tree, selectedNodeId)) {\n setIsCurrentActiveTree(true);\n } else {\n setIsCurrentActiveTree(false);\n }\n }, [tree, selectedNodeId]);\n\n useEffect(() => {\n setSelectedNodeIsHidden(false);\n }, [expandAllClicked]);\n\n if (!defaultExpanded) {\n return null;\n }\n\n return (\n <TreeView\n key={tree}\n className={classes.root}\n defaultCollapseIcon={\n <FluentIcon\n size='small'\n component={CaretUpSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n expanded={defaultExpanded || []}\n onNodeToggle={handleNodeExpansion}\n defaultExpandIcon={\n <FluentIcon\n size='small'\n component={CaretDownSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n // onNodeSelect={handleSelectedNode}\n selected={selectedNodeId}\n >\n {tree && renderTree(tree)}\n </TreeView>\n );\n};\n","import React, { useCallback } from 'react';\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport { InquiryTreeMenu } from './InquiryTreeMenu';\nimport clsx from 'clsx';\nimport NoEntityOpenedUrl from '../assets/unityIcons/NoEntityOpened.svg';\nimport { SvgIcon } from '../utilities/iconLibrary/SvgIcon';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n overflowX: 'auto'\n },\n nodeContainer: {\n width: '100%'\n },\n loader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n empty: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n emptyIcon: {\n textAlign: 'center'\n },\n emptyIconText: {\n color: theme.palette.secondary\n }\n}));\n\nexport const NodeList = (props) => {\n const {\n menuItemsList,\n onSelectNode,\n onDropNode,\n selectedNodeId,\n selectedNodeParentId,\n expandAllClicked,\n classes: classProps,\n menuLoading,\n nodesRequested,\n sidebarExpanded,\n executeQueryAdHoc,\n catalogObjects,\n promotedEntities,\n treeStructureArr,\n setMenuList,\n treeViewMode\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n\n const handleSelectNode = useCallback(\n (selectedNode, menuIndex, selectedTree) => {\n onSelectNode(selectedNode, menuIndex, selectedTree);\n },\n [onSelectNode]\n );\n\n return (\n <div\n className={clsx(\n classes.root,\n root,\n !!!menuItemsList?.length && !menuLoading && classes.empty\n )}\n >\n {!!!menuItemsList?.length && !menuLoading && (\n <div className={classes.emptyIcon}>\n <SvgIcon src={NoEntityOpenedUrl} size={42} />\n <Typography variant='subtitle1' className={classes.emptyIconText}>\n No Entity Opened\n </Typography>\n </div>\n )}\n {menuItemsList?.length > 0 &&\n menuItemsList.map((menuItems, index) => (\n <div key={menuItems.id} className={classes.nodeContainer}>\n <InquiryTreeMenu\n menuItems={menuItems}\n onSelectNode={handleSelectNode}\n onDropNode={onDropNode}\n menuIndex={index}\n selectedNodeId={selectedNodeId}\n selectedNodeParentId={selectedNodeParentId}\n expandAllClicked={expandAllClicked}\n sidebarExpanded={sidebarExpanded}\n executeQueryAdHoc={executeQueryAdHoc}\n catalogObjects={catalogObjects}\n promotedEntities={promotedEntities}\n treeStructureArr={treeStructureArr || []}\n setMenuList={setMenuList}\n treeViewMode={treeViewMode}\n />\n </div>\n ))}\n {menuLoading && (\n <div className={classes.loader}>\n <NodeLoader loading={menuLoading} nodesRequested={nodesRequested} />\n </div>\n )}\n </div>\n );\n};\n","import {\n ChevronDownIcon,\n ChevronUpIcon,\n ClearIcon\n} from '@fluentui/react-icons';\nimport {\n LinearProgress,\n makeStyles,\n Typography,\n Card,\n Collapse,\n Divider\n} from '@material-ui/core';\nimport { cloneDeep, orderBy } from 'lodash';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useTranslation } from 'react-i18next';\nimport {\n collapseAllNodes,\n constructPreloadedTree,\n getSearchValueString\n} from '../utilities/tree/TreeUtilities';\nimport { expandAllNodes } from '../utilities/tree/TreeUtilities';\nimport { Form } from '../utilities/form';\nimport { formatTreeMenuItem } from '../utilities/tree/TreeUtilities';\nimport { getSearchIdentifiers } from '../utilities/search/SearchUtilities';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\nimport { InquiryAdvancedSearch } from './search/InquiryAdvancedSearch';\nimport { InquiryDashboard } from './dashboard/InquiryDashboard';\nimport {\n InquiryHeaderSecondary,\n InquiryHeaderSecondaryTarget\n} from '../utilities/utilityBar/InquiryHeaderSecondary';\nimport { InquiryNodeControls } from './inquiryBar/InquiryNodeControls';\nimport { InquirySearchContainer } from './search/InquirySearchContainer';\nimport { InquiryWrapper } from './InquiryWrapper';\nimport { LayoutUnit } from '../layout/LayoutUnit';\nimport { makeTreeStructure } from '../utilities/tree/TreeUtilities';\nimport { NodeDetails } from './NodeDetails';\nimport { NodeList } from './NodeList';\nimport { OpenPage } from '../UI/templates/OpenPage';\nimport { PageContainer } from '../page/PageContainer';\nimport { pluralize } from '../utilities/input/StringUtilities';\nimport { PrimaryActionHeader } from '../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { searchForMatchingNode } from '../utilities/tree/TreeUtilities';\nimport { useActions } from '../hooks/useActions';\nimport { v4 as uuid } from 'uuid';\nimport {\n NodeActionEnums,\n NodeActionTriggerEnums,\n TreeViewModeEnums\n} from '../enums/unitySystemEnums.ts';\nimport { RecentlyLoadedNodesTable } from './dashboard/RecentlyLoadedNodesTable';\nimport { ExecuteApiDialog } from './ExecuteApiDialog';\nimport { useSnackbar } from 'notistack';\nimport { executeQueryInstance } from '../udp/utilities/methodUtils';\nimport {\n useInquiryStore,\n useSetInitialInquiryMenuVisibility\n} from '../stores/inquiryStore';\nimport { evaluateRule, mapRule } from '../utilities/rules/RuleUtilities';\nimport GroupNode from '../models/GroupNode';\nimport { getSanitizedName } from '../utilities/entities/entityUtilities';\nimport { useShellStore } from '../stores/shellStore';\nimport { useActionStore } from '../stores/actionStore';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UdpTabs } from '../UI/navigation/tabs/UdpTabs';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { InquiryHeaderSecondaryAlertTarget } from '../utilities/utilityBar/InquiryHeaderSecondaryAlert';\nimport { FluentIconButton } from '../UI/inputs/buttons/FluentIconButton';\nimport clsx from 'clsx';\nimport { PageActionWrapper } from '../actions/PageActionWrapper';\nimport { WorkflowTreeMenu } from '../workflow/menus/WorkflowTreeMenu';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport {\n transformWorkflowPlayTree,\n updateWorkflowPlayNodeState\n} from '../utilities/workflow/workflowUtilities';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/useBuildEnvironment';\nimport { WorkflowContent } from '../workflow/WorkflowContent';\nimport LoadingOverlay from '../UI/loading/LoadingOverlay';\nimport { UnitStateType } from '../enums/workflowEnums';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { ConfigService } from '../configService';\nimport { usePromotedMethodEntity } from '../hooks/usePromotedMethodEntity';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`\n },\n mainWrapper: {\n padding: theme.spacing(2)\n },\n children: {\n height: 'calc(100vh - 150px)'\n },\n searchContainerRoot: {\n height: 'calc(100vh - 140px)'\n },\n nodeListRoot: {\n height: (props) => `calc(100vh - ${props.shellHidden ? '120px' : '176px'})`,\n overflowX: 'hidden'\n },\n nodeListRootLoaded: {\n height: (props) =>\n props.tree?.isPreloaded\n ? 'calc(100vh - 140px)'\n : `calc(100vh - ${props.shellHidden ? '130px' : '184px'})`,\n overflowX: 'hidden'\n },\n tabRoot: {\n width: '100%',\n minWidth: 0\n },\n nodeListRootLoading: {\n height: 'calc(100vh - 108px)'\n },\n chevronButtons: {\n display: 'flex',\n justifyContent: 'center',\n zIndex: theme.zIndex.appBar\n },\n chevronButtonClosed: {\n position: 'absolute',\n left: '50%',\n top: 14,\n marginLeft: -13,\n zIndex: theme.zIndex.appBar\n },\n entityHeader: {\n position: 'relative',\n zIndex: theme.zIndex.appBar,\n boxShadow:\n '0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 3px 3px 0px rgba(0, 0, 0, 0.12)'\n },\n nodeHeader: {\n boxShadow:\n '0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 3px 3px 0px rgba(0, 0, 0, 0.12)'\n },\n content: {\n overflowY: 'auto',\n height: 'calc(100vh - 50px)'\n },\n workflowMenuContent: {\n marginTop: theme.spacing(1),\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 120}px)`,\n overflowX: 'hidden',\n paddingTop: theme.spacing(1)\n },\n workflowTreeLoader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n }\n}));\n\nconst WORKFLOW_MAX_NETWORK_CALLS = 50;\n\nexport const InquiryContainer = (props) => {\n const {\n catalogObjects,\n executeQueryAdHoc,\n executeQueryWithParameters,\n executeGetDetailedTree,\n executeAddRecentlyLoadedNodes,\n initialSearchValue,\n litnHistory,\n litnHistoryLoading,\n pageId,\n pageData,\n pageLoading,\n pageError,\n productId,\n promotedEntities,\n promotedMethods,\n shellContext,\n setPageId,\n tree,\n treeId,\n treeLoading,\n treeError,\n user,\n autoCollapseNav = true,\n containerId = ''\n } = props;\n const shellHidden = useShellStore((state) => state.shellHidden);\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n shellHidden,\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const { t } = useTranslation();\n const { enqueueSnackbar } = useSnackbar();\n\n const [nodeLoaded, setNodeLoaded] = useState(false);\n const [searchValue, setSearchValue] = useState(initialSearchValue || '');\n const [clearSearchStr, setClearSearchStr] = useState(false);\n const [inSearch, setInSearch] = useState(false);\n const [selectedSearchRows, setSelectedSearchRows] = useState(null);\n const [menuList, setMenuList] = useState([]);\n const [menuLoading, setMenuLoading] = useState(false);\n const [selectedNode, setSelectedNode] = useState(null);\n const [selectedTree, setSelectedTree] = useState(null);\n const [selectedMenuIndex, setSelectedMenuIndex] = useState(null);\n const [disableMoveToTop, setDisableMoveToTop] = useState(true);\n const [nodeHistory, setNodeHistory] = useState([]);\n const [expandAllClicked, setExpandAllClicked] = useState(false);\n const [tabValue, setTabValue] = useState(0);\n const [selectedPageId, setSelectedPageId] = useState(null);\n const [nodesRequested, setNodesRequested] = useState([]);\n const [sidebarTabValue, setSidebarTabValue] = useState(0);\n const [advancedSearchItems, setAdvancedSearchItems] = useState([]);\n const [isAdvancedSearch, setIsAdvancedSearch] = useState(false);\n const [entityValue, setEntityValue] = useState('');\n const [treeViewMode, setTreeViewMode] = useState(TreeViewModeEnums.Classic);\n const [advancedSearchEntityValue, setAdvancedSearchEntityValue] =\n useState('');\n const [moveToTopLoading, setMoveToTopLoading] = useState(false);\n const [promotedMethodsToExecute, setPromotedMethodsToExecute] = useState([]);\n const [executeApiDialogOpen, setExecuteApiDialogOpen] = useState(false);\n const [executeApiData, setExecuteApiData] = useState(null);\n const [executeApiProgress, setExecuteApiProgress] = useState(false);\n const [isPreloaded, setIsPreloaded] = useState(false);\n const [headerTitle, setHeaderTitle] = useState('');\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const [primaryExpanded, setPrimaryExpanded] = useState(false);\n const [secondaryExpanded, setSecondaryExpanded] = useState(false);\n const [showToggle1, setShowToggle1] = useState(false);\n const [showToggle2, setShowToggle2] = useState(false);\n const [utilitySideBarWidth, setUtilitySideBarWidth] = useState(288);\n const [refreshNodeHeaderPageData, setRefreshNodeHeaderPageData] =\n useState(null);\n const [refreshPageHeaderPageData, setRefreshPageHeaderPageData] =\n useState(null);\n\n /* States for Workflow */\n const [inquiryWorkflowTabValue, setInquiryWorkflowTabValue] = useState(1);\n const [workflowMenuItemsList, setWorkflowMenuItemsList] = useState([]); // holds a list of workflow trees\n const [selectedWorkflowNode, setSelectedWorkflowNode] = useState(null);\n const [reloadWorkflowFromPage, setReloadWorkflowFromPage] = useState(false);\n const [getWorkflowPlayErrorCount, setGetWorkflowPlayErrorCount] = useState(0);\n const [getWorkflowInitializedCount, setGetWorkflowInitializedCount] =\n useState(0);\n const [workflowInitialized, setWorkflowInitialized] = useState(false);\n const [workflow, setWorkflow] = useState(null);\n // Checks if we should be hiding the Inquiry Left Menu\n useSetInitialInquiryMenuVisibility();\n const inquiryMenuHidden = useInquiryStore((state) => state.inquiryMenuHidden);\n\n const {\n setActionPanels,\n setShowInquiryHeaderActions,\n setMenuListState,\n setInquiryParams,\n closeAllSplitScreens\n } = useActions();\n\n const setSelectedNodeForStore = useActionStore(\n (state) => state.setSelectedNode\n );\n\n const setHideActions = useActionStore((state) => state.setHideActions);\n\n const setInquiryTitleHeader = useInquiryStore(\n (state) => state.setInquiryToolbarTitle\n );\n\n const setNavigationExpanded = useShellStore(\n (state) => state.setNavigationExpanded\n );\n\n const setSubHeaderActionHasChildren = useShellStore(\n (state) => state.setSubHeaderActionHasChildren\n );\n\n const inquiryTitle = useInquiryStore((state) => state.title);\n const workflowMap = useInquiryStore((state) => state.workflowMap);\n const setWorkflowMap = useInquiryStore((state) => state.setWorkflowMap);\n const workflowStarting = useInquiryStore((state) => state.workflowStarting);\n const setLocationState = useSetLocationState();\n\n const [{ data: explorePageData, loading: explorePageLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${tree?.explorePageId}`,\n {},\n !!!tree?.explorePageId,\n false\n );\n\n const orderBySequence = (list) => {\n return orderBy(list, ['sequenceNo'], ['asc']);\n };\n\n const inquiryWorkflow = useMemo(() => {\n if (workflowMap) {\n return workflowMap[containerId || 0];\n }\n }, [workflowMap, containerId]);\n\n const nodeHeaderPageIdToLoad = useMemo(() => {\n const nodeHeaderPages = selectedNode?.properties?.nodeHeaderPages;\n if (!nodeHeaderPages) {\n return null;\n }\n const orderedNodeHeaderPages = orderBySequence(nodeHeaderPages);\n let nodeHeaderPageId = null;\n for (let i = 0; i < orderedNodeHeaderPages.length; i++) {\n const nodeHeaderPage = orderedNodeHeaderPages[i];\n if (nodeHeaderPage?.propertyMapping && nodeHeaderPage?.jsonLogic) {\n const rule = mapRule(\n nodeHeaderPage?.propertyMapping,\n nodeHeaderPage?.jsonLogic\n );\n\n if (evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n nodeHeaderPageId = nodeHeaderPage.page?.pageId;\n break;\n } else {\n continue;\n }\n } else {\n nodeHeaderPageId = nodeHeaderPage.page?.pageId;\n break;\n }\n }\n return nodeHeaderPageId;\n }, [selectedNode]);\n\n const pageHeaderPageIdToLoad = useMemo(() => {\n if (!selectedPageId) {\n return null;\n }\n const matchingTab = selectedNode?.properties?.tabs?.find(\n (tab) => tab.page?.pageId === selectedPageId\n );\n if (!matchingTab) {\n return null;\n }\n const pageHeaderPages = matchingTab?.pageHeaderPages;\n if (!pageHeaderPages) {\n return null;\n }\n const orderedPageHeaderPages = orderBySequence(pageHeaderPages);\n let pageHeaderPageId = null;\n for (let i = 0; i < orderedPageHeaderPages.length; i++) {\n const pageHeaderPage = orderedPageHeaderPages[i];\n if (pageHeaderPage?.propertyMapping && pageHeaderPage?.jsonLogic) {\n const rule = mapRule(\n pageHeaderPage?.propertyMapping,\n pageHeaderPage?.jsonLogic\n );\n\n if (evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n pageHeaderPageId = pageHeaderPage.page?.pageId;\n break;\n } else {\n continue;\n }\n } else {\n pageHeaderPageId = pageHeaderPage.page?.pageId;\n break;\n }\n }\n return pageHeaderPageId;\n }, [selectedNode, selectedPageId]);\n\n const [{ data: nodeHeaderPageData, loading: nodeHeaderPageLoading }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${nodeHeaderPageIdToLoad}`,\n {},\n !!!nodeHeaderPageIdToLoad,\n false\n );\n\n const [{ data: pageHeaderPageData, loading: pageHeaderPageLoading }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${pageHeaderPageIdToLoad}`,\n {},\n !!!pageHeaderPageIdToLoad,\n false\n );\n\n /* Workflow Api calls */\n const [\n {\n data: workflowPlay,\n loading: workflowPlayLoading,\n error: workflowPlayError\n },\n reloadWorkflow\n ] = useAxiosGet(\n ConfigService.builderV1ApiUrl,\n `workflow/play/${inquiryWorkflow?.currentWorkflowPlayId}`,\n {},\n !!!inquiryWorkflow?.currentWorkflowPlayId,\n false\n );\n\n const [{ data: users }] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users?tenantId=${user?.currentTenantId || ''}`,\n {},\n !!!inquiryWorkflow?.inWorkflowMode && !!!user?.currentTenantId\n );\n\n const [{ data: groups }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `groups?tenantId=${user?.currentTenantId || ''}&productId=${\n ConfigService.config.UNITY_PRODUCT_ID\n }`,\n {},\n !!!inquiryWorkflow?.inWorkflowMode && !!!user?.currentTenantId\n );\n\n const handleReloadWorkflow = useCallback(async () => {\n setReloadWorkflowFromPage(true);\n if (inquiryWorkflow?.currentWorkflowPlayId) {\n await reloadWorkflow();\n }\n setReloadWorkflowFromPage(false);\n }, [reloadWorkflow, inquiryWorkflow]);\n\n const handleSelectedWorkflowNode = useCallback(\n async (node, menuIndex) => {\n if (node.isSelectable) {\n setSelectedWorkflowNode(node);\n await handleReloadWorkflow();\n }\n },\n [handleReloadWorkflow]\n );\n\n const searchItems = useMemo(() => {\n if (!tree) return [];\n\n const result = tree.treeStructure.reduce((items, node) => {\n let item = null;\n const matchingCatalogObject = catalogObjects?.find(\n (co) => co.catalogObjectName === node.properties.catalogReturnObject\n );\n const entityAttributes = matchingCatalogObject?.properties || null;\n const searchFilterElements = node.properties?.searchFilterElements;\n if (searchFilterElements) {\n searchFilterElements.forEach(\n (element) => (element.searchValue = searchValue)\n );\n }\n if (!node.parentId) {\n item = {\n apiMethodInstance: tree.apiMethodInstance,\n apiMethodId: tree.apiMethodInstance.apiMethodId,\n columns: entityAttributes || node.properties.searchTableColumns,\n searchFilterElements: searchFilterElements,\n id: `${uuid()}-${searchValue}`,\n catalogReturnObject: node.properties.catalogReturnObject,\n treeStructure: tree.treeStructure,\n associatedInquiryTree: null\n };\n } else {\n const associatedInquiryTree = node.properties?.associatedInquiryTree;\n if (associatedInquiryTree && node.properties?.isPrimarySearch) {\n item = {\n apiMethodInstance: associatedInquiryTree.apiMethodInstance,\n apiMethodId: associatedInquiryTree.apiMethodInstance?.apiMethodId,\n columns: entityAttributes || node.properties.searchTableColumns,\n searchFilterElements: searchFilterElements,\n id: `${uuid()}-${searchValue}`,\n catalogReturnObject: node.properties.catalogReturnObject,\n treeStructure: associatedInquiryTree.treeStructure,\n associatedInquiryTree: associatedInquiryTree\n };\n }\n }\n if (item) {\n items.push(item);\n }\n return items;\n }, []);\n return result;\n }, [tree, searchValue, catalogObjects]);\n\n const entitySearchItems = useMemo(() => {\n if (!searchItems) {\n return [];\n }\n if (!entityValue?.value) {\n return searchItems;\n } else {\n return searchItems.filter(\n (item) => item.catalogReturnObject === entityValue.value\n );\n }\n }, [searchItems, entityValue]);\n\n const getLoadedNodeObject = useCallback(\n (\n apiMethodId,\n queryPayload,\n nodeLabel,\n catalogReturnObject,\n treeStructureId\n ) => {\n const loadedNode = {\n productId: productId,\n inquiryTreeId: treeId,\n userId: user.id,\n apiMethodId: apiMethodId,\n nodeDetails: {},\n queryPayload: {}\n };\n loadedNode.nodeDetails = {\n nodeLabel: nodeLabel,\n catalogReturnObject: catalogReturnObject,\n treeStructureId: treeStructureId\n };\n loadedNode.queryPayload = queryPayload;\n return loadedNode;\n },\n [treeId, user, productId]\n );\n\n const setAppNavigationExpanded = useCallback(\n (value) => {\n if (autoCollapseNav) {\n setNavigationExpanded(value);\n }\n },\n [autoCollapseNav, setNavigationExpanded]\n );\n\n const loadNodes = useCallback(\n (searchRows) => {\n if (searchRows && Object.keys(searchRows).length) {\n setSidebarTabValue(0);\n setNodeLoaded(true);\n setInSearch(false);\n setMenuLoading(true);\n const catalogObjectKeys = Object.keys(searchRows);\n const promises = [];\n const searchObjList = [];\n const loadedNodesList = [];\n const nodesRequestedArr = [];\n catalogObjectKeys.forEach((key) => {\n const searchObj = searchRows[key];\n const currentSearchTree = searchObj?.treeStructure.find(\n (tree) => tree?.properties?.catalogReturnObject === key\n );\n\n const lazyLoad = !!currentSearchTree?.properties?.lazyLoad;\n\n const rows = searchObj.rows;\n const searchIdentifier = searchObj.searchIdentifier;\n const apiMethodId = searchObj.apiMethodId;\n const associatedInquiryTree = searchObj?.associatedInquiryTree;\n\n rows.forEach((row) => {\n const filterElements = [];\n const searchIdentifiers = searchIdentifier.split(',');\n searchIdentifiers.forEach((si) => {\n const formattedPropertyName =\n si.charAt(0).toUpperCase() + si.slice(1);\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: row[si] ?? '',\n searchOperator: '='\n });\n });\n const searchObject = getSearchObject(\n filterElements,\n 1,\n 50,\n !lazyLoad\n );\n const data = { data: searchObject };\n promises.push(executeQueryAdHoc(data, apiMethodId));\n nodesRequestedArr.push(nodesRequestedArr.length + 1);\n searchObjList.push({\n searchObject,\n apiMethodId,\n treeStructure: searchObj.treeStructure,\n catalogReturnObject: key,\n associatedInquiryTree,\n wasLazyLoaded: lazyLoad,\n menuTree: currentSearchTree\n });\n });\n });\n setNodesRequested(nodesRequestedArr);\n Promise.all(promises).then((responses) => {\n const updatedMenuList = menuList.slice();\n responses.forEach((response, index) => {\n if (response.status === 200) {\n if (response?.data?.pageList?.length) {\n const treeStructure = makeTreeStructure(\n searchObjList[index].treeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n response.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n searchObjList[index].associatedInquiryTree,\n searchObjList[index].wasLazyLoaded\n );\n if (\n displayTree &&\n !Array.isArray(displayTree) &&\n Object.keys(displayTree).length\n ) {\n updatedMenuList.push(displayTree);\n loadedNodesList.push(\n getLoadedNodeObject(\n searchObjList[index].apiMethodId,\n searchObjList[index].searchObject,\n displayTree?.properties?.nodeLabel,\n searchObjList[index].catalogReturnObject,\n treeStructure.id\n )\n );\n if (index === 0) {\n displayTree.properties.searchValue = getSearchValueString(\n response.data.pageList[0],\n displayTree?.properties?.searchIdentifier\n );\n if (selectedNode) {\n const updatedNodeHistory = nodeHistory.map(\n (node) => node\n );\n updatedNodeHistory.push(selectedNode);\n setNodeHistory(updatedNodeHistory);\n }\n setActionPanels(\n displayTree?.properties.panels,\n containerId\n );\n setSelectedNode(displayTree);\n }\n }\n }\n }\n });\n\n if (menuList.length) {\n setSelectedMenuIndex(menuList.length);\n } else {\n setSelectedMenuIndex(0);\n }\n executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n\n setAppNavigationExpanded(false);\n setMenuList(updatedMenuList);\n setSelectedSearchRows(null);\n setMenuLoading(false);\n setNodesRequested([]);\n setSearchValue('');\n setClearSearchStr(true);\n });\n }\n },\n [\n menuList,\n executeQueryAdHoc,\n catalogObjects,\n selectedNode,\n nodeHistory,\n getLoadedNodeObject,\n executeAddRecentlyLoadedNodes,\n promotedEntities,\n setActionPanels,\n setAppNavigationExpanded,\n containerId\n ]\n );\n\n const handleCloseWorkflow = useCallback(() => {\n setWorkflowMap({\n [containerId || 0]: {\n inWorkflowMode: false,\n currentWorkflowPlayId: ''\n }\n });\n setHideActions(false);\n setSelectedWorkflowNode(null);\n setWorkflowMenuItemsList([]);\n setInquiryWorkflowTabValue(1);\n setGetWorkflowPlayErrorCount(0);\n setGetWorkflowInitializedCount(0);\n setWorkflowInitialized(false);\n setWorkflow(null);\n }, [setWorkflowMap, containerId, setHideActions]);\n\n // menus prop will only be passed from actions engine\n const handleRemoveMenuItem = useCallback(\n (menus) => {\n const updatedMenuList = menus ?? menuList.slice();\n updatedMenuList.splice(selectedMenuIndex, 1);\n setMenuList(updatedMenuList);\n setDisableMoveToTop(true);\n if (updatedMenuList?.length) {\n const newSelectedNode = updatedMenuList[0];\n setActionPanels(newSelectedNode?.properties.panels, containerId);\n setSelectedNode(newSelectedNode);\n setSelectedMenuIndex(0);\n } else {\n setActionPanels([], containerId);\n setSelectedNode(null);\n setSelectedMenuIndex(null);\n setNodeLoaded(false);\n closeAllSplitScreens();\n handleCloseWorkflow();\n }\n },\n [\n menuList,\n selectedMenuIndex,\n setActionPanels,\n closeAllSplitScreens,\n containerId,\n handleCloseWorkflow\n ]\n );\n\n const handleRecentlyLoadedNodeClick = useCallback(\n async (loadedNode, additionalAction = () => {}) => {\n setNodeLoaded(true);\n setMenuLoading(true);\n setSidebarTabValue(0);\n setNodesRequested([1]);\n const data = { data: loadedNode?.queryPayload };\n const currentTreeStructureArr = tree.treeStructure.filter(\n (node) =>\n loadedNode?.nodeDetails?.catalogReturnObject ===\n node.properties.catalogReturnObject\n );\n const currentTree =\n currentTreeStructureArr.find((t) => {\n if (t?.properties?.associatedInquiryTree?.treeStructure) {\n const foundTreeStructure =\n t?.properties?.associatedInquiryTree?.treeStructure.find(\n (n) => n.id === loadedNode?.nodeDetails?.treeStructureId\n );\n return foundTreeStructure;\n } else {\n return false;\n }\n }) || currentTreeStructureArr[0];\n // Update request data to be eager/lazy load based on current tree config\n if (currentTree) {\n if (currentTree.properties?.associatedInquiryTree) {\n const associatedTreeStructure =\n currentTree.properties.associatedInquiryTree?.treeStructure;\n const associatedTree = associatedTreeStructure.find(\n (node) => node.id === loadedNode?.nodeDetails?.treeStructureId\n );\n data.data.eagerLoad = !associatedTree?.properties?.lazyLoad;\n } else {\n data.data.eagerLoad = !currentTree?.properties?.lazyLoad;\n }\n }\n const apiMethodId = loadedNode?.apiMethodId;\n const response = await executeQueryAdHoc(data, apiMethodId).catch((e) => {\n console.error(e);\n });\n if (\n response?.status === 200 &&\n loadedNode?.nodeDetails?.catalogReturnObject\n ) {\n if (response?.data?.pageList?.length) {\n const matchingNode = tree?.treeStructure?.find(\n (node) =>\n node.properties.catalogReturnObject ===\n loadedNode?.nodeDetails?.catalogReturnObject\n );\n let nodeTreeStructure = tree?.treeStructure;\n if (matchingNode?.properties?.associatedInquiryTree) {\n nodeTreeStructure =\n matchingNode?.properties?.associatedInquiryTree.treeStructure;\n }\n const treeStructure = makeTreeStructure(\n nodeTreeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n response.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n matchingNode?.properties?.associatedInquiryTree,\n !data.data.eagerLoad\n );\n if (\n displayTree &&\n !Array.isArray(displayTree) &&\n Object.keys(displayTree).length\n ) {\n displayTree.properties.searchValue = getSearchValueString(\n response.data.pageList[0],\n displayTree?.properties?.searchIdentifier\n );\n\n if (selectedNode) {\n const updatedNodeHistory = nodeHistory.map((node) => node);\n updatedNodeHistory.push(selectedNode);\n setNodeHistory(updatedNodeHistory);\n }\n setActionPanels(displayTree?.properties.panels, containerId);\n setSelectedNode(displayTree);\n setAppNavigationExpanded(false);\n setMenuList([displayTree]);\n }\n setSelectedMenuIndex(0);\n setMenuLoading(false);\n setNodesRequested([]);\n }\n } else {\n // could not properly load the entity\n setMenuLoading(false);\n enqueueSnackbar(t(`Unable to load entity`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n additionalAction();\n },\n [\n tree,\n executeQueryAdHoc,\n catalogObjects,\n promotedEntities,\n selectedNode,\n setActionPanels,\n nodeHistory,\n enqueueSnackbar,\n t,\n setAppNavigationExpanded,\n containerId\n ]\n );\n\n const handleLoadNodes = useCallback(() => {\n loadNodes(selectedSearchRows);\n }, [selectedSearchRows, loadNodes]);\n\n const handleSingleNodeLoad = useCallback(\n (searchRow) => {\n loadNodes(searchRow);\n },\n [loadNodes]\n );\n\n const handleRowDoubleClick = useCallback(\n (rowData, catalogReturnObject) => {\n const node = {};\n const searchItem = searchItems.find(\n (item) => item.catalogReturnObject === catalogReturnObject\n );\n const identifiers =\n getSearchIdentifiers(catalogObjects, searchItem.catalogReturnObject) ||\n [];\n\n node[searchItem.catalogReturnObject] = {\n rows: [rowData],\n apiMethodId: searchItem.apiMethodId,\n searchIdentifier: identifiers.toString(),\n treeStructure: searchItem.treeStructure\n };\n loadNodes(node);\n },\n [loadNodes, searchItems, catalogObjects]\n );\n\n const clearNodes = useCallback(() => {\n setNodeLoaded(false);\n setMenuList([]);\n setActionPanels([], containerId);\n setSelectedNode(null);\n setSelectedMenuIndex(null);\n setNodeHistory([]);\n setTabValue(0);\n setSelectedPageId(null);\n setPageId(null);\n setHeaderTitle('');\n setNodesRequested([]);\n closeAllSplitScreens();\n handleCloseWorkflow();\n }, [\n setActionPanels,\n setPageId,\n closeAllSplitScreens,\n containerId,\n handleCloseWorkflow\n ]);\n\n const handlePrimaryAction = useCallback(() => {\n handleLoadNodes();\n }, [handleLoadNodes]);\n\n const handleSearch = useCallback((event) => {\n if (event.key === 'Enter') {\n setSearchValue(event.target.value);\n setIsAdvancedSearch(false);\n setInSearch(true);\n }\n }, []);\n\n const clearSearch = useCallback(() => {\n setInSearch(false);\n if (menuList.length > 0) {\n setShowToggle2(true);\n }\n setSearchValue('');\n setClearSearchStr(true);\n setSelectedSearchRows(null);\n }, [menuList]);\n\n const handleSelectedSearchRows = useCallback(\n (\n objectName,\n rows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n ) => {\n let searchRows = cloneDeep(selectedSearchRows);\n if (!searchRows) {\n searchRows = {};\n }\n searchRows[objectName] = {\n rows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n };\n setSelectedSearchRows(searchRows);\n },\n [selectedSearchRows]\n );\n\n const handleSelectedNode = useCallback(\n (newSelectedNode, menuIndex, selectedTree) => {\n setSelectedMenuIndex(menuIndex);\n setSelectedTree(selectedTree);\n setInSearch(false);\n if (newSelectedNode.properties.associatedTreeId) {\n setDisableMoveToTop(false);\n } else {\n setDisableMoveToTop(true);\n }\n if (selectedNode) {\n const updatedNodeHistory = nodeHistory?.map((node) => node) || [];\n updatedNodeHistory.push(selectedNode);\n setNodeHistory(updatedNodeHistory);\n }\n setActionPanels(newSelectedNode?.properties.panels, containerId);\n setSelectedNode(newSelectedNode);\n },\n [selectedNode, setActionPanels, nodeHistory, containerId]\n );\n\n const constructMenuItemForDroppedNode = useCallback(\n (\n loadPageNodeActions,\n targetNodeObj,\n sourceNodeObj,\n targetNodeEntityName,\n sourceNodeEntityName\n ) => {\n const menuItem = {\n children: [],\n id: uuid(),\n isExpanded: true,\n parentId: null,\n properties: {\n nodeLabel: '',\n tabs: [],\n searchValue: '',\n nodeSubLabel: null,\n defaultPageHeaderExpanded: 'hidden',\n defaultNodeHeaderExpanded: 'hidden',\n defaultIcon: {\n color: null,\n name: 'BranchCompareIcon',\n type: null\n },\n nodeActions: loadPageNodeActions,\n isDroppedLoadedPageNode: true,\n existingPageLoadEntities: [sourceNodeEntityName]\n },\n inquiryParams: [targetNodeObj, sourceNodeObj],\n // TODO: allow for use of targetNodeObj and sourceNodeObj for when config in Inquiry is added\n nodeObj: targetNodeObj\n };\n if (loadPageNodeActions?.length) {\n loadPageNodeActions.forEach((nodeAction) => {\n if (nodeAction?.dragEntityName === sourceNodeEntityName) {\n const tabObj = {\n id: uuid(),\n page: nodeAction.page,\n inquiryTreeRuleId: nodeAction.inquiryTreeRuleId || '',\n jsonLogic: nodeAction.jsonLogic || null,\n propertyIsCustomMapping: nodeAction.propertyIsCustomMapping || '',\n propertyMapping: nodeAction.propertyMapping || '',\n sequence: nodeAction.sequence || '1',\n requiredFieldMapping:\n nodeAction.parameters?.requiredFieldMapping || null\n };\n menuItem.properties.tabs.push(tabObj);\n }\n });\n }\n let nodeLabel = 'DnD Nodes';\n if (targetNodeEntityName === sourceNodeEntityName) {\n nodeLabel = pluralize(getSanitizedName(targetNodeEntityName));\n } else {\n nodeLabel = `${getSanitizedName(\n targetNodeEntityName\n )}/${getSanitizedName(sourceNodeEntityName)}`;\n }\n menuItem.properties.nodeLabel = nodeLabel;\n return menuItem;\n },\n []\n );\n\n const loadPageForDroppedNode = useCallback(\n (\n sourceNode,\n targetNode,\n loadPageNodeActions,\n targetNodeCatalogReturnObject,\n sourceNodeCatalogReturnObject\n ) => {\n // If the first drop has not occurred yet for a loaded page\n if (!targetNode?.properties?.isDroppedLoadedPageNode) {\n if (loadPageNodeActions.length) {\n setMoveToTopLoading(true);\n const orderedLoadPageNodeActions =\n orderBySequence(loadPageNodeActions);\n const pageMenuItem = constructMenuItemForDroppedNode(\n orderedLoadPageNodeActions,\n targetNode?.nodeObj,\n sourceNode?.nodeObj,\n targetNodeCatalogReturnObject,\n sourceNodeCatalogReturnObject\n );\n const updatedMenuList = cloneDeep(menuList);\n updatedMenuList.unshift(pageMenuItem);\n setActionPanels(updatedMenuList[0]?.properties.panels, containerId);\n setSelectedNode(updatedMenuList[0]);\n setMenuList(updatedMenuList);\n setMoveToTopLoading(false);\n }\n } else if (targetNode?.properties?.isDroppedLoadedPageNode) {\n setMoveToTopLoading(true);\n const updatedMenuList = cloneDeep(menuList);\n const targetMenuItem = updatedMenuList.find(\n (item) => item.id === targetNode.id\n );\n if (targetMenuItem) {\n const nodeLabel = targetMenuItem.properties?.nodeLabel;\n if (!nodeLabel.includes(sourceNodeCatalogReturnObject)) {\n targetMenuItem.properties.nodeLabel = `${nodeLabel}/${getSanitizedName(\n sourceNodeCatalogReturnObject\n )}`;\n }\n targetMenuItem.inquiryParams.push(sourceNode?.nodeObj);\n if (\n !targetNode?.properties?.existingPageLoadEntities?.includes(\n sourceNodeCatalogReturnObject\n ) &&\n loadPageNodeActions?.length\n ) {\n targetMenuItem.properties.existingPageLoadEntities.push(\n sourceNodeCatalogReturnObject\n );\n loadPageNodeActions.forEach((nodeAction) => {\n if (\n nodeAction?.dragEntityName === sourceNodeCatalogReturnObject\n ) {\n const tabObj = {\n id: uuid(),\n page: nodeAction.page,\n inquiryTreeRuleId: nodeAction.inquiryTreeRuleId || '',\n jsonLogic: nodeAction.jsonLogic || null,\n propertyIsCustomMapping:\n nodeAction.propertyIsCustomMapping || '',\n propertyMapping: nodeAction.propertyMapping || '',\n sequence: nodeAction.sequence || '1',\n requiredFieldMapping:\n nodeAction.parameters?.requiredFieldMapping || null\n };\n targetMenuItem.properties.tabs.push(tabObj);\n }\n });\n }\n setActionPanels(targetMenuItem?.properties.panels, containerId);\n setSelectedNode(targetMenuItem);\n }\n setMenuList(updatedMenuList);\n setMoveToTopLoading(false);\n }\n },\n [constructMenuItemForDroppedNode, menuList, setActionPanels, containerId]\n );\n\n const handleDroppedNodeForExecuteApi = useCallback(\n (\n sourceNode,\n targetNode,\n executeApiNodeActions,\n sourceNodeType,\n targetNodeType,\n sourceNodeMenuIndex,\n targetNodeMenuIndex\n ) => {\n if (!promotedMethods?.length) {\n return;\n }\n const apiMethodIds = executeApiNodeActions.map(\n (eana) => eana.actionValue\n );\n const pmte = promotedMethods.filter((method) =>\n apiMethodIds.includes(method?.apiMethodId)\n );\n setExecuteApiData({\n source: sourceNode?.nodeObj,\n target: targetNode?.nodeObj,\n sourceNodeType,\n targetNodeType,\n sourceNodeMenuIndex,\n targetNodeMenuIndex\n });\n setPromotedMethodsToExecute(pmte);\n setExecuteApiDialogOpen(true);\n },\n [promotedMethods]\n );\n\n const handleCloseExecuteApiDialog = useCallback(() => {\n setExecuteApiData(null);\n setPromotedMethodsToExecute([]);\n setExecuteApiDialogOpen(false);\n }, []);\n\n const handleMenuTreesRefresh = useCallback(\n async (menuIndexes) => {\n if (!menuList.length) {\n return;\n }\n const updatedMenuList = menuList.slice();\n const promises = [];\n let apiMethodId = tree.apiMethodInstance.apiMethodId;\n let workingTree = tree;\n let assocInquiryTreeMap = {};\n let searchObjList = [];\n if (!menuIndexes?.length) {\n menuIndexes = [selectedMenuIndex];\n }\n menuIndexes.forEach((index) => {\n const menuTree = menuList[index];\n if (menuTree) {\n const { properties, associatedInquiryTree } = menuTree;\n const { filterElements } = properties;\n\n if (associatedInquiryTree) {\n apiMethodId = associatedInquiryTree.apiMethodInstance.apiMethodId;\n workingTree = associatedInquiryTree;\n assocInquiryTreeMap[index] = associatedInquiryTree;\n }\n const lazyLoad = !!workingTree?.properties?.lazyLoad;\n\n const searchObject = getSearchObject(\n filterElements,\n 1,\n 50,\n !lazyLoad\n );\n const data = { data: searchObject };\n promises.push(executeQueryAdHoc(data, apiMethodId));\n searchObjList.push({\n wasLazyLoaded: lazyLoad\n });\n }\n });\n\n await Promise.all(promises.map((p) => p.catch((e) => e))).then(\n (responses) => {\n responses.forEach((response, index) => {\n if (response.status === 200) {\n if (response?.data?.pageList?.length) {\n const treeStructure = makeTreeStructure(\n workingTree.treeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n response.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n assocInquiryTreeMap[index],\n searchObjList[index].wasLazyLoaded\n );\n\n updatedMenuList[menuIndexes[index]] = displayTree;\n }\n }\n });\n }\n );\n const currentSelectedTree = updatedMenuList[selectedMenuIndex];\n const selectedNodeSearchIdentifier =\n selectedNode.properties.searchIdentifier || [];\n setMenuList(updatedMenuList);\n if (selectedNodeSearchIdentifier) {\n const matchingNode = searchForMatchingNode(\n currentSelectedTree,\n selectedNode.nodeObj,\n selectedNodeSearchIdentifier.split(',')\n );\n setActionPanels(matchingNode?.properties.panels, containerId);\n setSelectedNode(matchingNode);\n } else {\n setSelectedNode(selectedNode);\n }\n },\n [\n menuList,\n tree,\n selectedMenuIndex,\n catalogObjects,\n executeQueryAdHoc,\n selectedNode,\n promotedEntities,\n setActionPanels,\n containerId\n ]\n );\n\n const handleMenuTreesRefreshFromPage = useCallback(\n async (updateAllPreloadedTrees = false) => {\n if (!selectedNode) {\n return;\n }\n let selectedNodeIndex = -1;\n let apiMethodId = tree.apiMethodInstance.apiMethodId;\n let workingTree = tree;\n\n // selectedTree is always the top node of the tree that the current selectedNode is on\n if (selectedTree) {\n if (selectedTree.children.length > 0) {\n selectedNodeIndex = selectedTree.children.indexOf(selectedNode);\n }\n const { properties, associatedInquiryTree } = selectedTree;\n const { filterElements } = properties;\n\n if (associatedInquiryTree) {\n apiMethodId = associatedInquiryTree.apiMethodInstance.apiMethodId;\n workingTree = associatedInquiryTree;\n }\n const lazyLoad = !!workingTree?.properties?.lazyLoad;\n\n const searchObject = getSearchObject(filterElements, 1, 50, !lazyLoad);\n const data = { data: searchObject };\n let displayTree = null;\n let response = null;\n if (\n tree?.isPreloaded &&\n tree?.apiMethodInstance?.apiMethodInstanceId &&\n selectedTree.isGroupNode\n ) {\n response = await executeQueryInstance(\n { data: {} },\n tree.apiMethodInstance.apiMethodInstanceId\n );\n } else {\n response = await executeQueryAdHoc(data, apiMethodId);\n }\n if (response?.status === 200) {\n if (response?.data?.pageList?.length) {\n const treeStructure = makeTreeStructure(\n workingTree.treeStructure,\n 'id',\n 'parentId'\n );\n let responseObj = response.data.pageList[0];\n if (selectedTree.isGroupNode) {\n responseObj = response.data.pageList;\n }\n displayTree = formatTreeMenuItem(\n responseObj,\n treeStructure,\n catalogObjects,\n promotedEntities,\n associatedInquiryTree,\n lazyLoad\n );\n }\n }\n if (selectedTree.isGroupNode && selectedTree.children.length > 0) {\n displayTree.map((childNode) => {\n childNode.parentGroupId = selectedTree.id;\n childNode.parentId = selectedTree.id;\n childNode.parentGroupName = selectedTree.properties.label;\n });\n }\n const currentSelectedTree = displayTree;\n const selectedNodeSearchIdentifier =\n selectedNode.properties.searchIdentifier || '';\n setMenuList((prevState) => {\n const updatedMenuList = prevState.slice();\n if (updateAllPreloadedTrees && workingTree?.isPreloaded) {\n updatedMenuList.forEach((menuItem) => {\n const newGroupId = uuid();\n menuItem.id = newGroupId;\n // Update all group children parent ids to be the new group id\n menuItem.children?.forEach((childNode) => {\n childNode.parentGroupId = newGroupId;\n childNode.parentId = newGroupId;\n });\n });\n }\n if (selectedTree.isGroupNode) {\n if (\n selectedTree.children.length > 0 &&\n Array.isArray(displayTree)\n ) {\n updatedMenuList[selectedMenuIndex].children = displayTree;\n }\n if (!updateAllPreloadedTrees) {\n const newGroupId = uuid();\n updatedMenuList[selectedMenuIndex].id = newGroupId;\n // Update all group children parent ids to be the new group id\n updatedMenuList[selectedMenuIndex]?.children?.forEach(\n (childNode) => {\n childNode.parentGroupId = newGroupId;\n childNode.parentId = newGroupId;\n }\n );\n }\n } else if (!selectedTree.isGroupNode) {\n updatedMenuList[selectedMenuIndex] = displayTree;\n }\n return updatedMenuList;\n });\n if (selectedNodeSearchIdentifier) {\n let tree = currentSelectedTree;\n if (selectedTree.isGroupNode && selectedNodeIndex >= 0) {\n tree = currentSelectedTree[selectedNodeIndex];\n }\n const matchingNode = searchForMatchingNode(\n tree,\n selectedNode.nodeObj,\n selectedNodeSearchIdentifier.split(',')\n );\n setActionPanels(matchingNode?.properties.panels, containerId);\n setSelectedNode(matchingNode);\n } else if (selectedTree.isGroupNode && selectedNodeIndex >= 0) {\n setSelectedNode(displayTree[selectedNodeIndex]);\n } else {\n setSelectedNode(selectedNode);\n }\n }\n },\n [\n tree,\n selectedMenuIndex,\n catalogObjects,\n executeQueryAdHoc,\n selectedNode,\n promotedEntities,\n setActionPanels,\n containerId,\n selectedTree\n ]\n );\n\n const executeApiForDroppedNode = useCallback(\n async (value) => {\n setExecuteApiProgress(true);\n const { sourceNodeMenuIndex, targetNodeMenuIndex, ...apiData } =\n executeApiData;\n const response = await executeQueryWithParameters(\n { data: { requestBody: { ...apiData } } },\n value?.apiMethod?.apiMethodId\n ).catch((res) => {\n console.error(res);\n });\n if (response?.status === 200) {\n const menuIndexes = [sourceNodeMenuIndex];\n // if the menu indexes for the nodes are the same we only need to refresh 1 tree\n if (sourceNodeMenuIndex !== targetNodeMenuIndex) {\n menuIndexes.push(targetNodeMenuIndex);\n }\n handleMenuTreesRefresh(menuIndexes);\n }\n setExecuteApiProgress(false);\n handleCloseExecuteApiDialog();\n },\n [\n executeQueryWithParameters,\n handleCloseExecuteApiDialog,\n executeApiData,\n handleMenuTreesRefresh\n ]\n );\n\n const handleDroppedNode = useCallback(\n (sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {\n const sourceNodeCatalogReturnObject =\n sourceNode?.properties?.catalogReturnObject;\n const targetNodeCatalogReturnObject =\n targetNode?.properties?.catalogReturnObject;\n const targetNodeActions = targetNode?.properties?.nodeActions || [];\n const loadPageNodeActions = targetNodeActions.filter(\n (nodeAction) =>\n nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n nodeAction.actionTypeId === NodeActionEnums.Load_Inquiry_Page\n );\n // TODO: Implement query node actions\n const executeApiNodeActions = targetNodeActions.filter(\n (nodeAction) =>\n nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n nodeAction.actionTypeId === NodeActionEnums.Execute_Api &&\n sourceNodeCatalogReturnObject === nodeAction?.dragEntityName\n );\n // TODO: Implement workflow node actions\n const workflowNodeActions = targetNodeActions.filter(\n (nodeAction) =>\n nodeAction.triggerType === NodeActionTriggerEnums.On_Node_Drop &&\n nodeAction.actionTypeId === NodeActionEnums.Start_Workflow &&\n sourceNodeCatalogReturnObject === nodeAction?.dragEntityName\n );\n if (\n targetNodeActions.some(\n (tna) =>\n tna.dragEntityName === sourceNodeCatalogReturnObject &&\n tna.actionTypeId === NodeActionEnums.Execute_Api\n )\n ) {\n handleDroppedNodeForExecuteApi(\n sourceNode,\n targetNode,\n executeApiNodeActions,\n sourceNodeCatalogReturnObject,\n targetNodeCatalogReturnObject,\n sourceNodeMenuIndex,\n targetNodeMenuIndex\n );\n }\n if (\n targetNodeActions.some(\n (tna) =>\n tna.dragEntityName === sourceNodeCatalogReturnObject &&\n tna.actionTypeId === NodeActionEnums.Load_Inquiry_Page\n )\n ) {\n loadPageForDroppedNode(\n sourceNode,\n targetNode,\n loadPageNodeActions,\n targetNodeCatalogReturnObject,\n sourceNodeCatalogReturnObject\n );\n }\n },\n [loadPageForDroppedNode, handleDroppedNodeForExecuteApi]\n );\n\n const handleMoveToTop = useCallback(async () => {\n if (!selectedNode) {\n return;\n }\n\n const associatedTreeId = selectedNode.properties.associatedTreeId;\n\n if (!associatedTreeId) return;\n setMenuLoading(true);\n setMoveToTopLoading(true);\n let associatedInquiryTree = selectedNode.properties.associatedInquiryTree;\n if (!associatedInquiryTree) {\n const detailedTreeResponse = await executeGetDetailedTree(\n associatedTreeId\n );\n if (detailedTreeResponse.status === 200) {\n associatedInquiryTree = detailedTreeResponse.data;\n }\n }\n const lazyLoad = !!associatedInquiryTree?.properties?.lazyLoad;\n const filterElements = selectedNode.properties.filterElements;\n const apiMethodId = associatedInquiryTree.apiMethodInstance.apiMethodId;\n\n const searchObject = getSearchObject(filterElements, 1, 50, !lazyLoad);\n const data = { data: searchObject };\n const loadedNodesList = [];\n const response = await executeQueryAdHoc(data, apiMethodId).catch((res) => {\n enqueueSnackbar(t(`Unable to move to top: ${res?.response?.data}`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n });\n if (response?.status === 200) {\n if (response?.data?.pageList?.length) {\n const updatedMenuList = menuList.slice();\n const treeStructure = makeTreeStructure(\n associatedInquiryTree.treeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n response.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n associatedInquiryTree,\n lazyLoad\n );\n loadedNodesList.push(\n getLoadedNodeObject(\n apiMethodId,\n searchObject,\n displayTree?.properties?.nodeLabel,\n displayTree?.properties?.catalogReturnObject,\n treeStructure.id\n )\n );\n if (\n displayTree &&\n !Array.isArray(displayTree) &&\n Object.keys(displayTree).length\n ) {\n displayTree.properties.searchValue = getSearchValueString(\n response.data.pageList[0],\n displayTree?.properties?.searchIdentifier\n );\n\n if (selectedNode) {\n const updatedNodeHistory = nodeHistory.map((node) => node);\n updatedNodeHistory.push(selectedNode);\n setNodeHistory(updatedNodeHistory);\n }\n setActionPanels(displayTree?.properties.panels, containerId);\n setSelectedNode(displayTree);\n executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n updatedMenuList[selectedMenuIndex] = displayTree;\n setMenuList(updatedMenuList);\n }\n setDisableMoveToTop(true);\n }\n }\n setMenuLoading(false);\n setMoveToTopLoading(false);\n }, [\n selectedNode,\n executeQueryAdHoc,\n executeGetDetailedTree,\n menuList,\n catalogObjects,\n promotedEntities,\n getLoadedNodeObject,\n setActionPanels,\n executeAddRecentlyLoadedNodes,\n selectedMenuIndex,\n nodeHistory,\n containerId,\n enqueueSnackbar,\n t\n ]);\n\n const handleExpandAll = useCallback(() => {\n setMenuList((prevState) => {\n const updatedMenuList = cloneDeep(prevState);\n updatedMenuList.forEach((tree) => {\n expandAllNodes(tree);\n });\n return updatedMenuList;\n });\n setExpandAllClicked(!expandAllClicked);\n }, [expandAllClicked]);\n\n const handleCollapseAll = useCallback(() => {\n setMenuList((prevState) => {\n const updatedMenuList = cloneDeep(prevState);\n updatedMenuList.forEach((tree) => {\n collapseAllNodes(tree);\n });\n return updatedMenuList;\n });\n }, []);\n\n // @TODO: Add back click handling for move to top\n // const handleBackClick = useCallback(() => {\n // if (!nodeHistory.length) return;\n // const lastIndex = nodeHistory.length - 1;\n // const lastSelectedNode = nodeHistory[lastIndex];\n // setSelectedNode(lastSelectedNode);\n // const updatedNodeHistory = nodeHistory.map(node => node);\n // updatedNodeHistory.pop();\n // setNodeHistory(updatedNodeHistory);\n // }, [nodeHistory]);\n\n const inquiryTabList = useMemo(() => {\n if (!selectedNode || !selectedNode?.properties?.tabs) return [];\n const tabList = [];\n const orderedTabs = orderBySequence(selectedNode.properties.tabs);\n orderedTabs.forEach((tab) => {\n if (tab?.propertyMapping && tab?.jsonLogic) {\n const rule = mapRule(tab?.propertyMapping, tab?.jsonLogic);\n\n if (!evaluateRule(rule, selectedNode.nodeObj, null, false)) {\n return;\n }\n }\n\n let label = '';\n if (tab?.displayName && tab?.displayName.trim()) {\n label = tab?.displayName.trim();\n } else if (tab?.page?.name && tab?.page?.name.trim()) {\n label = tab?.page?.name.trim();\n }\n\n const page = {\n label: label,\n icon: null,\n pageId: tab?.page?.pageId || null,\n trees: tab?.trees || [],\n requiredFieldMapping: tab?.requiredFieldMapping || {},\n queryId: tab?.queryId || '',\n queryParamMapping: tab?.queryParamMapping || null\n };\n tabList.push(page);\n });\n setSelectedPageId(tabList[0]?.pageId);\n return tabList;\n }, [selectedNode]);\n\n const handlePageChange = useCallback(\n (event, value) => {\n setTabValue(value);\n if (selectedPageId !== inquiryTabList[value]?.pageId) {\n setSelectedPageId(inquiryTabList[value]?.pageId);\n }\n },\n [inquiryTabList, selectedPageId]\n );\n\n const handleLoadingSpecificNode = useCallback(\n async (obj) => {\n setMenuLoading(true);\n setNodesRequested([1]);\n const currentTabValue = inquiryTabList?.length\n ? inquiryTabList[tabValue]\n : null;\n let error = false;\n let errorMessage = t(`Unable to load entity`);\n if (!obj?.businessObjectKey) {\n error = true;\n errorMessage = t(`Unable to load entity: No Business Object Key`);\n } else if (!currentTabValue?.trees?.length) {\n error = true;\n errorMessage = t(`Unable to load entity: No Trees Configured for Tab`);\n }\n\n if (error) {\n setMenuLoading(false);\n setNodesRequested([]);\n enqueueSnackbar(errorMessage, {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n return;\n }\n\n const fullyQualifiedName = obj.businessObjectKey.split('|')[0];\n const sanitizedName = getSanitizedName(fullyQualifiedName);\n const matchingCtlgFullyQualifiedNameComponent = catalogObjects.find(\n (domain) => domain.catalogObjectName === fullyQualifiedName\n );\n const catObjName = matchingCtlgFullyQualifiedNameComponent\n ? fullyQualifiedName\n : sanitizedName;\n\n const matchingTabValueTree = currentTabValue.trees.find(\n (tabTree) => tabTree.catalogReturnObject === catObjName\n );\n\n if (!matchingTabValueTree) {\n setMenuLoading(false);\n setNodesRequested([]);\n enqueueSnackbar(\n t(\n `Unable to load entity: Incorrect tree(s) configured for Node trying to load`\n ),\n {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n }\n );\n return;\n }\n let nodeTree = null;\n const detailedTreeResponse = await executeGetDetailedTree(\n matchingTabValueTree.treeId\n );\n if (detailedTreeResponse.status === 200) {\n nodeTree = detailedTreeResponse.data;\n } else {\n setMenuLoading(false);\n setNodesRequested([]);\n enqueueSnackbar(\n t(`Unable to load entity: Tree for item failed to load`),\n {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n }\n );\n return;\n }\n\n if (!nodeTree) {\n setMenuLoading(false);\n setNodesRequested([]);\n enqueueSnackbar(\n t(`Unable to load entity: Tree for item failed to load`),\n {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n }\n );\n return;\n }\n\n const searchIdentifiers = getSearchIdentifiers(\n catalogObjects,\n catObjName\n );\n\n const filterElements = [];\n const searchValues = [];\n searchIdentifiers.forEach((searchIdentifier) => {\n const searchField = searchIdentifier\n ? searchIdentifier.charAt(0).toUpperCase() + searchIdentifier.slice(1)\n : '';\n filterElements.push({\n searchField: searchField,\n searchOperator: '=',\n searchValue: obj[searchIdentifier] ?? ''\n });\n searchValues.push(obj[searchIdentifier]);\n });\n const apiMethodId = nodeTree.apiMethodInstance.apiMethodId;\n const lazyLoad = !!nodeTree?.properties?.lazyLoad;\n\n const searchObject = getSearchObject(filterElements, 1, 50, !lazyLoad);\n const data = { data: searchObject };\n // const loadedNodesList = [];\n const searchResponse = await executeQueryAdHoc(data, apiMethodId);\n if (searchResponse.status === 200) {\n if (searchResponse?.data?.pageList?.length) {\n const treeStructure = makeTreeStructure(\n nodeTree.treeStructure,\n 'id',\n 'parentId'\n );\n const displayTree = formatTreeMenuItem(\n searchResponse.data.pageList[0],\n treeStructure,\n catalogObjects,\n promotedEntities,\n nodeTree,\n lazyLoad\n );\n // loadedNodesList.push(\n // getLoadedNodeObject(\n // apiMethodId,\n // searchObject,\n // displayTree?.properties?.nodeLabel,\n // displayTree?.properties?.catalogReturnObject,\n // treeStructure.id\n // )\n // );\n // executeAddRecentlyLoadedNodes({ data: loadedNodesList });\n setMenuList((prevState) => [...prevState, displayTree]);\n setNodesRequested([]);\n setMenuLoading(false);\n }\n }\n },\n [\n inquiryTabList,\n tabValue,\n catalogObjects,\n enqueueSnackbar,\n t,\n executeGetDetailedTree,\n executeQueryAdHoc,\n // getLoadedNodeObject,\n promotedEntities\n // executeAddRecentlyLoadedNodes\n ]\n );\n\n const handleSideBarValueChange = useCallback((value) => {\n setSidebarTabValue(value);\n }, []);\n\n const handleAdvancedSearchClick = useCallback(\n (values, selectedSearchOperators, entity, lookupPropertyNames) => {\n setIsAdvancedSearch(true);\n setInSearch(true);\n const foundSearchItem = searchItems.find(\n (item) => item.catalogReturnObject === entity\n );\n const searchFilterElements = [];\n const searchFields = Object.keys(values).filter((field) =>\n field.startsWith(`${getSanitizedName(entity)}:`)\n );\n\n searchFields.forEach((searchField) => {\n const filterElement = {\n searchField: '',\n searchOperator: '',\n searchValue: ''\n };\n const configuredSearchField = searchField.replace(\n `${getSanitizedName(entity)}:`,\n ''\n );\n filterElement.searchField =\n configuredSearchField.charAt(0).toUpperCase() +\n configuredSearchField.slice(1);\n filterElement.searchOperator =\n (selectedSearchOperators &&\n selectedSearchOperators[configuredSearchField]?.value) ||\n '=';\n\n if (\n configuredSearchField.includes(':between') ||\n !values[searchField]\n ) {\n return;\n }\n\n // Handle between operator\n if (filterElement.searchOperator === 'BETWEEN') {\n let fromValue =\n values[searchField] instanceof Date\n ? values[searchField].toISOString()\n : values[searchField];\n let toValue =\n values[`${searchField}:between`] instanceof Date\n ? values[`${searchField}:between`].toISOString()\n : values[`${searchField}:between`];\n filterElement.searchValue = `${fromValue}${\n toValue ? `,${toValue}` : ''\n }`;\n } else {\n filterElement.searchValue =\n values[searchField] instanceof Date\n ? values[searchField].toISOString()\n : values[searchField];\n }\n // Handle lookup values\n if (lookupPropertyNames.includes(configuredSearchField)) {\n filterElement.searchValue = values[searchField]['value'];\n }\n searchFilterElements.push(filterElement);\n });\n\n foundSearchItem.searchFilterElements = searchFilterElements;\n setAdvancedSearchItems([foundSearchItem]);\n },\n [searchItems]\n );\n\n const entityList = useMemo(() => {\n if (!searchItems?.length) {\n return [];\n }\n return searchItems.reduce((entities, item) => {\n if (item.catalogReturnObject) {\n entities.push({\n label: getSanitizedName(item.catalogReturnObject),\n value: item.catalogReturnObject\n });\n }\n return entities;\n }, []);\n }, [searchItems]);\n\n const secondaryButtons = useMemo(() => {\n if (inSearch) {\n return [\n {\n component: ClearIcon,\n label: 'Clear Search',\n click: clearSearch,\n id: 1\n }\n ];\n }\n return [];\n }, [clearSearch, inSearch]);\n\n const pageHeightOffSet = useMemo(() => {\n let offset = 0;\n if (primaryExpanded) {\n offset = offset + 180;\n }\n if (secondaryExpanded) {\n offset = offset + 270;\n }\n\n if (selectedNode?.properties?.tabs?.length > 1) {\n offset = offset + 44;\n }\n\n return offset;\n }, [primaryExpanded, secondaryExpanded, selectedNode]);\n\n const onTreeViewModeChange = useCallback(() => {\n if (treeViewMode === TreeViewModeEnums.Classic) {\n setTreeViewMode(TreeViewModeEnums.Compact);\n } else if (treeViewMode === TreeViewModeEnums.Compact) {\n setTreeViewMode(TreeViewModeEnums.Classic);\n }\n }, [treeViewMode]);\n\n const selectedNodeChildren = useMemo(() => {\n if (!!!selectedNode?.children?.length) return [];\n return selectedNode?.children?.filter(\n (child) => !(child instanceof GroupNode)\n );\n }, [selectedNode]);\n\n const udpPageWidgetParams = useMemo(() => {\n const currentTabValue = inquiryTabList?.length\n ? inquiryTabList[tabValue]\n : null;\n return {\n pageId: currentTabValue?.pageId || '',\n entityName: selectedNode?.properties?.catalogReturnObject,\n contentId: selectedNode?.properties?.searchValue,\n nodeObj: selectedNode?.nodeObj,\n nodeId: selectedNode?.id,\n manytoManyNodeObjKey:\n selectedNode?.properties?.joiningEntityCatalogObjectKey,\n parentNodeObj: selectedNode?.parentNode?.nodeObj,\n parentGroupName: selectedNode?.parentGroupName,\n inquiryParams: selectedNode?.inquiryParams,\n inquiryNodeProperties: selectedNode?.properties,\n refreshTree: handleMenuTreesRefreshFromPage,\n loadInquiryNode: handleLoadingSpecificNode,\n requiredFieldsMap: currentTabValue?.requiredFieldMapping || {},\n displayLoadNodeButton: !!currentTabValue?.trees?.length,\n nodeChildren: selectedNodeChildren,\n catalogObjects,\n queryId: currentTabValue?.queryId,\n queryParamMapping: currentTabValue?.queryParamMapping,\n refreshNodeHeaderData: refreshNodeHeaderPageData,\n refreshPageHeaderData: refreshPageHeaderPageData,\n inquiryContainerId: containerId\n };\n }, [\n inquiryTabList,\n selectedNode,\n catalogObjects,\n handleMenuTreesRefreshFromPage,\n handleLoadingSpecificNode,\n tabValue,\n selectedNodeChildren,\n refreshNodeHeaderPageData,\n refreshPageHeaderPageData,\n containerId\n ]);\n\n const pageWidgetParams = useMemo(() => {\n const currentTabValue = inquiryTabList?.length\n ? inquiryTabList[tabValue]\n : null;\n return {\n pageId: currentTabValue?.pageId || '',\n entityName: selectedNode?.properties?.catalogReturnObject,\n contentId: selectedNode?.properties?.searchValue,\n nodeObj: selectedNode?.nodeObj,\n nodeId: selectedNode?.id,\n manytoManyNodeObjKey:\n selectedNode?.properties?.joiningEntityCatalogObjectKey,\n parentNodeObj: selectedNode?.parentNode?.nodeObj,\n parentGroupName: selectedNode?.parentGroupName,\n inquiryParams: selectedNode?.inquiryParams,\n inquiryNodeProperties: selectedNode?.properties,\n heightOffset: pageHeightOffSet,\n refreshTree: handleMenuTreesRefreshFromPage,\n loadInquiryNode: handleLoadingSpecificNode,\n requiredFieldsMap: currentTabValue?.requiredFieldMapping || {},\n displayLoadNodeButton: !!currentTabValue?.trees?.length,\n nodeChildren: selectedNodeChildren,\n catalogObjects,\n queryId: currentTabValue?.queryId,\n queryParamMapping: currentTabValue?.queryParamMapping,\n refreshNodeHeaderData: refreshNodeHeaderPageData,\n refreshPageHeaderData: refreshPageHeaderPageData,\n inquiryContainerId: containerId\n };\n }, [\n inquiryTabList,\n selectedNode,\n catalogObjects,\n handleMenuTreesRefreshFromPage,\n handleLoadingSpecificNode,\n pageHeightOffSet,\n tabValue,\n selectedNodeChildren,\n refreshNodeHeaderPageData,\n refreshPageHeaderPageData,\n containerId\n ]);\n\n const pageContainer = useMemo(() => {\n return (\n <PageContainer\n user={user}\n key={selectedNode?.properties?.searchValue}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={\n pageData?.isUdpPage ? udpPageWidgetParams : pageWidgetParams\n }\n disableMargins={true}\n />\n );\n }, [\n user,\n pageData,\n pageLoading,\n udpPageWidgetParams,\n selectedNode,\n pageWidgetParams\n ]);\n\n const handleSidebarExpandClick = useCallback(() => {\n setSidebarExpanded((expanded) => !expanded);\n }, []);\n\n const handleInquiryWorkflowTabChange = useCallback((value, tabValue) => {\n setInquiryWorkflowTabValue(tabValue);\n }, []);\n\n useEffect(() => {\n setSubHeaderActionHasChildren(false);\n }, [setSubHeaderActionHasChildren]);\n\n useEffect(() => {\n clearNodes();\n clearSearch();\n // If the treeId changes we want to clear all nodes and search\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [treeId]);\n\n useEffect(() => {\n if (shellContext) {\n shellContext.setSecondExtendedWindow(true);\n shellContext.setHeaderExpander(false);\n }\n }, [shellContext]);\n\n useEffect(() => {\n if (inSearch) {\n setHeaderTitle('');\n setPrimaryExpanded(false);\n setSecondaryExpanded(false);\n setShowToggle1(false);\n setShowToggle2(false);\n } else if (!inSearch && selectedNode) {\n setHeaderTitle(\n selectedNode?.isGroupNode\n ? selectedNode.properties?.label\n : selectedNode.properties?.headerTitle\n );\n if (\n !selectedNode.properties?.defaultNodeHeaderExpanded ||\n selectedNode.properties?.defaultNodeHeaderExpanded === 'hidden'\n ) {\n setShowToggle1(false);\n setPrimaryExpanded(false);\n } else {\n setShowToggle1(true);\n setPrimaryExpanded(\n selectedNode.properties?.defaultNodeHeaderExpanded\n ? selectedNode.properties?.defaultNodeHeaderExpanded === 'expanded'\n : false\n );\n }\n if (\n !selectedNode.properties?.defaultPageHeaderExpanded ||\n selectedNode.properties?.defaultPageHeaderExpanded === 'hidden'\n ) {\n setShowToggle2(false);\n setSecondaryExpanded(false);\n } else {\n setShowToggle2(true);\n setSecondaryExpanded(\n selectedNode.properties?.defaultPageHeaderExpanded\n ? selectedNode.properties?.defaultPageHeaderExpanded === 'expanded'\n : true\n );\n }\n }\n }, [inSearch, selectedNode]);\n\n useEffect(() => {\n if (!nodeLoaded) {\n setHeaderTitle('');\n setShowToggle1(false);\n setShowToggle2(false);\n setPrimaryExpanded(false);\n setSecondaryExpanded(false);\n }\n }, [nodeLoaded]);\n\n useEffect(() => {\n if (!sidebarExpanded) {\n setSidebarTabValue(0);\n }\n }, [sidebarExpanded]);\n\n useEffect(() => {\n if (setPageId) {\n if (selectedNode) {\n if (selectedNode?.properties?.tabs?.length > 1) {\n setPageId(selectedPageId || null);\n } else {\n const pageTabs = selectedNode?.properties?.tabs;\n if (pageTabs?.[0]) {\n setPageId(pageTabs[0].page?.pageId || null);\n } else {\n setPageId(null);\n }\n }\n } else {\n setPageId(null);\n }\n }\n }, [setPageId, selectedNode, selectedPageId]);\n\n useEffect(() => {\n if (initialSearchValue) {\n setIsAdvancedSearch(false);\n setInSearch(true);\n setSearchValue(initialSearchValue);\n }\n }, [initialSearchValue]);\n\n useEffect(() => {\n setTabValue(0);\n }, [selectedNode]);\n\n useEffect(() => {\n if (inSearch) {\n setShowInquiryHeaderActions(false);\n } else {\n setShowInquiryHeaderActions(true);\n }\n }, [inSearch, setShowInquiryHeaderActions]);\n\n useEffect(() => {\n setInquiryParams(\n {\n selectedNode,\n selectedNodeParent: selectedNode?.parentNode,\n refreshTree: handleMenuTreesRefresh\n },\n containerId\n );\n }, [selectedNode, handleMenuTreesRefresh, setInquiryParams, containerId]);\n\n useEffect(() => {\n setMenuListState({\n menuList: menuList,\n handleRemoveMenuItem: handleRemoveMenuItem,\n selectedMenuIndex\n });\n }, [setMenuListState, menuList, handleRemoveMenuItem, selectedMenuIndex]);\n\n useEffect(() => {\n if (tree) {\n const getPreloadedTree = async () => {\n setMenuLoading(true);\n setNodesRequested([1]);\n const response = await executeQueryInstance(\n { data: {} },\n tree.apiMethodInstance?.apiMethodInstanceId\n );\n if (response.status === 200) {\n if (response?.data?.pageList?.length) {\n const clonedTree = cloneDeep(tree.treeStructure);\n const treeStructure = makeTreeStructure(\n clonedTree,\n 'id',\n 'parentId'\n );\n const preloadedList = constructPreloadedTree(\n treeStructure,\n response.data.pageList,\n catalogObjects\n );\n setMenuList(preloadedList || []);\n if (preloadedList?.length) {\n setSelectedNode(preloadedList[0]);\n setSelectedTree(preloadedList[0]);\n setSelectedMenuIndex(0);\n }\n setAppNavigationExpanded(false);\n }\n }\n setMenuLoading(false);\n setNodesRequested([]);\n };\n\n if (tree) {\n // inquiry title is stored in the properties of the top node of the tree\n const topNode = tree?.treeStructure?.find((node) => !node.parentId);\n setInquiryTitleHeader(topNode?.properties?.inquiryTitle || '');\n }\n\n setIsPreloaded(tree.isPreloaded);\n if (tree.isPreloaded) {\n setNodeLoaded(true);\n getPreloadedTree();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tree, setAppNavigationExpanded, catalogObjects]);\n\n useEffect(() => {\n setSelectedNodeForStore(selectedNode || null);\n }, [selectedNode, setSelectedNodeForStore]);\n\n /* useEffects for workflow */\n\n useEffect(() => {\n if (workflowPlay) {\n setWorkflow(workflowPlay);\n }\n }, [workflowPlay]);\n\n // this is used for updating the state node for page use\n useEffect(() => {\n if (workflow) {\n setSelectedWorkflowNode((prevNode) => {\n if (!!prevNode) {\n const foundNode = workflow.workflowPlayNode?.children?.find(\n (child) => child.id === prevNode.id\n );\n if (!!foundNode) {\n const updatedNode = { ...prevNode };\n // TODO: using this to update state for now but may need to update\n // other properties of the selected node when we pull workflow tree\n updatedNode.properties.state = foundNode.state;\n return updatedNode;\n } else {\n return prevNode;\n }\n }\n });\n }\n }, [workflow]);\n\n useEffect(() => {\n if (workflow) {\n if (!workflowInitialized) {\n let initialized = false;\n if (workflow.workflowPlayNode?.children?.length) {\n const firstWorkflowNode = workflow.workflowPlayNode.children[0];\n if (firstWorkflowNode.state !== UnitStateType.Initial) {\n initialized = true;\n setWorkflowInitialized(true);\n }\n }\n\n if (\n !initialized &&\n getWorkflowInitializedCount < WORKFLOW_MAX_NETWORK_CALLS &&\n inquiryWorkflow?.currentWorkflowPlayId\n ) {\n const timer = setTimeout(async () => {\n await reloadWorkflow();\n setGetWorkflowInitializedCount((prevCount) => prevCount + 1);\n }, 1000);\n\n return () => clearTimeout(timer);\n }\n if (getWorkflowInitializedCount === WORKFLOW_MAX_NETWORK_CALLS) {\n enqueueSnackbar(t(`Unable to initialize workflow`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n }\n if (workflowInitialized) {\n const list = [];\n const updatedMenu = transformWorkflowPlayTree(\n workflow.workflowPlayNode\n );\n if (updatedMenu) {\n list.push(updatedMenu);\n }\n setWorkflowMenuItemsList(list);\n }\n }\n }, [\n workflow,\n workflowInitialized,\n reloadWorkflow,\n getWorkflowInitializedCount,\n inquiryWorkflow,\n enqueueSnackbar,\n t\n ]);\n\n useEffect(() => {\n if (inquiryWorkflow?.inWorkflowMode && inquiryWorkflowTabValue === 1) {\n setHideActions(true);\n } else if (\n inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 0\n ) {\n setHideActions(false);\n }\n }, [setHideActions, inquiryWorkflowTabValue, inquiryWorkflow]);\n\n useEffect(() => {\n if (!selectedWorkflowNode) {\n const menu = workflowMenuItemsList[0];\n // Use Task Id to find the first matching node in tree\n if (menu) {\n const firstSelectableMenuItem = menu?.children?.find(\n (item) => item.isSelectable\n );\n setSelectedWorkflowNode(firstSelectableMenuItem || null);\n if (autoCollapseNav) {\n setNavigationExpanded(false);\n }\n }\n }\n }, [\n // udpTaskId,\n workflowMenuItemsList,\n selectedWorkflowNode,\n setNavigationExpanded,\n autoCollapseNav\n ]);\n\n useEffect(() => {\n if (\n !!workflowPlayError &&\n getWorkflowPlayErrorCount < WORKFLOW_MAX_NETWORK_CALLS &&\n inquiryWorkflow?.currentWorkflowPlayId\n ) {\n const timer = setTimeout(() => {\n reloadWorkflow();\n setGetWorkflowPlayErrorCount((prevCount) => prevCount + 1);\n }, 1000);\n\n return () => clearTimeout(timer);\n }\n if (getWorkflowPlayErrorCount === WORKFLOW_MAX_NETWORK_CALLS) {\n enqueueSnackbar(t(`Unable to load workflow`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n }, [\n workflowPlayError,\n reloadWorkflow,\n getWorkflowPlayErrorCount,\n enqueueSnackbar,\n t,\n inquiryWorkflow\n ]);\n\n // Setting location state label so that if this page was saved to favorites\n // we can determine the bread crumb\n useEffect(() => {\n setLocationState({ label: t(inquiryTitle) || t('Inquiry') });\n }, [setLocationState, t, inquiryTitle]);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <LoadingOverlay open={workflowStarting} />\n <div key={treeId} className={classes.root}>\n {!inquiryMenuHidden && (\n <UtilitySideBar\n title={t(inquiryTitle) || t('Inquiry')}\n isUsingChildren={true}\n resizable={true}\n removePadding={true}\n removeTopLayoutUnit={true}\n onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n collapsedWidth={78}\n handleResize={(width) => setUtilitySideBarWidth(width)}\n hideTitleBar={inquiryWorkflow?.inWorkflowMode}\n >\n {moveToTopLoading && <LinearProgress />}\n {sidebarTabValue === 0 && (\n <>\n {inquiryWorkflow?.inWorkflowMode && (\n <>\n <UdpTabs\n value={inquiryWorkflowTabValue}\n onChange={handleInquiryWorkflowTabChange}\n tabList={[\n { label: t('Inquiry') },\n { label: t('Workflow') }\n ]}\n buttonWidth={'100%'}\n />\n <Divider />\n </>\n )}\n {(!inquiryWorkflow?.inWorkflowMode ||\n (inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 0)) && (\n <>\n <InquiryNodeControls\n remove={() => handleRemoveMenuItem(null)}\n moveToTop={handleMoveToTop}\n expandAll={handleExpandAll}\n collapseAll={handleCollapseAll}\n clearAll={clearNodes}\n switchTreeViewMode={onTreeViewModeChange}\n treeViewMode={treeViewMode}\n changeSideBarView={handleSideBarValueChange}\n handleKeyDown={handleSearch}\n disableMoveToTop={disableMoveToTop}\n entityList={entityList}\n entityValue={entityValue}\n setEntityValue={setEntityValue}\n hiddenControls={\n sidebarExpanded\n ? isPreloaded\n ? ['remove', 'clearAll']\n : []\n : isPreloaded\n ? ['remove', 'expandAll', 'clearAll', 'collapseAll']\n : ['remove', 'expandAll', 'clearAll', 'collapseAll']\n }\n showControls={!treeLoading && !treeError && nodeLoaded}\n showSearch={!treeLoading && !treeError}\n defaultValue={initialSearchValue}\n clearSearchStr={clearSearchStr}\n setClearSearchStr={setClearSearchStr}\n isPreloadedTree={isPreloaded}\n treeLoading={treeLoading}\n >\n {!treeLoading && treeError && (\n <div style={{ marginLeft: 4, marginBottom: 12 }}>\n <LayoutUnit unit='nudge' />\n <Typography>\n Error getting tree data from tree id\n </Typography>\n </div>\n )}\n </InquiryNodeControls>\n <NodeList\n menuItemsList={menuList}\n onSelectNode={handleSelectedNode}\n onDropNode={handleDroppedNode}\n selectedNodeId={selectedNode?.id ?? ''}\n selectedNodeParentId={selectedNode?.parentId ?? ''}\n expandAllClicked={expandAllClicked}\n classes={{\n root: !treeLoading\n ? nodeLoaded\n ? classes.nodeListRootLoaded\n : classes.nodeListRoot\n : classes.nodeListRootLoading\n }}\n menuLoading={menuLoading}\n nodesRequested={nodesRequested}\n sidebarExpanded={sidebarExpanded}\n executeQueryAdHoc={executeQueryAdHoc}\n catalogObjects={catalogObjects}\n promotedEntities={promotedEntities}\n treeStructureArr={tree?.treeStructure || []}\n setMenuList={setMenuList}\n treeViewMode={treeViewMode || TreeViewModeEnums.Classic}\n />\n </>\n )}\n </>\n )}\n {sidebarTabValue === 1 && (\n <InquiryAdvancedSearch\n entityList={entityList}\n entityValue={advancedSearchEntityValue}\n setEntityValue={setAdvancedSearchEntityValue}\n onSubmit={handleAdvancedSearchClick}\n currentNodeCatalogReturnObject={\n selectedNode?.properties?.catalogReturnObject\n }\n changeSideBarView={handleSideBarValueChange}\n catalogObjects={catalogObjects}\n tree={tree}\n executeQueryWithParameters={executeQueryWithParameters}\n />\n )}\n {inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 1 && (\n <div\n className={classes.workflowMenuContent}\n key={inquiryWorkflow?.currentWorkflowPlayId}\n >\n {workflowMenuItemsList?.length > 0 &&\n (!workflowPlayLoading || reloadWorkflowFromPage) &&\n workflowMenuItemsList.map((workflowMenuItems, index) => (\n <div\n key={workflowMenuItems.id}\n className={classes.nodeContainer}\n >\n <WorkflowTreeMenu\n menuItems={workflowMenuItems}\n onSelectNode={handleSelectedWorkflowNode}\n // onDropNode={handleDropNode}\n menuIndex={index}\n selectedNodeId={selectedWorkflowNode?.id}\n selectedNodeParentId={selectedWorkflowNode?.parentId}\n sidebarExpanded={sidebarExpanded}\n treeViewMode={TreeViewModeEnums.Classic}\n />\n </div>\n ))}\n {(workflowPlayLoading ||\n workflowPlayError ||\n !workflowInitialized) &&\n !reloadWorkflowFromPage && (\n <div className={classes.workflowTreeLoader}>\n <NodeLoader\n loading={\n workflowPlayLoading ||\n workflowPlayError ||\n !workflowInitialized\n }\n />\n </div>\n )}\n </div>\n )}\n </UtilitySideBar>\n )}\n <OpenPage\n disableGutters\n style={{\n position: 'relative',\n top: 0,\n width: `calc(100% - ${utilitySideBarWidth}px)`\n }}\n >\n <Form\n onSubmit={executeApiForDroppedNode}\n key={promotedMethodsToExecute}\n >\n <ExecuteApiDialog\n open={executeApiDialogOpen}\n handleCloseDialog={handleCloseExecuteApiDialog}\n apiMethods={promotedMethodsToExecute}\n progress={executeApiProgress}\n />\n </Form>\n <div className={classes.content}>\n {(!inquiryWorkflow?.inWorkflowMode ||\n (inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 0)) && (\n <InquiryWrapper nodeLoaded={false} collapsedWidth={32}>\n {(inSearch || nodeLoaded) && (\n <Card square>\n <PrimaryActionHeader\n key={`${selectedNode?.id}-${inSearch}`}\n title={headerTitle}\n buttonLabel={'Load'}\n single\n secondaryButtons={secondaryButtons}\n handleClick={handlePrimaryAction}\n hidePAB={nodeLoaded && !inSearch}\n allowAdditionalTitleComponent={true}\n additionalComponentId={containerId}\n />\n </Card>\n )}\n {!!selectedNode && (\n <Card square className={classes.nodeHeader}>\n <div>\n <Collapse in={primaryExpanded} timeout='auto'>\n {nodeHeaderPageIdToLoad && showToggle1 ? (\n <PageContainer\n user={user}\n key={nodeHeaderPageIdToLoad}\n pageData={nodeHeaderPageData}\n pageLoading={nodeHeaderPageLoading}\n widgetParams={{\n nodeObj: selectedNode?.nodeObj,\n nodeId: selectedNode?.id,\n selectedNode: selectedNode,\n setRefreshNodeHeaderPageData:\n setRefreshNodeHeaderPageData,\n inquiryContainerId: containerId\n }}\n disableMargins={true}\n loadingHeight={32}\n />\n ) : (\n <NodeDetails node={selectedNode} />\n )}\n </Collapse>\n\n {showToggle1 && (\n <div\n className={clsx(\n primaryExpanded\n ? classes.chevronButtons\n : classes.chevronButtonClosed\n )}\n >\n <FluentIconButton\n onClick={() => setPrimaryExpanded(!primaryExpanded)}\n icon={\n primaryExpanded ? ChevronUpIcon : ChevronDownIcon\n }\n />\n </div>\n )}\n </div>\n <Divider />\n <Collapse in={secondaryExpanded} timeout='auto'>\n <div className={classes.inquiryHeader}>\n {pageHeaderPageIdToLoad && showToggle2 ? (\n <PageContainer\n user={user}\n key={pageHeaderPageIdToLoad}\n pageData={pageHeaderPageData}\n pageLoading={pageHeaderPageLoading}\n widgetParams={{\n nodeObj: selectedNode?.nodeObj,\n nodeId: selectedNode?.id,\n selectedNode: selectedNode,\n setRefreshPageHeaderPageData:\n setRefreshPageHeaderPageData,\n inquiryContainerId: containerId\n }}\n disableMargins={true}\n loadingHeight={32}\n />\n ) : (\n <>\n <InquiryHeaderSecondaryTarget\n className={classes.actions}\n />\n <InquiryHeaderSecondaryAlertTarget\n className={classes.actions}\n />\n </>\n )}\n </div>\n </Collapse>\n {selectedNode?.properties?.tabs?.length > 1 && !inSearch ? (\n <UdpTabs\n value={tabValue}\n onChange={handlePageChange}\n tabList={inquiryTabList}\n />\n ) : null}\n </Card>\n )}\n {!!selectedNode && showToggle2 && (\n <Card square className={classes.entityHeader}>\n <div className={classes.chevronButtons}>\n <FluentIconButton\n onClick={() => setSecondaryExpanded(!secondaryExpanded)}\n icon={\n secondaryExpanded ? ChevronUpIcon : ChevronDownIcon\n }\n className={classes.icon}\n />\n </div>\n </Card>\n )}\n {!treeError && (\n <PageActionWrapper\n forPageContainer={true}\n splitScreenStateKey={'pageContainerSplitScreen'}\n >\n <div\n className={classes.mainWrapper}\n style={{ width: '100%' }}\n >\n {inSearch ? (\n <InquirySearchContainer\n searchItems={entitySearchItems}\n isAdvancedSearch={isAdvancedSearch}\n advancedSearchItems={advancedSearchItems}\n setSelectedSearchRows={handleSelectedSearchRows}\n catalogObjects={catalogObjects}\n loadSingleNode={handleSingleNodeLoad}\n onRowDoubleClick={handleRowDoubleClick}\n classes={{ root: classes.searchContainerRoot }}\n executeQueryAdHoc={executeQueryAdHoc}\n apiMethodInstanceId={\n tree?.apiMethodInstance?.apiMethodInstanceId\n } // The original apiMethodInstanceId that the tree uses\n />\n ) : !tree || !catalogObjects ? (\n <LinearProgress />\n ) : !nodeLoaded && !tree?.isPreloaded ? (\n tree?.explorePageId ? (\n <PageContainer\n user={user}\n key={selectedNode?.properties?.searchValue}\n pageData={explorePageData}\n pageLoading={explorePageLoading}\n widgetParams={{\n tree: tree,\n recentlyLoadedNodes: litnHistory,\n loading: litnHistoryLoading,\n onLoadedNodeClick: handleRecentlyLoadedNodeClick,\n tableHeight: 'calc(100vh - 172px)',\n catalogObjects\n }}\n disableMargins={true}\n />\n ) : (\n <InquiryDashboard\n treeId={treeId}\n recentlyLoadedNodeOnClick={\n handleRecentlyLoadedNodeClick\n }\n >\n <RecentlyLoadedNodesTable\n recentlyLoadedNodes={litnHistory}\n loading={litnHistoryLoading}\n onLoadedNodeClick={handleRecentlyLoadedNodeClick}\n tableHeight={'calc(100vh - 172px)'}\n tree={tree}\n />\n </InquiryDashboard>\n )\n ) : (\n selectedNode?.properties?.tabs?.length > 0 &&\n (selectedNode?.properties?.tabs?.length > 1\n ? pageId && pageContainer\n : pageId\n ? pageContainer\n : null)\n )}\n </div>\n </PageActionWrapper>\n )}\n {shellContext?.secondExtendedWindow && (\n <InquiryHeaderSecondary secondExtended>\n <div className={classes.information}>\n <div className={classes.summaryCard}>\n {/* Add Child component here for the Node header */}\n </div>\n </div>\n </InquiryHeaderSecondary>\n )}\n </InquiryWrapper>\n )}\n {inquiryWorkflow?.inWorkflowMode &&\n inquiryWorkflowTabValue === 1 && (\n <WorkflowContent\n selectedNode={selectedWorkflowNode}\n workflow={workflow}\n reloadWorkflow={handleReloadWorkflow}\n users={users}\n groups={groups}\n handleClose={handleCloseWorkflow}\n inquiryPageParams={\n pageData?.isUdpPage ? udpPageWidgetParams : pageWidgetParams\n }\n />\n )}\n </div>\n </OpenPage>\n </div>\n </DndProvider>\n );\n};\n\nInquiryContainer.propTypes = {\n user: PropTypes.object,\n shellContext: PropTypes.object,\n litnHistory: PropTypes.array,\n litnHistoryLoading: PropTypes.bool,\n tree: PropTypes.object,\n treeId: PropTypes.string,\n catalogObjects: PropTypes.array,\n executeQueryAdHoc: PropTypes.func,\n executeQueryWithParameters: PropTypes.func,\n executeGetDetailedTree: PropTypes.func,\n executeAddRecentlyLoadedNodes: PropTypes.func,\n treeLoading: PropTypes.bool,\n treeError: PropTypes.object,\n pageData: PropTypes.object,\n pageLoading: PropTypes.bool,\n pageError: PropTypes.object,\n setPageId: PropTypes.func,\n pageId: PropTypes.string,\n isValidWidget: PropTypes.func,\n productId: PropTypes.string,\n initialSearchValue: PropTypes.string,\n promotedEntities: PropTypes.array,\n promotedMethods: PropTypes.array\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { useAuthedUser } from '../utilities/auth/useAuthedUser';\nimport { InquiryContainer } from './InquiryContainer';\nimport { useActions } from '../hooks/useActions';\nimport { useShellStore } from '../stores/shellStore';\nimport { ConfigService } from '../configService';\nimport { useCatalogStore } from '../stores/catalogStore';\nimport { buildCatalogObjectList } from '../utilities/catalog/CatalogUtilities';\nimport { CircularProgress, makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: (props) =>\n props.loadingHeight ? props.loadingHeight : 'calc(100vh - 160px)'\n }\n}));\n\n/**\n * Required Props:\n * user - current unity user\n * productId - current product id of application\n * shellContext - context of the shell in the application. Will be used for some global actions (ie. collapse menu bar from within inquiry container)\n * litnHistory (loaded inquiry tree node history) - array of tree node objects to be used in the recently loaded nodes\n * litnHistoryLoading - request status of the litnHistory request\n * tree - tree object which contains the tree structure and its properties\n * treeLoading - request status of tree request\n * treeError - error status of tree request\n * treeId - id of the tree that's being loaded (retreived from URL)\n * catalogObjects - array of catalog items and it's relationship and properties\n * executeQueryAdHoc - search callback\n * executeQueryWithParameters - search callback with extra parameters\n * executeGetDetailedTree - callback to get detailed tree information for the associated tree\n * executeAddRecentlyLoadedNodes - callback to add loaded nodes to history\n * pageData - data for the page to be displayed in inquiry\n * pageLoading - boolean value for if a page is loading\n * pageError - error status of page request\n * setPageId - setter for setting pageId when it changes\n * pageId - id of page\n * initialSearchValue - query parameter representing a value to search upon loading of this inquiry page\n * promotedEntities - promoted entities for the catalog used in the inquiry tree\n * promotedMethods - promoted methods for the catalog used in the inquiry tree\n *\n * @param {*} props\n * @returns Inquiry\n */\nexport const Inquiry = (props) => {\n const {\n shellContext,\n treeId,\n searchValue,\n autoCollapseNav = true,\n useNewUdpTab = true,\n containerId = ''\n } = props;\n const classes = useStyles(props);\n const user = useAuthedUser();\n const { location } = props;\n const udpTreeId = treeId || location?.pathname?.replace('/inquiry/', '');\n let searchParamStr = location?.search;\n let searchParams = new URLSearchParams(searchParamStr);\n const initialSearchValue =\n searchValue ||\n (searchParams.has('searchValue') === true\n ? searchParams.get('searchValue')\n : '');\n const [pageId, setPageId] = useState(null);\n\n const {\n setCatalogEntities,\n setCatalogPromotedEntities,\n setActionPanels,\n setInquiryParams\n } = useActions();\n\n const currentApiCatalogId = useCatalogStore(\n (state) => state.currentApiCatalogId\n );\n const catalogsMap = useCatalogStore((state) => state.catalogsMap);\n const promotedMethodEntitiesMap = useCatalogStore(\n (state) => state.promotedMethodEntitiesMap\n );\n\n const setCurrentContainerId = useShellStore(\n (state) => state.setCurrentContainerId\n );\n\n const [\n { data: litnHistory, loading: litnHistoryLoading },\n refetchLitnHistory\n ] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `inquirytree/loadedInquiryTreeNodes?inquiryTreeId=${udpTreeId}&userId=${user.id}&productId=${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !!!udpTreeId,\n false\n );\n\n const [{ data: tree, loading: treeLoading, error: treeError }] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `inquirytree/${udpTreeId}/detailed`,\n {},\n !!!udpTreeId,\n false\n );\n\n const executeQueryAdHoc = useCallback(\n async (data, apiMethodId) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryAdHoc/${apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const executeQueryWithParameters = useCallback(\n async (data, apiMethodId) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const executeGetDetailedTree = useCallback(\n async (treeId) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `inquirytree/${treeId}/detailed`,\n {\n method: 'get'\n }\n ),\n []\n );\n\n const executeAddRecentlyLoadedNodes = useCallback(\n async (data) => {\n await apiMutate(\n ConfigService.integrationV1ApiUrl,\n `inquirytree/${udpTreeId}/loadedInquiryTreeNodes/user/${user.id}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {\n method: 'post'\n },\n data\n );\n refetchLitnHistory();\n },\n [user, udpTreeId, refetchLitnHistory]\n );\n\n const [{ data: page, loading: pageLoading, error: pageError }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${pageId}`,\n {},\n !!!pageId,\n false\n );\n\n const catalogObjects = useMemo(() => {\n if (!currentApiCatalogId || !catalogsMap || !tree) {\n return null;\n }\n const catalogObjectList =\n catalogsMap[currentApiCatalogId]?.ctlg?.catalogObjectList;\n if (!catalogObjectList) {\n return null;\n }\n let matchingObject = null;\n let filteredCatalogObjects = [];\n if (catalogObjectList) {\n matchingObject = catalogObjectList.find(\n (obj) => obj.catalogObjectName === tree.apiMethodInstance?.returnObject\n );\n\n if (!!matchingObject) {\n const properties = matchingObject.properties;\n // Get the first child that returns\n const children = properties.filter(\n (property) => !!property.extendedProperties.childEntity\n );\n\n filteredCatalogObjects.push(matchingObject);\n\n buildCatalogObjectList(\n filteredCatalogObjects,\n children,\n catalogObjectList\n );\n }\n }\n return filteredCatalogObjects;\n }, [catalogsMap, currentApiCatalogId, tree]);\n\n const promotedMethods = useMemo(() => {\n if (!currentApiCatalogId || !catalogsMap) {\n return null;\n }\n return catalogsMap[currentApiCatalogId]?.promotedMethods;\n }, [catalogsMap, currentApiCatalogId]);\n\n const promotedEntities = useMemo(() => {\n if (!currentApiCatalogId || !promotedMethodEntitiesMap) {\n return null;\n }\n return promotedMethodEntitiesMap[currentApiCatalogId] || [];\n }, [promotedMethodEntitiesMap, currentApiCatalogId]);\n\n useEffect(() => {\n if (catalogObjects) {\n setCatalogEntities(catalogObjects);\n }\n }, [setCatalogEntities, catalogObjects]);\n\n useEffect(() => {\n if (promotedEntities) {\n setCatalogPromotedEntities(promotedEntities);\n }\n }, [setCatalogPromotedEntities, promotedEntities]);\n\n useEffect(() => {\n if (containerId) {\n setCurrentContainerId(containerId);\n }\n // unmount function\n return () => {\n if (containerId) {\n setCurrentContainerId(null);\n setActionPanels(null, containerId);\n setInquiryParams(null, containerId);\n }\n };\n }, [setActionPanels, setCurrentContainerId, containerId, setInquiryParams]);\n\n if (treeLoading && !treeError) {\n return (\n <div className={classes.loadingContent}>\n <CircularProgress size={64} />\n </div>\n );\n }\n\n return (\n <InquiryContainer\n user={user}\n productId={ConfigService.config.UNITY_PRODUCT_ID}\n shellContext={shellContext}\n litnHistory={litnHistory}\n litnHistoryLoading={litnHistoryLoading}\n tree={tree}\n treeLoading={treeLoading}\n treeError={treeError}\n treeId={udpTreeId}\n catalogObjects={catalogObjects}\n executeQueryAdHoc={executeQueryAdHoc}\n executeQueryWithParameters={executeQueryWithParameters}\n executeGetDetailedTree={executeGetDetailedTree}\n executeAddRecentlyLoadedNodes={executeAddRecentlyLoadedNodes}\n pageData={page}\n pageLoading={pageLoading}\n pageError={pageError}\n setPageId={setPageId}\n pageId={pageId}\n initialSearchValue={initialSearchValue}\n promotedEntities={promotedEntities}\n promotedMethods={promotedMethods}\n autoCollapseNav={autoCollapseNav}\n useNewUdpTab={useNewUdpTab}\n containerId={containerId}\n />\n );\n};\n"],"mappings":"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"}