udp-react-enterprise-component-library 25.18.1-beta.50 → 25.18.1-beta.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ActionProvider-C_rohJIr.js → ActionProvider-DGzli-X1.js} +4 -4
- package/dist/{ActionProvider-C_rohJIr.js.map → ActionProvider-DGzli-X1.js.map} +1 -1
- package/dist/{ActionSplitScreen-OFqIncG9.js → ActionSplitScreen-gKH4ISoo.js} +5 -5
- package/dist/{ActionSplitScreen-OFqIncG9.js.map → ActionSplitScreen-gKH4ISoo.js.map} +1 -1
- package/dist/{ActionWrapper-d9dIOSYB.js → ActionWrapper-Bpp9Mn4j.js} +8 -8
- package/dist/{ActionWrapper-d9dIOSYB.js.map → ActionWrapper-Bpp9Mn4j.js.map} +1 -1
- package/dist/{AggregateChip-6GSEsL_A.js → AggregateChip-BF7S3x_K.js} +3 -3
- package/dist/{AggregateChip-6GSEsL_A.js.map → AggregateChip-BF7S3x_K.js.map} +1 -1
- package/dist/{AmbientGridTemplate-D0GSZj4a.js → AmbientGridTemplate-D1TMpzxb.js} +4 -4
- package/dist/{AmbientGridTemplate-D0GSZj4a.js.map → AmbientGridTemplate-D1TMpzxb.js.map} +1 -1
- package/dist/{AppMenu-DW1oQdFA.js → AppMenu-oGJtO6Vp.js} +2 -2
- package/dist/{AppMenu-DW1oQdFA.js.map → AppMenu-oGJtO6Vp.js.map} +1 -1
- package/dist/{AuthProvider-qWjJiYSg.js → AuthProvider-V_6y6_xj.js} +3 -3
- package/dist/{AuthProvider-qWjJiYSg.js.map → AuthProvider-V_6y6_xj.js.map} +1 -1
- package/dist/{BaseTreeMenu-CBFIl0VF.js → BaseTreeMenu-Dg8MW4TD.js} +4 -4
- package/dist/{BaseTreeMenu-CBFIl0VF.js.map → BaseTreeMenu-Dg8MW4TD.js.map} +1 -1
- package/dist/{BioCardWrapper-BiRI3EDR.js → BioCardWrapper-B2bT-4zw.js} +2 -2
- package/dist/{BioCardWrapper-BiRI3EDR.js.map → BioCardWrapper-B2bT-4zw.js.map} +1 -1
- package/dist/{BulkActionsGridButton-uhTB0AGy.js → BulkActionsGridButton-JYgIABWU.js} +3 -3
- package/dist/{BulkActionsGridButton-uhTB0AGy.js.map → BulkActionsGridButton-JYgIABWU.js.map} +1 -1
- package/dist/{CircleButton-B9JAMG53.js → CircleButton-CrvnPHDw.js} +2 -2
- package/dist/{CircleButton-B9JAMG53.js.map → CircleButton-CrvnPHDw.js.map} +1 -1
- package/dist/{CrudBrowserContainer-De2WRDIH.js → CrudBrowserContainer-DJHq5ILl.js} +2 -2
- package/dist/{CrudBrowserContainer-De2WRDIH.js.map → CrudBrowserContainer-DJHq5ILl.js.map} +1 -1
- package/dist/{CrudForm-B5VDs-17.js → CrudForm-C9xMnPoA.js} +2 -2
- package/dist/{CrudForm-B5VDs-17.js.map → CrudForm-C9xMnPoA.js.map} +1 -1
- package/dist/{CrudTableSidePanel-DnxJx49i.js → CrudTableSidePanel-CNEZxJi0.js} +3 -3
- package/dist/{CrudTableSidePanel-DnxJx49i.js.map → CrudTableSidePanel-CNEZxJi0.js.map} +1 -1
- package/dist/{DataBrowserContainer-DZGhEt9N.js → DataBrowserContainer-cU_EEIiR.js} +6 -6
- package/dist/{DataBrowserContainer-DZGhEt9N.js.map → DataBrowserContainer-cU_EEIiR.js.map} +1 -1
- package/dist/{EntityHeader-DiOEw-za.js → EntityHeader-DKkYwvsi.js} +4 -4
- package/dist/{EntityHeader-DiOEw-za.js.map → EntityHeader-DKkYwvsi.js.map} +1 -1
- package/dist/{FieldArrayCard-DeZ7Q9KB.js → FieldArrayCard-C1I5_qJ4.js} +2 -2
- package/dist/{FieldArrayCard-DeZ7Q9KB.js.map → FieldArrayCard-C1I5_qJ4.js.map} +1 -1
- package/dist/{FluentCell-D2lpxw4O.js → FluentCell-F9eits6u.js} +2 -2
- package/dist/{FluentCell-D2lpxw4O.js.map → FluentCell-F9eits6u.js.map} +1 -1
- package/dist/{FluentDataTable-ChpZUwal.js → FluentDataTable-BSQ_EHJX.js} +2 -2
- package/dist/{FluentDataTable-ChpZUwal.js.map → FluentDataTable-BSQ_EHJX.js.map} +1 -1
- package/dist/{GridFunctions-CRTDIOe0.js → GridFunctions-D76ygiH2.js} +2 -2
- package/dist/{GridFunctions-CRTDIOe0.js.map → GridFunctions-D76ygiH2.js.map} +1 -1
- package/dist/{GroupNode-Djp62Urb.js → GroupNode-CZX--ble.js} +2 -2
- package/dist/{GroupNode-Djp62Urb.js.map → GroupNode-CZX--ble.js.map} +1 -1
- package/dist/{IconRenderer-JdCm70xC.js → IconRenderer-BEezfZ3N.js} +2 -2
- package/dist/{IconRenderer-JdCm70xC.js.map → IconRenderer-BEezfZ3N.js.map} +1 -1
- package/dist/{Inquiry-Cjz91wf_.js → Inquiry-BCu8bSal.js} +12 -12
- package/dist/{Inquiry-Cjz91wf_.js.map → Inquiry-BCu8bSal.js.map} +1 -1
- package/dist/Inquiry-NWBPf-o4.js +3 -0
- package/dist/{InquiryNodeControls-B677QFu4.js → InquiryNodeControls-DeK_hTzo.js} +2 -2
- package/dist/{InquiryNodeControls-B677QFu4.js.map → InquiryNodeControls-DeK_hTzo.js.map} +1 -1
- package/dist/{InquirySearchContainer-BnHwUWFC.js → InquirySearchContainer-DLkAOjWJ.js} +5 -5
- package/dist/{InquirySearchContainer-BnHwUWFC.js.map → InquirySearchContainer-DLkAOjWJ.js.map} +1 -1
- package/dist/MenuPage-R6mbeCuS.js +3 -0
- package/dist/{MenuPage-fqEs3MSY.js → MenuPage-tkkhpco5.js} +4 -4
- package/dist/{MenuPage-fqEs3MSY.js.map → MenuPage-tkkhpco5.js.map} +1 -1
- package/dist/{MenuProvider-rwBliXcV.js → MenuProvider-BuTAUs0Z.js} +2 -2
- package/dist/{MenuProvider-rwBliXcV.js.map → MenuProvider-BuTAUs0Z.js.map} +1 -1
- package/dist/{MttMainTimeline-nusYDWg_.js → MttMainTimeline-BG6nlcC_.js} +2 -2
- package/dist/{MttMainTimeline-nusYDWg_.js.map → MttMainTimeline-BG6nlcC_.js.map} +1 -1
- package/dist/{MttSummary-DWESRW7k.js → MttSummary-DP2U55LK.js} +3 -3
- package/dist/{MttSummary-DWESRW7k.js.map → MttSummary-DP2U55LK.js.map} +1 -1
- package/dist/MyExportsPage-DFIMneFr.js +3 -0
- package/dist/{MyExportsPage-CeeH8ViY.js → MyExportsPage-zKRz4fL5.js} +2 -2
- package/dist/{MyExportsPage-CeeH8ViY.js.map → MyExportsPage-zKRz4fL5.js.map} +1 -1
- package/dist/{NotesScreen-DE3fhpjW.js → NotesScreen-DQatppnX.js} +6 -6
- package/dist/{NotesScreen-DE3fhpjW.js.map → NotesScreen-DQatppnX.js.map} +1 -1
- package/dist/{PageActionWrapper-C-irIPLE.js → PageActionWrapper-BBkGtnC6.js} +3 -3
- package/dist/{PageActionWrapper-C-irIPLE.js.map → PageActionWrapper-BBkGtnC6.js.map} +1 -1
- package/dist/{PageRenderer-AfVo1f0z.js → PageRenderer-BTkUO-hr.js} +2 -2
- package/dist/{PageRenderer-AfVo1f0z.js.map → PageRenderer-BTkUO-hr.js.map} +1 -1
- package/dist/{PaymentForm-CRlhsB2F.js → PaymentForm-CtrVBoH8.js} +2 -2
- package/dist/{PaymentForm-CRlhsB2F.js.map → PaymentForm-CtrVBoH8.js.map} +1 -1
- package/dist/{RecentlyLoadedNodesTable-8WQBaAl4.js → RecentlyLoadedNodesTable-Dy8yBVfH.js} +2 -2
- package/dist/{RecentlyLoadedNodesTable-8WQBaAl4.js.map → RecentlyLoadedNodesTable-Dy8yBVfH.js.map} +1 -1
- package/dist/{RecentlyLoadedNodesWidget--NDwNQQF.js → RecentlyLoadedNodesWidget-C5chQWOm.js} +2 -2
- package/dist/{RecentlyLoadedNodesWidget--NDwNQQF.js.map → RecentlyLoadedNodesWidget-C5chQWOm.js.map} +1 -1
- package/dist/{RemindersCard-CSJ8buYt.js → RemindersCard-BOSGv9pc.js} +4 -4
- package/dist/{RemindersCard-CSJ8buYt.js.map → RemindersCard-BOSGv9pc.js.map} +1 -1
- package/dist/{RemindersScreen-CyT18piP.js → RemindersScreen-Cp7lMWrE.js} +6 -6
- package/dist/{RemindersScreen-CyT18piP.js.map → RemindersScreen-Cp7lMWrE.js.map} +1 -1
- package/dist/{RemindersWidget-B3qlh8K-.js → RemindersWidget-BnaccE9-.js} +5 -5
- package/dist/{RemindersWidget-B3qlh8K-.js.map → RemindersWidget-BnaccE9-.js.map} +1 -1
- package/dist/{SearchServiceDatasource-BrfkHkEq.js → SearchServiceDatasource-D8egrLwe.js} +3 -3
- package/dist/{SearchServiceDatasource-BrfkHkEq.js.map → SearchServiceDatasource-D8egrLwe.js.map} +1 -1
- package/dist/{SearchUtilities-B1TCyppF.js → SearchUtilities-DUW0kaw_.js} +2 -2
- package/dist/{SearchUtilities-B1TCyppF.js.map → SearchUtilities-DUW0kaw_.js.map} +1 -1
- package/dist/{Shell-CL_ENLg6.js → Shell-DunAQ9XC.js} +9 -9
- package/dist/{Shell-CL_ENLg6.js.map → Shell-DunAQ9XC.js.map} +1 -1
- package/dist/{ShortcutContentFinder-DTkqEgtI.js → ShortcutContentFinder-BR-Gd55o.js} +5 -5
- package/dist/{ShortcutContentFinder-DTkqEgtI.js.map → ShortcutContentFinder-BR-Gd55o.js.map} +1 -1
- package/dist/{SiteHeader-6rdY93D_.js → SiteHeader-CuOFCr7D.js} +5 -5
- package/dist/{SiteHeader-6rdY93D_.js.map → SiteHeader-CuOFCr7D.js.map} +1 -1
- package/dist/{Statistic-ChTR_kas.js → Statistic-CB8UpsW4.js} +2 -2
- package/dist/{Statistic-ChTR_kas.js.map → Statistic-CB8UpsW4.js.map} +1 -1
- package/dist/{TableContainer-CcHjtMCa.js → TableContainer-B0IAjIA3.js} +3 -3
- package/dist/{TableContainer-CcHjtMCa.js.map → TableContainer-B0IAjIA3.js.map} +1 -1
- package/dist/{TenantProvider-C-3eqCA3.js → TenantProvider-B_fwoUi4.js} +6 -6
- package/dist/TenantProvider-B_fwoUi4.js.map +1 -0
- package/dist/{TreeUtilities-VCy2z4Qv.js → TreeUtilities-jEhtZNg5.js} +4 -4
- package/dist/{TreeUtilities-VCy2z4Qv.js.map → TreeUtilities-jEhtZNg5.js.map} +1 -1
- package/dist/UI/accordion/index.js +1 -1
- package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js +1 -1
- package/dist/UI/dataDisplay/FluentDataTable/index.js +1 -1
- package/dist/UI/dataDisplay/entityHeader/index.js +1 -1
- package/dist/UI/dataDisplay/index.js +1 -1
- package/dist/UI/fileViewer/index.js +1 -1
- package/dist/UI/floorplans/index.js +1 -1
- package/dist/UI/forms/index.js +1 -1
- package/dist/UI/index.js +14 -14
- package/dist/UI/inputs/fieldArrayCard/index.js +1 -1
- package/dist/UI/mapLayout/index.js +1 -1
- package/dist/UI/mapLayout/ui/index.js +1 -1
- package/dist/UI/navigation/index.js +1 -1
- package/dist/UI/navigation/menus/index.js +1 -1
- package/dist/UI/templates/deprecated/AmbientGridTemplate/index.js +1 -1
- package/dist/UI/templates/ui/renderers/index.js +1 -1
- package/dist/UI/timeline/fluentTimeline/index.js +1 -1
- package/dist/UI/timeline/index.js +1 -1
- package/dist/UI/utilityDisplay/alerts/index.js +1 -1
- package/dist/UI/utilityDisplay/index.js +5 -5
- package/dist/UI/utilityDisplay/utilities/index.js +1 -1
- package/dist/UI/widgets/library/RecentlyLoadedNodesWidget/index.js +1 -1
- package/dist/UI/widgets/library/RemindersWidget/index.js +1 -1
- package/dist/{UdpAlertsContainer-Dz76Kg2v.js → UdpAlertsContainer-CbiqX1P0.js} +4 -4
- package/dist/{UdpAlertsContainer-Dz76Kg2v.js.map → UdpAlertsContainer-CbiqX1P0.js.map} +1 -1
- package/dist/{UdpAppProvider-XtIYbmNb.js → UdpAppProvider-D7D0F8VO.js} +2 -2
- package/dist/{UdpAppProvider-XtIYbmNb.js.map → UdpAppProvider-D7D0F8VO.js.map} +1 -1
- package/dist/{UdpAuditEvents-Bqz0_-Du.js → UdpAuditEvents-JP-tGjrh.js} +2 -2
- package/dist/{UdpAuditEvents-Bqz0_-Du.js.map → UdpAuditEvents-JP-tGjrh.js.map} +1 -1
- package/dist/UdpAuditEventsPage-BiUdXrGu.js +3 -0
- package/dist/{UdpAuditEventsPage-CobHOioY.js → UdpAuditEventsPage-CohNvZiq.js} +2 -2
- package/dist/{UdpAuditEventsPage-CobHOioY.js.map → UdpAuditEventsPage-CohNvZiq.js.map} +1 -1
- package/dist/{UdpDataBrowserPage-B-afkKoz.js → UdpDataBrowserPage-CpDMeFtE.js} +7 -7
- package/dist/{UdpDataBrowserPage-B-afkKoz.js.map → UdpDataBrowserPage-CpDMeFtE.js.map} +1 -1
- package/dist/{UdpFormsPrivateForm-L8NRz5Xf.js → UdpFormsPrivateForm-D6clAgfY.js} +2 -2
- package/dist/{UdpFormsPrivateForm-L8NRz5Xf.js.map → UdpFormsPrivateForm-D6clAgfY.js.map} +1 -1
- package/dist/{UdpFormsSubmissionGrid-CkrI4_CC.js → UdpFormsSubmissionGrid-DzMuwwTO.js} +3 -3
- package/dist/{UdpFormsSubmissionGrid-CkrI4_CC.js.map → UdpFormsSubmissionGrid-DzMuwwTO.js.map} +1 -1
- package/dist/{UdpGridPanelManagementPage-Cvye5uKC.js → UdpGridPanelManagementPage-CJbKbZeN.js} +2 -2
- package/dist/{UdpGridPanelManagementPage-Cvye5uKC.js.map → UdpGridPanelManagementPage-CJbKbZeN.js.map} +1 -1
- package/dist/{UdpInquiryMaintenanceEnginePage-BiKDpo6a.js → UdpInquiryMaintenanceEnginePage-B7jCKzw5.js} +2 -2
- package/dist/{UdpInquiryMaintenanceEnginePage-BiKDpo6a.js.map → UdpInquiryMaintenanceEnginePage-B7jCKzw5.js.map} +1 -1
- package/dist/{UdpMaintenanceEnginePage-C1UcnDlL.js → UdpMaintenanceEnginePage-C5OzABlj.js} +6 -6
- package/dist/{UdpMaintenanceEnginePage-C1UcnDlL.js.map → UdpMaintenanceEnginePage-C5OzABlj.js.map} +1 -1
- package/dist/{UdpNotesPage-Deug2da_.js → UdpNotesPage-CO5te_bd.js} +6 -6
- package/dist/{UdpNotesPage-Deug2da_.js.map → UdpNotesPage-CO5te_bd.js.map} +1 -1
- package/dist/{UdpRemindersPage-B8vCglBX.js → UdpRemindersPage-Dvoe-qlm.js} +6 -6
- package/dist/{UdpRemindersPage-B8vCglBX.js.map → UdpRemindersPage-Dvoe-qlm.js.map} +1 -1
- package/dist/{UdpTransactionTypesPage-DxUsXnV7.js → UdpTransactionTypesPage-DFpnQn7f.js} +3 -3
- package/dist/{UdpTransactionTypesPage-DxUsXnV7.js.map → UdpTransactionTypesPage-DFpnQn7f.js.map} +1 -1
- package/dist/{UdpTransactionsPage-BZ0Idg5s.js → UdpTransactionsPage-hu97DvPW.js} +4 -4
- package/dist/{UdpTransactionsPage-BZ0Idg5s.js.map → UdpTransactionsPage-hu97DvPW.js.map} +1 -1
- package/dist/{UdpVerticalManagementPage-DHK7-w0K.js → UdpVerticalManagementPage-Cc4zz9Tv.js} +3 -3
- package/dist/{UdpVerticalManagementPage-DHK7-w0K.js.map → UdpVerticalManagementPage-Cc4zz9Tv.js.map} +1 -1
- package/dist/{UdpVerticalManagementSidesheet-C2kuDXac.js → UdpVerticalManagementSidesheet-DGL4dyia.js} +4 -4
- package/dist/{UdpVerticalManagementSidesheet-C2kuDXac.js.map → UdpVerticalManagementSidesheet-DGL4dyia.js.map} +1 -1
- package/dist/{UserForm-DZ1a9uqZ.js → UserForm-DNgeQvad.js} +2 -2
- package/dist/{UserForm-DZ1a9uqZ.js.map → UserForm-DNgeQvad.js.map} +1 -1
- package/dist/{UserFormSideSheet-B7bFqu5x.js → UserFormSideSheet-RyDFg3QI.js} +2 -2
- package/dist/{UserFormSideSheet-B7bFqu5x.js.map → UserFormSideSheet-RyDFg3QI.js.map} +1 -1
- package/dist/UserFormSideSheet-iBczI7p0.js +3 -0
- package/dist/{VirtualBrowser-BZkfXaY5.js → VirtualBrowser-CVs-vW3x.js} +3 -3
- package/dist/{VirtualBrowser-BZkfXaY5.js.map → VirtualBrowser-CVs-vW3x.js.map} +1 -1
- package/dist/VirtualBrowser-CcWYHhRb.js +3 -0
- package/dist/{WorkflowContainer-CHmVR99E.js → WorkflowContainer-Boj87JRI.js} +1 -1
- package/dist/{WorkflowContainer-BheQPhXt.js → WorkflowContainer-DDGm1Cxo.js} +3 -3
- package/dist/{WorkflowContainer-BheQPhXt.js.map → WorkflowContainer-DDGm1Cxo.js.map} +1 -1
- package/dist/{WorkflowTreeMenu-D2Uc09jP.js → WorkflowTreeMenu-HHtwkDzu.js} +4 -4
- package/dist/{WorkflowTreeMenu-D2Uc09jP.js.map → WorkflowTreeMenu-HHtwkDzu.js.map} +1 -1
- package/dist/{accordion-CT8euUVM.js → accordion--zpb1uMC.js} +2 -2
- package/dist/{accordion-CT8euUVM.js.map → accordion--zpb1uMC.js.map} +1 -1
- package/dist/{actionSummary-BEOW5B3h.js → actionSummary-D0CwyTXJ.js} +2 -2
- package/dist/{actionSummary-BEOW5B3h.js.map → actionSummary-D0CwyTXJ.js.map} +1 -1
- package/dist/{actionUtils-Bj5-851p.js → actionUtils-CPmiSAig.js} +2 -2
- package/dist/{actionUtils-Bj5-851p.js.map → actionUtils-CPmiSAig.js.map} +1 -1
- package/dist/actions/actionSummary/index.js +1 -1
- package/dist/actions/index.js +5 -5
- package/dist/actions/utils/index.js +1 -1
- package/dist/{aggregateUtils-B10uvnUw.js → aggregateUtils-UcpEjFnf.js} +2 -2
- package/dist/{aggregateUtils-B10uvnUw.js.map → aggregateUtils-UcpEjFnf.js.map} +1 -1
- package/dist/{aggridHelpers-RYO7tWY9.js → aggridHelpers-BvrSzjdD.js} +3 -3
- package/dist/{aggridHelpers-RYO7tWY9.js.map → aggridHelpers-BvrSzjdD.js.map} +1 -1
- package/dist/{auth-DX4sNV3x.js → auth-Bq7vHax4.js} +2 -2
- package/dist/{auth-DX4sNV3x.js.map → auth-Bq7vHax4.js.map} +1 -1
- package/dist/componentSystems/multiThreadTimeline/index.js +3 -3
- package/dist/componentSystems/multiThreadTimeline/mttMainTimeline/index.js +1 -1
- package/dist/componentSystems/multiThreadTimeline/mttSummary/index.js +1 -1
- package/dist/componentSystems/multiThreadTimeline/ui/index.js +1 -1
- package/dist/componentSystems/pageRenderer/hocs/index.js +1 -1
- package/dist/componentSystems/pageRenderer/index.js +3 -3
- package/dist/componentSystems/pageRenderer/wrappers/index.js +1 -1
- package/dist/dataBrowser/index.js +1 -1
- package/dist/enums/index.js +2 -2
- package/dist/{fileViewer-BVzlhb3g.js → fileViewer-BbIFHura.js} +2 -2
- package/dist/{fileViewer-BVzlhb3g.js.map → fileViewer-BbIFHura.js.map} +1 -1
- package/dist/{floorplans-CF6ssxTg.js → floorplans-DNUFP5-n.js} +2 -2
- package/dist/{floorplans-CF6ssxTg.js.map → floorplans-DNUFP5-n.js.map} +1 -1
- package/dist/{fluentTimeline-BWoLOxF_.js → fluentTimeline-DpnUZabY.js} +2 -2
- package/dist/{fluentTimeline-BWoLOxF_.js.map → fluentTimeline-DpnUZabY.js.map} +1 -1
- package/dist/hooks/index.js +3 -3
- package/dist/index.js +62 -62
- package/dist/inquiry/dashboard/index.js +1 -1
- package/dist/inquiry/index.js +4 -4
- package/dist/inquiry/inquiryBar/index.js +1 -1
- package/dist/inquiry/search/index.js +1 -1
- package/dist/maintenanceEngine/crudBrowser/index.js +2 -2
- package/dist/maintenanceEngine/index.js +4 -4
- package/dist/maintenanceEngine/tableBrowser/index.js +1 -1
- package/dist/maintenanceEngine/virtualBrowser/index.js +1 -1
- package/dist/{mapLayout-DCBNFKk9.js → mapLayout-B_m2Fh8n.js} +2 -2
- package/dist/{mapLayout-DCBNFKk9.js.map → mapLayout-B_m2Fh8n.js.map} +1 -1
- package/dist/menuPage/index.js +1 -1
- package/dist/{menuPage-PIJOkANO.js → menuPage-7DcUM-Q3.js} +2 -2
- package/dist/{menuPage-PIJOkANO.js.map → menuPage-7DcUM-Q3.js.map} +1 -1
- package/dist/{menuUtilities-B6z02FRb.js → menuUtilities-Da5uVIJ8.js} +2 -2
- package/dist/{menuUtilities-B6z02FRb.js.map → menuUtilities-Da5uVIJ8.js.map} +1 -1
- package/dist/notes/index.js +1 -1
- package/dist/{profile-CXlla7mZ.js → profile-hGhjTafH.js} +3 -3
- package/dist/{profile-CXlla7mZ.js.map → profile-hGhjTafH.js.map} +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/reminders/index.js +2 -2
- package/dist/routes/index.js +1 -1
- package/dist/{routes-BToKqY03.js → routes-qV4EIuwZ.js} +7 -7
- package/dist/{routes-BToKqY03.js.map → routes-qV4EIuwZ.js.map} +1 -1
- package/dist/shell/index.js +3 -3
- package/dist/shell/ui/addUser/index.js +1 -1
- package/dist/shell/ui/index.js +2 -2
- package/dist/shell/ui/profile/index.js +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/{tenantStore-TgmV03z9.js → tenantStore-CFYu7ndZ.js} +2 -2
- package/dist/{tenantStore-TgmV03z9.js.map → tenantStore-CFYu7ndZ.js.map} +1 -1
- package/dist/treeMenu/index.js +1 -1
- package/dist/types/src/enums/unitySystemEnums.d.ts +5 -0
- package/dist/types/src/enums/unitySystemEnums.d.ts.map +1 -1
- package/dist/types/src/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts +1 -1
- package/dist/types/src/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts.map +1 -1
- package/dist/types/src/udp/utilities/useDateStringColumnDef.d.ts +1 -1
- package/dist/types/src/utilities/tenant/TenantProvider.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/udp/ShortcutContent/index.js +1 -1
- package/dist/udp/export/index.js +1 -1
- package/dist/udp/fileImportMapping/index.js +1 -1
- package/dist/udp/pages/UdpAuditEvents/index.js +1 -1
- package/dist/udp/pages/UdpDataBrowserPage/index.js +1 -1
- package/dist/udp/pages/UdpFormsPrivateForm/index.js +1 -1
- package/dist/udp/pages/UdpFormsSubmissionGrid/index.js +1 -1
- package/dist/udp/pages/UdpGridPanelManagementPage/index.js +1 -1
- package/dist/udp/pages/UdpInquiryMaintenanceEnginePage/index.js +1 -1
- package/dist/udp/pages/UdpMaintenanceEnginePage/index.js +1 -1
- package/dist/udp/pages/UdpNotesPage/index.js +1 -1
- package/dist/udp/pages/UdpPages/index.js +13 -13
- package/dist/udp/pages/UdpPagesLazy/index.js +1 -1
- package/dist/udp/pages/UdpRemindersPage/index.js +1 -1
- package/dist/udp/pages/UdpTransactionTypesPage/index.js +1 -1
- package/dist/udp/pages/UdpTransactionsPage/index.js +1 -1
- package/dist/udp/pages/UdpVerticalManagementPage/index.js +1 -1
- package/dist/udp/pages/UdpVerticalManagementSidesheet/index.js +1 -1
- package/dist/{unitySystemEnums-e5F9Jr7m.js → unitySystemEnums-CZDCsD5t.js} +6 -2
- package/dist/{unitySystemEnums-e5F9Jr7m.js.map → unitySystemEnums-CZDCsD5t.js.map} +1 -1
- package/dist/{useActions-BWBXokgQ.js → useActions-DZe6YlEm.js} +3 -3
- package/dist/{useActions-BWBXokgQ.js.map → useActions-DZe6YlEm.js.map} +1 -1
- package/dist/{usePromotedMethodEntities-DaPFmr0s.js → usePromotedMethodEntities-D-GoZJZB.js} +2 -2
- package/dist/{usePromotedMethodEntities-DaPFmr0s.js.map → usePromotedMethodEntities-D-GoZJZB.js.map} +1 -1
- package/dist/{useSearchFilterParamsMap-DPCfEY-N.js → useSearchFilterParamsMap-hAHx2Rav.js} +2 -2
- package/dist/{useSearchFilterParamsMap-DPCfEY-N.js.map → useSearchFilterParamsMap-hAHx2Rav.js.map} +1 -1
- package/dist/utilities/aggrid/datasources/index.js +1 -1
- package/dist/utilities/aggrid/index.js +2 -2
- package/dist/utilities/auth/index.js +3 -3
- package/dist/utilities/form/paymentForm/index.js +1 -1
- package/dist/utilities/menus/index.js +1 -1
- package/dist/utilities/provider/index.js +1 -1
- package/dist/utilities/search/index.js +1 -1
- package/dist/utilities/tenant/index.js +1 -1
- package/dist/utilities/tree/index.js +1 -1
- package/dist/{utilityDisplay-C6c73Efx.js → utilityDisplay-DtdjV7V1.js} +2 -2
- package/dist/{utilityDisplay-C6c73Efx.js.map → utilityDisplay-DtdjV7V1.js.map} +1 -1
- package/dist/{withEngineComponent-JSgAYpSg.js → withEngineComponent-CpOJBSmx.js} +2 -2
- package/dist/{withEngineComponent-JSgAYpSg.js.map → withEngineComponent-CpOJBSmx.js.map} +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/menus/index.js +1 -1
- package/export-map.json +3 -2
- package/package.json +1 -1
- package/dist/Inquiry-C1q14Yyd.js +0 -3
- package/dist/MenuPage-DP1ATpru.js +0 -3
- package/dist/MyExportsPage-DGc4Sbt9.js +0 -3
- package/dist/TenantProvider-C-3eqCA3.js.map +0 -1
- package/dist/UdpAuditEventsPage-DuHg-BRJ.js +0 -3
- package/dist/UserFormSideSheet-tpmcX5Ax.js +0 -3
- package/dist/VirtualBrowser-BUTWxd9P.js +0 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as FluentButton } from "./FluentButton-BexKrnAp.js";
|
|
2
2
|
import { t as FluentTextFieldAutoComplete } from "./FluentTextFieldAutoComplete-5Hp3qpk6.js";
|
|
3
|
-
import { I as TreeViewModeEnums } from "./unitySystemEnums-
|
|
3
|
+
import { I as TreeViewModeEnums } from "./unitySystemEnums-CZDCsD5t.js";
|
|
4
4
|
import { t as FluentSearchField } from "./FluentSearchField-DebM7Nzf.js";
|
|
5
5
|
import { t as IconButtonWithTooltip } from "./IconButtonWithToolTip-DswviiJB.js";
|
|
6
6
|
import React, { useEffect, useMemo, useState } from "react";
|
|
@@ -206,4 +206,4 @@ const InquiryNodeControls = (props) => {
|
|
|
206
206
|
|
|
207
207
|
//#endregion
|
|
208
208
|
export { InquiryControlList as n, InquiryNodeControls as t };
|
|
209
|
-
//# sourceMappingURL=InquiryNodeControls-
|
|
209
|
+
//# sourceMappingURL=InquiryNodeControls-DeK_hTzo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InquiryNodeControls-B677QFu4.js","names":["useStyles"],"sources":["../src/inquiry/inquiryBar/InquiryControlList.jsx","../src/inquiry/inquiryBar/InquiryNodeControls.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { IconButtonWithTooltip } from '../../UI/inputs/buttons/IconButtonWithToolTip';\nimport {\n EraseToolIcon,\n ChevronUnfold10Icon,\n UploadIcon,\n SkypeMinusIcon,\n ChevronFold10Icon,\n ViewListTreeIcon,\n BulletedTreeListIcon\n} from '@fluentui/react-icons';\nimport clsx from 'clsx';\nimport { TreeViewModeEnums } from '../../enums/unitySystemEnums.ts';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n justifyContent: 'space-between'\n // width: 170\n },\n icon: {\n margin: theme.spacing(0.5),\n borderRadius: 2,\n width: theme.spacing(1),\n height: theme.spacing(1)\n }\n}));\n\nexport const InquiryControlList = ({\n remove,\n expandAll,\n collapseAll,\n moveToTop,\n clearAll,\n switchTreeViewMode,\n treeViewMode,\n hiddenControls = [],\n classes: classProps\n}) => {\n const classes = useStyles();\n const { inquiryControlListRoot } = classProps || {};\n\n const controlList = useMemo(() => {\n return [\n {\n id: 'clearAll',\n label: 'Clear All',\n icon: SkypeMinusIcon,\n clickFunction: clearAll\n },\n {\n id: 'remove',\n label: 'Remove',\n icon: EraseToolIcon,\n clickFunction: remove\n },\n {\n id: 'collapseAll',\n label: 'Collapse All',\n icon: ChevronFold10Icon,\n clickFunction: collapseAll\n },\n {\n id: 'expandAll',\n label: 'Expand All',\n icon: ChevronUnfold10Icon,\n clickFunction: expandAll\n },\n {\n id: 'moveToTop',\n label: 'Move To Top',\n icon: UploadIcon,\n clickFunction: moveToTop\n },\n {\n id: 'switchTreeViewMode',\n label:\n treeViewMode === TreeViewModeEnums.Compact\n ? 'Classic View'\n : 'Compact View',\n icon:\n treeViewMode === TreeViewModeEnums.Compact\n ? ViewListTreeIcon\n : BulletedTreeListIcon,\n clickFunction: switchTreeViewMode\n }\n ];\n }, [\n remove,\n expandAll,\n moveToTop,\n clearAll,\n collapseAll,\n treeViewMode,\n switchTreeViewMode\n ]);\n\n const filteredControlList = useMemo(() => {\n if (!controlList) {\n return [];\n }\n return controlList.filter(\n (control) => !hiddenControls.includes(control.id)\n );\n }, [controlList, hiddenControls]);\n\n const ButtonItem = ({ title, icon, clickFunction }) => {\n return (\n <IconButtonWithTooltip\n id={`udpRecord-InquiryControlList-${title.replace(/\\s+/g, '')}`}\n udprecordid={`udpRecord-InquiryControlList-${title.replace(/\\s+/g, '')}`}\n title={title}\n className={classes.icon}\n size='medium'\n onClick={clickFunction}\n icon={icon}\n />\n );\n };\n\n return (\n <div className={clsx(classes.root, inquiryControlListRoot)}>\n {filteredControlList.map((item) => {\n return (\n <ButtonItem\n title={item.label}\n icon={item.icon}\n clickFunction={item.clickFunction}\n />\n );\n })}\n </div>\n );\n};\n","import React, { useMemo, useState, useEffect } from 'react';\nimport { makeStyles, Typography, Popper, useTheme } from '@material-ui/core';\nimport { InquiryControlList } from './InquiryControlList';\nimport { FluentSearchField } from '../../UI/inputs/textField/FluentSearchField';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n upperWrapper: {\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1)\n },\n button: {\n textTransform: 'none',\n textDecorationLine: 'underline',\n padding: 0,\n height: theme.spacing(3),\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0)'\n }\n },\n searchRow: {\n display: 'inline-flex',\n width: '100%'\n },\n searchField: {\n width: '100%'\n },\n entitySelect: {},\n inputPropRoot: { height: theme.spacing(4), borderRadius: 0 },\n inputPropInput: { marginTop: theme.spacing(-1.75) },\n formControl: {\n '& .MuiFormControl-marginDense': {\n marginTop: 7\n },\n width: theme.spacing(9)\n },\n formLabelRoot: {\n marginTop: -7\n }\n}));\n\nconst AutoCompletePopper = (props) => {\n return (\n <Popper\n {...props}\n style={{ maxWidth: 'fit-content' }}\n placement='bottom-start'\n />\n );\n};\n\nexport const InquiryNodeControls = (props) => {\n const {\n children,\n remove,\n expandAll,\n collapseAll,\n moveToTop,\n clearAll,\n switchTreeViewMode,\n treeViewMode,\n changeSideBarView,\n showSearch = true,\n showControls = true,\n hiddenControls = [],\n classes: classProps,\n entityList,\n entityValue,\n setEntityValue,\n clearSearchStr,\n setClearSearchStr,\n isPreloadedTree,\n treeLoading,\n ...otherProps\n } = props;\n const classes = useStyles(props);\n const [searchValue, setSearchValue] = useState('');\n const theme = useTheme();\n\n const handleEntityChange = (value) => {\n setEntityValue(value);\n };\n\n const handleOnChange = (event) => {\n setSearchValue(event.target.value);\n };\n\n const updatedEntityList = useMemo(() => {\n if (!entityList) {\n return [];\n }\n const list = [...entityList];\n list.unshift({ value: '', label: 'All' });\n return list;\n }, [entityList]);\n\n useEffect(() => {\n if (clearSearchStr) {\n setSearchValue('');\n setClearSearchStr(false);\n }\n }, [clearSearchStr, setClearSearchStr]);\n\n return (\n <>\n <div className={classes.upperWrapper}>\n {showSearch && !isPreloadedTree && (\n <div className={classes.searchRow}>\n <div className={classes.searchField}>\n <FluentSearchField\n id='udpRecord-InquiryNodeControls-Search'\n udprecordid='udpRecord-InquiryNodeControls-Search'\n value={searchValue}\n onChange={handleOnChange}\n {...otherProps}\n />\n </div>\n {!!!hiddenControls.length && (\n <div className={classes.entitySelect}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryNodeControls-DropDown'\n udprecordid='udpRecord-InquiryNodeControls-DropDown'\n variant='filled'\n margin='normal'\n size='small'\n fullWidth\n disableClearable={true}\n customPopper={AutoCompletePopper}\n inputProps={{ disableUnderline: true }}\n classes={classes}\n options={updatedEntityList}\n optionKey='label'\n value={entityValue || updatedEntityList[0]}\n onChange={handleEntityChange}\n />\n </div>\n )}\n </div>\n )}\n <div\n style={{\n display: 'flex',\n justifyContent: showControls ? 'space-between' : 'end',\n height: !!hiddenControls?.length && theme.spacing(3)\n }}\n >\n {showControls && (\n <InquiryControlList\n remove={remove}\n expandAll={expandAll}\n collapseAll={collapseAll}\n moveToTop={moveToTop}\n clearAll={clearAll}\n switchTreeViewMode={switchTreeViewMode}\n treeViewMode={treeViewMode}\n hiddenControls={hiddenControls}\n classes={classProps}\n />\n )}\n {!!!hiddenControls.length && changeSideBarView && !treeLoading && (\n <FluentButton\n id='udpRecord-InquiryNodeControls-AdvSearch'\n udprecordid='udpRecord-InquiryNodeControls-AdvSearch'\n onClick={() => changeSideBarView(1)}\n className={classes.button}\n >\n <Typography variant='caption'>Adv. Search</Typography>\n </FluentButton>\n )}\n </div>\n </div>\n {showControls && (\n <div\n style={{\n // margin: !!!hiddenControls.length ? '0px 8px 4px' : '8px 8px 4px',\n marginBottom: !!!hiddenControls.length ? 0 : 8\n }}\n >\n {/* <Divider /> */}\n </div>\n )}\n <div className={classes.root}>{children}</div>\n </>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InquiryNodeControls-DeK_hTzo.js","names":["useStyles"],"sources":["../src/inquiry/inquiryBar/InquiryControlList.jsx","../src/inquiry/inquiryBar/InquiryNodeControls.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { IconButtonWithTooltip } from '../../UI/inputs/buttons/IconButtonWithToolTip';\nimport {\n EraseToolIcon,\n ChevronUnfold10Icon,\n UploadIcon,\n SkypeMinusIcon,\n ChevronFold10Icon,\n ViewListTreeIcon,\n BulletedTreeListIcon\n} from '@fluentui/react-icons';\nimport clsx from 'clsx';\nimport { TreeViewModeEnums } from '../../enums/unitySystemEnums.ts';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n justifyContent: 'space-between'\n // width: 170\n },\n icon: {\n margin: theme.spacing(0.5),\n borderRadius: 2,\n width: theme.spacing(1),\n height: theme.spacing(1)\n }\n}));\n\nexport const InquiryControlList = ({\n remove,\n expandAll,\n collapseAll,\n moveToTop,\n clearAll,\n switchTreeViewMode,\n treeViewMode,\n hiddenControls = [],\n classes: classProps\n}) => {\n const classes = useStyles();\n const { inquiryControlListRoot } = classProps || {};\n\n const controlList = useMemo(() => {\n return [\n {\n id: 'clearAll',\n label: 'Clear All',\n icon: SkypeMinusIcon,\n clickFunction: clearAll\n },\n {\n id: 'remove',\n label: 'Remove',\n icon: EraseToolIcon,\n clickFunction: remove\n },\n {\n id: 'collapseAll',\n label: 'Collapse All',\n icon: ChevronFold10Icon,\n clickFunction: collapseAll\n },\n {\n id: 'expandAll',\n label: 'Expand All',\n icon: ChevronUnfold10Icon,\n clickFunction: expandAll\n },\n {\n id: 'moveToTop',\n label: 'Move To Top',\n icon: UploadIcon,\n clickFunction: moveToTop\n },\n {\n id: 'switchTreeViewMode',\n label:\n treeViewMode === TreeViewModeEnums.Compact\n ? 'Classic View'\n : 'Compact View',\n icon:\n treeViewMode === TreeViewModeEnums.Compact\n ? ViewListTreeIcon\n : BulletedTreeListIcon,\n clickFunction: switchTreeViewMode\n }\n ];\n }, [\n remove,\n expandAll,\n moveToTop,\n clearAll,\n collapseAll,\n treeViewMode,\n switchTreeViewMode\n ]);\n\n const filteredControlList = useMemo(() => {\n if (!controlList) {\n return [];\n }\n return controlList.filter(\n (control) => !hiddenControls.includes(control.id)\n );\n }, [controlList, hiddenControls]);\n\n const ButtonItem = ({ title, icon, clickFunction }) => {\n return (\n <IconButtonWithTooltip\n id={`udpRecord-InquiryControlList-${title.replace(/\\s+/g, '')}`}\n udprecordid={`udpRecord-InquiryControlList-${title.replace(/\\s+/g, '')}`}\n title={title}\n className={classes.icon}\n size='medium'\n onClick={clickFunction}\n icon={icon}\n />\n );\n };\n\n return (\n <div className={clsx(classes.root, inquiryControlListRoot)}>\n {filteredControlList.map((item) => {\n return (\n <ButtonItem\n title={item.label}\n icon={item.icon}\n clickFunction={item.clickFunction}\n />\n );\n })}\n </div>\n );\n};\n","import React, { useMemo, useState, useEffect } from 'react';\nimport { makeStyles, Typography, Popper, useTheme } from '@material-ui/core';\nimport { InquiryControlList } from './InquiryControlList';\nimport { FluentSearchField } from '../../UI/inputs/textField/FluentSearchField';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n upperWrapper: {\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1)\n },\n button: {\n textTransform: 'none',\n textDecorationLine: 'underline',\n padding: 0,\n height: theme.spacing(3),\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0)'\n }\n },\n searchRow: {\n display: 'inline-flex',\n width: '100%'\n },\n searchField: {\n width: '100%'\n },\n entitySelect: {},\n inputPropRoot: { height: theme.spacing(4), borderRadius: 0 },\n inputPropInput: { marginTop: theme.spacing(-1.75) },\n formControl: {\n '& .MuiFormControl-marginDense': {\n marginTop: 7\n },\n width: theme.spacing(9)\n },\n formLabelRoot: {\n marginTop: -7\n }\n}));\n\nconst AutoCompletePopper = (props) => {\n return (\n <Popper\n {...props}\n style={{ maxWidth: 'fit-content' }}\n placement='bottom-start'\n />\n );\n};\n\nexport const InquiryNodeControls = (props) => {\n const {\n children,\n remove,\n expandAll,\n collapseAll,\n moveToTop,\n clearAll,\n switchTreeViewMode,\n treeViewMode,\n changeSideBarView,\n showSearch = true,\n showControls = true,\n hiddenControls = [],\n classes: classProps,\n entityList,\n entityValue,\n setEntityValue,\n clearSearchStr,\n setClearSearchStr,\n isPreloadedTree,\n treeLoading,\n ...otherProps\n } = props;\n const classes = useStyles(props);\n const [searchValue, setSearchValue] = useState('');\n const theme = useTheme();\n\n const handleEntityChange = (value) => {\n setEntityValue(value);\n };\n\n const handleOnChange = (event) => {\n setSearchValue(event.target.value);\n };\n\n const updatedEntityList = useMemo(() => {\n if (!entityList) {\n return [];\n }\n const list = [...entityList];\n list.unshift({ value: '', label: 'All' });\n return list;\n }, [entityList]);\n\n useEffect(() => {\n if (clearSearchStr) {\n setSearchValue('');\n setClearSearchStr(false);\n }\n }, [clearSearchStr, setClearSearchStr]);\n\n return (\n <>\n <div className={classes.upperWrapper}>\n {showSearch && !isPreloadedTree && (\n <div className={classes.searchRow}>\n <div className={classes.searchField}>\n <FluentSearchField\n id='udpRecord-InquiryNodeControls-Search'\n udprecordid='udpRecord-InquiryNodeControls-Search'\n value={searchValue}\n onChange={handleOnChange}\n {...otherProps}\n />\n </div>\n {!!!hiddenControls.length && (\n <div className={classes.entitySelect}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryNodeControls-DropDown'\n udprecordid='udpRecord-InquiryNodeControls-DropDown'\n variant='filled'\n margin='normal'\n size='small'\n fullWidth\n disableClearable={true}\n customPopper={AutoCompletePopper}\n inputProps={{ disableUnderline: true }}\n classes={classes}\n options={updatedEntityList}\n optionKey='label'\n value={entityValue || updatedEntityList[0]}\n onChange={handleEntityChange}\n />\n </div>\n )}\n </div>\n )}\n <div\n style={{\n display: 'flex',\n justifyContent: showControls ? 'space-between' : 'end',\n height: !!hiddenControls?.length && theme.spacing(3)\n }}\n >\n {showControls && (\n <InquiryControlList\n remove={remove}\n expandAll={expandAll}\n collapseAll={collapseAll}\n moveToTop={moveToTop}\n clearAll={clearAll}\n switchTreeViewMode={switchTreeViewMode}\n treeViewMode={treeViewMode}\n hiddenControls={hiddenControls}\n classes={classProps}\n />\n )}\n {!!!hiddenControls.length && changeSideBarView && !treeLoading && (\n <FluentButton\n id='udpRecord-InquiryNodeControls-AdvSearch'\n udprecordid='udpRecord-InquiryNodeControls-AdvSearch'\n onClick={() => changeSideBarView(1)}\n className={classes.button}\n >\n <Typography variant='caption'>Adv. Search</Typography>\n </FluentButton>\n )}\n </div>\n </div>\n {showControls && (\n <div\n style={{\n // margin: !!!hiddenControls.length ? '0px 8px 4px' : '8px 8px 4px',\n marginBottom: !!!hiddenControls.length ? 0 : 8\n }}\n >\n {/* <Divider /> */}\n </div>\n )}\n <div className={classes.root}>{children}</div>\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;AAeA,MAAMA,cAAY,YAAY,WAAW;CACvC,MAAM;EACJ,SAAS;EACT,gBAAgB;EAEjB;CACD,MAAM;EACJ,QAAQ,MAAM,QAAQ,GAAI;EAC1B,cAAc;EACd,OAAO,MAAM,QAAQ,EAAE;EACvB,QAAQ,MAAM,QAAQ,EAAE;EACzB;CACF,EAAE;AAEH,MAAa,sBAAsB,EACjC,QACA,WACA,aACA,WACA,UACA,oBACA,cACA,iBAAiB,EAAE,EACnB,SAAS,iBACL;CACJ,MAAM,UAAUA,aAAW;CAC3B,MAAM,EAAE,2BAA2B,cAAc,EAAE;CAEnD,MAAM,cAAc,cAAc;AAChC,SAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,MAAM;IACN,eAAe;IAChB;GACD;IACE,IAAI;IACJ,OAAO;IACP,MAAM;IACN,eAAe;IAChB;GACD;IACE,IAAI;IACJ,OAAO;IACP,MAAM;IACN,eAAe;IAChB;GACD;IACE,IAAI;IACJ,OAAO;IACP,MAAM;IACN,eAAe;IAChB;GACD;IACE,IAAI;IACJ,OAAO;IACP,MAAM;IACN,eAAe;IAChB;GACD;IACE,IAAI;IACJ,OACE,iBAAiB,kBAAkB,UAC/B,iBACA;IACN,MACE,iBAAiB,kBAAkB,UAC/B,mBACA;IACN,eAAe;IAChB;GACF;IACA;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,sBAAsB,cAAc;AACxC,MAAI,CAAC,YACH,QAAO,EAAE;AAEX,SAAO,YAAY,QAChB,YAAY,CAAC,eAAe,SAAS,QAAQ,GAAG,CAClD;IACA,CAAC,aAAa,eAAe,CAAC;CAEjC,MAAM,cAAc,EAAE,OAAO,MAAM,oBAAoB;AACrD,SACE,oCAAC;GACC,IAAI,gCAAgC,MAAM,QAAQ,QAAQ,GAAG;GAC7D,aAAa,gCAAgC,MAAM,QAAQ,QAAQ,GAAG;GAC/D;GACP,WAAW,QAAQ;GACnB,MAAK;GACL,SAAS;GACH;IACN;;AAIN,QACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,MAAM,uBAAuB,IACvD,oBAAoB,KAAK,SAAS;AACjC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,eAAe,KAAK;IACpB;GAEJ,CACE;;;;;AC7HV,MAAM,YAAY,YAAY,WAAW;CACvC,MAAM,EAAE;CACR,cAAc;EACZ,aAAa,MAAM,QAAQ,EAAE;EAC7B,cAAc,MAAM,QAAQ,EAAE;EAC/B;CACD,QAAQ;EACN,eAAe;EACf,oBAAoB;EACpB,SAAS;EACT,QAAQ,MAAM,QAAQ,EAAE;EACxB,WAAW,EACT,iBAAiB,oBAClB;EACF;CACD,WAAW;EACT,SAAS;EACT,OAAO;EACR;CACD,aAAa,EACX,OAAO,QACR;CACD,cAAc,EAAE;CAChB,eAAe;EAAE,QAAQ,MAAM,QAAQ,EAAE;EAAE,cAAc;EAAG;CAC5D,gBAAgB,EAAE,WAAW,MAAM,QAAQ,MAAM,EAAE;CACnD,aAAa;EACX,iCAAiC,EAC/B,WAAW,GACZ;EACD,OAAO,MAAM,QAAQ,EAAE;EACxB;CACD,eAAe,EACb,WAAW,IACZ;CACF,EAAE;AAEH,MAAM,sBAAsB,UAAU;AACpC,QACE,oCAAC;EACC,GAAI;EACJ,OAAO,EAAE,UAAU,eAAe;EAClC,WAAU;GACV;;AAIN,MAAa,uBAAuB,UAAU;CAC5C,MAAM,EACJ,UACA,QACA,WACA,aACA,WACA,UACA,oBACA,cACA,mBACA,aAAa,MACb,eAAe,MACf,iBAAiB,EAAE,EACnB,SAAS,YACT,YACA,aACA,gBACA,gBACA,mBACA,iBACA,aACA,GAAG,eACD;CACJ,MAAM,UAAU,UAAU,MAAM;CAChC,MAAM,CAAC,aAAa,kBAAkB,SAAS,GAAG;CAClD,MAAM,QAAQ,UAAU;CAExB,MAAM,sBAAsB,UAAU;AACpC,iBAAe,MAAM;;CAGvB,MAAM,kBAAkB,UAAU;AAChC,iBAAe,MAAM,OAAO,MAAM;;CAGpC,MAAM,oBAAoB,cAAc;AACtC,MAAI,CAAC,WACH,QAAO,EAAE;EAEX,MAAM,OAAO,CAAC,GAAG,WAAW;AAC5B,OAAK,QAAQ;GAAE,OAAO;GAAI,OAAO;GAAO,CAAC;AACzC,SAAO;IACN,CAAC,WAAW,CAAC;AAEhB,iBAAgB;AACd,MAAI,gBAAgB;AAClB,kBAAe,GAAG;AAClB,qBAAkB,MAAM;;IAEzB,CAAC,gBAAgB,kBAAkB,CAAC;AAEvC,QACE,0DACE,oCAAC,SAAI,WAAW,QAAQ,gBACrB,cAAc,CAAC,mBACd,oCAAC,SAAI,WAAW,QAAQ,aACtB,oCAAC,SAAI,WAAW,QAAQ,eACtB,oCAAC;EACC,IAAG;EACH,aAAY;EACZ,OAAO;EACP,UAAU;EACV,GAAI;GACJ,CACE,EACL,CAAC,CAAC,CAAC,eAAe,UACjB,oCAAC,SAAI,WAAW,QAAQ,gBACtB,oCAAC;EACC,IAAG;EACH,aAAY;EACZ,SAAQ;EACR,QAAO;EACP,MAAK;EACL;EACA,kBAAkB;EAClB,cAAc;EACd,YAAY,EAAE,kBAAkB,MAAM;EAC7B;EACT,SAAS;EACT,WAAU;EACV,OAAO,eAAe,kBAAkB;EACxC,UAAU;GACV,CACE,CAEJ,EAER,oCAAC,SACC,OAAO;EACL,SAAS;EACT,gBAAgB,eAAe,kBAAkB;EACjD,QAAQ,CAAC,CAAC,gBAAgB,UAAU,MAAM,QAAQ,EAAE;EACrD,IAEA,gBACC,oCAAC;EACS;EACG;EACE;EACF;EACD;EACU;EACN;EACE;EAChB,SAAS;GACT,EAEH,CAAC,CAAC,CAAC,eAAe,UAAU,qBAAqB,CAAC,eACjD,oCAAC;EACC,IAAG;EACH,aAAY;EACZ,eAAe,kBAAkB,EAAE;EACnC,WAAW,QAAQ;IAEnB,oCAAC,cAAW,SAAQ,aAAU,cAAwB,CACzC,CAEb,CACF,EACL,gBACC,oCAAC,SACC,OAAO,EAEL,cAAc,CAAC,CAAC,CAAC,eAAe,SAAS,IAAI,GAC9C,GAGG,EAER,oCAAC,SAAI,WAAW,QAAQ,QAAO,SAAe,CAC7C"}
|
|
@@ -7,13 +7,13 @@ import { t as PropertyTypeEnum } from "./propertyTypeEnums-Dys-84NL.js";
|
|
|
7
7
|
import { t as camelToPascalCaseWithSpace } from "./StringUtilities-u-cxAW6-.js";
|
|
8
8
|
import { t as FluentIconButton } from "./FluentIconButton-Dc95mE3v.js";
|
|
9
9
|
import { r as getSanitizedName } from "./entityUtilities-_8w-Zjs3.js";
|
|
10
|
-
import { D as SearchGroupingType, O as SearchSortDirection, f as LogicalSearchOperatorEnums, p as LookupTypeEnums } from "./unitySystemEnums-
|
|
11
|
-
import { n as getSearchIdentifiers, r as getSearchObject } from "./SearchUtilities-
|
|
10
|
+
import { D as SearchGroupingType, O as SearchSortDirection, f as LogicalSearchOperatorEnums, p as LookupTypeEnums } from "./unitySystemEnums-CZDCsD5t.js";
|
|
11
|
+
import { n as getSearchIdentifiers, r as getSearchObject } from "./SearchUtilities-DUW0kaw_.js";
|
|
12
12
|
import { t as PrimaryActionHeader } from "./PrimaryActionHeader-DBJpROPu.js";
|
|
13
13
|
import { t as AmbientCard } from "./AmbientCard-CLW4bPCu.js";
|
|
14
|
-
import { c as useGridFormat, o as useExport } from "./GridFunctions-
|
|
14
|
+
import { c as useGridFormat, o as useExport } from "./GridFunctions-D76ygiH2.js";
|
|
15
15
|
import { n as SearchOperators, t as FilterOperators } from "./SearchOperator-D9838PIe.js";
|
|
16
|
-
import { t as useSearchFilterParamsMap } from "./useSearchFilterParamsMap-
|
|
16
|
+
import { t as useSearchFilterParamsMap } from "./useSearchFilterParamsMap-hAHx2Rav.js";
|
|
17
17
|
import { t as PropertyField } from "./PropertyFields-Dm90Hcer.js";
|
|
18
18
|
import { r as csvStrToArrayOfObjects } from "./SelectUtilities-Bj_xpNMs.js";
|
|
19
19
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
@@ -832,4 +832,4 @@ const InquirySearchContainer = (props) => {
|
|
|
832
832
|
|
|
833
833
|
//#endregion
|
|
834
834
|
export { InquiryAdvancedSearchForm as a, InquiryAdvancedSearch as i, InquirySearchTable as n, InquirySearchDatasource as r, InquirySearchContainer as t };
|
|
835
|
-
//# sourceMappingURL=InquirySearchContainer-
|
|
835
|
+
//# sourceMappingURL=InquirySearchContainer-DLkAOjWJ.js.map
|
package/dist/{InquirySearchContainer-BnHwUWFC.js.map → InquirySearchContainer-DLkAOjWJ.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InquirySearchContainer-BnHwUWFC.js","names":["useStyles","uuid","useStyles","Form","element","useStyles"],"sources":["../src/inquiry/search/InquiryAdvancedSearchForm.jsx","../src/inquiry/search/InquiryAdvancedSearch.jsx","../src/inquiry/search/InquirySearchDatasource.js","../src/inquiry/search/InquirySearchTable.jsx","../src/inquiry/search/InquirySearchContainer.jsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect } from 'react';\nimport { makeStyles, Divider, Typography } from '@material-ui/core';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { SearchOperators } from '../../models/SearchOperator.ts';\nimport clsx from 'clsx';\nimport { v4 as uuid } from 'uuid';\nimport { PropertyTypeEnum } from '../../enums/propertyTypeEnums.ts';\nimport { PropertyField } from '../../UI/property/PropertyFields';\nimport { LookupTypeEnums } from '../../enums/unitySystemEnums.ts';\nimport { csvStrToArrayOfObjects } from '../../utilities/input/SelectUtilities';\nimport { useForm } from 'react-final-form';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n overflowX: 'auto'\n },\n fieldRow: { display: 'flex', alignItems: 'center' },\n dividerContainer: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%'\n },\n divider: { width: '100%', marginTop: theme.spacing(1) },\n autocompleteRoot: {\n width: '38%',\n marginRight: theme.spacing(1)\n }\n}));\n\nexport const InquiryAdvancedSearchForm = (props) => {\n const {\n advancedSearchFields,\n selectedSearchOperators,\n setSelectedSearchOperators,\n catalogProperties,\n entityType,\n lookupPropertyNames,\n classes: classProps,\n executeQueryWithParameters,\n setForm\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n\n const form = useForm();\n\n const handleSearchOperatorChange = useCallback(\n (value, fieldName) => {\n if (fieldName) {\n let updatedSelectedSearchOps = {};\n if (selectedSearchOperators) {\n updatedSelectedSearchOps = { ...selectedSearchOperators };\n }\n updatedSelectedSearchOps[fieldName] = value;\n setSelectedSearchOperators(updatedSelectedSearchOps);\n }\n },\n [selectedSearchOperators, setSelectedSearchOperators]\n );\n\n const getPropertyWidgetType = (type, useLookup) => {\n if (!type) {\n return null;\n }\n let propertyWidgetType = '';\n switch (type) {\n case PropertyTypeEnum.Int:\n case PropertyTypeEnum.Long:\n propertyWidgetType = 'IntegerWidget';\n break;\n case PropertyTypeEnum.DateTime:\n propertyWidgetType = 'DateTimeWidget';\n break;\n case PropertyTypeEnum.Boolean:\n propertyWidgetType = 'BooleanWidget';\n break;\n default:\n propertyWidgetType = 'TextWidget';\n }\n\n if (\n useLookup === LookupTypeEnums.Api ||\n useLookup === LookupTypeEnums.Csv\n ) {\n propertyWidgetType = 'AutoCompleteWidget';\n }\n\n return propertyWidgetType;\n };\n\n const getPropertyTypeSearchOperators = useCallback((type) => {\n if (!type) {\n return [];\n }\n switch (type) {\n case PropertyTypeEnum.Boolean:\n return SearchOperators.filter((operator) => operator.value === '=');\n default:\n return SearchOperators;\n }\n }, []);\n\n const fieldRows = useMemo(() => {\n if (!advancedSearchFields || !catalogProperties) {\n return [];\n }\n const keys = Object.keys(advancedSearchFields);\n\n const arrayOfFields = keys.reduce((list, key) => {\n const groupedItems = advancedSearchFields[key];\n let groupHeader = '';\n const foundGroupItem = groupedItems.find((item) => !!item.groupHeader);\n if (foundGroupItem) {\n groupHeader = foundGroupItem.groupHeader;\n }\n list.push({ groupHeader: groupHeader, isDivider: true, id: uuid() });\n groupedItems.forEach(async (item) => {\n const foundProperty = catalogProperties.find(\n (property) => property.name === item.name\n );\n const propertyWidgetType = getPropertyWidgetType(\n foundProperty?.type,\n foundProperty?.extendedProperties?.useLookup\n );\n let apiLookupOptions = null;\n if (\n !item.searchable &&\n !foundProperty?.extendedProperties?.searchable\n ) {\n return;\n }\n if (\n lookupPropertyNames.includes(foundProperty?.name) &&\n foundProperty?.extendedProperties?.useLookup === LookupTypeEnums.Api\n ) {\n // TODO: handle getting lookup data with api call\n // const response = await executeQueryWithParameters(\n // 'aa5d1fe1-1128-4d08-9ddb-58ad4fcf00e4'\n // );\n // console.log(response?.data);\n }\n list.push({\n ...item,\n isDivider: false,\n type: foundProperty?.type,\n propertyWidgetType: propertyWidgetType,\n useLookup: foundProperty?.extendedProperties?.useLookup,\n lookup: foundProperty?.extendedProperties?.lookup,\n apiLookupOptions: apiLookupOptions\n });\n });\n return list;\n }, []);\n return arrayOfFields;\n }, [advancedSearchFields, catalogProperties, lookupPropertyNames]);\n\n const getPropertyFields = useCallback(\n (config) => {\n const searchOperator = selectedSearchOperators\n ? selectedSearchOperators[config?.name]?.value\n : null;\n let options = [];\n if (config?.useLookup === LookupTypeEnums.Csv) {\n options = csvStrToArrayOfObjects(config?.lookup);\n }\n if (searchOperator === 'BETWEEN') {\n return (\n <div style={{ display: 'block', width: '100%' }}>\n <PropertyField\n propertyType={entityType}\n property={{\n key: config?.name,\n label: `${config?.columnName} (From)`,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n <PropertyField\n propertyType={entityType}\n property={{\n key: `${config?.name}:between`,\n label: `${config?.columnName} (To)`,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n </div>\n );\n }\n\n return (\n <PropertyField\n propertyType={entityType}\n property={{\n key: config?.name,\n label: config?.columnName,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n );\n },\n [entityType, selectedSearchOperators]\n );\n\n const fieldComponents = useMemo(() => {\n if (!fieldRows || !fieldRows.length) {\n return null;\n }\n return fieldRows.map((config) => {\n return (\n <div key={config?.id}>\n {!config?.isDivider && (\n <div className={classes.fieldRow}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryAdvancedSearchForm-Text'\n udprecordid='udpRecord-InquiryAdvancedSearchForm-Text'\n label='Operator'\n name='searchOperator'\n variant='outlined'\n margin='dense'\n size='small'\n options={getPropertyTypeSearchOperators(config?.type) || []}\n optionKey='label'\n value={\n (selectedSearchOperators &&\n selectedSearchOperators[config?.name]) ||\n ''\n }\n onChange={(value) =>\n handleSearchOperatorChange(value, config?.name)\n }\n classes={{ autocompleteRoot: classes.autocompleteRoot }}\n />\n {getPropertyFields(config)}\n </div>\n )}\n {config?.isDivider && (\n <div className={classes.dividerContainer}>\n <div className={classes.divider}>\n <Divider orientation='horizontal' />\n </div>\n {config?.groupHeader && (\n <div\n style={{\n marginRight: 8,\n marginLeft: 8,\n textAlign: 'center',\n whiteSpace: 'nowrap'\n }}\n >\n <Typography variant='caption'>\n {config?.groupHeader}\n </Typography>\n </div>\n )}\n <div className={classes.divider}>\n <Divider orientation='horizontal' />\n </div>\n </div>\n )}\n </div>\n );\n });\n }, [\n fieldRows,\n classes,\n handleSearchOperatorChange,\n selectedSearchOperators,\n getPropertyTypeSearchOperators,\n getPropertyFields\n ]);\n\n useEffect(() => {\n if (form) {\n setForm(form);\n }\n }, [form, setForm]);\n\n return <div className={clsx(classes.root, root)}>{fieldComponents}</div>;\n};\n","import React, { useState, useMemo, useEffect, useCallback } from 'react';\nimport { makeStyles, Divider, Typography } from '@material-ui/core';\nimport { SubmitButton } from '../../utilities/form/SubmitButton.tsx';\nimport { Form } from '../../utilities/form/Form.tsx';\nimport { FormButtons } from '../../utilities/form/FormButtons.tsx';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { orderBy } from 'lodash';\nimport { InquiryAdvancedSearchForm } from './InquiryAdvancedSearchForm';\nimport { LookupTypeEnums } from '../../enums/unitySystemEnums.ts';\nimport { SearchOperators } from '../../models/SearchOperator.ts';\nimport { FluentIconButton } from '../../UI/inputs/buttons/FluentIconButton';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport { ClearIcon } from '@fluentui/react-icons';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities.js';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n entitySelect: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n fieldsRoot: {\n height: (props) => 'calc(100vh - 288px)'\n },\n title: {\n display: 'flex',\n justifyContent: 'space-between',\n margin: theme.spacing(1)\n },\n buttonWrapper: {\n textAlign: 'center'\n },\n button: {\n textTransform: 'none',\n padding: 0,\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0)'\n },\n color: theme.palette.secondary\n }\n}));\n\nexport const InquiryAdvancedSearch = (props) => {\n const {\n entityList,\n onSubmit,\n currentNodeCatalogReturnObject,\n catalogObjects,\n entityValue,\n setEntityValue,\n changeSideBarView,\n tree,\n executeQueryWithParameters\n } = props;\n const classes = useStyles(props);\n\n const [initialSelectedSearchOperators, setInitialSelectedSearchOperators] =\n useState(null);\n const [selectedSearchOperators, setSelectedSearchOperators] = useState(null);\n const [form, setForm] = useState(null);\n\n const entityTree = useMemo(() => {\n if (!entityValue || !tree) {\n return null;\n }\n const matchingEntityTree = tree.treeStructure.find(\n (node) => node.properties.catalogReturnObject === entityValue.value\n );\n let nodeTree = tree;\n if (matchingEntityTree?.properties?.associatedInquiryTree) {\n nodeTree = matchingEntityTree?.properties?.associatedInquiryTree;\n }\n return nodeTree;\n }, [tree, entityValue]);\n\n const catalogProperties = useMemo(() => {\n if (!entityValue || !catalogObjects) {\n return [];\n }\n const foundCatalogObject = catalogObjects.find(\n (catalog) => catalog.catalogObjectName === entityValue.value\n );\n return foundCatalogObject?.properties || [];\n }, [catalogObjects, entityValue]);\n\n const advancedSearchFields = useMemo(() => {\n if (!entityTree) {\n return null;\n }\n const parentNode = entityTree.treeStructure.find((node) => !node.parentId);\n const advancedSearchConfiguration =\n parentNode?.properties?.searchConfiguration?.filter(\n (config) => config.advancedSearch\n );\n advancedSearchConfiguration?.forEach(\n (config) =>\n (config.advancedSearch = Number.parseFloat(config.advancedSearch))\n );\n const orderedSearchConfiguration = orderBy(\n advancedSearchConfiguration,\n ['advancedSearch'],\n ['asc']\n );\n\n const groupedAndOrderdFields = {};\n\n orderedSearchConfiguration.forEach((config) => {\n const wholeInt = Math.floor(config.advancedSearch);\n if (!groupedAndOrderdFields[wholeInt]) {\n groupedAndOrderdFields[wholeInt] = [config];\n } else {\n groupedAndOrderdFields[wholeInt].push(config);\n }\n });\n return groupedAndOrderdFields;\n }, [entityTree]);\n\n const asCatalogLookupPropertyNames = useMemo(() => {\n if (!entityTree) {\n return [];\n }\n const parentNode = entityTree.treeStructure.find((node) => !node.parentId);\n const advancedSearchPropertyName =\n parentNode?.properties?.searchConfiguration\n ?.filter((config) => config.advancedSearch)\n .map((asConfig) => asConfig.name);\n const filteredProperties = catalogProperties.filter((property) =>\n advancedSearchPropertyName?.includes(property.name)\n );\n const lookupPropertyNames = [];\n filteredProperties.forEach((property) => {\n if (\n property?.extendedProperties?.useLookup !== LookupTypeEnums.No_Lookup ||\n !property?.extendedProperties?.useLookup\n ) {\n lookupPropertyNames.push(property.name);\n }\n });\n return lookupPropertyNames;\n }, [catalogProperties, entityTree]);\n\n const handleEntityChange = (value) => {\n setEntityValue(value);\n };\n\n const handleOnSubmit = useCallback(\n (values) => {\n if (onSubmit) {\n onSubmit(\n values,\n selectedSearchOperators,\n entityValue?.value,\n asCatalogLookupPropertyNames\n );\n }\n },\n [\n onSubmit,\n selectedSearchOperators,\n entityValue,\n asCatalogLookupPropertyNames\n ]\n );\n\n const handleClearFilter = useCallback(() => {\n if (form) {\n form.reset();\n }\n setSelectedSearchOperators(initialSelectedSearchOperators);\n }, [initialSelectedSearchOperators, form]);\n\n useEffect(() => {\n if (entityList?.length) {\n const foundEntity = entityList.find(\n (entity) => entity.value === currentNodeCatalogReturnObject\n );\n if (foundEntity) {\n setEntityValue(foundEntity);\n }\n }\n }, [entityList, currentNodeCatalogReturnObject, setEntityValue]);\n\n useEffect(() => {\n if (advancedSearchFields) {\n const mergedFields = [].concat.apply(\n [],\n Object.values(advancedSearchFields)\n );\n const initialSearchOperators = mergedFields.reduce((operators, field) => {\n if (field.advancedSearchOperator) {\n const foundOperator = SearchOperators.find(\n (op) => op.value === field.advancedSearchOperator\n );\n operators[field.name] = foundOperator ?? SearchOperators[0];\n } else {\n operators[field.name] = SearchOperators[0];\n }\n return operators;\n }, {});\n\n setInitialSelectedSearchOperators(initialSearchOperators);\n setSelectedSearchOperators(initialSearchOperators);\n }\n }, [advancedSearchFields]);\n\n return (\n <div className={classes.root}>\n <div>\n <Divider />\n </div>\n <div className={classes.title}>\n <Typography variant='subtitle1'>Advanced Search</Typography>\n <FluentIconButton\n id='udpRecord-InquiryAdvancedSearch-ClearIcon'\n udprecordid='udpRecord-InquiryAdvancedSearch-ClearIcon'\n icon={ClearIcon}\n onClick={() => changeSideBarView(0)}\n />\n </div>\n <div className={classes.entitySelect}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryAdvancedSearch-TextField'\n udprecordid='udpRecord-InquiryAdvancedSearch-TextField'\n label='Entity'\n variant='outlined'\n margin='normal'\n size='small'\n fullWidth\n options={entityList}\n optionKey='label'\n value={entityValue}\n onChange={handleEntityChange}\n />\n </div>\n <Form onSubmit={handleOnSubmit}>\n <InquiryAdvancedSearchForm\n advancedSearchFields={advancedSearchFields}\n selectedSearchOperators={selectedSearchOperators}\n setSelectedSearchOperators={setSelectedSearchOperators}\n catalogProperties={catalogProperties}\n entityType={getSanitizedName(entityValue?.value)}\n lookupPropertyNames={asCatalogLookupPropertyNames}\n classes={{ root: classes.fieldsRoot }}\n executeQueryWithParameters={executeQueryWithParameters}\n setForm={setForm}\n />\n <div className={classes.submitWrapper}>\n <div className={classes.buttonWrapper}>\n <FluentButton\n id='udpRecord-InquiryAdvancedSearch-ClearFilter'\n udprecordid='udpRecord-InquiryAdvancedSearch-ClearFilter'\n onClick={handleClearFilter}\n className={classes.button}\n >\n <Typography variant='subtitle1'>Clear Filter</Typography>\n </FluentButton>\n <FormButtons>\n <SubmitButton\n id='udpRecord-InquiryAdvancedSearch-Search'\n udprecordid='udpRecord-InquiryAdvancedSearch-Search'\n variant='contained'\n color='primary'\n disablePristine={false}\n disabled={!entityValue}\n fullWidth\n style={{ marginRight: 8, marginLeft: 8 }}\n >\n Search\n </SubmitButton>\n </FormButtons>\n </div>\n </div>\n </Form>\n </div>\n );\n};\n","import { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { FilterOperators } from '../../models/SearchOperator.ts';\nimport {\n SearchGroupingType,\n SearchSortDirection,\n LogicalSearchOperatorEnums\n} from '../../enums/unitySystemEnums.ts';\n\nexport const InquirySearchDatasource = (\n queryData,\n apiMethodId,\n searchFilterElements,\n logicalSearchOperator = LogicalSearchOperatorEnums.And,\n executeQuery,\n searchFilterGroups\n) => {\n return {\n async getRows(params) {\n const {\n startRow,\n endRow,\n rowGroupCols,\n groupKeys,\n valueCols,\n filterModel,\n sortModel\n } = params.request;\n const page = endRow / 20;\n const searchObject = getSearchObject(\n searchFilterElements,\n page,\n null,\n false,\n logicalSearchOperator,\n searchFilterGroups\n );\n\n // handle server-side sorting on ag-grid\n if (sortModel.length) {\n const orderElements = searchObject.orderElements;\n sortModel.forEach((sortItem) => {\n const formattedPropertyName =\n sortItem.colId.charAt(0).toUpperCase() + sortItem.colId.slice(1);\n\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (element) {\n element.sortDirection = sortItem.sort.toUpperCase();\n } else {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: sortItem.sort.toUpperCase()\n });\n }\n });\n }\n\n // handle server-side filtering on ag-grid\n if (Object.keys(filterModel).length) {\n const filterElements = searchObject.filterElements;\n Object.keys(filterModel).forEach((key) => {\n const filterItem = filterModel[key];\n const formattedPropertyName =\n key.charAt(0).toUpperCase() + key.slice(1);\n\n const element = filterElements.find(\n (element) => element.searchField === formattedPropertyName\n );\n if (element) {\n element.searchValue = filterItem.filter;\n element.searchOperator = FilterOperators[filterItem.type];\n } else {\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: filterItem.filter,\n searchOperator: FilterOperators[filterItem.type]\n });\n }\n });\n }\n\n // construct search for initial grouping\n if (rowGroupCols.length && !groupKeys.length) {\n const formattedPropertyName =\n rowGroupCols[0].field.charAt(0).toUpperCase() +\n rowGroupCols[0].field.slice(1);\n\n searchObject.groupingType = SearchGroupingType.Distinct;\n if (!searchObject.groupProperty.includes(formattedPropertyName)) {\n searchObject.groupProperty.push(formattedPropertyName);\n\n const orderElements = searchObject.orderElements;\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (!element) {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: SearchSortDirection.Asc\n });\n }\n }\n }\n\n // construct the filter for grouped columns\n if (groupKeys.length) {\n // construct search for last grouped element\n if (groupKeys.length === rowGroupCols.length) {\n searchObject.groupingType = '';\n const filterElements = searchObject.filterElements;\n groupKeys.forEach((key, index) => {\n const rowGroupCol = rowGroupCols[index];\n const formattedPropertyName =\n rowGroupCol.field.charAt(0).toUpperCase() +\n rowGroupCol.field.slice(1);\n\n const element = filterElements.find(\n (element) => element.searchField === formattedPropertyName\n );\n if (element) {\n element.searchValue = key;\n element.searchOperator = '=';\n } else {\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: key,\n searchOperator: '='\n });\n }\n });\n } else {\n // construct search for the next grouped element\n groupKeys.forEach((key, index) => {\n const formattedPropertyNameForSearch =\n rowGroupCols[index].field.charAt(0).toUpperCase() +\n rowGroupCols[index].field.slice(1);\n\n searchObject.filterElements.push({\n searchField: formattedPropertyNameForSearch,\n searchValue: key,\n searchOperator: '='\n });\n });\n\n searchObject.groupingType = SearchGroupingType.Distinct;\n const searchIndex = groupKeys.length;\n const rowGroupCol = rowGroupCols[searchIndex];\n const formattedPropertyName =\n rowGroupCol.field.charAt(0).toUpperCase() +\n rowGroupCol.field.slice(1);\n\n if (!searchObject.groupProperty.includes(formattedPropertyName)) {\n searchObject.groupProperty.push(formattedPropertyName);\n\n const orderElements = searchObject.orderElements;\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (!element) {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: SearchSortDirection.Asc\n });\n }\n }\n }\n }\n\n if (\n !startRow &&\n rowGroupCols.length === 0 &&\n !sortModel.length &&\n !Object.keys(filterModel).length &&\n !groupKeys.length &&\n queryData\n ) {\n if (queryData.pageList && queryData.pageList) {\n params.successCallback(queryData.pageList, queryData.total);\n } else {\n // TODO: add an overlay to display no rows\n params.successCallback([], 0);\n }\n } else {\n let response = null;\n if (executeQuery) {\n const data = { data: searchObject };\n response = await executeQuery(data, apiMethodId);\n }\n const rowData = response?.data;\n if (rowData) {\n if (rowData?.pageList?.length > 0) {\n params.successCallback(rowData.pageList, rowData.total);\n } else {\n params.successCallback([], 0);\n }\n } else {\n params.successCallback([], 0);\n }\n }\n }\n };\n};\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { useAgGridApi, AgTable } from '../../utilities/aggrid/AgTable.tsx';\nimport {\n useGridFormat,\n useExport\n} from '../../utilities/aggrid/GridFunctions.js';\nimport { PrimaryActionHeader } from '../../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { ServerSideRowModelModule } from '@ag-grid-enterprise/server-side-row-model';\nimport { camelToPascalCaseWithSpace } from '../../utilities/input/StringUtilities';\nimport { InquirySearchDatasource } from './InquirySearchDatasource';\nimport { getSearchIdentifiers } from '../../utilities/search/SearchUtilities';\nimport { LogicalSearchOperatorEnums } from '../../enums/unitySystemEnums.ts';\nimport { sortBy } from 'lodash';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: (props) => {\n const rowCount =\n props?.queryData?.pageList?.length > 10\n ? 10\n : props?.queryData?.pageList?.length ?? 0;\n const topResultsOnlyHeight = rowCount * 48 + 60;\n const moreResultsHeight = rowCount * 48 + 116;\n return props.topResultsOnly ? topResultsOnlyHeight : moreResultsHeight;\n }\n }\n}));\n\nexport const InquirySearchTable = (props) => {\n const {\n apiMethodId,\n associatedInquiryTree,\n catalogReturnObject,\n catalogObjects,\n columns,\n executeQuery,\n queryColumnsData,\n isAdvancedSearch,\n onRowDoubleClick,\n queryData,\n searchFilterElements,\n searchFilterGroups,\n setSelectedSearchRows,\n treeStructure,\n topResultsOnly = false,\n topResultsSize = 50\n } = props;\n\n const classes = useStyles(props);\n const { gridApi, onGridReady } = useAgGridApi();\n const [agGridOptions] = useState({});\n const [gridFormat] = useGridFormat();\n const [exportGrid] = useExport();\n\n const searchIdentifier = useMemo(() => {\n const identifiers =\n getSearchIdentifiers(catalogObjects, catalogReturnObject) || [];\n return identifiers.toString();\n }, [catalogObjects, catalogReturnObject]);\n\n const columnDefs = useMemo(() => {\n let commonCols = columns.map((column) => {\n let matchingColumnIndex = null;\n const matchingColumn = queryColumnsData.find((c, index) => {\n if (c.name === column?.name) {\n matchingColumnIndex = index;\n }\n return c.name === column?.name;\n });\n\n let def = {\n headerName: column.alias || camelToPascalCaseWithSpace(column.name),\n field: column.name\n // cellStyle: (params) => ValidateCellStylesByConditionals(params, column)\n };\n if (matchingColumn) {\n def = {\n headerName:\n matchingColumn.alias ||\n camelToPascalCaseWithSpace(matchingColumn.name),\n field: matchingColumn.name\n };\n }\n\n if (column?.extendedProperties?.searchable) {\n def = {\n ...def,\n filter: 'agTextColumnFilter',\n filterParams: {\n suppressAndOrCondition: true,\n filterOptions: [\n 'equals',\n 'contains',\n 'notEqual',\n 'greaterThan',\n 'lessThan',\n 'greaterThanOrEqual',\n 'lessThanOrEqual'\n ]\n },\n enableRowGroup: true\n };\n }\n if (column?.extendedProperties?.orderable) {\n def = {\n ...def,\n sortable: true\n };\n }\n def.hide = !matchingColumn;\n def.index = matchingColumnIndex;\n return def;\n });\n\n const currentNode = treeStructure.find(\n (node) => node.properties?.catalogReturnObject === catalogReturnObject\n );\n const searchConfiguration =\n currentNode?.properties?.searchConfiguration || null;\n let requiresOrdering = false;\n if (searchConfiguration) {\n requiresOrdering = searchConfiguration.some(\n (config) => !!config.results.trim()\n );\n }\n if (requiresOrdering) {\n // Sort columns using the searchConfiguration results\n const searchConfigWithResults = searchConfiguration.filter(\n (config) => !!config.results\n );\n commonCols.forEach((col) => {\n col.index = null;\n const foundSearchConfig = searchConfigWithResults.find(\n (config) => config.name === col.field\n );\n if (foundSearchConfig) {\n col.index = parseFloat(foundSearchConfig.results);\n }\n });\n }\n // Sort columns\n commonCols = sortBy(commonCols, (col) => col.index);\n return commonCols;\n }, [columns, queryColumnsData, treeStructure, catalogReturnObject]);\n\n const defaultColDef = useMemo(\n () => ({\n resizable: true,\n editable: false,\n // filter: true,\n enableValue: true,\n allowedAggFuncs: ['sum', 'min', 'max', 'count', 'avg', 'first', 'last']\n }),\n []\n );\n\n const rowData = useMemo(() => {\n if (!queryData) return [];\n return queryData?.pageList?.slice(0, topResultsSize);\n }, [queryData, topResultsSize]);\n\n const handleSelectionChanged = useCallback(() => {\n const selectedRows = gridApi.getSelectedRows();\n setSelectedSearchRows(\n catalogReturnObject,\n selectedRows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n );\n }, [\n gridApi,\n catalogReturnObject,\n setSelectedSearchRows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n ]);\n\n const handleRowDoubleClicked = useCallback(\n (event) => {\n if (!gridApi) return;\n if (onRowDoubleClick) {\n onRowDoubleClick(event.node.data, catalogReturnObject);\n }\n },\n [gridApi, onRowDoubleClick, catalogReturnObject]\n );\n\n useEffect(() => {\n if (!gridApi) return;\n gridApi.sizeColumnsToFit();\n let datasource = InquirySearchDatasource(\n queryData,\n apiMethodId,\n searchFilterElements,\n isAdvancedSearch\n ? LogicalSearchOperatorEnums.And\n : LogicalSearchOperatorEnums.Or,\n executeQuery,\n searchFilterGroups\n );\n // eslint-disable-next-line no-unused-expressions\n gridApi?.setServerSideDatasource(datasource);\n }, [\n gridApi,\n apiMethodId,\n searchFilterElements,\n queryData,\n isAdvancedSearch,\n executeQuery,\n searchFilterGroups\n ]);\n\n return (\n <div>\n {!topResultsOnly && (\n <>\n <PrimaryActionHeader\n hidePAB={true}\n // LAA UNT-2624: remove whitespace caused by the action row\n hideActionRow={true}\n expandAllItems={() => gridFormat(gridApi, 'expand')}\n collapse={() => gridFormat(gridApi, 'collapse')}\n resizeGrid={() => gridFormat(gridApi, 'resize')}\n exportGrid={() => exportGrid(gridApi, 'csv')}\n grid\n // value={value}\n // altInputs={value === 0 && childrenTabSwitcher}\n />\n <AgTable\n className={classes.root}\n modules={[ServerSideRowModelModule]}\n rowModelType={'serverSide'}\n serverSideStoreType={'partial'}\n pagination={true}\n paginationPageSize={20}\n cacheOverflowSize={2}\n maxConcurrentDatasourceRequests={1}\n cacheBlockSize={20}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n // getRowNodeId={row => row.channelConfigurationID}\n onRowDoubleClicked={handleRowDoubleClicked}\n rowSelection='multiple'\n rowMultiSelectWithClick={true}\n onSelectionChanged={handleSelectionChanged}\n // animateRows={true}\n api={gridApi}\n dynamicSizing\n {...agGridOptions}\n />\n </>\n )}\n {topResultsOnly && (\n <AgTable\n className={classes.root}\n rowData={rowData || []}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n // getRowNodeId={row => row.channelConfigurationID}\n onRowDoubleClicked={handleRowDoubleClicked}\n rowSelection='multiple'\n rowMultiSelectWithClick={true}\n onSelectionChanged={handleSelectionChanged}\n animateRows={true}\n api={gridApi}\n dynamicSizing\n {...agGridOptions}\n />\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles, LinearProgress } from '@material-ui/core';\nimport {\n getSearchObject,\n getSearchIdentifiers\n} from '../../utilities/search/SearchUtilities';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { InquirySearchTable } from './InquirySearchTable';\nimport clsx from 'clsx';\nimport { LogicalSearchOperatorEnums } from '../../enums/unitySystemEnums.ts';\nimport { useSearchFilterParamsMap } from '../../hooks/useSearchFilterParamsMap';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n overflowX: 'auto'\n },\n searchCard: {\n paddingBottom: theme.spacing(2)\n },\n emptyStateWrapper: {\n display: 'flex',\n justifyContent: 'center',\n paddingTop: '25vh'\n }\n}));\n\nexport const InquirySearchContainer = (props) => {\n const {\n advancedSearchItems,\n catalogObjects,\n classes: classProps,\n executeQueryAdHoc,\n isAdvancedSearch,\n loadSingleNode,\n onRowDoubleClick,\n searchItems,\n setSelectedSearchRows,\n apiMethodInstanceId\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n const [searchList, setSearchList] = useState(null);\n const [loading, setLoading] = useState(false);\n const {\n getQueryFilterElements,\n getQueryFilterGroups,\n getQuerySearchOperator\n } = useSearchFilterParamsMap();\n\n const getQueryColumnsData = useCallback((apiMethodInstance) => {\n if (!apiMethodInstance) return [];\n let catalogMods = [];\n try {\n const catalogModificationStr = apiMethodInstance.catalogModification;\n const catalogModification = JSON.parse(catalogModificationStr);\n catalogMods = catalogModification;\n } catch {\n console.warn('Error parsing apiMethodInstance catalogModification');\n }\n return catalogMods;\n }, []);\n\n useEffect(() => {\n if (!catalogObjects) {\n setLoading(true);\n }\n if (!searchItems || !catalogObjects?.length) return;\n setLoading(true);\n const promises = [];\n let list = [];\n const promiseIndexMap = {};\n const itemsList = !isAdvancedSearch\n ? searchItems\n : advancedSearchItems || [];\n itemsList.forEach((item, index) => {\n //Get filter elements, filter groups, and operator from query\n let filterElementsFromQuery = getQueryFilterElements(\n item.apiMethodInstance\n ); //will this handle groups? if there is group within data builder\n let filterGroups = getQueryFilterGroups(item.apiMethodInstance);\n const logicalOperatorFromQuery = getQuerySearchOperator(\n item.apiMethodInstance\n );\n // Assigning queryColumnsData object here to know which columns are hidden based on\n // data browser query\n item.queryColumnsData = getQueryColumnsData(item.apiMethodInstance);\n\n //create new outer filter group to contain all filters in data builder query\n let outerQueryGroupId = 0;\n let queryOuterGroup = null;\n if (!!filterElementsFromQuery.length) {\n outerQueryGroupId = filterGroups.length + 1;\n queryOuterGroup = {\n groupId: outerQueryGroupId,\n logicalSearchOperator: logicalOperatorFromQuery\n };\n }\n\n //create new outer filter group to contain all filters from tree builder\n let outerTreeBuilderGroupId = 0;\n let inquiryOuterGroup = null;\n if (!!item?.searchFilterElements?.length) {\n outerTreeBuilderGroupId = outerQueryGroupId + 1;\n inquiryOuterGroup = {\n groupId: outerTreeBuilderGroupId,\n logicalSearchOperator: isAdvancedSearch\n ? LogicalSearchOperatorEnums.And\n : LogicalSearchOperatorEnums.Or\n };\n }\n\n //make the new outer query group the parent of non parent query groups (top level groups)\n filterGroups = filterGroups.map((group) => {\n if (!group.parentGroupId) {\n group.parentGroupId = outerQueryGroupId;\n }\n return group;\n });\n\n //make the new outer group the group of filter elements with no group (top level filter elements)\n filterElementsFromQuery = filterElementsFromQuery.map((element) => {\n if (!element.groupId) {\n element.groupId = outerQueryGroupId;\n }\n return element;\n });\n\n //add outer tree builder group Id to all tree builder filter elements\n item.searchFilterElements = item.searchFilterElements.map((element) => {\n element.groupId = outerTreeBuilderGroupId;\n return element;\n });\n\n //combine data builder query filters and tree builder filters\n const searchFilterElements = filterElementsFromQuery.concat(\n item.searchFilterElements || []\n );\n\n // Reassigning searchFilterElements to use the data browser filter elements\n // and the searched one\n item.searchFilterElements = searchFilterElements;\n\n //add new outer filter groups to filter group array\n if (!!inquiryOuterGroup) {\n filterGroups.push(inquiryOuterGroup);\n }\n if (!!queryOuterGroup) {\n filterGroups.push(queryOuterGroup);\n }\n\n item.searchFilterGroups = filterGroups;\n\n const searchObject = getSearchObject(\n searchFilterElements,\n 1,\n null,\n false,\n LogicalSearchOperatorEnums.And,\n filterGroups\n );\n let shouldSearch = true;\n if (!searchFilterElements.some((sfe) => sfe.searchOperator !== '=')) {\n const equalsSearchFilterElements = searchFilterElements.filter(\n (sfe) => sfe.searchOperator === '='\n );\n if (!!equalsSearchFilterElements.length) {\n const catalogObject = catalogObjects.find(\n (co) => co.catalogObjectName === item.catalogReturnObject\n );\n const coProperties = catalogObject?.properties || [];\n if (!!coProperties.length) {\n equalsSearchFilterElements.forEach((esfe) => {\n if (!shouldSearch) {\n return;\n }\n const matchingProperty = coProperties.find(\n (cop) =>\n cop.name?.toLowerCase() === esfe.searchField?.toLowerCase()\n );\n\n if (matchingProperty?.type) {\n let compareNumber = true;\n let parsedValue = esfe.searchValue;\n switch (matchingProperty.type) {\n case 'int':\n const intRegex = /[^0-9]/;\n if (intRegex.test(esfe.searchValue)) {\n parsedValue = NaN;\n } else {\n parsedValue = parseInt(esfe.searchValue);\n }\n break;\n case 'double':\n case 'decimal':\n case 'float':\n const floatRegex = /[^0-9.]/;\n if (floatRegex.test(esfe.searchValue)) {\n parsedValue = NaN;\n } else {\n parsedValue = parseFloat(esfe.searchValue);\n }\n break;\n // Add additional handling for different types below\n default:\n compareNumber = false;\n break;\n }\n if (compareNumber && isNaN(parsedValue)) {\n shouldSearch = false;\n }\n }\n });\n }\n }\n }\n if (shouldSearch && executeQueryAdHoc) {\n const data = { data: searchObject };\n promiseIndexMap[promises.length] = index;\n promises.push(executeQueryAdHoc(data, item.apiMethodId));\n }\n list.push({ queryData: null, searchItem: item });\n });\n Promise.all(promises.map((p) => p.catch((e) => e))).then((responses) => {\n responses.forEach((response, i) => {\n const index = promiseIndexMap[i];\n if (response.status === 200) {\n const querySearchObj = list[index];\n querySearchObj.queryData = response.data;\n } else if (!response.status) {\n // handle response error\n const querySearchObj = list[index];\n console.error(\n `Retrieval Error Occured for ${querySearchObj?.searchItem?.catalogReturnObject}`\n );\n }\n });\n let matchingItem = list.find(\n (item) =>\n item?.searchItem?.apiMethodInstance?.apiMethodInstanceId ===\n apiMethodInstanceId && item?.queryData?.pageList?.length === 1\n );\n\n // Fallback to first item with single entry\n if (!matchingItem) {\n matchingItem = list.find(\n (item) => item?.queryData?.pageList?.length === 1\n );\n }\n\n if (matchingItem) {\n const querySearchObj = matchingItem;\n const node = {};\n const searchItem = querySearchObj?.searchItem;\n const identifiers =\n getSearchIdentifiers(\n catalogObjects,\n searchItem.catalogReturnObject\n ) || [];\n node[searchItem.catalogReturnObject] = {\n rows: matchingItem?.queryData?.pageList,\n apiMethodId: searchItem.apiMethodId,\n searchIdentifier: identifiers.toString(),\n treeStructure: searchItem.treeStructure\n };\n\n loadSingleNode(node);\n }\n\n setSearchList(list);\n setLoading(false);\n });\n }, [\n searchItems,\n isAdvancedSearch,\n advancedSearchItems,\n loadSingleNode,\n catalogObjects,\n executeQueryAdHoc,\n getQueryFilterElements,\n getQueryColumnsData,\n getQueryFilterGroups,\n getQuerySearchOperator,\n apiMethodInstanceId\n ]);\n\n return (\n <div className={clsx(classes.root, root)}>\n {loading && <LinearProgress />}\n {searchList?.map((searchObj) => {\n return (\n <div\n key={searchObj.searchItem.catalogReturnObject}\n className={classes.searchCard}\n >\n <AmbientCard\n key={`${searchObj.searchItem.catalogReturnObject}-${searchObj?.queryData?.total}`}\n title={`${getSanitizedName(\n searchObj.searchItem.catalogReturnObject\n )} - ${\n searchObj.error\n ? searchObj.error\n : searchObj?.queryData?.total || '0'\n }`}\n moreMessage='Top 10 results...'\n moreButton='Load More'\n moreButtonExpanded='Minimize'\n more={!!searchObj?.queryData?.pageList?.length}\n header\n fullWidth\n globalToggle\n collapseChildrenWhenExpanded\n toggleGlobalExpanded={!!searchObj?.queryData?.total}\n extendedList={\n <InquirySearchTable\n key={searchObj.searchItem.id}\n queryData={searchObj.queryData || []}\n columns={searchObj.searchItem.columns}\n apiMethodId={searchObj.searchItem.apiMethodId}\n searchFilterElements={\n searchObj.searchItem.searchFilterElements\n }\n searchFilterGroups={searchObj.searchItem.searchFilterGroups}\n catalogReturnObject={searchObj.searchItem.catalogReturnObject}\n setSelectedSearchRows={setSelectedSearchRows}\n catalogObjects={catalogObjects}\n treeStructure={searchObj.searchItem.treeStructure}\n associatedInquiryTree={\n searchObj.searchItem.associatedInquiryTree || null\n }\n onRowDoubleClick={onRowDoubleClick}\n isAdvancedSearch={isAdvancedSearch}\n executeQuery={executeQueryAdHoc}\n queryColumnsData={searchObj.searchItem.queryColumnsData}\n />\n }\n >\n {!!searchObj?.queryData?.pageList?.length && (\n <InquirySearchTable\n key={searchObj.searchItem.id}\n queryData={searchObj.queryData || []}\n columns={searchObj.searchItem.columns}\n apiMethodId={searchObj.searchItem.apiMethodId}\n searchFilterElements={\n searchObj.searchItem.searchFilterElements\n }\n searchFilterGroups={searchObj.searchItem.searchFilterGroups}\n catalogReturnObject={searchObj.searchItem.catalogReturnObject}\n setSelectedSearchRows={setSelectedSearchRows}\n catalogObjects={catalogObjects}\n treeStructure={searchObj.searchItem.treeStructure}\n associatedInquiryTree={\n searchObj.searchItem.associatedInquiryTree || null\n }\n onRowDoubleClick={onRowDoubleClick}\n topResultsOnly={true}\n topResultsSize={10}\n isAdvancedSearch={isAdvancedSearch}\n executeQuery={executeQueryAdHoc}\n queryColumnsData={searchObj.searchItem.queryColumnsData}\n />\n )}\n </AmbientCard>\n </div>\n );\n })}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InquirySearchContainer-DLkAOjWJ.js","names":["useStyles","uuid","useStyles","Form","element","useStyles"],"sources":["../src/inquiry/search/InquiryAdvancedSearchForm.jsx","../src/inquiry/search/InquiryAdvancedSearch.jsx","../src/inquiry/search/InquirySearchDatasource.js","../src/inquiry/search/InquirySearchTable.jsx","../src/inquiry/search/InquirySearchContainer.jsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect } from 'react';\nimport { makeStyles, Divider, Typography } from '@material-ui/core';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { SearchOperators } from '../../models/SearchOperator.ts';\nimport clsx from 'clsx';\nimport { v4 as uuid } from 'uuid';\nimport { PropertyTypeEnum } from '../../enums/propertyTypeEnums.ts';\nimport { PropertyField } from '../../UI/property/PropertyFields';\nimport { LookupTypeEnums } from '../../enums/unitySystemEnums.ts';\nimport { csvStrToArrayOfObjects } from '../../utilities/input/SelectUtilities';\nimport { useForm } from 'react-final-form';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n overflowX: 'auto'\n },\n fieldRow: { display: 'flex', alignItems: 'center' },\n dividerContainer: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%'\n },\n divider: { width: '100%', marginTop: theme.spacing(1) },\n autocompleteRoot: {\n width: '38%',\n marginRight: theme.spacing(1)\n }\n}));\n\nexport const InquiryAdvancedSearchForm = (props) => {\n const {\n advancedSearchFields,\n selectedSearchOperators,\n setSelectedSearchOperators,\n catalogProperties,\n entityType,\n lookupPropertyNames,\n classes: classProps,\n executeQueryWithParameters,\n setForm\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n\n const form = useForm();\n\n const handleSearchOperatorChange = useCallback(\n (value, fieldName) => {\n if (fieldName) {\n let updatedSelectedSearchOps = {};\n if (selectedSearchOperators) {\n updatedSelectedSearchOps = { ...selectedSearchOperators };\n }\n updatedSelectedSearchOps[fieldName] = value;\n setSelectedSearchOperators(updatedSelectedSearchOps);\n }\n },\n [selectedSearchOperators, setSelectedSearchOperators]\n );\n\n const getPropertyWidgetType = (type, useLookup) => {\n if (!type) {\n return null;\n }\n let propertyWidgetType = '';\n switch (type) {\n case PropertyTypeEnum.Int:\n case PropertyTypeEnum.Long:\n propertyWidgetType = 'IntegerWidget';\n break;\n case PropertyTypeEnum.DateTime:\n propertyWidgetType = 'DateTimeWidget';\n break;\n case PropertyTypeEnum.Boolean:\n propertyWidgetType = 'BooleanWidget';\n break;\n default:\n propertyWidgetType = 'TextWidget';\n }\n\n if (\n useLookup === LookupTypeEnums.Api ||\n useLookup === LookupTypeEnums.Csv\n ) {\n propertyWidgetType = 'AutoCompleteWidget';\n }\n\n return propertyWidgetType;\n };\n\n const getPropertyTypeSearchOperators = useCallback((type) => {\n if (!type) {\n return [];\n }\n switch (type) {\n case PropertyTypeEnum.Boolean:\n return SearchOperators.filter((operator) => operator.value === '=');\n default:\n return SearchOperators;\n }\n }, []);\n\n const fieldRows = useMemo(() => {\n if (!advancedSearchFields || !catalogProperties) {\n return [];\n }\n const keys = Object.keys(advancedSearchFields);\n\n const arrayOfFields = keys.reduce((list, key) => {\n const groupedItems = advancedSearchFields[key];\n let groupHeader = '';\n const foundGroupItem = groupedItems.find((item) => !!item.groupHeader);\n if (foundGroupItem) {\n groupHeader = foundGroupItem.groupHeader;\n }\n list.push({ groupHeader: groupHeader, isDivider: true, id: uuid() });\n groupedItems.forEach(async (item) => {\n const foundProperty = catalogProperties.find(\n (property) => property.name === item.name\n );\n const propertyWidgetType = getPropertyWidgetType(\n foundProperty?.type,\n foundProperty?.extendedProperties?.useLookup\n );\n let apiLookupOptions = null;\n if (\n !item.searchable &&\n !foundProperty?.extendedProperties?.searchable\n ) {\n return;\n }\n if (\n lookupPropertyNames.includes(foundProperty?.name) &&\n foundProperty?.extendedProperties?.useLookup === LookupTypeEnums.Api\n ) {\n // TODO: handle getting lookup data with api call\n // const response = await executeQueryWithParameters(\n // 'aa5d1fe1-1128-4d08-9ddb-58ad4fcf00e4'\n // );\n // console.log(response?.data);\n }\n list.push({\n ...item,\n isDivider: false,\n type: foundProperty?.type,\n propertyWidgetType: propertyWidgetType,\n useLookup: foundProperty?.extendedProperties?.useLookup,\n lookup: foundProperty?.extendedProperties?.lookup,\n apiLookupOptions: apiLookupOptions\n });\n });\n return list;\n }, []);\n return arrayOfFields;\n }, [advancedSearchFields, catalogProperties, lookupPropertyNames]);\n\n const getPropertyFields = useCallback(\n (config) => {\n const searchOperator = selectedSearchOperators\n ? selectedSearchOperators[config?.name]?.value\n : null;\n let options = [];\n if (config?.useLookup === LookupTypeEnums.Csv) {\n options = csvStrToArrayOfObjects(config?.lookup);\n }\n if (searchOperator === 'BETWEEN') {\n return (\n <div style={{ display: 'block', width: '100%' }}>\n <PropertyField\n propertyType={entityType}\n property={{\n key: config?.name,\n label: `${config?.columnName} (From)`,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n <PropertyField\n propertyType={entityType}\n property={{\n key: `${config?.name}:between`,\n label: `${config?.columnName} (To)`,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n </div>\n );\n }\n\n return (\n <PropertyField\n propertyType={entityType}\n property={{\n key: config?.name,\n label: config?.columnName,\n type: config?.propertyWidgetType,\n options: options || [],\n valueName: 'value'\n }}\n />\n );\n },\n [entityType, selectedSearchOperators]\n );\n\n const fieldComponents = useMemo(() => {\n if (!fieldRows || !fieldRows.length) {\n return null;\n }\n return fieldRows.map((config) => {\n return (\n <div key={config?.id}>\n {!config?.isDivider && (\n <div className={classes.fieldRow}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryAdvancedSearchForm-Text'\n udprecordid='udpRecord-InquiryAdvancedSearchForm-Text'\n label='Operator'\n name='searchOperator'\n variant='outlined'\n margin='dense'\n size='small'\n options={getPropertyTypeSearchOperators(config?.type) || []}\n optionKey='label'\n value={\n (selectedSearchOperators &&\n selectedSearchOperators[config?.name]) ||\n ''\n }\n onChange={(value) =>\n handleSearchOperatorChange(value, config?.name)\n }\n classes={{ autocompleteRoot: classes.autocompleteRoot }}\n />\n {getPropertyFields(config)}\n </div>\n )}\n {config?.isDivider && (\n <div className={classes.dividerContainer}>\n <div className={classes.divider}>\n <Divider orientation='horizontal' />\n </div>\n {config?.groupHeader && (\n <div\n style={{\n marginRight: 8,\n marginLeft: 8,\n textAlign: 'center',\n whiteSpace: 'nowrap'\n }}\n >\n <Typography variant='caption'>\n {config?.groupHeader}\n </Typography>\n </div>\n )}\n <div className={classes.divider}>\n <Divider orientation='horizontal' />\n </div>\n </div>\n )}\n </div>\n );\n });\n }, [\n fieldRows,\n classes,\n handleSearchOperatorChange,\n selectedSearchOperators,\n getPropertyTypeSearchOperators,\n getPropertyFields\n ]);\n\n useEffect(() => {\n if (form) {\n setForm(form);\n }\n }, [form, setForm]);\n\n return <div className={clsx(classes.root, root)}>{fieldComponents}</div>;\n};\n","import React, { useState, useMemo, useEffect, useCallback } from 'react';\nimport { makeStyles, Divider, Typography } from '@material-ui/core';\nimport { SubmitButton } from '../../utilities/form/SubmitButton.tsx';\nimport { Form } from '../../utilities/form/Form.tsx';\nimport { FormButtons } from '../../utilities/form/FormButtons.tsx';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { orderBy } from 'lodash';\nimport { InquiryAdvancedSearchForm } from './InquiryAdvancedSearchForm';\nimport { LookupTypeEnums } from '../../enums/unitySystemEnums.ts';\nimport { SearchOperators } from '../../models/SearchOperator.ts';\nimport { FluentIconButton } from '../../UI/inputs/buttons/FluentIconButton';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport { ClearIcon } from '@fluentui/react-icons';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities.js';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n entitySelect: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n fieldsRoot: {\n height: (props) => 'calc(100vh - 288px)'\n },\n title: {\n display: 'flex',\n justifyContent: 'space-between',\n margin: theme.spacing(1)\n },\n buttonWrapper: {\n textAlign: 'center'\n },\n button: {\n textTransform: 'none',\n padding: 0,\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0)'\n },\n color: theme.palette.secondary\n }\n}));\n\nexport const InquiryAdvancedSearch = (props) => {\n const {\n entityList,\n onSubmit,\n currentNodeCatalogReturnObject,\n catalogObjects,\n entityValue,\n setEntityValue,\n changeSideBarView,\n tree,\n executeQueryWithParameters\n } = props;\n const classes = useStyles(props);\n\n const [initialSelectedSearchOperators, setInitialSelectedSearchOperators] =\n useState(null);\n const [selectedSearchOperators, setSelectedSearchOperators] = useState(null);\n const [form, setForm] = useState(null);\n\n const entityTree = useMemo(() => {\n if (!entityValue || !tree) {\n return null;\n }\n const matchingEntityTree = tree.treeStructure.find(\n (node) => node.properties.catalogReturnObject === entityValue.value\n );\n let nodeTree = tree;\n if (matchingEntityTree?.properties?.associatedInquiryTree) {\n nodeTree = matchingEntityTree?.properties?.associatedInquiryTree;\n }\n return nodeTree;\n }, [tree, entityValue]);\n\n const catalogProperties = useMemo(() => {\n if (!entityValue || !catalogObjects) {\n return [];\n }\n const foundCatalogObject = catalogObjects.find(\n (catalog) => catalog.catalogObjectName === entityValue.value\n );\n return foundCatalogObject?.properties || [];\n }, [catalogObjects, entityValue]);\n\n const advancedSearchFields = useMemo(() => {\n if (!entityTree) {\n return null;\n }\n const parentNode = entityTree.treeStructure.find((node) => !node.parentId);\n const advancedSearchConfiguration =\n parentNode?.properties?.searchConfiguration?.filter(\n (config) => config.advancedSearch\n );\n advancedSearchConfiguration?.forEach(\n (config) =>\n (config.advancedSearch = Number.parseFloat(config.advancedSearch))\n );\n const orderedSearchConfiguration = orderBy(\n advancedSearchConfiguration,\n ['advancedSearch'],\n ['asc']\n );\n\n const groupedAndOrderdFields = {};\n\n orderedSearchConfiguration.forEach((config) => {\n const wholeInt = Math.floor(config.advancedSearch);\n if (!groupedAndOrderdFields[wholeInt]) {\n groupedAndOrderdFields[wholeInt] = [config];\n } else {\n groupedAndOrderdFields[wholeInt].push(config);\n }\n });\n return groupedAndOrderdFields;\n }, [entityTree]);\n\n const asCatalogLookupPropertyNames = useMemo(() => {\n if (!entityTree) {\n return [];\n }\n const parentNode = entityTree.treeStructure.find((node) => !node.parentId);\n const advancedSearchPropertyName =\n parentNode?.properties?.searchConfiguration\n ?.filter((config) => config.advancedSearch)\n .map((asConfig) => asConfig.name);\n const filteredProperties = catalogProperties.filter((property) =>\n advancedSearchPropertyName?.includes(property.name)\n );\n const lookupPropertyNames = [];\n filteredProperties.forEach((property) => {\n if (\n property?.extendedProperties?.useLookup !== LookupTypeEnums.No_Lookup ||\n !property?.extendedProperties?.useLookup\n ) {\n lookupPropertyNames.push(property.name);\n }\n });\n return lookupPropertyNames;\n }, [catalogProperties, entityTree]);\n\n const handleEntityChange = (value) => {\n setEntityValue(value);\n };\n\n const handleOnSubmit = useCallback(\n (values) => {\n if (onSubmit) {\n onSubmit(\n values,\n selectedSearchOperators,\n entityValue?.value,\n asCatalogLookupPropertyNames\n );\n }\n },\n [\n onSubmit,\n selectedSearchOperators,\n entityValue,\n asCatalogLookupPropertyNames\n ]\n );\n\n const handleClearFilter = useCallback(() => {\n if (form) {\n form.reset();\n }\n setSelectedSearchOperators(initialSelectedSearchOperators);\n }, [initialSelectedSearchOperators, form]);\n\n useEffect(() => {\n if (entityList?.length) {\n const foundEntity = entityList.find(\n (entity) => entity.value === currentNodeCatalogReturnObject\n );\n if (foundEntity) {\n setEntityValue(foundEntity);\n }\n }\n }, [entityList, currentNodeCatalogReturnObject, setEntityValue]);\n\n useEffect(() => {\n if (advancedSearchFields) {\n const mergedFields = [].concat.apply(\n [],\n Object.values(advancedSearchFields)\n );\n const initialSearchOperators = mergedFields.reduce((operators, field) => {\n if (field.advancedSearchOperator) {\n const foundOperator = SearchOperators.find(\n (op) => op.value === field.advancedSearchOperator\n );\n operators[field.name] = foundOperator ?? SearchOperators[0];\n } else {\n operators[field.name] = SearchOperators[0];\n }\n return operators;\n }, {});\n\n setInitialSelectedSearchOperators(initialSearchOperators);\n setSelectedSearchOperators(initialSearchOperators);\n }\n }, [advancedSearchFields]);\n\n return (\n <div className={classes.root}>\n <div>\n <Divider />\n </div>\n <div className={classes.title}>\n <Typography variant='subtitle1'>Advanced Search</Typography>\n <FluentIconButton\n id='udpRecord-InquiryAdvancedSearch-ClearIcon'\n udprecordid='udpRecord-InquiryAdvancedSearch-ClearIcon'\n icon={ClearIcon}\n onClick={() => changeSideBarView(0)}\n />\n </div>\n <div className={classes.entitySelect}>\n <FluentTextFieldAutoComplete\n id='udpRecord-InquiryAdvancedSearch-TextField'\n udprecordid='udpRecord-InquiryAdvancedSearch-TextField'\n label='Entity'\n variant='outlined'\n margin='normal'\n size='small'\n fullWidth\n options={entityList}\n optionKey='label'\n value={entityValue}\n onChange={handleEntityChange}\n />\n </div>\n <Form onSubmit={handleOnSubmit}>\n <InquiryAdvancedSearchForm\n advancedSearchFields={advancedSearchFields}\n selectedSearchOperators={selectedSearchOperators}\n setSelectedSearchOperators={setSelectedSearchOperators}\n catalogProperties={catalogProperties}\n entityType={getSanitizedName(entityValue?.value)}\n lookupPropertyNames={asCatalogLookupPropertyNames}\n classes={{ root: classes.fieldsRoot }}\n executeQueryWithParameters={executeQueryWithParameters}\n setForm={setForm}\n />\n <div className={classes.submitWrapper}>\n <div className={classes.buttonWrapper}>\n <FluentButton\n id='udpRecord-InquiryAdvancedSearch-ClearFilter'\n udprecordid='udpRecord-InquiryAdvancedSearch-ClearFilter'\n onClick={handleClearFilter}\n className={classes.button}\n >\n <Typography variant='subtitle1'>Clear Filter</Typography>\n </FluentButton>\n <FormButtons>\n <SubmitButton\n id='udpRecord-InquiryAdvancedSearch-Search'\n udprecordid='udpRecord-InquiryAdvancedSearch-Search'\n variant='contained'\n color='primary'\n disablePristine={false}\n disabled={!entityValue}\n fullWidth\n style={{ marginRight: 8, marginLeft: 8 }}\n >\n Search\n </SubmitButton>\n </FormButtons>\n </div>\n </div>\n </Form>\n </div>\n );\n};\n","import { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { FilterOperators } from '../../models/SearchOperator.ts';\nimport {\n SearchGroupingType,\n SearchSortDirection,\n LogicalSearchOperatorEnums\n} from '../../enums/unitySystemEnums.ts';\n\nexport const InquirySearchDatasource = (\n queryData,\n apiMethodId,\n searchFilterElements,\n logicalSearchOperator = LogicalSearchOperatorEnums.And,\n executeQuery,\n searchFilterGroups\n) => {\n return {\n async getRows(params) {\n const {\n startRow,\n endRow,\n rowGroupCols,\n groupKeys,\n valueCols,\n filterModel,\n sortModel\n } = params.request;\n const page = endRow / 20;\n const searchObject = getSearchObject(\n searchFilterElements,\n page,\n null,\n false,\n logicalSearchOperator,\n searchFilterGroups\n );\n\n // handle server-side sorting on ag-grid\n if (sortModel.length) {\n const orderElements = searchObject.orderElements;\n sortModel.forEach((sortItem) => {\n const formattedPropertyName =\n sortItem.colId.charAt(0).toUpperCase() + sortItem.colId.slice(1);\n\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (element) {\n element.sortDirection = sortItem.sort.toUpperCase();\n } else {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: sortItem.sort.toUpperCase()\n });\n }\n });\n }\n\n // handle server-side filtering on ag-grid\n if (Object.keys(filterModel).length) {\n const filterElements = searchObject.filterElements;\n Object.keys(filterModel).forEach((key) => {\n const filterItem = filterModel[key];\n const formattedPropertyName =\n key.charAt(0).toUpperCase() + key.slice(1);\n\n const element = filterElements.find(\n (element) => element.searchField === formattedPropertyName\n );\n if (element) {\n element.searchValue = filterItem.filter;\n element.searchOperator = FilterOperators[filterItem.type];\n } else {\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: filterItem.filter,\n searchOperator: FilterOperators[filterItem.type]\n });\n }\n });\n }\n\n // construct search for initial grouping\n if (rowGroupCols.length && !groupKeys.length) {\n const formattedPropertyName =\n rowGroupCols[0].field.charAt(0).toUpperCase() +\n rowGroupCols[0].field.slice(1);\n\n searchObject.groupingType = SearchGroupingType.Distinct;\n if (!searchObject.groupProperty.includes(formattedPropertyName)) {\n searchObject.groupProperty.push(formattedPropertyName);\n\n const orderElements = searchObject.orderElements;\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (!element) {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: SearchSortDirection.Asc\n });\n }\n }\n }\n\n // construct the filter for grouped columns\n if (groupKeys.length) {\n // construct search for last grouped element\n if (groupKeys.length === rowGroupCols.length) {\n searchObject.groupingType = '';\n const filterElements = searchObject.filterElements;\n groupKeys.forEach((key, index) => {\n const rowGroupCol = rowGroupCols[index];\n const formattedPropertyName =\n rowGroupCol.field.charAt(0).toUpperCase() +\n rowGroupCol.field.slice(1);\n\n const element = filterElements.find(\n (element) => element.searchField === formattedPropertyName\n );\n if (element) {\n element.searchValue = key;\n element.searchOperator = '=';\n } else {\n filterElements.push({\n searchField: formattedPropertyName,\n searchValue: key,\n searchOperator: '='\n });\n }\n });\n } else {\n // construct search for the next grouped element\n groupKeys.forEach((key, index) => {\n const formattedPropertyNameForSearch =\n rowGroupCols[index].field.charAt(0).toUpperCase() +\n rowGroupCols[index].field.slice(1);\n\n searchObject.filterElements.push({\n searchField: formattedPropertyNameForSearch,\n searchValue: key,\n searchOperator: '='\n });\n });\n\n searchObject.groupingType = SearchGroupingType.Distinct;\n const searchIndex = groupKeys.length;\n const rowGroupCol = rowGroupCols[searchIndex];\n const formattedPropertyName =\n rowGroupCol.field.charAt(0).toUpperCase() +\n rowGroupCol.field.slice(1);\n\n if (!searchObject.groupProperty.includes(formattedPropertyName)) {\n searchObject.groupProperty.push(formattedPropertyName);\n\n const orderElements = searchObject.orderElements;\n const element = orderElements.find(\n (element) => element.sortColumn === formattedPropertyName\n );\n if (!element) {\n orderElements.push({\n sortColumn: formattedPropertyName,\n sortDirection: SearchSortDirection.Asc\n });\n }\n }\n }\n }\n\n if (\n !startRow &&\n rowGroupCols.length === 0 &&\n !sortModel.length &&\n !Object.keys(filterModel).length &&\n !groupKeys.length &&\n queryData\n ) {\n if (queryData.pageList && queryData.pageList) {\n params.successCallback(queryData.pageList, queryData.total);\n } else {\n // TODO: add an overlay to display no rows\n params.successCallback([], 0);\n }\n } else {\n let response = null;\n if (executeQuery) {\n const data = { data: searchObject };\n response = await executeQuery(data, apiMethodId);\n }\n const rowData = response?.data;\n if (rowData) {\n if (rowData?.pageList?.length > 0) {\n params.successCallback(rowData.pageList, rowData.total);\n } else {\n params.successCallback([], 0);\n }\n } else {\n params.successCallback([], 0);\n }\n }\n }\n };\n};\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { useAgGridApi, AgTable } from '../../utilities/aggrid/AgTable.tsx';\nimport {\n useGridFormat,\n useExport\n} from '../../utilities/aggrid/GridFunctions.js';\nimport { PrimaryActionHeader } from '../../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { ServerSideRowModelModule } from '@ag-grid-enterprise/server-side-row-model';\nimport { camelToPascalCaseWithSpace } from '../../utilities/input/StringUtilities';\nimport { InquirySearchDatasource } from './InquirySearchDatasource';\nimport { getSearchIdentifiers } from '../../utilities/search/SearchUtilities';\nimport { LogicalSearchOperatorEnums } from '../../enums/unitySystemEnums.ts';\nimport { sortBy } from 'lodash';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: (props) => {\n const rowCount =\n props?.queryData?.pageList?.length > 10\n ? 10\n : props?.queryData?.pageList?.length ?? 0;\n const topResultsOnlyHeight = rowCount * 48 + 60;\n const moreResultsHeight = rowCount * 48 + 116;\n return props.topResultsOnly ? topResultsOnlyHeight : moreResultsHeight;\n }\n }\n}));\n\nexport const InquirySearchTable = (props) => {\n const {\n apiMethodId,\n associatedInquiryTree,\n catalogReturnObject,\n catalogObjects,\n columns,\n executeQuery,\n queryColumnsData,\n isAdvancedSearch,\n onRowDoubleClick,\n queryData,\n searchFilterElements,\n searchFilterGroups,\n setSelectedSearchRows,\n treeStructure,\n topResultsOnly = false,\n topResultsSize = 50\n } = props;\n\n const classes = useStyles(props);\n const { gridApi, onGridReady } = useAgGridApi();\n const [agGridOptions] = useState({});\n const [gridFormat] = useGridFormat();\n const [exportGrid] = useExport();\n\n const searchIdentifier = useMemo(() => {\n const identifiers =\n getSearchIdentifiers(catalogObjects, catalogReturnObject) || [];\n return identifiers.toString();\n }, [catalogObjects, catalogReturnObject]);\n\n const columnDefs = useMemo(() => {\n let commonCols = columns.map((column) => {\n let matchingColumnIndex = null;\n const matchingColumn = queryColumnsData.find((c, index) => {\n if (c.name === column?.name) {\n matchingColumnIndex = index;\n }\n return c.name === column?.name;\n });\n\n let def = {\n headerName: column.alias || camelToPascalCaseWithSpace(column.name),\n field: column.name\n // cellStyle: (params) => ValidateCellStylesByConditionals(params, column)\n };\n if (matchingColumn) {\n def = {\n headerName:\n matchingColumn.alias ||\n camelToPascalCaseWithSpace(matchingColumn.name),\n field: matchingColumn.name\n };\n }\n\n if (column?.extendedProperties?.searchable) {\n def = {\n ...def,\n filter: 'agTextColumnFilter',\n filterParams: {\n suppressAndOrCondition: true,\n filterOptions: [\n 'equals',\n 'contains',\n 'notEqual',\n 'greaterThan',\n 'lessThan',\n 'greaterThanOrEqual',\n 'lessThanOrEqual'\n ]\n },\n enableRowGroup: true\n };\n }\n if (column?.extendedProperties?.orderable) {\n def = {\n ...def,\n sortable: true\n };\n }\n def.hide = !matchingColumn;\n def.index = matchingColumnIndex;\n return def;\n });\n\n const currentNode = treeStructure.find(\n (node) => node.properties?.catalogReturnObject === catalogReturnObject\n );\n const searchConfiguration =\n currentNode?.properties?.searchConfiguration || null;\n let requiresOrdering = false;\n if (searchConfiguration) {\n requiresOrdering = searchConfiguration.some(\n (config) => !!config.results.trim()\n );\n }\n if (requiresOrdering) {\n // Sort columns using the searchConfiguration results\n const searchConfigWithResults = searchConfiguration.filter(\n (config) => !!config.results\n );\n commonCols.forEach((col) => {\n col.index = null;\n const foundSearchConfig = searchConfigWithResults.find(\n (config) => config.name === col.field\n );\n if (foundSearchConfig) {\n col.index = parseFloat(foundSearchConfig.results);\n }\n });\n }\n // Sort columns\n commonCols = sortBy(commonCols, (col) => col.index);\n return commonCols;\n }, [columns, queryColumnsData, treeStructure, catalogReturnObject]);\n\n const defaultColDef = useMemo(\n () => ({\n resizable: true,\n editable: false,\n // filter: true,\n enableValue: true,\n allowedAggFuncs: ['sum', 'min', 'max', 'count', 'avg', 'first', 'last']\n }),\n []\n );\n\n const rowData = useMemo(() => {\n if (!queryData) return [];\n return queryData?.pageList?.slice(0, topResultsSize);\n }, [queryData, topResultsSize]);\n\n const handleSelectionChanged = useCallback(() => {\n const selectedRows = gridApi.getSelectedRows();\n setSelectedSearchRows(\n catalogReturnObject,\n selectedRows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n );\n }, [\n gridApi,\n catalogReturnObject,\n setSelectedSearchRows,\n searchIdentifier,\n apiMethodId,\n treeStructure,\n associatedInquiryTree\n ]);\n\n const handleRowDoubleClicked = useCallback(\n (event) => {\n if (!gridApi) return;\n if (onRowDoubleClick) {\n onRowDoubleClick(event.node.data, catalogReturnObject);\n }\n },\n [gridApi, onRowDoubleClick, catalogReturnObject]\n );\n\n useEffect(() => {\n if (!gridApi) return;\n gridApi.sizeColumnsToFit();\n let datasource = InquirySearchDatasource(\n queryData,\n apiMethodId,\n searchFilterElements,\n isAdvancedSearch\n ? LogicalSearchOperatorEnums.And\n : LogicalSearchOperatorEnums.Or,\n executeQuery,\n searchFilterGroups\n );\n // eslint-disable-next-line no-unused-expressions\n gridApi?.setServerSideDatasource(datasource);\n }, [\n gridApi,\n apiMethodId,\n searchFilterElements,\n queryData,\n isAdvancedSearch,\n executeQuery,\n searchFilterGroups\n ]);\n\n return (\n <div>\n {!topResultsOnly && (\n <>\n <PrimaryActionHeader\n hidePAB={true}\n // LAA UNT-2624: remove whitespace caused by the action row\n hideActionRow={true}\n expandAllItems={() => gridFormat(gridApi, 'expand')}\n collapse={() => gridFormat(gridApi, 'collapse')}\n resizeGrid={() => gridFormat(gridApi, 'resize')}\n exportGrid={() => exportGrid(gridApi, 'csv')}\n grid\n // value={value}\n // altInputs={value === 0 && childrenTabSwitcher}\n />\n <AgTable\n className={classes.root}\n modules={[ServerSideRowModelModule]}\n rowModelType={'serverSide'}\n serverSideStoreType={'partial'}\n pagination={true}\n paginationPageSize={20}\n cacheOverflowSize={2}\n maxConcurrentDatasourceRequests={1}\n cacheBlockSize={20}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n // getRowNodeId={row => row.channelConfigurationID}\n onRowDoubleClicked={handleRowDoubleClicked}\n rowSelection='multiple'\n rowMultiSelectWithClick={true}\n onSelectionChanged={handleSelectionChanged}\n // animateRows={true}\n api={gridApi}\n dynamicSizing\n {...agGridOptions}\n />\n </>\n )}\n {topResultsOnly && (\n <AgTable\n className={classes.root}\n rowData={rowData || []}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n // getRowNodeId={row => row.channelConfigurationID}\n onRowDoubleClicked={handleRowDoubleClicked}\n rowSelection='multiple'\n rowMultiSelectWithClick={true}\n onSelectionChanged={handleSelectionChanged}\n animateRows={true}\n api={gridApi}\n dynamicSizing\n {...agGridOptions}\n />\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles, LinearProgress } from '@material-ui/core';\nimport {\n getSearchObject,\n getSearchIdentifiers\n} from '../../utilities/search/SearchUtilities';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { InquirySearchTable } from './InquirySearchTable';\nimport clsx from 'clsx';\nimport { LogicalSearchOperatorEnums } from '../../enums/unitySystemEnums.ts';\nimport { useSearchFilterParamsMap } from '../../hooks/useSearchFilterParamsMap';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n overflowX: 'auto'\n },\n searchCard: {\n paddingBottom: theme.spacing(2)\n },\n emptyStateWrapper: {\n display: 'flex',\n justifyContent: 'center',\n paddingTop: '25vh'\n }\n}));\n\nexport const InquirySearchContainer = (props) => {\n const {\n advancedSearchItems,\n catalogObjects,\n classes: classProps,\n executeQueryAdHoc,\n isAdvancedSearch,\n loadSingleNode,\n onRowDoubleClick,\n searchItems,\n setSelectedSearchRows,\n apiMethodInstanceId\n } = props;\n const { root } = classProps || {};\n const classes = useStyles();\n const [searchList, setSearchList] = useState(null);\n const [loading, setLoading] = useState(false);\n const {\n getQueryFilterElements,\n getQueryFilterGroups,\n getQuerySearchOperator\n } = useSearchFilterParamsMap();\n\n const getQueryColumnsData = useCallback((apiMethodInstance) => {\n if (!apiMethodInstance) return [];\n let catalogMods = [];\n try {\n const catalogModificationStr = apiMethodInstance.catalogModification;\n const catalogModification = JSON.parse(catalogModificationStr);\n catalogMods = catalogModification;\n } catch {\n console.warn('Error parsing apiMethodInstance catalogModification');\n }\n return catalogMods;\n }, []);\n\n useEffect(() => {\n if (!catalogObjects) {\n setLoading(true);\n }\n if (!searchItems || !catalogObjects?.length) return;\n setLoading(true);\n const promises = [];\n let list = [];\n const promiseIndexMap = {};\n const itemsList = !isAdvancedSearch\n ? searchItems\n : advancedSearchItems || [];\n itemsList.forEach((item, index) => {\n //Get filter elements, filter groups, and operator from query\n let filterElementsFromQuery = getQueryFilterElements(\n item.apiMethodInstance\n ); //will this handle groups? if there is group within data builder\n let filterGroups = getQueryFilterGroups(item.apiMethodInstance);\n const logicalOperatorFromQuery = getQuerySearchOperator(\n item.apiMethodInstance\n );\n // Assigning queryColumnsData object here to know which columns are hidden based on\n // data browser query\n item.queryColumnsData = getQueryColumnsData(item.apiMethodInstance);\n\n //create new outer filter group to contain all filters in data builder query\n let outerQueryGroupId = 0;\n let queryOuterGroup = null;\n if (!!filterElementsFromQuery.length) {\n outerQueryGroupId = filterGroups.length + 1;\n queryOuterGroup = {\n groupId: outerQueryGroupId,\n logicalSearchOperator: logicalOperatorFromQuery\n };\n }\n\n //create new outer filter group to contain all filters from tree builder\n let outerTreeBuilderGroupId = 0;\n let inquiryOuterGroup = null;\n if (!!item?.searchFilterElements?.length) {\n outerTreeBuilderGroupId = outerQueryGroupId + 1;\n inquiryOuterGroup = {\n groupId: outerTreeBuilderGroupId,\n logicalSearchOperator: isAdvancedSearch\n ? LogicalSearchOperatorEnums.And\n : LogicalSearchOperatorEnums.Or\n };\n }\n\n //make the new outer query group the parent of non parent query groups (top level groups)\n filterGroups = filterGroups.map((group) => {\n if (!group.parentGroupId) {\n group.parentGroupId = outerQueryGroupId;\n }\n return group;\n });\n\n //make the new outer group the group of filter elements with no group (top level filter elements)\n filterElementsFromQuery = filterElementsFromQuery.map((element) => {\n if (!element.groupId) {\n element.groupId = outerQueryGroupId;\n }\n return element;\n });\n\n //add outer tree builder group Id to all tree builder filter elements\n item.searchFilterElements = item.searchFilterElements.map((element) => {\n element.groupId = outerTreeBuilderGroupId;\n return element;\n });\n\n //combine data builder query filters and tree builder filters\n const searchFilterElements = filterElementsFromQuery.concat(\n item.searchFilterElements || []\n );\n\n // Reassigning searchFilterElements to use the data browser filter elements\n // and the searched one\n item.searchFilterElements = searchFilterElements;\n\n //add new outer filter groups to filter group array\n if (!!inquiryOuterGroup) {\n filterGroups.push(inquiryOuterGroup);\n }\n if (!!queryOuterGroup) {\n filterGroups.push(queryOuterGroup);\n }\n\n item.searchFilterGroups = filterGroups;\n\n const searchObject = getSearchObject(\n searchFilterElements,\n 1,\n null,\n false,\n LogicalSearchOperatorEnums.And,\n filterGroups\n );\n let shouldSearch = true;\n if (!searchFilterElements.some((sfe) => sfe.searchOperator !== '=')) {\n const equalsSearchFilterElements = searchFilterElements.filter(\n (sfe) => sfe.searchOperator === '='\n );\n if (!!equalsSearchFilterElements.length) {\n const catalogObject = catalogObjects.find(\n (co) => co.catalogObjectName === item.catalogReturnObject\n );\n const coProperties = catalogObject?.properties || [];\n if (!!coProperties.length) {\n equalsSearchFilterElements.forEach((esfe) => {\n if (!shouldSearch) {\n return;\n }\n const matchingProperty = coProperties.find(\n (cop) =>\n cop.name?.toLowerCase() === esfe.searchField?.toLowerCase()\n );\n\n if (matchingProperty?.type) {\n let compareNumber = true;\n let parsedValue = esfe.searchValue;\n switch (matchingProperty.type) {\n case 'int':\n const intRegex = /[^0-9]/;\n if (intRegex.test(esfe.searchValue)) {\n parsedValue = NaN;\n } else {\n parsedValue = parseInt(esfe.searchValue);\n }\n break;\n case 'double':\n case 'decimal':\n case 'float':\n const floatRegex = /[^0-9.]/;\n if (floatRegex.test(esfe.searchValue)) {\n parsedValue = NaN;\n } else {\n parsedValue = parseFloat(esfe.searchValue);\n }\n break;\n // Add additional handling for different types below\n default:\n compareNumber = false;\n break;\n }\n if (compareNumber && isNaN(parsedValue)) {\n shouldSearch = false;\n }\n }\n });\n }\n }\n }\n if (shouldSearch && executeQueryAdHoc) {\n const data = { data: searchObject };\n promiseIndexMap[promises.length] = index;\n promises.push(executeQueryAdHoc(data, item.apiMethodId));\n }\n list.push({ queryData: null, searchItem: item });\n });\n Promise.all(promises.map((p) => p.catch((e) => e))).then((responses) => {\n responses.forEach((response, i) => {\n const index = promiseIndexMap[i];\n if (response.status === 200) {\n const querySearchObj = list[index];\n querySearchObj.queryData = response.data;\n } else if (!response.status) {\n // handle response error\n const querySearchObj = list[index];\n console.error(\n `Retrieval Error Occured for ${querySearchObj?.searchItem?.catalogReturnObject}`\n );\n }\n });\n let matchingItem = list.find(\n (item) =>\n item?.searchItem?.apiMethodInstance?.apiMethodInstanceId ===\n apiMethodInstanceId && item?.queryData?.pageList?.length === 1\n );\n\n // Fallback to first item with single entry\n if (!matchingItem) {\n matchingItem = list.find(\n (item) => item?.queryData?.pageList?.length === 1\n );\n }\n\n if (matchingItem) {\n const querySearchObj = matchingItem;\n const node = {};\n const searchItem = querySearchObj?.searchItem;\n const identifiers =\n getSearchIdentifiers(\n catalogObjects,\n searchItem.catalogReturnObject\n ) || [];\n node[searchItem.catalogReturnObject] = {\n rows: matchingItem?.queryData?.pageList,\n apiMethodId: searchItem.apiMethodId,\n searchIdentifier: identifiers.toString(),\n treeStructure: searchItem.treeStructure\n };\n\n loadSingleNode(node);\n }\n\n setSearchList(list);\n setLoading(false);\n });\n }, [\n searchItems,\n isAdvancedSearch,\n advancedSearchItems,\n loadSingleNode,\n catalogObjects,\n executeQueryAdHoc,\n getQueryFilterElements,\n getQueryColumnsData,\n getQueryFilterGroups,\n getQuerySearchOperator,\n apiMethodInstanceId\n ]);\n\n return (\n <div className={clsx(classes.root, root)}>\n {loading && <LinearProgress />}\n {searchList?.map((searchObj) => {\n return (\n <div\n key={searchObj.searchItem.catalogReturnObject}\n className={classes.searchCard}\n >\n <AmbientCard\n key={`${searchObj.searchItem.catalogReturnObject}-${searchObj?.queryData?.total}`}\n title={`${getSanitizedName(\n searchObj.searchItem.catalogReturnObject\n )} - ${\n searchObj.error\n ? searchObj.error\n : searchObj?.queryData?.total || '0'\n }`}\n moreMessage='Top 10 results...'\n moreButton='Load More'\n moreButtonExpanded='Minimize'\n more={!!searchObj?.queryData?.pageList?.length}\n header\n fullWidth\n globalToggle\n collapseChildrenWhenExpanded\n toggleGlobalExpanded={!!searchObj?.queryData?.total}\n extendedList={\n <InquirySearchTable\n key={searchObj.searchItem.id}\n queryData={searchObj.queryData || []}\n columns={searchObj.searchItem.columns}\n apiMethodId={searchObj.searchItem.apiMethodId}\n searchFilterElements={\n searchObj.searchItem.searchFilterElements\n }\n searchFilterGroups={searchObj.searchItem.searchFilterGroups}\n catalogReturnObject={searchObj.searchItem.catalogReturnObject}\n setSelectedSearchRows={setSelectedSearchRows}\n catalogObjects={catalogObjects}\n treeStructure={searchObj.searchItem.treeStructure}\n associatedInquiryTree={\n searchObj.searchItem.associatedInquiryTree || null\n }\n onRowDoubleClick={onRowDoubleClick}\n isAdvancedSearch={isAdvancedSearch}\n executeQuery={executeQueryAdHoc}\n queryColumnsData={searchObj.searchItem.queryColumnsData}\n />\n }\n >\n {!!searchObj?.queryData?.pageList?.length && (\n <InquirySearchTable\n key={searchObj.searchItem.id}\n queryData={searchObj.queryData || []}\n columns={searchObj.searchItem.columns}\n apiMethodId={searchObj.searchItem.apiMethodId}\n searchFilterElements={\n searchObj.searchItem.searchFilterElements\n }\n searchFilterGroups={searchObj.searchItem.searchFilterGroups}\n catalogReturnObject={searchObj.searchItem.catalogReturnObject}\n setSelectedSearchRows={setSelectedSearchRows}\n catalogObjects={catalogObjects}\n treeStructure={searchObj.searchItem.treeStructure}\n associatedInquiryTree={\n searchObj.searchItem.associatedInquiryTree || null\n }\n onRowDoubleClick={onRowDoubleClick}\n topResultsOnly={true}\n topResultsSize={10}\n isAdvancedSearch={isAdvancedSearch}\n executeQuery={executeQueryAdHoc}\n queryColumnsData={searchObj.searchItem.queryColumnsData}\n />\n )}\n </AmbientCard>\n </div>\n );\n })}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { t as ConfigService } from "./configService-C4uoG3wj.js";
|
|
2
2
|
import { t as useUser } from "./useUser-wpHGo6jU.js";
|
|
3
|
-
import { I as TreeViewModeEnums } from "./unitySystemEnums-
|
|
3
|
+
import { I as TreeViewModeEnums } from "./unitySystemEnums-CZDCsD5t.js";
|
|
4
4
|
import { n as useShellStore } from "./shellStore-C8zfPsZ-.js";
|
|
5
|
-
import { H as transformMenuPageTree } from "./TreeUtilities-
|
|
5
|
+
import { H as transformMenuPageTree } from "./TreeUtilities-jEhtZNg5.js";
|
|
6
6
|
import { t as useAxiosGet } from "./useAxiosGet-CYnt6Hd0.js";
|
|
7
7
|
import { t as useSetLocationState } from "./useSetLocationState-Kvcc9BTb.js";
|
|
8
8
|
import { t as PageContainer } from "./PageContainer-DTXNLt_2.js";
|
|
9
9
|
import { n as useBuildEnvironment, t as APP_RIBBON_SPACE } from "./useBuildEnvironment-2gdqpmBX.js";
|
|
10
10
|
import { t as NodeLoader } from "./NodeLoader-6vxxLuHg.js";
|
|
11
11
|
import { t as UtilitySideBar } from "./UtilitySideBar-wvrocDGI.js";
|
|
12
|
-
import { t as BaseTreeMenu } from "./BaseTreeMenu-
|
|
12
|
+
import { t as BaseTreeMenu } from "./BaseTreeMenu-Dg8MW4TD.js";
|
|
13
13
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
14
14
|
import { makeStyles } from "@material-ui/core";
|
|
15
15
|
import { Prompt, useHistory, useLocation } from "react-router-dom";
|
|
@@ -237,4 +237,4 @@ var MenuPage_default = MenuPage;
|
|
|
237
237
|
|
|
238
238
|
//#endregion
|
|
239
239
|
export { MenuPage_default as t };
|
|
240
|
-
//# sourceMappingURL=MenuPage-
|
|
240
|
+
//# sourceMappingURL=MenuPage-tkkhpco5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPage-fqEs3MSY.js","names":[],"sources":["../src/menuPage/MenuPage.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useHistory, useLocation, Prompt } from 'react-router-dom';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { makeStyles } from '@material-ui/core';\nimport { PageContainer } from '../page/PageContainer';\nimport { transformMenuPageTree } from '../utilities/tree/TreeUtilities';\nimport { BaseTreeMenu } from '../treeMenu/BaseTreeMenu';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useUser } from '../utilities/auth/useUser';\nimport { useShellStore } from '../stores/shellStore';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/useBuildEnvironment';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from '../configService';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flex: 1,\n minHeight: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n display: 'grid',\n gridTemplateAreas: ['sidebar content'].map((line) => `\"${line}\"`).join(' '),\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto 1fr'\n },\n sidebar: {\n gridArea: 'sidebar',\n marginRight: theme.spacing(1)\n },\n content: {\n gridArea: 'content',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n zIndex: 1,\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n overflowY: 'auto'\n },\n menuContent: {\n marginTop: theme.spacing(1),\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 116}px)`,\n overflowX: 'hidden'\n },\n loader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n }\n}));\n\n// Define a stable constant for empty headers to prevent useEffect loops\nconst EMPTY_HEADERS = {};\n\n// Helper to find a node deep in the tree (Moved outside to ensure stability)\nconst findNodeById = (nodes, id) => {\n if (!nodes || !id) return null;\n for (const node of nodes) {\n if (String(node.id) === String(id)) return node;\n if (node.children) {\n const found = findNodeById(node.children, id);\n if (found) return found;\n }\n }\n return null;\n};\n\nconst MenuPage = (props) => {\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const history = useHistory();\n const location = useLocation();\n const user = useUser();\n const { t } = useTranslation();\n const setLocationState = useSetLocationState();\n\n const {\n innerMenuOverride,\n mainContent,\n menuTitle,\n allowMissingPageParam = false,\n searchParamsTransformer\n } = props;\n\n // --- STATE ---\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n const { setSubHeaderActionHasChildren, setNavigationExpanded } = useShellStore();\n\n // --- DATA FETCHING ---\n const innerMenuId = location.pathname.replace('/menupage/', '');\n\n const [{ data: fetchedInnerMenu, loading: menuLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus/${innerMenuId}`,\n EMPTY_HEADERS,\n !innerMenuId,\n false\n );\n\n const innerMenu = innerMenuOverride ?? fetchedInnerMenu;\n\n // --- MEMOIZED DATA ---\n const menuItemsList = useMemo(() => {\n if (!innerMenu) return [];\n\n return innerMenu.menuItemInstanceStructureViews?.reduce((acc, menuInstance) => {\n const updatedMenu = transformMenuPageTree(menuInstance);\n if (updatedMenu) acc.push(updatedMenu);\n return acc;\n }, []) ?? [];\n }, [innerMenu]);\n\n // --- CORE REFACTOR: DERIVE SELECTED NODE ---\n const pageId = new URLSearchParams(location.search).get('page');\n\n const selectedNode = useMemo(() => {\n if (!menuItemsList.length) return null;\n\n // 1. Try to find the node requested in URL\n const found = findNodeById(menuItemsList, pageId);\n if (found) return found;\n\n // 2. Default to first item\n // Even if allowMissingPageParam is true, we still want to RETURN the node for rendering,\n // we just don't want the Redirector useEffect to force it into the URL.\n return menuItemsList[0];\n }, [menuItemsList, pageId]);\n\n // Fetch Page Data based on the derived node\n const [{ data: pageData, loading: pageLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${selectedNode?.properties?.page?.id}`,\n EMPTY_HEADERS,\n !selectedNode?.properties?.page?.id,\n false\n );\n\n // --- ACTIONS ---\n\n const buildSearchString = useCallback((params, node, menuIndex) => {\n if (typeof searchParamsTransformer === 'function') {\n const result = searchParamsTransformer({\n searchParams: params,\n node,\n menuIndex,\n location\n });\n if (result === null) return '';\n if (result instanceof URLSearchParams) return result.toString();\n if (typeof result === 'string') return result;\n if (result !== undefined) return String(result);\n }\n return params.toString();\n }, [location, searchParamsTransformer]);\n\n const handleSelectedNode = useCallback((node, menuIndex) => {\n // 1. Check if we are \"selecting\" the current node to clear query params if needed\n if (allowMissingPageParam) {\n const firstNode = menuItemsList?.[0];\n if (firstNode && String(node?.id) === String(firstNode.id)) {\n if (location.search) {\n history.replace({ pathname: location.pathname, search: '' });\n }\n setHasUnsavedChanges(false);\n return;\n }\n }\n\n // 2. Build URL\n const searchParams = new URLSearchParams(location.search);\n searchParams.set('page', node.id);\n const searchString = buildSearchString(searchParams, node, menuIndex);\n\n // 3. Navigate (The URL change will trigger the re-render & selectedNode update)\n history.push({\n pathname: location.pathname,\n search: searchString\n });\n\n // Note: We don't set 'selectedNode' manually anymore. It is derived.\n }, [history, location, allowMissingPageParam, menuItemsList, buildSearchString]);\n\n const handleSidebarExpandClick = useCallback(() => {\n setSidebarExpanded((expanded) => !expanded);\n }, []);\n\n const handleDropNode = useCallback(() => {\n // TODO: Implement if we need to for next Phase\n }, []);\n\n // --- EFFECTS ---\n\n // 1. URL SYNCHRONIZATION (The \"Redirector\")\n // Ensures URL matches the selected node (e.g. on initial load or default selection)\n useEffect(() => {\n if (selectedNode && !allowMissingPageParam) {\n const currentUrlId = new URLSearchParams(location.search).get('page');\n\n if (String(selectedNode.id) !== String(currentUrlId)) {\n const newParams = new URLSearchParams(location.search);\n newParams.set('page', selectedNode.id);\n\n history.replace({\n pathname: location.pathname,\n search: newParams.toString()\n });\n }\n }\n }, [selectedNode?.id, location.search, history, allowMissingPageParam]);\n\n // 2. UI CLEANUP (The \"Reactor\")\n // Runs only when the ACTUAL selected ID changes to reset UI state\n useEffect(() => {\n if (selectedNode?.id) {\n setNavigationExpanded(false);\n setHasUnsavedChanges(false);\n setSubHeaderActionHasChildren(false);\n }\n }, [selectedNode?.id, setNavigationExpanded, setSubHeaderActionHasChildren]);\n\n // 3. BREADCRUMB / LABEL SYNC\n useEffect(() => {\n if (innerMenu && location.state?.label !== t(innerMenu?.name)) {\n setLocationState({ label: t(innerMenu?.name) });\n }\n }, [setLocationState, t, innerMenu, location.state?.label]);\n\n\n // --- RENDER ---\n return (\n <DndProvider backend={HTML5Backend}>\n <Prompt\n when={hasUnsavedChanges}\n message='You have unsaved changes. Are you sure you want to leave this page?'\n />\n <div className={classes.root}>\n <div className={classes.sidebar}>\n <UtilitySideBar\n title={innerMenu?.name || menuTitle}\n isUsingChildren={true}\n resizable={true}\n removePadding={true}\n removeTopLayoutUnit={true}\n onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n collapsedWidth={64}\n >\n <div className={classes.menuContent} key={innerMenuId}>\n {menuItemsList?.length > 0 && !menuLoading &&\n menuItemsList.map((menuItems, index) => (\n <div key={menuItems.id} className={classes.nodeContainer}>\n <BaseTreeMenu\n menuItems={menuItems}\n onSelectNode={handleSelectedNode}\n onDropNode={handleDropNode}\n menuIndex={index}\n selectedNodeId={selectedNode?.id}\n selectedNodeParentId={selectedNode?.parentId}\n sidebarExpanded={sidebarExpanded}\n treeViewMode={TreeViewModeEnums.Classic}\n />\n </div>\n ))}\n {menuLoading && (\n <div className={classes.loader}>\n <NodeLoader loading={menuLoading} />\n </div>\n )}\n </div>\n </UtilitySideBar>\n </div>\n <div className={classes.content}>\n {mainContent ? (\n typeof mainContent === 'function'\n ? mainContent({ selectedNode, menuItemsList })\n : mainContent\n ) : (\n selectedNode?.properties?.page?.id && (\n <PageContainer\n user={user}\n key={selectedNode?.id}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={{\n pageId: pageData?.pageId,\n entityName: selectedNode?.properties?.page?.entity?.entityName,\n pbiReportCode: selectedNode?.properties?.page?.pbiReportCode,\n requiredFieldsMap: selectedNode?.properties?.page?.requiredFieldMapping,\n udpTagId: selectedNode?.properties?.page?.udpTagId,\n queryId: selectedNode?.properties?.page?.queryId,\n inquiryTreeId: selectedNode?.properties?.page?.inquiryTreeId,\n setHasUnsavedChanges: setHasUnsavedChanges\n }}\n disableMargins={true}\n fromMenu={true}\n />\n )\n )}\n </div>\n </div>\n </DndProvider>\n );\n};\n\nexport default MenuPage;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MenuPage-tkkhpco5.js","names":[],"sources":["../src/menuPage/MenuPage.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useHistory, useLocation, Prompt } from 'react-router-dom';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { makeStyles } from '@material-ui/core';\nimport { PageContainer } from '../page/PageContainer';\nimport { transformMenuPageTree } from '../utilities/tree/TreeUtilities';\nimport { BaseTreeMenu } from '../treeMenu/BaseTreeMenu';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useUser } from '../utilities/auth/useUser';\nimport { useShellStore } from '../stores/shellStore';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/useBuildEnvironment';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from '../configService';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flex: 1,\n minHeight: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n display: 'grid',\n gridTemplateAreas: ['sidebar content'].map((line) => `\"${line}\"`).join(' '),\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto 1fr'\n },\n sidebar: {\n gridArea: 'sidebar',\n marginRight: theme.spacing(1)\n },\n content: {\n gridArea: 'content',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n zIndex: 1,\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n overflowY: 'auto'\n },\n menuContent: {\n marginTop: theme.spacing(1),\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 116}px)`,\n overflowX: 'hidden'\n },\n loader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n }\n}));\n\n// Define a stable constant for empty headers to prevent useEffect loops\nconst EMPTY_HEADERS = {};\n\n// Helper to find a node deep in the tree (Moved outside to ensure stability)\nconst findNodeById = (nodes, id) => {\n if (!nodes || !id) return null;\n for (const node of nodes) {\n if (String(node.id) === String(id)) return node;\n if (node.children) {\n const found = findNodeById(node.children, id);\n if (found) return found;\n }\n }\n return null;\n};\n\nconst MenuPage = (props) => {\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const history = useHistory();\n const location = useLocation();\n const user = useUser();\n const { t } = useTranslation();\n const setLocationState = useSetLocationState();\n\n const {\n innerMenuOverride,\n mainContent,\n menuTitle,\n allowMissingPageParam = false,\n searchParamsTransformer\n } = props;\n\n // --- STATE ---\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n const { setSubHeaderActionHasChildren, setNavigationExpanded } = useShellStore();\n\n // --- DATA FETCHING ---\n const innerMenuId = location.pathname.replace('/menupage/', '');\n\n const [{ data: fetchedInnerMenu, loading: menuLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus/${innerMenuId}`,\n EMPTY_HEADERS,\n !innerMenuId,\n false\n );\n\n const innerMenu = innerMenuOverride ?? fetchedInnerMenu;\n\n // --- MEMOIZED DATA ---\n const menuItemsList = useMemo(() => {\n if (!innerMenu) return [];\n\n return innerMenu.menuItemInstanceStructureViews?.reduce((acc, menuInstance) => {\n const updatedMenu = transformMenuPageTree(menuInstance);\n if (updatedMenu) acc.push(updatedMenu);\n return acc;\n }, []) ?? [];\n }, [innerMenu]);\n\n // --- CORE REFACTOR: DERIVE SELECTED NODE ---\n const pageId = new URLSearchParams(location.search).get('page');\n\n const selectedNode = useMemo(() => {\n if (!menuItemsList.length) return null;\n\n // 1. Try to find the node requested in URL\n const found = findNodeById(menuItemsList, pageId);\n if (found) return found;\n\n // 2. Default to first item\n // Even if allowMissingPageParam is true, we still want to RETURN the node for rendering,\n // we just don't want the Redirector useEffect to force it into the URL.\n return menuItemsList[0];\n }, [menuItemsList, pageId]);\n\n // Fetch Page Data based on the derived node\n const [{ data: pageData, loading: pageLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${selectedNode?.properties?.page?.id}`,\n EMPTY_HEADERS,\n !selectedNode?.properties?.page?.id,\n false\n );\n\n // --- ACTIONS ---\n\n const buildSearchString = useCallback((params, node, menuIndex) => {\n if (typeof searchParamsTransformer === 'function') {\n const result = searchParamsTransformer({\n searchParams: params,\n node,\n menuIndex,\n location\n });\n if (result === null) return '';\n if (result instanceof URLSearchParams) return result.toString();\n if (typeof result === 'string') return result;\n if (result !== undefined) return String(result);\n }\n return params.toString();\n }, [location, searchParamsTransformer]);\n\n const handleSelectedNode = useCallback((node, menuIndex) => {\n // 1. Check if we are \"selecting\" the current node to clear query params if needed\n if (allowMissingPageParam) {\n const firstNode = menuItemsList?.[0];\n if (firstNode && String(node?.id) === String(firstNode.id)) {\n if (location.search) {\n history.replace({ pathname: location.pathname, search: '' });\n }\n setHasUnsavedChanges(false);\n return;\n }\n }\n\n // 2. Build URL\n const searchParams = new URLSearchParams(location.search);\n searchParams.set('page', node.id);\n const searchString = buildSearchString(searchParams, node, menuIndex);\n\n // 3. Navigate (The URL change will trigger the re-render & selectedNode update)\n history.push({\n pathname: location.pathname,\n search: searchString\n });\n\n // Note: We don't set 'selectedNode' manually anymore. It is derived.\n }, [history, location, allowMissingPageParam, menuItemsList, buildSearchString]);\n\n const handleSidebarExpandClick = useCallback(() => {\n setSidebarExpanded((expanded) => !expanded);\n }, []);\n\n const handleDropNode = useCallback(() => {\n // TODO: Implement if we need to for next Phase\n }, []);\n\n // --- EFFECTS ---\n\n // 1. URL SYNCHRONIZATION (The \"Redirector\")\n // Ensures URL matches the selected node (e.g. on initial load or default selection)\n useEffect(() => {\n if (selectedNode && !allowMissingPageParam) {\n const currentUrlId = new URLSearchParams(location.search).get('page');\n\n if (String(selectedNode.id) !== String(currentUrlId)) {\n const newParams = new URLSearchParams(location.search);\n newParams.set('page', selectedNode.id);\n\n history.replace({\n pathname: location.pathname,\n search: newParams.toString()\n });\n }\n }\n }, [selectedNode?.id, location.search, history, allowMissingPageParam]);\n\n // 2. UI CLEANUP (The \"Reactor\")\n // Runs only when the ACTUAL selected ID changes to reset UI state\n useEffect(() => {\n if (selectedNode?.id) {\n setNavigationExpanded(false);\n setHasUnsavedChanges(false);\n setSubHeaderActionHasChildren(false);\n }\n }, [selectedNode?.id, setNavigationExpanded, setSubHeaderActionHasChildren]);\n\n // 3. BREADCRUMB / LABEL SYNC\n useEffect(() => {\n if (innerMenu && location.state?.label !== t(innerMenu?.name)) {\n setLocationState({ label: t(innerMenu?.name) });\n }\n }, [setLocationState, t, innerMenu, location.state?.label]);\n\n\n // --- RENDER ---\n return (\n <DndProvider backend={HTML5Backend}>\n <Prompt\n when={hasUnsavedChanges}\n message='You have unsaved changes. Are you sure you want to leave this page?'\n />\n <div className={classes.root}>\n <div className={classes.sidebar}>\n <UtilitySideBar\n title={innerMenu?.name || menuTitle}\n isUsingChildren={true}\n resizable={true}\n removePadding={true}\n removeTopLayoutUnit={true}\n onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n collapsedWidth={64}\n >\n <div className={classes.menuContent} key={innerMenuId}>\n {menuItemsList?.length > 0 && !menuLoading &&\n menuItemsList.map((menuItems, index) => (\n <div key={menuItems.id} className={classes.nodeContainer}>\n <BaseTreeMenu\n menuItems={menuItems}\n onSelectNode={handleSelectedNode}\n onDropNode={handleDropNode}\n menuIndex={index}\n selectedNodeId={selectedNode?.id}\n selectedNodeParentId={selectedNode?.parentId}\n sidebarExpanded={sidebarExpanded}\n treeViewMode={TreeViewModeEnums.Classic}\n />\n </div>\n ))}\n {menuLoading && (\n <div className={classes.loader}>\n <NodeLoader loading={menuLoading} />\n </div>\n )}\n </div>\n </UtilitySideBar>\n </div>\n <div className={classes.content}>\n {mainContent ? (\n typeof mainContent === 'function'\n ? mainContent({ selectedNode, menuItemsList })\n : mainContent\n ) : (\n selectedNode?.properties?.page?.id && (\n <PageContainer\n user={user}\n key={selectedNode?.id}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={{\n pageId: pageData?.pageId,\n entityName: selectedNode?.properties?.page?.entity?.entityName,\n pbiReportCode: selectedNode?.properties?.page?.pbiReportCode,\n requiredFieldsMap: selectedNode?.properties?.page?.requiredFieldMapping,\n udpTagId: selectedNode?.properties?.page?.udpTagId,\n queryId: selectedNode?.properties?.page?.queryId,\n inquiryTreeId: selectedNode?.properties?.page?.inquiryTreeId,\n setHasUnsavedChanges: setHasUnsavedChanges\n }}\n disableMargins={true}\n fromMenu={true}\n />\n )\n )}\n </div>\n </div>\n </DndProvider>\n );\n};\n\nexport default MenuPage;\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as ConfigService } from "./configService-C4uoG3wj.js";
|
|
2
2
|
import { t as useUser } from "./useUser-wpHGo6jU.js";
|
|
3
3
|
import { t as useAxiosGet } from "./useAxiosGet-CYnt6Hd0.js";
|
|
4
|
-
import { n as getRouteRolesMapAndMenuActiveMap } from "./menuUtilities-
|
|
4
|
+
import { n as getRouteRolesMapAndMenuActiveMap } from "./menuUtilities-Da5uVIJ8.js";
|
|
5
5
|
import React, { createContext, useCallback, useContext, useMemo } from "react";
|
|
6
6
|
|
|
7
7
|
//#region src/utilities/menus/MenuProvider.tsx
|
|
@@ -89,4 +89,4 @@ const useMenuContext = () => {
|
|
|
89
89
|
|
|
90
90
|
//#endregion
|
|
91
91
|
export { useMenuContext as n, MenuProvider as t };
|
|
92
|
-
//# sourceMappingURL=MenuProvider-
|
|
92
|
+
//# sourceMappingURL=MenuProvider-BuTAUs0Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuProvider-
|
|
1
|
+
{"version":3,"file":"MenuProvider-BuTAUs0Z.js","names":["MenuProvider: React.FC<MenuProviderProps>","refetchPromises: Promise<unknown>[]"],"sources":["../src/utilities/menus/MenuProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useMemo,\n ReactNode\n} from 'react';\nimport { useUser } from '../auth/useUser';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { ConfigService } from '../../configService';\nimport { getRouteRolesMapAndMenuActiveMap } from './menuUtilities';\nimport type { AxiosError } from 'axios';\n\ntype LeftMenuResponse = unknown[];\ntype AppSelectorMenuResponse = unknown[];\ntype LanguagesResponse = unknown[];\n\ninterface MenuContextValue {\n leftMenu?: LeftMenuResponse;\n leftMenuLoading: boolean;\n leftMenuError?: AxiosError<unknown>;\n appSelectorMenus?: AppSelectorMenuResponse;\n appSelectorMenusLoading: boolean;\n appSelectorMenusError?: AxiosError<unknown>;\n languages?: LanguagesResponse;\n languagesLoading: boolean;\n languagesError?: AxiosError<unknown>;\n rolesMap: Map<string, string[]>;\n menuActiveMap: Map<string, boolean>;\n refetchAll: () => Promise<unknown[]>;\n}\n\ninterface MenuProviderProps {\n children?: ReactNode;\n}\n\nexport const MenuContext = createContext<MenuContextValue | null>(null);\n\ntype RefetchFn = (config?: unknown, options?: unknown) => Promise<unknown>;\n\ntype UseAxiosGetReturn<TData> = [\n {\n data?: TData;\n loading: boolean;\n error?: AxiosError<unknown>;\n },\n RefetchFn\n];\n\nconst buildRouteAndActiveMaps = (\n menu: LeftMenuResponse\n): { rolesMap: Map<string, string[]>; menuActiveMap: Map<string, boolean> } => {\n const rawResult = getRouteRolesMapAndMenuActiveMap(menu) as {\n rolesMap?: Map<unknown, unknown>;\n menuActiveMap?: Map<unknown, unknown>;\n };\n\n const rolesMap = new Map<string, string[]>();\n if (rawResult?.rolesMap instanceof Map) {\n rawResult.rolesMap.forEach((value, key) => {\n if (typeof key !== 'string') return;\n const normalizedKey = key;\n const normalizedValue = Array.isArray(value)\n ? value.map((roleId) => String(roleId))\n : [];\n rolesMap.set(normalizedKey, normalizedValue);\n });\n }\n\n const menuActiveMap = new Map<string, boolean>();\n if (rawResult?.menuActiveMap instanceof Map) {\n rawResult.menuActiveMap.forEach((value, key) => {\n if (typeof key !== 'string') return;\n menuActiveMap.set(key, Boolean(value));\n });\n }\n\n return { rolesMap, menuActiveMap };\n};\n\nexport const MenuProvider: React.FC<MenuProviderProps> = ({ children }) => {\n const user = useUser();\n\n const currentTenantId = user?.currentTenantId;\n const userId = user?.id;\n const [\n { data: leftMenu, loading: leftMenuLoading, error: leftMenuError },\n refetchLeftMenu\n ] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus?menuTypeId=1&productId=${ConfigService.config.UNITY_PRODUCT_ID}&tenantId=${currentTenantId}`,\n {},\n !currentTenantId\n ) as UseAxiosGetReturn<LeftMenuResponse>;\n\n const [\n {\n data: appSelectorMenus,\n loading: appSelectorMenusLoading,\n error: appSelectorMenusError\n },\n refetchAppSelectorMenus\n ] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus?tenantId=${currentTenantId}&verticalId=${ConfigService.config.UNITY_VERTICAL_ID}&userId=${userId ?? ''}`,\n {},\n !userId\n ) as UseAxiosGetReturn<AppSelectorMenuResponse>;\n\n const [\n { data: languages, loading: languagesLoading, error: languagesError },\n refetchLanguages\n ] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `language`,\n {},\n false\n ) as UseAxiosGetReturn<LanguagesResponse>;\n\n const { rolesMap, menuActiveMap } = useMemo(() => {\n if (Array.isArray(leftMenu) && leftMenu.length > 0) {\n return buildRouteAndActiveMaps(leftMenu);\n }\n\n return {\n rolesMap: new Map<string, string[]>(),\n menuActiveMap: new Map<string, boolean>()\n };\n }, [leftMenu]);\n\n const refetchAll = useCallback(() => {\n const refetchPromises: Promise<unknown>[] = [];\n\n if (currentTenantId) {\n refetchPromises.push(refetchLeftMenu());\n }\n\n if (userId) {\n refetchPromises.push(refetchAppSelectorMenus());\n }\n\n refetchPromises.push(refetchLanguages());\n\n return Promise.all(refetchPromises);\n }, [\n currentTenantId,\n refetchAppSelectorMenus,\n refetchLanguages,\n refetchLeftMenu,\n userId\n ]);\n\n const value = useMemo<MenuContextValue>(\n () => ({\n leftMenu,\n leftMenuLoading,\n leftMenuError,\n appSelectorMenus,\n appSelectorMenusLoading,\n appSelectorMenusError,\n languages,\n languagesLoading,\n languagesError,\n rolesMap,\n menuActiveMap,\n refetchAll\n }),\n [\n leftMenu,\n leftMenuLoading,\n leftMenuError,\n appSelectorMenus,\n appSelectorMenusLoading,\n appSelectorMenusError,\n languages,\n languagesLoading,\n languagesError,\n rolesMap,\n menuActiveMap,\n refetchAll\n ]\n );\n\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n};\n\nexport const useMenuContext = (): MenuContextValue => {\n const context = useContext(MenuContext);\n if (!context) {\n throw new Error('useMenuContext must be used within a MenuProvider');\n }\n return context;\n};\n"],"mappings":";;;;;;;AAoCA,MAAa,cAAc,cAAuC,KAAK;AAavE,MAAM,2BACJ,SAC6E;CAC7E,MAAM,YAAY,iCAAiC,KAAK;CAKxD,MAAM,2BAAW,IAAI,KAAuB;AAC5C,KAAI,WAAW,oBAAoB,IACjC,WAAU,SAAS,SAAS,OAAO,QAAQ;AACzC,MAAI,OAAO,QAAQ,SAAU;EAC7B,MAAM,gBAAgB;EACtB,MAAM,kBAAkB,MAAM,QAAQ,MAAM,GACxC,MAAM,KAAK,WAAW,OAAO,OAAO,CAAC,GACrC,EAAE;AACN,WAAS,IAAI,eAAe,gBAAgB;GAC5C;CAGJ,MAAM,gCAAgB,IAAI,KAAsB;AAChD,KAAI,WAAW,yBAAyB,IACtC,WAAU,cAAc,SAAS,OAAO,QAAQ;AAC9C,MAAI,OAAO,QAAQ,SAAU;AAC7B,gBAAc,IAAI,KAAK,QAAQ,MAAM,CAAC;GACtC;AAGJ,QAAO;EAAE;EAAU;EAAe;;AAGpC,MAAaA,gBAA6C,EAAE,eAAe;CACzE,MAAM,OAAO,SAAS;CAEtB,MAAM,kBAAkB,MAAM;CAC9B,MAAM,SAAS,MAAM;CACrB,MAAM,CACJ,EAAE,MAAM,UAAU,SAAS,iBAAiB,OAAO,iBACnD,mBACE,YACF,cAAc,gBACd,gCAAgC,cAAc,OAAO,iBAAiB,YAAY,mBAClF,EAAE,EACF,CAAC,gBACF;CAED,MAAM,CACJ,EACE,MAAM,kBACN,SAAS,yBACT,OAAO,yBAET,2BACE,YACF,cAAc,gBACd,kBAAkB,gBAAgB,cAAc,cAAc,OAAO,kBAAkB,UAAU,UAAU,MAC3G,EAAE,EACF,CAAC,OACF;CAED,MAAM,CACJ,EAAE,MAAM,WAAW,SAAS,kBAAkB,OAAO,kBACrD,oBACE,YACF,cAAc,gBACd,YACA,EAAE,EACF,MACD;CAED,MAAM,EAAE,UAAU,kBAAkB,cAAc;AAChD,MAAI,MAAM,QAAQ,SAAS,IAAI,SAAS,SAAS,EAC/C,QAAO,wBAAwB,SAAS;AAG1C,SAAO;GACL,0BAAU,IAAI,KAAuB;GACrC,+BAAe,IAAI,KAAsB;GAC1C;IACA,CAAC,SAAS,CAAC;CAEd,MAAM,aAAa,kBAAkB;EACnC,MAAMC,kBAAsC,EAAE;AAE9C,MAAI,gBACF,iBAAgB,KAAK,iBAAiB,CAAC;AAGzC,MAAI,OACF,iBAAgB,KAAK,yBAAyB,CAAC;AAGjD,kBAAgB,KAAK,kBAAkB,CAAC;AAExC,SAAO,QAAQ,IAAI,gBAAgB;IAClC;EACD;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,QAAQ,eACL;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;AAED,QAAO,oCAAC,YAAY,YAAgB,SAAQ,SAAgC;;AAG9E,MAAa,uBAAyC;CACpD,MAAM,UAAU,WAAW,YAAY;AACvC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,oDAAoD;AAEtE,QAAO"}
|