udp-react-enterprise-component-library 25.18.1-beta.44 → 25.18.1-beta.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/dist/{AadCallback-DI_SnmOU.js → AadCallback-Bor16_h3.js} +1 -1
  2. package/dist/{AadCallback-DI_SnmOU.js.map → AadCallback-Bor16_h3.js.map} +1 -1
  3. package/dist/{AmChart-WvmHsOdz.js → AmChart-CTixft8X.js} +1 -1
  4. package/dist/{AmChart-WvmHsOdz.js.map → AmChart-CTixft8X.js.map} +1 -1
  5. package/dist/{AmbientSingleDateSelector-8uylQ-tc.js → AmbientSingleDateSelector-D3xyjMky.js} +1 -1
  6. package/dist/{AmbientSingleDateSelector-8uylQ-tc.js.map → AmbientSingleDateSelector-D3xyjMky.js.map} +1 -1
  7. package/dist/{AmbientVisualizationCard-Cov8RODG.js → AmbientVisualizationCard-Dig-Mh_G.js} +3 -3
  8. package/dist/{AmbientVisualizationCard-Cov8RODG.js.map → AmbientVisualizationCard-Dig-Mh_G.js.map} +1 -1
  9. package/dist/{AmbientVisualizer-Bo7NLGfw.js → AmbientVisualizer-B1Xwwe0J.js} +1 -1
  10. package/dist/{AmbientVisualizer-Bo7NLGfw.js.map → AmbientVisualizer-B1Xwwe0J.js.map} +1 -1
  11. package/dist/{BarChartWidget-D-_ZVpMh.js → BarChartWidget-Dwav8_8e.js} +1 -1
  12. package/dist/{BarChartWidget-D-_ZVpMh.js.map → BarChartWidget-Dwav8_8e.js.map} +1 -1
  13. package/dist/{BaseTreeMenu-nKjw3cil.js → BaseTreeMenu-CBFIl0VF.js} +1 -1
  14. package/dist/{BaseTreeMenu-nKjw3cil.js.map → BaseTreeMenu-CBFIl0VF.js.map} +1 -1
  15. package/dist/{BubbleWidget-SplMEBJm.js → BubbleWidget-CsIheJTW.js} +2 -2
  16. package/dist/{BubbleWidget-SplMEBJm.js.map → BubbleWidget-CsIheJTW.js.map} +1 -1
  17. package/dist/{CardList-B_F1Qgqh.js → CardList-BPNGTxsh.js} +1 -1
  18. package/dist/{CardList-B_F1Qgqh.js.map → CardList-BPNGTxsh.js.map} +1 -1
  19. package/dist/{ContentContainer-DuDrf5lL.js → ContentContainer-C2CcA6oX.js} +1 -1
  20. package/dist/{ContentContainer-DuDrf5lL.js.map → ContentContainer-C2CcA6oX.js.map} +1 -1
  21. package/dist/{DateTrendWidget-F6hBnYej.js → DateTrendWidget-cdExY12Q.js} +1 -1
  22. package/dist/{DateTrendWidget-F6hBnYej.js.map → DateTrendWidget-cdExY12Q.js.map} +1 -1
  23. package/dist/{DensePlotWidget-BEhHNh53.js → DensePlotWidget-DHRKyeck.js} +1 -1
  24. package/dist/{DensePlotWidget-BEhHNh53.js.map → DensePlotWidget-DHRKyeck.js.map} +1 -1
  25. package/dist/{Directory-CFTCLxWZ.js → Directory-CoEKdRkU.js} +1 -1
  26. package/dist/{Directory-CFTCLxWZ.js.map → Directory-CoEKdRkU.js.map} +1 -1
  27. package/dist/{EntityHeader-D_gYzj76.js → EntityHeader-DiOEw-za.js} +1 -1
  28. package/dist/{EntityHeader-D_gYzj76.js.map → EntityHeader-DiOEw-za.js.map} +1 -1
  29. package/dist/{FieldArrayCard-Bv9h9akG.js → FieldArrayCard-BbCCfs6l.js} +2 -2
  30. package/dist/{FieldArrayCard-Bv9h9akG.js.map → FieldArrayCard-BbCCfs6l.js.map} +1 -1
  31. package/dist/{FileUpload-BCxrOds_.js → FileUpload-BpMG2Efl.js} +1 -1
  32. package/dist/{FileUpload-BCxrOds_.js.map → FileUpload-BpMG2Efl.js.map} +1 -1
  33. package/dist/{FluentCardHeader-BdMB2qzK.js → FluentCardHeader-CRJaqkV3.js} +1 -1
  34. package/dist/{FluentCardHeader-BdMB2qzK.js.map → FluentCardHeader-CRJaqkV3.js.map} +1 -1
  35. package/dist/{FluentLink-DP2eDAH2.js → FluentLink-D-gKioCQ.js} +1 -1
  36. package/dist/{FluentLink-DP2eDAH2.js.map → FluentLink-D-gKioCQ.js.map} +1 -1
  37. package/dist/{FluentRadioGroup-CCKelZVk.js → FluentRadioGroup-DWOMSBGp.js} +1 -1
  38. package/dist/{FluentRadioGroup-CCKelZVk.js.map → FluentRadioGroup-DWOMSBGp.js.map} +1 -1
  39. package/dist/{FluentSelectMenu-yQMFZWEg.js → FluentSelectMenu-BEREJbe-.js} +1 -1
  40. package/dist/{FluentSelectMenu-yQMFZWEg.js.map → FluentSelectMenu-BEREJbe-.js.map} +1 -1
  41. package/dist/{FluentSimpleSelect-DxxbQV37.js → FluentSimpleSelect-Djff-up8.js} +2 -2
  42. package/dist/{FluentSimpleSelect-DxxbQV37.js.map → FluentSimpleSelect-Djff-up8.js.map} +1 -1
  43. package/dist/{FluentTimePicker-LUfZzJJZ.js → FluentTimePicker-hNcocKsd.js} +1 -1
  44. package/dist/{FluentTimePicker-LUfZzJJZ.js.map → FluentTimePicker-hNcocKsd.js.map} +1 -1
  45. package/dist/{FluentTimeline-BEPJHsgi.js → FluentTimeline-D8sfgLj1.js} +1 -1
  46. package/dist/{FluentTimeline-BEPJHsgi.js.map → FluentTimeline-D8sfgLj1.js.map} +1 -1
  47. package/dist/{GraphCard-CcXwOERk.js → GraphCard-Dv4a99wo.js} +1 -1
  48. package/dist/{GraphCard-CcXwOERk.js.map → GraphCard-Dv4a99wo.js.map} +1 -1
  49. package/dist/{IconKey-CbK8_rol.js → IconKey-D7fZ_U4O.js} +1 -1
  50. package/dist/{IconKey-CbK8_rol.js.map → IconKey-D7fZ_U4O.js.map} +1 -1
  51. package/dist/{LineAndSparklinesWidget-KVAnvpKl.js → LineAndSparklinesWidget-CUq3QxmN.js} +1 -1
  52. package/dist/{LineAndSparklinesWidget-KVAnvpKl.js.map → LineAndSparklinesWidget-CUq3QxmN.js.map} +1 -1
  53. package/dist/{LineGraphWidget-CYjLiV5B.js → LineGraphWidget-DOwAVdTR.js} +1 -1
  54. package/dist/{LineGraphWidget-CYjLiV5B.js.map → LineGraphWidget-DOwAVdTR.js.map} +1 -1
  55. package/dist/MenuPage-DP1ATpru.js +3 -0
  56. package/dist/{MenuPage-BS8ti9lx.js → MenuPage-fqEs3MSY.js} +2 -2
  57. package/dist/{MenuPage-BS8ti9lx.js.map → MenuPage-fqEs3MSY.js.map} +1 -1
  58. package/dist/{MyExportsPage-BwcVZASe.js → MyExportsPage-DMcJRz8T.js} +2 -2
  59. package/dist/{MyExportsPage-BwcVZASe.js.map → MyExportsPage-DMcJRz8T.js.map} +1 -1
  60. package/dist/MyExportsPage-zF3FjtDl.js +3 -0
  61. package/dist/{NewsCard-Y-exMCuK.js → NewsCard-C3y9a_OJ.js} +1 -1
  62. package/dist/{NewsCard-Y-exMCuK.js.map → NewsCard-C3y9a_OJ.js.map} +1 -1
  63. package/dist/{Notes-i2G6Ugsq.js → Notes-UkwV2z4D.js} +1 -1
  64. package/dist/{Notes-i2G6Ugsq.js.map → Notes-UkwV2z4D.js.map} +1 -1
  65. package/dist/{OutlookCallback-teOtztm6.js → OutlookCallback-D3no-Urx.js} +1 -1
  66. package/dist/{OutlookCallback-teOtztm6.js.map → OutlookCallback-D3no-Urx.js.map} +1 -1
  67. package/dist/{PageNotFoundRoute-i_Tf23jB.js → PageNotFoundRoute-0WmBAAdO.js} +1 -1
  68. package/dist/{PageNotFoundRoute-i_Tf23jB.js.map → PageNotFoundRoute-0WmBAAdO.js.map} +1 -1
  69. package/dist/{PageNotFoundRoute-B_mbfK8s.js → PageNotFoundRoute-DKg6oVCt.js} +1 -1
  70. package/dist/{PaymentForm-BTLh5bXJ.js → PaymentForm-CRlhsB2F.js} +2 -2
  71. package/dist/{PaymentForm-BTLh5bXJ.js.map → PaymentForm-CRlhsB2F.js.map} +1 -1
  72. package/dist/{RejectIcon-CNSkW92y.js → RejectIcon-CpF_J5Je.js} +1 -1
  73. package/dist/{RejectIcon-CNSkW92y.js.map → RejectIcon-CpF_J5Je.js.map} +1 -1
  74. package/dist/Reports-C596PoM-.js +3 -0
  75. package/dist/{Reports-Cz5Pl1rM.js → Reports-v6qpOsDL.js} +1 -1
  76. package/dist/{Reports-Cz5Pl1rM.js.map → Reports-v6qpOsDL.js.map} +1 -1
  77. package/dist/{Shell-DKZFbV05.js → Shell-N3oRzrDU.js} +3 -3
  78. package/dist/{Shell-DKZFbV05.js.map → Shell-N3oRzrDU.js.map} +1 -1
  79. package/dist/{SimpleTable-z8tz6B0B.js → SimpleTable-CVGolzeI.js} +1 -1
  80. package/dist/{SimpleTable-z8tz6B0B.js.map → SimpleTable-CVGolzeI.js.map} +1 -1
  81. package/dist/{SiteHeader-DMstxPs3.js → SiteHeader-KoNZC5W5.js} +3 -3
  82. package/dist/{SiteHeader-DMstxPs3.js.map → SiteHeader-KoNZC5W5.js.map} +1 -1
  83. package/dist/{SparsePlotWidget-B3wtNHo2.js → SparsePlotWidget-ZYP6TKB6.js} +1 -1
  84. package/dist/{SparsePlotWidget-B3wtNHo2.js.map → SparsePlotWidget-ZYP6TKB6.js.map} +1 -1
  85. package/dist/{Statistic-IWynWCev.js → Statistic-ChTR_kas.js} +1 -1
  86. package/dist/{Statistic-IWynWCev.js.map → Statistic-ChTR_kas.js.map} +1 -1
  87. package/dist/{StatusCellRenderer-BuPuvngw.js → StatusCellRenderer-E7SYy9Qk.js} +1 -1
  88. package/dist/{StatusCellRenderer-BuPuvngw.js.map → StatusCellRenderer-E7SYy9Qk.js.map} +1 -1
  89. package/dist/{TicketCard-D-FtADsb.js → TicketCard-IqCCKSc0.js} +1 -1
  90. package/dist/{TicketCard-D-FtADsb.js.map → TicketCard-IqCCKSc0.js.map} +1 -1
  91. package/dist/{TimelineCalendar-Mi4baqsg.js → TimelineCalendar-CZ5vmO43.js} +1 -1
  92. package/dist/{TimelineCalendar-Mi4baqsg.js.map → TimelineCalendar-CZ5vmO43.js.map} +1 -1
  93. package/dist/{TokenGroupItem-DKbm__Kc.js → TokenGroupItem-BK0dx4cD.js} +1 -1
  94. package/dist/{TokenGroupItem-DKbm__Kc.js.map → TokenGroupItem-BK0dx4cD.js.map} +1 -1
  95. package/dist/UI/dataDisplay/GraphCard/index.js +1 -1
  96. package/dist/UI/dataDisplay/calendar/index.js +1 -1
  97. package/dist/UI/dataDisplay/cardList/index.js +1 -1
  98. package/dist/UI/dataDisplay/directory/index.js +1 -1
  99. package/dist/UI/dataDisplay/entityHeader/index.js +1 -1
  100. package/dist/UI/dataDisplay/map/index.js +1 -1
  101. package/dist/UI/dataDisplay/notes/index.js +1 -1
  102. package/dist/UI/dataDisplay/status/index.js +1 -1
  103. package/dist/UI/dataDisplay/ticketCard/index.js +1 -1
  104. package/dist/UI/dataDisplay/typography/index.js +1 -1
  105. package/dist/UI/dataDisplay/visualization/amCharts/index.js +1 -1
  106. package/dist/UI/dataDisplay/visualization/index.js +1 -1
  107. package/dist/UI/inputs/calendar/index.js +1 -1
  108. package/dist/UI/inputs/dateRangeSelector/index.js +1 -1
  109. package/dist/UI/inputs/fieldArrayCard/index.js +1 -1
  110. package/dist/UI/inputs/link/index.js +1 -1
  111. package/dist/UI/inputs/menus/index.js +2 -2
  112. package/dist/UI/inputs/pickers/index.js +2 -2
  113. package/dist/UI/inputs/radio/index.js +1 -1
  114. package/dist/UI/mapLayout/ui/index.js +1 -1
  115. package/dist/UI/surfaces/cards/chartDisplayCards/index.js +1 -1
  116. package/dist/UI/surfaces/cards/fluentCards/index.js +1 -1
  117. package/dist/UI/surfaces/cards/newsCard/index.js +1 -1
  118. package/dist/UI/surfaces/cards/workOrderCard/index.js +1 -1
  119. package/dist/UI/templates/calendar/index.js +1 -1
  120. package/dist/UI/templates/deprecated/UdpGridTemplate/index.js +1 -1
  121. package/dist/UI/templates/ui/index.js +1 -1
  122. package/dist/UI/templates/ui/renderers/index.js +1 -1
  123. package/dist/UI/widgets/library/BarChartWidget/index.js +1 -1
  124. package/dist/UI/widgets/library/BubbleWidget/index.js +1 -1
  125. package/dist/UI/widgets/library/DateTrendWidget/index.js +1 -1
  126. package/dist/UI/widgets/library/DensePlotWidget/index.js +1 -1
  127. package/dist/UI/widgets/library/LineAndSparklinesWidget/index.js +1 -1
  128. package/dist/UI/widgets/library/LineGraphWidget/index.js +1 -1
  129. package/dist/UI/widgets/library/SparsePlotWidget/index.js +1 -1
  130. package/dist/UI/widgets/library/TableWidget/index.js +1 -1
  131. package/dist/{UdpAppProvider-BRyRY8zN.js → UdpAppProvider-C0VlxSna.js} +2 -2
  132. package/dist/{UdpAppProvider-BRyRY8zN.js.map → UdpAppProvider-C0VlxSna.js.map} +1 -1
  133. package/dist/{UdpCalendarYearView-BSR8CGHt.js → UdpCalendarYearView-BEdW-myL.js} +1 -1
  134. package/dist/{UdpCalendarYearView-BSR8CGHt.js.map → UdpCalendarYearView-BEdW-myL.js.map} +1 -1
  135. package/dist/{UdpDateRangeSelector-C_gpkHul.js → UdpDateRangeSelector-BivfBlPa.js} +1 -1
  136. package/dist/{UdpDateRangeSelector-C_gpkHul.js.map → UdpDateRangeSelector-BivfBlPa.js.map} +1 -1
  137. package/dist/{UdpFormsSubmissionGrid-PWsnFyYB.js → UdpFormsSubmissionGrid-C5CDtEVR.js} +34 -14
  138. package/dist/UdpFormsSubmissionGrid-C5CDtEVR.js.map +1 -0
  139. package/dist/{UdpGridTemplate-U9YcYLUf.js → UdpGridTemplate-OsS_O6jR.js} +1 -1
  140. package/dist/{UdpGridTemplate-U9YcYLUf.js.map → UdpGridTemplate-OsS_O6jR.js.map} +1 -1
  141. package/dist/{UdpTransactionTypesPage-CUpHKA6y.js → UdpTransactionTypesPage-DxUsXnV7.js} +89 -13
  142. package/dist/UdpTransactionTypesPage-DxUsXnV7.js.map +1 -0
  143. package/dist/{UdpTransactionsPage-B5uhMoFg.js → UdpTransactionsPage-BZ0Idg5s.js} +38 -14
  144. package/dist/UdpTransactionsPage-BZ0Idg5s.js.map +1 -0
  145. package/dist/{UserFormSideSheet-B6Mn3bZ0.js → UserFormSideSheet-CSScPvy3.js} +1 -1
  146. package/dist/{UserFormSideSheet-B6Mn3bZ0.js.map → UserFormSideSheet-CSScPvy3.js.map} +1 -1
  147. package/dist/UserFormSideSheet-DTPSRjGo.js +3 -0
  148. package/dist/{VirtualBrowser-C2oPh3YY.js → VirtualBrowser-BeHqBuGi.js} +1 -1
  149. package/dist/{VirtualBrowser-C2oPh3YY.js.map → VirtualBrowser-BeHqBuGi.js.map} +1 -1
  150. package/dist/VirtualBrowser-CjHGq92s.js +3 -0
  151. package/dist/{WorkOrderCard-Ce5WrpnX.js → WorkOrderCard-s-6QK3Re.js} +1 -1
  152. package/dist/{WorkOrderCard-Ce5WrpnX.js.map → WorkOrderCard-s-6QK3Re.js.map} +1 -1
  153. package/dist/{WorkflowContainer-Cd5H4mpf.js → WorkflowContainer-BheQPhXt.js} +1 -1
  154. package/dist/{WorkflowContainer-Cd5H4mpf.js.map → WorkflowContainer-BheQPhXt.js.map} +1 -1
  155. package/dist/{WorkflowContainer-Iq8fmnGR.js → WorkflowContainer-CHmVR99E.js} +1 -1
  156. package/dist/{aggridHelpers-BeUZvPIv.js → aggridHelpers-RYO7tWY9.js} +1 -1
  157. package/dist/{aggridHelpers-BeUZvPIv.js.map → aggridHelpers-RYO7tWY9.js.map} +1 -1
  158. package/dist/{gridVisualizationFunctions-jnvPACJD.js → gridVisualizationFunctions-Cmh4EUIL.js} +1 -1
  159. package/dist/{gridVisualizationFunctions-jnvPACJD.js.map → gridVisualizationFunctions-Cmh4EUIL.js.map} +1 -1
  160. package/dist/index.js +56 -56
  161. package/dist/maintenanceEngine/index.js +1 -1
  162. package/dist/maintenanceEngine/virtualBrowser/index.js +1 -1
  163. package/dist/menuPage/index.js +1 -1
  164. package/dist/{menuPage-B9NwQJVt.js → menuPage-PIJOkANO.js} +2 -2
  165. package/dist/{menuPage-B9NwQJVt.js.map → menuPage-PIJOkANO.js.map} +1 -1
  166. package/dist/{pickers-CkwI49Ju.js → pickers-B-bB40GS.js} +1 -1
  167. package/dist/{pickers-CkwI49Ju.js.map → pickers-B-bB40GS.js.map} +1 -1
  168. package/dist/providers/index.js +1 -1
  169. package/dist/routes/components/index.js +1 -1
  170. package/dist/routes/index.js +1 -1
  171. package/dist/{routes-DG4NLFP9.js → routes-3HDtkQKa.js} +8 -8
  172. package/dist/{routes-DG4NLFP9.js.map → routes-3HDtkQKa.js.map} +1 -1
  173. package/dist/shell/index.js +2 -2
  174. package/dist/shell/ui/index.js +1 -1
  175. package/dist/{status-Bmaija4B.js → status-moefSFBs.js} +1 -1
  176. package/dist/{status-Bmaija4B.js.map → status-moefSFBs.js.map} +1 -1
  177. package/dist/{theme-IKiRfNgl.js → theme-Bb8h8tjE.js} +1 -1
  178. package/dist/{theme-IKiRfNgl.js.map → theme-Bb8h8tjE.js.map} +1 -1
  179. package/dist/tree-CFbEBH8N.js +1 -0
  180. package/dist/treeMenu/index.js +1 -1
  181. package/dist/types/src/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts +1 -1
  182. package/dist/types/src/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts.map +1 -1
  183. package/dist/types/src/udp/pages/UdpFormsSubmissionGrid/UdpFormsSubmissionGrid.d.ts.map +1 -1
  184. package/dist/types/src/udp/pages/UdpTransactionTypesPage/UdpTransactionTypesPage.d.ts.map +1 -1
  185. package/dist/types/src/udp/pages/UdpTransactionTypesPage/forms/UdpTransactionTypeConfigurationForm.d.ts.map +1 -1
  186. package/dist/types/src/udp/pages/UdpTransactionTypesPage/forms/UdpTransactionTypeForm.d.ts.map +1 -1
  187. package/dist/types/src/udp/pages/UdpTransactionTypesPage/sidesheets/UdpTransactionTypeStatusSidesheet.d.ts.map +1 -1
  188. package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionGrid.d.ts.map +1 -1
  189. package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionSidesheet.d.ts.map +1 -1
  190. package/dist/types/src/udp/utilities/transactionConstants.d.ts +4 -0
  191. package/dist/types/src/udp/utilities/transactionConstants.d.ts.map +1 -1
  192. package/dist/types/tsconfig.tsbuildinfo +1 -1
  193. package/dist/{typography-IJpS01q9.js → typography-CvW7cAl8.js} +1 -1
  194. package/dist/{typography-IJpS01q9.js.map → typography-CvW7cAl8.js.map} +1 -1
  195. package/dist/udp/export/index.js +1 -1
  196. package/dist/udp/pages/UdpFormsSubmissionGrid/index.js +1 -1
  197. package/dist/udp/pages/UdpPages/index.js +2 -2
  198. package/dist/udp/pages/UdpTransactionTypesPage/index.js +1 -1
  199. package/dist/udp/pages/UdpTransactionsPage/index.js +1 -1
  200. package/dist/uploader/index.js +1 -1
  201. package/dist/{uploader-CPU1l-ss.js → uploader-Dvf2cDh8.js} +1 -1
  202. package/dist/{uploader-CPU1l-ss.js.map → uploader-Dvf2cDh8.js.map} +1 -1
  203. package/dist/utilities/aggrid/index.js +1 -1
  204. package/dist/utilities/customIcons/index.js +1 -1
  205. package/dist/utilities/floorplanFunctions/index.js +1 -1
  206. package/dist/utilities/form/paymentForm/index.js +1 -1
  207. package/dist/utilities/redirect/pages/index.js +1 -1
  208. package/dist/utilities/style/index.js +1 -1
  209. package/dist/utilities/theme/index.js +1 -1
  210. package/dist/utilities/uploader/index.js +1 -1
  211. package/dist/workflow/index.js +1 -1
  212. package/export-map.json +1 -1
  213. package/package.json +1 -1
  214. package/dist/MenuPage-DV20TjmL.js +0 -3
  215. package/dist/MyExportsPage-B3A6lwaV.js +0 -3
  216. package/dist/Reports-CLowSLq9.js +0 -3
  217. package/dist/UdpFormsSubmissionGrid-PWsnFyYB.js.map +0 -1
  218. package/dist/UdpTransactionTypesPage-CUpHKA6y.js.map +0 -1
  219. package/dist/UdpTransactionsPage-B5uhMoFg.js.map +0 -1
  220. package/dist/UserFormSideSheet-C1G_jBcu.js +0 -3
  221. package/dist/VirtualBrowser-BoHR4EBJ.js +0 -3
  222. /package/dist/{addUser-B8dGyltZ.js → addUser-3C9adhp4.js} +0 -0
  223. /package/dist/{appSwitcher-Bcd4Cwcx.js → appSwitcher-qrbuBiQq.js} +0 -0
  224. /package/dist/{modified-BZxg92lm.js → entities-EYifmulZ.js} +0 -0
  225. /package/dist/{redirect-dbCS_8ib.js → modified-BHJzuqPC.js} +0 -0
  226. /package/dist/{renderers-DTo5-0ZY.js → redirect-DWQJKU5S.js} +0 -0
  227. /package/dist/{storage-C9onsVtI.js → renderers-Akwy6J9H.js} +0 -0
  228. /package/dist/{tree-CDeJs_2Q.js → storage-CdtCFv8N.js} +0 -0
@@ -44,4 +44,4 @@ StylizedTitle.defaultProps = { component: "h2" };
44
44
 
45
45
  //#endregion
46
46
  export { FormHeader as n, FormSubHeader as r, StylizedTitle as t };
47
- //# sourceMappingURL=typography-IJpS01q9.js.map
47
+ //# sourceMappingURL=typography-CvW7cAl8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typography-IJpS01q9.js","names":[],"sources":["../src/UI/dataDisplay/typography/FormHeaders.jsx","../src/UI/dataDisplay/typography/StylizedTitle.jsx"],"sourcesContent":["import React from 'react'\nimport { makeStyles, Typography, lighten } from '@material-ui/core'\nimport clsx from 'clsx'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n fontWeight: 500\n },\n header: {\n fontSize: 18\n },\n subHeader: {\n fontSize: 14,\n color: lighten(theme.palette.common.black, 0.5)\n }\n}))\n\nexport const FormHeader = (props) => {\n const { children } = props\n const classes = useStyles()\n return (\n <Typography className={clsx(classes.header, classes.root)}>\n {children}\n </Typography>\n )\n}\nexport const FormSubHeader = (props) => {\n const { children } = props\n const classes = useStyles()\n return (\n <Typography className={clsx(classes.subHeader, classes.root)}>\n {children}\n </Typography>\n )\n}\n","import React from 'react'\nimport { Typography, useTheme } from '@material-ui/core'\nimport PropTypes from 'prop-types'\n\nexport const StylizedTitle = ({ children, color, component = 'h2' }) => {\n const theme = useTheme()\n\n return (\n <div\n style={{\n borderLeft: `4px solid ${color || theme.palette.secondary.main}`,\n paddingLeft: 8\n }}\n >\n <Typography variant='h6' component={component}>\n {children}\n </Typography>\n </div>\n )\n}\n\nStylizedTitle.propTypes = {\n /**\n * Wraps the title\n */\n children: PropTypes.node.isRequired,\n /**\n * Provides a color block\n */\n color: PropTypes.string,\n /**\n * Header Tag override. Defaults to H2\n */\n component: PropTypes.string\n}\n\nStylizedTitle.defaultProps = {\n component: 'h2'\n}\n"],"mappings":";;;;;;AAIA,MAAM,YAAY,YAAY,WAAW;CACvC,MAAM,EACJ,YAAY,KACb;CACD,QAAQ,EACN,UAAU,IACX;CACD,WAAW;EACT,UAAU;EACV,OAAO,QAAQ,MAAM,QAAQ,OAAO,OAAO,GAAI;EAChD;CACF,EAAE;AAEH,MAAa,cAAc,UAAU;CACnC,MAAM,EAAE,aAAa;CACrB,MAAM,UAAU,WAAW;AAC3B,QACE,oCAAC,cAAW,WAAW,KAAK,QAAQ,QAAQ,QAAQ,KAAK,IACtD,SACU;;AAGjB,MAAa,iBAAiB,UAAU;CACtC,MAAM,EAAE,aAAa;CACrB,MAAM,UAAU,WAAW;AAC3B,QACE,oCAAC,cAAW,WAAW,KAAK,QAAQ,WAAW,QAAQ,KAAK,IACzD,SACU;;;;;AC5BjB,MAAa,iBAAiB,EAAE,UAAU,OAAO,YAAY,WAAW;CACtE,MAAM,QAAQ,UAAU;AAExB,QACE,oCAAC,SACC,OAAO;EACL,YAAY,aAAa,SAAS,MAAM,QAAQ,UAAU;EAC1D,aAAa;EACd,IAED,oCAAC;EAAW,SAAQ;EAAgB;IACjC,SACU,CACT;;AAIV,cAAc,YAAY;CAIxB,UAAU,UAAU,KAAK;CAIzB,OAAO,UAAU;CAIjB,WAAW,UAAU;CACtB;AAED,cAAc,eAAe,EAC3B,WAAW,MACZ"}
1
+ {"version":3,"file":"typography-CvW7cAl8.js","names":[],"sources":["../src/UI/dataDisplay/typography/FormHeaders.jsx","../src/UI/dataDisplay/typography/StylizedTitle.jsx"],"sourcesContent":["import React from 'react'\nimport { makeStyles, Typography, lighten } from '@material-ui/core'\nimport clsx from 'clsx'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n fontWeight: 500\n },\n header: {\n fontSize: 18\n },\n subHeader: {\n fontSize: 14,\n color: lighten(theme.palette.common.black, 0.5)\n }\n}))\n\nexport const FormHeader = (props) => {\n const { children } = props\n const classes = useStyles()\n return (\n <Typography className={clsx(classes.header, classes.root)}>\n {children}\n </Typography>\n )\n}\nexport const FormSubHeader = (props) => {\n const { children } = props\n const classes = useStyles()\n return (\n <Typography className={clsx(classes.subHeader, classes.root)}>\n {children}\n </Typography>\n )\n}\n","import React from 'react'\nimport { Typography, useTheme } from '@material-ui/core'\nimport PropTypes from 'prop-types'\n\nexport const StylizedTitle = ({ children, color, component = 'h2' }) => {\n const theme = useTheme()\n\n return (\n <div\n style={{\n borderLeft: `4px solid ${color || theme.palette.secondary.main}`,\n paddingLeft: 8\n }}\n >\n <Typography variant='h6' component={component}>\n {children}\n </Typography>\n </div>\n )\n}\n\nStylizedTitle.propTypes = {\n /**\n * Wraps the title\n */\n children: PropTypes.node.isRequired,\n /**\n * Provides a color block\n */\n color: PropTypes.string,\n /**\n * Header Tag override. Defaults to H2\n */\n component: PropTypes.string\n}\n\nStylizedTitle.defaultProps = {\n component: 'h2'\n}\n"],"mappings":";;;;;;AAIA,MAAM,YAAY,YAAY,WAAW;CACvC,MAAM,EACJ,YAAY,KACb;CACD,QAAQ,EACN,UAAU,IACX;CACD,WAAW;EACT,UAAU;EACV,OAAO,QAAQ,MAAM,QAAQ,OAAO,OAAO,GAAI;EAChD;CACF,EAAE;AAEH,MAAa,cAAc,UAAU;CACnC,MAAM,EAAE,aAAa;CACrB,MAAM,UAAU,WAAW;AAC3B,QACE,oCAAC,cAAW,WAAW,KAAK,QAAQ,QAAQ,QAAQ,KAAK,IACtD,SACU;;AAGjB,MAAa,iBAAiB,UAAU;CACtC,MAAM,EAAE,aAAa;CACrB,MAAM,UAAU,WAAW;AAC3B,QACE,oCAAC,cAAW,WAAW,KAAK,QAAQ,WAAW,QAAQ,KAAK,IACzD,SACU;;;;;AC5BjB,MAAa,iBAAiB,EAAE,UAAU,OAAO,YAAY,WAAW;CACtE,MAAM,QAAQ,UAAU;AAExB,QACE,oCAAC,SACC,OAAO;EACL,YAAY,aAAa,SAAS,MAAM,QAAQ,UAAU;EAC1D,aAAa;EACd,IAED,oCAAC;EAAW,SAAQ;EAAgB;IACjC,SACU,CACT;;AAIV,cAAc,YAAY;CAIxB,UAAU,UAAU,KAAK;CAIzB,OAAO,UAAU;CAIjB,WAAW,UAAU;CACtB;AAED,cAAc,eAAe,EAC3B,WAAW,MACZ"}
@@ -1,4 +1,4 @@
1
1
  import { n as VisualSearchObject, r as useUdpExport, t as ExportSidesheet } from "../../ExportSidesheet-DWkoiwxC.js";
2
- import { t as MyExportsPage } from "../../MyExportsPage-BwcVZASe.js";
2
+ import { t as MyExportsPage } from "../../MyExportsPage-DMcJRz8T.js";
3
3
 
4
4
  export { ExportSidesheet, MyExportsPage, VisualSearchObject, useUdpExport };
@@ -1,3 +1,3 @@
1
- import { t as UdpFormsSubmissionGrid } from "../../../UdpFormsSubmissionGrid-PWsnFyYB.js";
1
+ import { t as UdpFormsSubmissionGrid } from "../../../UdpFormsSubmissionGrid-C5CDtEVR.js";
2
2
 
3
3
  export { UdpFormsSubmissionGrid };
@@ -18,8 +18,8 @@ import { t as UdpFormsListPage_exports } from "../../../UdpFormsListPage-BsTi2bX
18
18
  import { t as UdpFormsBuilderPage_exports } from "../../../UdpFormsBuilderPage-C1oc66zH.js";
19
19
  import { t as UdpImportFromFileMappingPage_exports } from "../../../UdpImportFromFileMappingPage-BOBh4ySA.js";
20
20
  import { t as UdpAuditEvents_exports } from "../../../UdpAuditEvents-Bqz0_-Du.js";
21
- import { t as UdpTransactionTypesPage_exports } from "../../../UdpTransactionTypesPage-CUpHKA6y.js";
22
- import { t as UdpTransactionsPage_exports } from "../../../UdpTransactionsPage-B5uhMoFg.js";
21
+ import { t as UdpTransactionTypesPage_exports } from "../../../UdpTransactionTypesPage-DxUsXnV7.js";
22
+ import { t as UdpTransactionsPage_exports } from "../../../UdpTransactionsPage-BZ0Idg5s.js";
23
23
 
24
24
  //#region src/udp/pages/UdpPages/index.ts
25
25
  const UdpPages = {
@@ -1,3 +1,3 @@
1
- import { n as UdpTransactionTypesPage_default } from "../../../UdpTransactionTypesPage-CUpHKA6y.js";
1
+ import { n as UdpTransactionTypesPage_default } from "../../../UdpTransactionTypesPage-DxUsXnV7.js";
2
2
 
3
3
  export { UdpTransactionTypesPage_default as default };
@@ -1,3 +1,3 @@
1
- import { n as UdpTransactionsPage_default } from "../../../UdpTransactionsPage-B5uhMoFg.js";
1
+ import { n as UdpTransactionsPage_default } from "../../../UdpTransactionsPage-BZ0Idg5s.js";
2
2
 
3
3
  export { UdpTransactionsPage_default as default };
@@ -1,4 +1,4 @@
1
1
  import { t as DragDropFileUpload } from "../DragDropFileUpload-CVnUu-6f.js";
2
- import { n as FileType, t as Attachments } from "../uploader-CPU1l-ss.js";
2
+ import { n as FileType, t as Attachments } from "../uploader-Dvf2cDh8.js";
3
3
 
4
4
  export { Attachments, DragDropFileUpload, FileType };
@@ -311,4 +311,4 @@ const Attachments = ({ allowedExtensions, MAX_FILE_SIZE_MB, filePreview, setFile
311
311
 
312
312
  //#endregion
313
313
  export { FileType as n, Attachments as t };
314
- //# sourceMappingURL=uploader-CPU1l-ss.js.map
314
+ //# sourceMappingURL=uploader-Dvf2cDh8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploader-CPU1l-ss.js","names":["useStyles","FileProfile","ImagePreview","attachmentType","Box","DeleteIcon","LinearProgress"],"sources":["../src/uploader/FileProfile.jsx","../src/uploader/ImagePreview.jsx","../src/uploader/FileType.jsx","../src/uploader/enums/systemEnums.ts","../src/uploader/Attachments.jsx"],"sourcesContent":["import React from 'react'\nimport { Typography, makeStyles } from '@material-ui/core'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row'\n },\n prefix: {\n fontWeight: 600\n },\n title: {\n flex: 1\n },\n detail: {\n marginLeft: theme.spacing(2)\n }\n}))\n\nconst FileProfile = (props) => {\n const classes = useStyles()\n const { children, fileName, fileType, size, lastModifiedDate } = props\n return (\n <div>\n <div className={classes.root}>\n <Typography variant='body1' className={classes.title}>\n <strong>{fileName}</strong>\n </Typography>\n <Typography variant='caption' className={classes.detail}>\n <span className={classes.prefix}>Type:</span> {fileType}\n </Typography>\n <Typography variant='caption' className={classes.detail}>\n <span className={classes.prefix}>Size:</span> {size}\n </Typography>\n </div>\n {children}\n {/* Last modified not supported in FireFox */}\n {/* <Typography variant=\"caption\">\n <span className={classes.prefix}>Last Modified:</span>{' '}\n {lastModifiedDate}\n </Typography> */}\n </div>\n )\n}\nexport default FileProfile\n","import React from 'react'\nimport { makeStyles } from '@material-ui/core'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n justifyContent: 'center'\n },\n image: {\n maxWidth: 465\n }\n}))\n\nconst ImagePreview = (props) => {\n const { image } = props\n const classes = useStyles()\n\n return (\n <div className={classes.root}>\n <img className={classes.image} src={image} alt='upload preview' />\n </div>\n )\n}\nexport default ImagePreview\n","import React from 'react'\nimport FileProfile from './FileProfile'\nimport ImagePreview from './ImagePreview'\n\nexport const FileType = (props) => {\n let type = ''\n const { fileType, image, fileName, size, lastModifiedDate } = props\n\n switch (fileType) {\n case 'pdf':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n />\n )\n break\n case 'doc':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n />\n )\n break\n case 'png':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n >\n <ImagePreview image={image} />\n </FileProfile>\n )\n break\n case 'jpg':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n >\n <ImagePreview image={image} />\n </FileProfile>\n )\n break\n case 'jpeg':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n >\n <ImagePreview image={image} />\n </FileProfile>\n )\n break\n\n default:\n }\n\n return type\n}\n","export enum APIStatusCode {\n Success = 200,\n Created = 201,\n Accepted = 202,\n NoContent = 204,\n Forbidden = 403,\n}\n\nexport enum AttachmentType {\n SiteInstruction = 1,\n RFI = 2\n}\n\nexport enum AttachmentAction {\n None = 1,\n Delete = 2,\n Remove = 3\n};\n","import React, { useCallback, useState } from 'react';\nimport { apiMutate } from '../utilities';\nimport { Box } from '../UI';\nimport { AmbientCard } from '../UI/surfaces/cards/AmbientCard';\nimport { DragDropFileUpload } from './DragDropFileUpload';\nimport { LinearProgress } from '../UI';\nimport { List, ListItem, IconButton } from '@material-ui/core';\nimport { ConfigService } from '../configService/index';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { DownloadIcon, ChromeCloseIcon } from '@fluentui/react-icons';\nimport { useTranslation } from 'react-i18next';\nimport { useHandleAxiosSnackbar } from '../utilities';\nimport { Divider } from '@material-ui/core';\nimport { AttachmentAction } from './enums/systemEnums';\nimport { FluentDialog } from '../UI';\nimport { FluentIconButton } from '../UI/inputs/buttons';\nimport './Attachments.css';\nimport { AmbientAutoComplete } from '../UI/inputs/textField';\n\nconst removeDuplicateFiles = (incomingFiles, existingFiles) => {\n const uniqueFiles = [];\n const duplicateFiles = [];\n\n incomingFiles.forEach((newFile) => {\n const exists = existingFiles.some(\n (existingFile) =>\n existingFile.name === newFile.name ||\n existingFile.fileName === newFile.name\n );\n\n if (exists) {\n duplicateFiles.push(newFile);\n } else {\n uniqueFiles.push(newFile);\n }\n });\n\n return { uniqueFiles, duplicateFiles };\n};\n\nexport const Attachments = ({\n allowedExtensions,\n MAX_FILE_SIZE_MB,\n filePreview,\n setFilePreview,\n currentAttachments,\n setCurrentAttachments,\n attachmentTypes,\n attachmentType,\n setAttachmentType,\n attachmentProgress,\n setAttachmentProgress,\n previousAttachments,\n setPreviousAttachments\n}) => {\n const [attachmentDialogOpen, setAttachmentDialogOpen] = useState(false);\n const [attachmentToDelete, setAttachmentToDelete] = useState(null);\n const [attachmentToDeleteIndex, setAttachmentToDeleteIndex] = useState(0);\n const [attachmentAction, setAttachmentAction] = useState(\n AttachmentAction.None\n );\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n const { t } = useTranslation();\n\n const initiateAttachmentAction = useCallback((action, file, index) => {\n setAttachmentAction(action);\n setAttachmentToDelete(file);\n setAttachmentToDeleteIndex(index);\n setAttachmentDialogOpen(true);\n }, []);\n\n const handleAttachmentDeleteClick = useCallback(\n (file, index) => {\n initiateAttachmentAction(AttachmentAction.Delete, file, index);\n },\n [initiateAttachmentAction]\n );\n\n const handleAttachmentRemoveClick = useCallback(\n (file, index) => {\n initiateAttachmentAction(AttachmentAction.Remove, file, index);\n },\n [initiateAttachmentAction]\n );\n\n const handleCloseAttachmentDialog = useCallback(() => {\n setAttachmentAction(AttachmentAction.None);\n setAttachmentToDelete({});\n setAttachmentDialogOpen(false);\n }, []);\n\n const removeAttachmentFromList = useCallback(\n (attachments, setAttachments) => {\n setAttachments((prev) =>\n prev.filter((item, i) => i !== attachmentToDeleteIndex)\n );\n handleSuccessSnackbar(t('Attachment Removed Successfully'));\n handleCloseAttachmentDialog();\n },\n [\n attachmentToDeleteIndex,\n handleSuccessSnackbar,\n handleCloseAttachmentDialog,\n t\n ]\n );\n\n const deleteAttachment = useCallback(async () => {\n try {\n setAttachmentProgress(true);\n const filePayload = { ...attachmentToDelete, isDeleted: true };\n\n await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/${attachmentToDelete.transactionAttachmentId}`,\n {\n method: 'put',\n data: filePayload\n }\n );\n removeAttachmentFromList(previousAttachments, setPreviousAttachments);\n } catch (error) {\n handleErrorSnackbar(\n 'Failed to delete attachment',\n 'We encountered a system error while trying to delete the file. Please try again.'\n );\n console.error(error);\n } finally {\n setAttachmentProgress(false);\n setAttachmentDialogOpen(false);\n }\n }, [\n attachmentToDelete,\n removeAttachmentFromList,\n previousAttachments,\n setPreviousAttachments,\n setAttachmentProgress,\n handleErrorSnackbar\n ]);\n\n const handleDownloadFile = useCallback(async (file) => {\n try {\n const response = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/${file.transactionAttachmentId}/udpDriveFile/download`,\n {}\n );\n const url = response.data.link;\n const link = document.createElement('a');\n link.href = url;\n link.download = file.fileName ?? file.name;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (e) {\n console.error('Download failed', e);\n }\n }, []);\n\n const handleAddFiles = useCallback(\n async (files) => {\n const incomingFiles = Array.from(files);\n const validFiles = [];\n const invalidFiles = [];\n\n incomingFiles.forEach((file) => {\n const ext = file.name.split('.').pop().toLowerCase();\n const sizeInMB = file.size / (1024 * 1024);\n\n if (!allowedExtensions.includes(ext)) {\n invalidFiles.push(`${file.name} (Invalid file type)`);\n } else if (sizeInMB > MAX_FILE_SIZE_MB) {\n invalidFiles.push(`${file.name} (Exceeds ${MAX_FILE_SIZE_MB} MB)`);\n } else {\n validFiles.push(file);\n }\n });\n\n const allExistingFiles = [...previousAttachments, ...currentAttachments];\n const { uniqueFiles, duplicateFiles } = removeDuplicateFiles(\n validFiles,\n allExistingFiles\n );\n\n if (uniqueFiles.length > 0) {\n setCurrentAttachments((prev) => [...prev, ...uniqueFiles]);\n }\n\n if (invalidFiles.length > 0) {\n handleErrorSnackbar(\n 'Files not added',\n `The following files had errors:\\n${invalidFiles.join('\\n')}`\n );\n setFilePreview(true);\n }\n\n if (duplicateFiles.length > 0) {\n const duplicateNames = duplicateFiles.map((f) => f.name).join(', ');\n handleErrorSnackbar(\n 'Duplicates skipped',\n `The following files already exist and were not added: ${duplicateNames}`\n );\n }\n },\n [\n allowedExtensions,\n MAX_FILE_SIZE_MB,\n previousAttachments,\n currentAttachments,\n setCurrentAttachments,\n handleErrorSnackbar,\n setFilePreview\n ]\n );\n\n const handleAttachmentTypeSelect = useCallback(\n (attachmentType) => {\n setAttachmentType(attachmentType);\n },\n [setAttachmentType]\n );\n\n const renderCurrentAttachments = () => {\n return currentAttachments.map((file, index) => (\n <React.Fragment key={index}>\n {index > 0 && <Divider component='li' />}\n <ListItem\n className='list-separator-item'\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <Box>{file.fileName ? file.fileName : file.name}</Box>\n <Box>\n <IconButton\n onClick={() => handleAttachmentRemoveClick(file, index)}\n >\n <DeleteIcon />\n </IconButton>\n </Box>\n </ListItem>\n </React.Fragment>\n ));\n };\n\n const renderPreviousAttachments = () => {\n return previousAttachments.map((file, index) => (\n <ListItem\n key={index}\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <Box>{file.fileName ?? file.name}</Box>\n <Box>\n <IconButton onClick={() => handleAttachmentDeleteClick(file, index)}>\n <DeleteIcon />\n </IconButton>\n <IconButton onClick={() => handleDownloadFile(file)}>\n <DownloadIcon />\n </IconButton>\n </Box>\n </ListItem>\n ));\n };\n\n const renderConfirmationContent = () => {\n const isDeleteAction = attachmentAction === AttachmentAction.Delete;\n const actionVerb = isDeleteAction ? 'delete' : 'remove';\n const fileName = attachmentToDelete?.fileName ?? attachmentToDelete?.name;\n\n return (\n <>\n <p className={'deleteSubTitle'}>\n Are you sure you want to {actionVerb} this attachment -{' '}\n <strong>{`\"${fileName}\"`}</strong>?\n </p>\n {isDeleteAction && <p>This action cannot be undone.</p>}\n </>\n );\n };\n\n return (\n <>\n <div className='card-wrapper'>\n {attachmentProgress && (\n <div className='linear-progress'>\n <LinearProgress />\n </div>\n )}\n <AmbientCard\n fullWidth={true}\n title={t('Add New Attachments')}\n variant='secondary'\n subtitle={'These files will be included with the submittal(s)'}\n >\n <DragDropFileUpload\n title='Drag and drop files here or click to browse'\n handleUploadFile={handleAddFiles}\n hideSelectFileButton={false}\n hideFilePreview={!filePreview}\n minHeight='200px'\n maxHeight='400px'\n multiple={true}\n />\n <AmbientAutoComplete\n variant='outlined'\n isMultiple={false}\n value={attachmentType}\n getOptionLabelFunction={(option) => option.name}\n onChange={handleAttachmentTypeSelect}\n options={attachmentTypes?.pageList}\n label={t('Select Attachment Type')}\n required\n />\n </AmbientCard>\n {currentAttachments?.length > 0 && (\n <AmbientCard\n fullWidth={true}\n title={t('Current Attachments')}\n subtitle={`${currentAttachments.length} file(s) attached`}\n >\n <List>{renderCurrentAttachments()}</List>\n </AmbientCard>\n )}\n {previousAttachments.length > 0 && (\n <AmbientCard fullWidth={true} title={t('Previous Attachments')}>\n <List>{renderPreviousAttachments()}</List>\n </AmbientCard>\n )}\n </div>\n\n <FluentDialog\n title={\n <div className={'deleteTitle'}>\n <span>\n {attachmentAction === AttachmentAction.Delete\n ? t('Delete Attachment')\n : t('Remove Attachment')}\n </span>\n <FluentIconButton\n aria-label='close'\n icon={ChromeCloseIcon}\n onClick={handleCloseAttachmentDialog}\n />\n </div>\n }\n message={renderConfirmationContent()}\n labelOne={\n attachmentAction === AttachmentAction.Delete\n ? t('Delete')\n : t('Remove')\n }\n actionOne={\n attachmentAction === AttachmentAction.Delete\n ? deleteAttachment\n : () =>\n removeAttachmentFromList(\n currentAttachments,\n setCurrentAttachments\n )\n }\n labelTwo={t('Cancel')}\n actionTwo={handleCloseAttachmentDialog}\n open={attachmentDialogOpen}\n handleClose={handleCloseAttachmentDialog}\n fullWidth\n />\n </>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"uploader-Dvf2cDh8.js","names":["useStyles","FileProfile","ImagePreview","attachmentType","Box","DeleteIcon","LinearProgress"],"sources":["../src/uploader/FileProfile.jsx","../src/uploader/ImagePreview.jsx","../src/uploader/FileType.jsx","../src/uploader/enums/systemEnums.ts","../src/uploader/Attachments.jsx"],"sourcesContent":["import React from 'react'\nimport { Typography, makeStyles } from '@material-ui/core'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row'\n },\n prefix: {\n fontWeight: 600\n },\n title: {\n flex: 1\n },\n detail: {\n marginLeft: theme.spacing(2)\n }\n}))\n\nconst FileProfile = (props) => {\n const classes = useStyles()\n const { children, fileName, fileType, size, lastModifiedDate } = props\n return (\n <div>\n <div className={classes.root}>\n <Typography variant='body1' className={classes.title}>\n <strong>{fileName}</strong>\n </Typography>\n <Typography variant='caption' className={classes.detail}>\n <span className={classes.prefix}>Type:</span> {fileType}\n </Typography>\n <Typography variant='caption' className={classes.detail}>\n <span className={classes.prefix}>Size:</span> {size}\n </Typography>\n </div>\n {children}\n {/* Last modified not supported in FireFox */}\n {/* <Typography variant=\"caption\">\n <span className={classes.prefix}>Last Modified:</span>{' '}\n {lastModifiedDate}\n </Typography> */}\n </div>\n )\n}\nexport default FileProfile\n","import React from 'react'\nimport { makeStyles } from '@material-ui/core'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n justifyContent: 'center'\n },\n image: {\n maxWidth: 465\n }\n}))\n\nconst ImagePreview = (props) => {\n const { image } = props\n const classes = useStyles()\n\n return (\n <div className={classes.root}>\n <img className={classes.image} src={image} alt='upload preview' />\n </div>\n )\n}\nexport default ImagePreview\n","import React from 'react'\nimport FileProfile from './FileProfile'\nimport ImagePreview from './ImagePreview'\n\nexport const FileType = (props) => {\n let type = ''\n const { fileType, image, fileName, size, lastModifiedDate } = props\n\n switch (fileType) {\n case 'pdf':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n />\n )\n break\n case 'doc':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n />\n )\n break\n case 'png':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n >\n <ImagePreview image={image} />\n </FileProfile>\n )\n break\n case 'jpg':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n >\n <ImagePreview image={image} />\n </FileProfile>\n )\n break\n case 'jpeg':\n type = (\n <FileProfile\n fileType={fileType}\n fileName={fileName}\n size={size}\n lastModifiedDate={lastModifiedDate}\n >\n <ImagePreview image={image} />\n </FileProfile>\n )\n break\n\n default:\n }\n\n return type\n}\n","export enum APIStatusCode {\n Success = 200,\n Created = 201,\n Accepted = 202,\n NoContent = 204,\n Forbidden = 403,\n}\n\nexport enum AttachmentType {\n SiteInstruction = 1,\n RFI = 2\n}\n\nexport enum AttachmentAction {\n None = 1,\n Delete = 2,\n Remove = 3\n};\n","import React, { useCallback, useState } from 'react';\nimport { apiMutate } from '../utilities';\nimport { Box } from '../UI';\nimport { AmbientCard } from '../UI/surfaces/cards/AmbientCard';\nimport { DragDropFileUpload } from './DragDropFileUpload';\nimport { LinearProgress } from '../UI';\nimport { List, ListItem, IconButton } from '@material-ui/core';\nimport { ConfigService } from '../configService/index';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { DownloadIcon, ChromeCloseIcon } from '@fluentui/react-icons';\nimport { useTranslation } from 'react-i18next';\nimport { useHandleAxiosSnackbar } from '../utilities';\nimport { Divider } from '@material-ui/core';\nimport { AttachmentAction } from './enums/systemEnums';\nimport { FluentDialog } from '../UI';\nimport { FluentIconButton } from '../UI/inputs/buttons';\nimport './Attachments.css';\nimport { AmbientAutoComplete } from '../UI/inputs/textField';\n\nconst removeDuplicateFiles = (incomingFiles, existingFiles) => {\n const uniqueFiles = [];\n const duplicateFiles = [];\n\n incomingFiles.forEach((newFile) => {\n const exists = existingFiles.some(\n (existingFile) =>\n existingFile.name === newFile.name ||\n existingFile.fileName === newFile.name\n );\n\n if (exists) {\n duplicateFiles.push(newFile);\n } else {\n uniqueFiles.push(newFile);\n }\n });\n\n return { uniqueFiles, duplicateFiles };\n};\n\nexport const Attachments = ({\n allowedExtensions,\n MAX_FILE_SIZE_MB,\n filePreview,\n setFilePreview,\n currentAttachments,\n setCurrentAttachments,\n attachmentTypes,\n attachmentType,\n setAttachmentType,\n attachmentProgress,\n setAttachmentProgress,\n previousAttachments,\n setPreviousAttachments\n}) => {\n const [attachmentDialogOpen, setAttachmentDialogOpen] = useState(false);\n const [attachmentToDelete, setAttachmentToDelete] = useState(null);\n const [attachmentToDeleteIndex, setAttachmentToDeleteIndex] = useState(0);\n const [attachmentAction, setAttachmentAction] = useState(\n AttachmentAction.None\n );\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n const { t } = useTranslation();\n\n const initiateAttachmentAction = useCallback((action, file, index) => {\n setAttachmentAction(action);\n setAttachmentToDelete(file);\n setAttachmentToDeleteIndex(index);\n setAttachmentDialogOpen(true);\n }, []);\n\n const handleAttachmentDeleteClick = useCallback(\n (file, index) => {\n initiateAttachmentAction(AttachmentAction.Delete, file, index);\n },\n [initiateAttachmentAction]\n );\n\n const handleAttachmentRemoveClick = useCallback(\n (file, index) => {\n initiateAttachmentAction(AttachmentAction.Remove, file, index);\n },\n [initiateAttachmentAction]\n );\n\n const handleCloseAttachmentDialog = useCallback(() => {\n setAttachmentAction(AttachmentAction.None);\n setAttachmentToDelete({});\n setAttachmentDialogOpen(false);\n }, []);\n\n const removeAttachmentFromList = useCallback(\n (attachments, setAttachments) => {\n setAttachments((prev) =>\n prev.filter((item, i) => i !== attachmentToDeleteIndex)\n );\n handleSuccessSnackbar(t('Attachment Removed Successfully'));\n handleCloseAttachmentDialog();\n },\n [\n attachmentToDeleteIndex,\n handleSuccessSnackbar,\n handleCloseAttachmentDialog,\n t\n ]\n );\n\n const deleteAttachment = useCallback(async () => {\n try {\n setAttachmentProgress(true);\n const filePayload = { ...attachmentToDelete, isDeleted: true };\n\n await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/${attachmentToDelete.transactionAttachmentId}`,\n {\n method: 'put',\n data: filePayload\n }\n );\n removeAttachmentFromList(previousAttachments, setPreviousAttachments);\n } catch (error) {\n handleErrorSnackbar(\n 'Failed to delete attachment',\n 'We encountered a system error while trying to delete the file. Please try again.'\n );\n console.error(error);\n } finally {\n setAttachmentProgress(false);\n setAttachmentDialogOpen(false);\n }\n }, [\n attachmentToDelete,\n removeAttachmentFromList,\n previousAttachments,\n setPreviousAttachments,\n setAttachmentProgress,\n handleErrorSnackbar\n ]);\n\n const handleDownloadFile = useCallback(async (file) => {\n try {\n const response = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpTransactionAttachment/${file.transactionAttachmentId}/udpDriveFile/download`,\n {}\n );\n const url = response.data.link;\n const link = document.createElement('a');\n link.href = url;\n link.download = file.fileName ?? file.name;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (e) {\n console.error('Download failed', e);\n }\n }, []);\n\n const handleAddFiles = useCallback(\n async (files) => {\n const incomingFiles = Array.from(files);\n const validFiles = [];\n const invalidFiles = [];\n\n incomingFiles.forEach((file) => {\n const ext = file.name.split('.').pop().toLowerCase();\n const sizeInMB = file.size / (1024 * 1024);\n\n if (!allowedExtensions.includes(ext)) {\n invalidFiles.push(`${file.name} (Invalid file type)`);\n } else if (sizeInMB > MAX_FILE_SIZE_MB) {\n invalidFiles.push(`${file.name} (Exceeds ${MAX_FILE_SIZE_MB} MB)`);\n } else {\n validFiles.push(file);\n }\n });\n\n const allExistingFiles = [...previousAttachments, ...currentAttachments];\n const { uniqueFiles, duplicateFiles } = removeDuplicateFiles(\n validFiles,\n allExistingFiles\n );\n\n if (uniqueFiles.length > 0) {\n setCurrentAttachments((prev) => [...prev, ...uniqueFiles]);\n }\n\n if (invalidFiles.length > 0) {\n handleErrorSnackbar(\n 'Files not added',\n `The following files had errors:\\n${invalidFiles.join('\\n')}`\n );\n setFilePreview(true);\n }\n\n if (duplicateFiles.length > 0) {\n const duplicateNames = duplicateFiles.map((f) => f.name).join(', ');\n handleErrorSnackbar(\n 'Duplicates skipped',\n `The following files already exist and were not added: ${duplicateNames}`\n );\n }\n },\n [\n allowedExtensions,\n MAX_FILE_SIZE_MB,\n previousAttachments,\n currentAttachments,\n setCurrentAttachments,\n handleErrorSnackbar,\n setFilePreview\n ]\n );\n\n const handleAttachmentTypeSelect = useCallback(\n (attachmentType) => {\n setAttachmentType(attachmentType);\n },\n [setAttachmentType]\n );\n\n const renderCurrentAttachments = () => {\n return currentAttachments.map((file, index) => (\n <React.Fragment key={index}>\n {index > 0 && <Divider component='li' />}\n <ListItem\n className='list-separator-item'\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <Box>{file.fileName ? file.fileName : file.name}</Box>\n <Box>\n <IconButton\n onClick={() => handleAttachmentRemoveClick(file, index)}\n >\n <DeleteIcon />\n </IconButton>\n </Box>\n </ListItem>\n </React.Fragment>\n ));\n };\n\n const renderPreviousAttachments = () => {\n return previousAttachments.map((file, index) => (\n <ListItem\n key={index}\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <Box>{file.fileName ?? file.name}</Box>\n <Box>\n <IconButton onClick={() => handleAttachmentDeleteClick(file, index)}>\n <DeleteIcon />\n </IconButton>\n <IconButton onClick={() => handleDownloadFile(file)}>\n <DownloadIcon />\n </IconButton>\n </Box>\n </ListItem>\n ));\n };\n\n const renderConfirmationContent = () => {\n const isDeleteAction = attachmentAction === AttachmentAction.Delete;\n const actionVerb = isDeleteAction ? 'delete' : 'remove';\n const fileName = attachmentToDelete?.fileName ?? attachmentToDelete?.name;\n\n return (\n <>\n <p className={'deleteSubTitle'}>\n Are you sure you want to {actionVerb} this attachment -{' '}\n <strong>{`\"${fileName}\"`}</strong>?\n </p>\n {isDeleteAction && <p>This action cannot be undone.</p>}\n </>\n );\n };\n\n return (\n <>\n <div className='card-wrapper'>\n {attachmentProgress && (\n <div className='linear-progress'>\n <LinearProgress />\n </div>\n )}\n <AmbientCard\n fullWidth={true}\n title={t('Add New Attachments')}\n variant='secondary'\n subtitle={'These files will be included with the submittal(s)'}\n >\n <DragDropFileUpload\n title='Drag and drop files here or click to browse'\n handleUploadFile={handleAddFiles}\n hideSelectFileButton={false}\n hideFilePreview={!filePreview}\n minHeight='200px'\n maxHeight='400px'\n multiple={true}\n />\n <AmbientAutoComplete\n variant='outlined'\n isMultiple={false}\n value={attachmentType}\n getOptionLabelFunction={(option) => option.name}\n onChange={handleAttachmentTypeSelect}\n options={attachmentTypes?.pageList}\n label={t('Select Attachment Type')}\n required\n />\n </AmbientCard>\n {currentAttachments?.length > 0 && (\n <AmbientCard\n fullWidth={true}\n title={t('Current Attachments')}\n subtitle={`${currentAttachments.length} file(s) attached`}\n >\n <List>{renderCurrentAttachments()}</List>\n </AmbientCard>\n )}\n {previousAttachments.length > 0 && (\n <AmbientCard fullWidth={true} title={t('Previous Attachments')}>\n <List>{renderPreviousAttachments()}</List>\n </AmbientCard>\n )}\n </div>\n\n <FluentDialog\n title={\n <div className={'deleteTitle'}>\n <span>\n {attachmentAction === AttachmentAction.Delete\n ? t('Delete Attachment')\n : t('Remove Attachment')}\n </span>\n <FluentIconButton\n aria-label='close'\n icon={ChromeCloseIcon}\n onClick={handleCloseAttachmentDialog}\n />\n </div>\n }\n message={renderConfirmationContent()}\n labelOne={\n attachmentAction === AttachmentAction.Delete\n ? t('Delete')\n : t('Remove')\n }\n actionOne={\n attachmentAction === AttachmentAction.Delete\n ? deleteAttachment\n : () =>\n removeAttachmentFromList(\n currentAttachments,\n setCurrentAttachments\n )\n }\n labelTwo={t('Cancel')}\n actionTwo={handleCloseAttachmentDialog}\n open={attachmentDialogOpen}\n handleClose={handleCloseAttachmentDialog}\n fullWidth\n />\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAGA,MAAMA,cAAY,YAAY,WAAW;CACvC,MAAM;EACJ,SAAS;EACT,eAAe;EAChB;CACD,QAAQ,EACN,YAAY,KACb;CACD,OAAO,EACL,MAAM,GACP;CACD,QAAQ,EACN,YAAY,MAAM,QAAQ,EAAE,EAC7B;CACF,EAAE;AAEH,MAAM,eAAe,UAAU;CAC7B,MAAM,UAAUA,aAAW;CAC3B,MAAM,EAAE,UAAU,UAAU,UAAU,MAAM,qBAAqB;AACjE,QACE,oCAAC,aACC,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC;EAAW,SAAQ;EAAQ,WAAW,QAAQ;IAC7C,oCAAC,gBAAQ,SAAkB,CAChB,EACb,oCAAC;EAAW,SAAQ;EAAU,WAAW,QAAQ;IAC/C,oCAAC,UAAK,WAAW,QAAQ,UAAQ,QAAY,OAAE,SACpC,EACb,oCAAC;EAAW,SAAQ;EAAU,WAAW,QAAQ;IAC/C,oCAAC,UAAK,WAAW,QAAQ,UAAQ,QAAY,OAAE,KACpC,CACT,EACL,SAMG;;AAGV,0BAAe;;;;ACzCf,MAAM,YAAY,YAAY,WAAW;CACvC,MAAM;EACJ,SAAS;EACT,gBAAgB;EACjB;CACD,OAAO,EACL,UAAU,KACX;CACF,EAAE;AAEH,MAAM,gBAAgB,UAAU;CAC9B,MAAM,EAAE,UAAU;CAClB,MAAM,UAAU,WAAW;AAE3B,QACE,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC;EAAI,WAAW,QAAQ;EAAO,KAAK;EAAO,KAAI;GAAmB,CAC9D;;AAGV,2BAAe;;;;ACnBf,MAAa,YAAY,UAAU;CACjC,IAAI,OAAO;CACX,MAAM,EAAE,UAAU,OAAO,UAAU,MAAM,qBAAqB;AAE9D,SAAQ,UAAR;EACE,KAAK;AACH,UACE,oCAACC;IACW;IACA;IACJ;IACY;KAClB;AAEJ;EACF,KAAK;AACH,UACE,oCAACA;IACW;IACA;IACJ;IACY;KAClB;AAEJ;EACF,KAAK;AACH,UACE,oCAACA;IACW;IACA;IACJ;IACY;MAElB,oCAACC,wBAAoB,QAAS,CAClB;AAEhB;EACF,KAAK;AACH,UACE,oCAACD;IACW;IACA;IACJ;IACY;MAElB,oCAACC,wBAAoB,QAAS,CAClB;AAEhB;EACF,KAAK;AACH,UACE,oCAACD;IACW;IACA;IACJ;IACY;MAElB,oCAACC,wBAAoB,QAAS,CAClB;AAEhB;EAEF;;AAGF,QAAO;;;;;ACxDT,IAAY,gEAAL;AACL;AACA;AACA;;;;;;ACGF,MAAM,wBAAwB,eAAe,kBAAkB;CAC7D,MAAM,cAAc,EAAE;CACtB,MAAM,iBAAiB,EAAE;AAEzB,eAAc,SAAS,YAAY;AAOjC,MANe,cAAc,MAC1B,iBACC,aAAa,SAAS,QAAQ,QAC9B,aAAa,aAAa,QAAQ,KACrC,CAGC,gBAAe,KAAK,QAAQ;MAE5B,aAAY,KAAK,QAAQ;GAE3B;AAEF,QAAO;EAAE;EAAa;EAAgB;;AAGxC,MAAa,eAAe,EAC1B,mBACA,kBACA,aACA,gBACA,oBACA,uBACA,iBACA,gBACA,mBACA,oBACA,uBACA,qBACA,6BACI;CACJ,MAAM,CAAC,sBAAsB,2BAA2B,SAAS,MAAM;CACvE,MAAM,CAAC,oBAAoB,yBAAyB,SAAS,KAAK;CAClE,MAAM,CAAC,yBAAyB,8BAA8B,SAAS,EAAE;CACzE,MAAM,CAAC,kBAAkB,uBAAuB,SAC9C,iBAAiB,KAClB;CAED,MAAM,EAAE,qBAAqB,0BAC3B,wBAAwB;CAC1B,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,2BAA2B,aAAa,QAAQ,MAAM,UAAU;AACpE,sBAAoB,OAAO;AAC3B,wBAAsB,KAAK;AAC3B,6BAA2B,MAAM;AACjC,0BAAwB,KAAK;IAC5B,EAAE,CAAC;CAEN,MAAM,8BAA8B,aACjC,MAAM,UAAU;AACf,2BAAyB,iBAAiB,QAAQ,MAAM,MAAM;IAEhE,CAAC,yBAAyB,CAC3B;CAED,MAAM,8BAA8B,aACjC,MAAM,UAAU;AACf,2BAAyB,iBAAiB,QAAQ,MAAM,MAAM;IAEhE,CAAC,yBAAyB,CAC3B;CAED,MAAM,8BAA8B,kBAAkB;AACpD,sBAAoB,iBAAiB,KAAK;AAC1C,wBAAsB,EAAE,CAAC;AACzB,0BAAwB,MAAM;IAC7B,EAAE,CAAC;CAEN,MAAM,2BAA2B,aAC9B,aAAa,mBAAmB;AAC/B,kBAAgB,SACd,KAAK,QAAQ,MAAM,MAAM,MAAM,wBAAwB,CACxD;AACD,wBAAsB,EAAE,kCAAkC,CAAC;AAC3D,+BAA6B;IAE/B;EACE;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,mBAAmB,YAAY,YAAY;AAC/C,MAAI;AACF,yBAAsB,KAAK;GAC3B,MAAM,cAAc;IAAE,GAAG;IAAoB,WAAW;IAAM;AAE9D,SAAM,UACJ,cAAc,iBACd,4BAA4B,mBAAmB,2BAC/C;IACE,QAAQ;IACR,MAAM;IACP,CACF;AACD,4BAAyB,qBAAqB,uBAAuB;WAC9D,OAAO;AACd,uBACE,+BACA,mFACD;AACD,WAAQ,MAAM,MAAM;YACZ;AACR,yBAAsB,MAAM;AAC5B,2BAAwB,MAAM;;IAE/B;EACD;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,qBAAqB,YAAY,OAAO,SAAS;AACrD,MAAI;GAMF,MAAM,OALW,MAAM,UACrB,cAAc,iBACd,4BAA4B,KAAK,wBAAwB,yBACzD,EAAE,CACH,EACoB,KAAK;GAC1B,MAAM,OAAO,SAAS,cAAc,IAAI;AACxC,QAAK,OAAO;AACZ,QAAK,WAAW,KAAK,YAAY,KAAK;AACtC,YAAS,KAAK,YAAY,KAAK;AAC/B,QAAK,OAAO;AACZ,YAAS,KAAK,YAAY,KAAK;WACxB,GAAG;AACV,WAAQ,MAAM,mBAAmB,EAAE;;IAEpC,EAAE,CAAC;CAEN,MAAM,iBAAiB,YACrB,OAAO,UAAU;EACf,MAAM,gBAAgB,MAAM,KAAK,MAAM;EACvC,MAAM,aAAa,EAAE;EACrB,MAAM,eAAe,EAAE;AAEvB,gBAAc,SAAS,SAAS;GAC9B,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa;GACpD,MAAM,WAAW,KAAK,QAAQ,OAAO;AAErC,OAAI,CAAC,kBAAkB,SAAS,IAAI,CAClC,cAAa,KAAK,GAAG,KAAK,KAAK,sBAAsB;YAC5C,WAAW,iBACpB,cAAa,KAAK,GAAG,KAAK,KAAK,YAAY,iBAAiB,MAAM;OAElE,YAAW,KAAK,KAAK;IAEvB;EAGF,MAAM,EAAE,aAAa,mBAAmB,qBACtC,YAFuB,CAAC,GAAG,qBAAqB,GAAG,mBAAmB,CAIvE;AAED,MAAI,YAAY,SAAS,EACvB,wBAAuB,SAAS,CAAC,GAAG,MAAM,GAAG,YAAY,CAAC;AAG5D,MAAI,aAAa,SAAS,GAAG;AAC3B,uBACE,mBACA,oCAAoC,aAAa,KAAK,KAAK,GAC5D;AACD,kBAAe,KAAK;;AAGtB,MAAI,eAAe,SAAS,EAE1B,qBACE,sBACA,yDAHqB,eAAe,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,GAIlE;IAGL;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,6BAA6B,aAChC,qBAAmB;AAClB,oBAAkBC,iBAAe;IAEnC,CAAC,kBAAkB,CACpB;CAED,MAAM,iCAAiC;AACrC,SAAO,mBAAmB,KAAK,MAAM,UACnC,oCAAC,MAAM,YAAS,KAAK,SAClB,QAAQ,KAAK,oCAAC,WAAQ,WAAU,OAAO,EACxC,oCAAC;GACC,WAAU;GACV,OAAO;IAAE,SAAS;IAAQ,gBAAgB;IAAiB;KAE3D,oCAACC,aAAK,KAAK,WAAW,KAAK,WAAW,KAAK,KAAW,EACtD,oCAACA,aACC,oCAAC,cACC,eAAe,4BAA4B,MAAM,MAAM,IAEvD,oCAACC,mBAAa,CACH,CACT,CACG,CACI,CACjB;;CAGJ,MAAM,kCAAkC;AACtC,SAAO,oBAAoB,KAAK,MAAM,UACpC,oCAAC;GACC,KAAK;GACL,OAAO;IAAE,SAAS;IAAQ,gBAAgB;IAAiB;KAE3D,oCAACD,aAAK,KAAK,YAAY,KAAK,KAAW,EACvC,oCAACA,aACC,oCAAC,cAAW,eAAe,4BAA4B,MAAM,MAAM,IACjE,oCAACC,mBAAa,CACH,EACb,oCAAC,cAAW,eAAe,mBAAmB,KAAK,IACjD,oCAAC,mBAAe,CACL,CACT,CACG,CACX;;CAGJ,MAAM,kCAAkC;EACtC,MAAM,iBAAiB,qBAAqB,iBAAiB;EAC7D,MAAM,aAAa,iBAAiB,WAAW;EAC/C,MAAM,WAAW,oBAAoB,YAAY,oBAAoB;AAErE,SACE,0DACE,oCAAC,OAAE,WAAW,oBAAkB,6BACJ,YAAW,sBAAmB,KACxD,oCAAC,gBAAQ,IAAI,SAAS,GAAY,MAChC,EACH,kBAAkB,oCAAC,WAAE,gCAAiC,CACtD;;AAIP,QACE,0DACE,oCAAC,SAAI,WAAU,kBACZ,sBACC,oCAAC,SAAI,WAAU,qBACb,oCAACC,uBAAiB,CACd,EAER,oCAAC;EACC,WAAW;EACX,OAAO,EAAE,sBAAsB;EAC/B,SAAQ;EACR,UAAU;IAEV,oCAAC;EACC,OAAM;EACN,kBAAkB;EAClB,sBAAsB;EACtB,iBAAiB,CAAC;EAClB,WAAU;EACV,WAAU;EACV,UAAU;GACV,EACF,oCAAC;EACC,SAAQ;EACR,YAAY;EACZ,OAAO;EACP,yBAAyB,WAAW,OAAO;EAC3C,UAAU;EACV,SAAS,iBAAiB;EAC1B,OAAO,EAAE,yBAAyB;EAClC;GACA,CACU,EACb,oBAAoB,SAAS,KAC5B,oCAAC;EACC,WAAW;EACX,OAAO,EAAE,sBAAsB;EAC/B,UAAU,GAAG,mBAAmB,OAAO;IAEvC,oCAAC,YAAM,0BAA0B,CAAQ,CAC7B,EAEf,oBAAoB,SAAS,KAC5B,oCAAC;EAAY,WAAW;EAAM,OAAO,EAAE,uBAAuB;IAC5D,oCAAC,YAAM,2BAA2B,CAAQ,CAC9B,CAEZ,EAEN,oCAAC;EACC,OACE,oCAAC,SAAI,WAAW,iBACd,oCAAC,cACE,qBAAqB,iBAAiB,SACnC,EAAE,oBAAoB,GACtB,EAAE,oBAAoB,CACrB,EACP,oCAAC;GACC,cAAW;GACX,MAAM;GACN,SAAS;IACT,CACE;EAER,SAAS,2BAA2B;EACpC,UACE,qBAAqB,iBAAiB,SAClC,EAAE,SAAS,GACX,EAAE,SAAS;EAEjB,WACE,qBAAqB,iBAAiB,SAClC,yBAEE,yBACE,oBACA,sBACD;EAET,UAAU,EAAE,SAAS;EACrB,WAAW;EACX,MAAM;EACN,aAAa;EACb;GACA,CACD"}
@@ -1,5 +1,5 @@
1
1
  import { i as SplitButton, n as AgTableButtons, r as useAgGridApi, t as AgTable } from "../../AgTable-B2xTzAm2.js";
2
2
  import { a as saveGridState, c as useGridFormat, i as onFirstDataRendered, l as useQuickFilter, n as deleteGridState, o as useExport, r as getGridState, s as useGridClear, t as clearGridState } from "../../GridFunctions-CRTDIOe0.js";
3
- import { t as useServerSideDatasource } from "../../aggridHelpers-BeUZvPIv.js";
3
+ import { t as useServerSideDatasource } from "../../aggridHelpers-RYO7tWY9.js";
4
4
 
5
5
  export { AgTable, AgTableButtons, SplitButton, clearGridState, deleteGridState, getGridState, onFirstDataRendered, saveGridState, useAgGridApi, useExport, useGridClear, useGridFormat, useQuickFilter, useServerSideDatasource };
@@ -1,3 +1,3 @@
1
- import { n as ApprovalIcon, t as RejectIcon } from "../../RejectIcon-CNSkW92y.js";
1
+ import { n as ApprovalIcon, t as RejectIcon } from "../../RejectIcon-CpF_J5Je.js";
2
2
 
3
3
  export { ApprovalIcon, RejectIcon };
@@ -1,3 +1,3 @@
1
- import { n as useScreenControl, t as useNoticeUpdate } from "../../gridVisualizationFunctions-jnvPACJD.js";
1
+ import { n as useScreenControl, t as useNoticeUpdate } from "../../gridVisualizationFunctions-Cmh4EUIL.js";
2
2
 
3
3
  export { useNoticeUpdate, useScreenControl };
@@ -1,3 +1,3 @@
1
- import { t as PaymentForm } from "../../../PaymentForm-BTLh5bXJ.js";
1
+ import { t as PaymentForm } from "../../../PaymentForm-CRlhsB2F.js";
2
2
 
3
3
  export { PaymentForm };
@@ -1,3 +1,3 @@
1
- import { t as OutlookCallback } from "../../../OutlookCallback-teOtztm6.js";
1
+ import { t as OutlookCallback } from "../../../OutlookCallback-D3no-Urx.js";
2
2
 
3
3
  export { OutlookCallback };
@@ -1,6 +1,6 @@
1
1
  import { t as colors } from "../../colors-BONxjrOE.js";
2
2
  import { n as getCustomHintColor, r as getEllipseColor, t as getCategoryColor } from "../../colorConverter-x64WSLsF.js";
3
3
  import { i as verticalSecondary, n as useTypeScale, r as verticalPrimary, t as greyScale } from "../../verticalStyles-CUPjFvB1.js";
4
- import { t as ContentContainer } from "../../ContentContainer-DuDrf5lL.js";
4
+ import { t as ContentContainer } from "../../ContentContainer-C2CcA6oX.js";
5
5
 
6
6
  export { ContentContainer, colors, getCategoryColor, getCustomHintColor, getEllipseColor, greyScale, useTypeScale, verticalPrimary, verticalSecondary };
@@ -1,4 +1,4 @@
1
1
  import { n as corporateColorsHint, r as productCategoryColors, t as corporateColors } from "../../brand-BkTzWyBS.js";
2
- import { n as ThemeProvider, r as useSystemColor, t as useTheme } from "../../theme-IKiRfNgl.js";
2
+ import { n as ThemeProvider, r as useSystemColor, t as useTheme } from "../../theme-Bb8h8tjE.js";
3
3
 
4
4
  export { ThemeProvider, corporateColors, corporateColorsHint, productCategoryColors, useSystemColor, useTheme };
@@ -1,4 +1,4 @@
1
1
  import { t as formatBytes } from "../../formatBytes-Bt-B_Lo8.js";
2
- import { n as FileType, t as FileUpload } from "../../FileUpload-BCxrOds_.js";
2
+ import { n as FileType, t as FileUpload } from "../../FileUpload-BpMG2Efl.js";
3
3
 
4
4
  export { FileType, FileUpload, formatBytes };
@@ -1,7 +1,7 @@
1
1
  import { n as WorkflowTreeMenuItem, t as WorkflowTreeMenu } from "../WorkflowTreeMenu-D2Uc09jP.js";
2
2
  import { t as WorkflowTaskFlow } from "../WorkflowTaskFlow-Cah1eKe3.js";
3
3
  import { n as WorkflowUiInterruptContent, t as WorkflowContent } from "../WorkflowContent-CU_-pOym.js";
4
- import { t as WorkflowContainer } from "../WorkflowContainer-Cd5H4mpf.js";
4
+ import { t as WorkflowContainer } from "../WorkflowContainer-BheQPhXt.js";
5
5
  import "./components/index.js";
6
6
  import "./menus/index.js";
7
7
 
package/export-map.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "generated": "2025-12-12T00:36:36.651Z",
2
+ "generated": "2025-12-12T02:05:01.724Z",
3
3
  "library": "udp-react-enterprise-component-library",
4
4
  "totalExports": 814,
5
5
  "description": "Map of exported items to their module paths for tree-shaking",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "udp-react-enterprise-component-library",
3
- "version": "25.18.1-beta.44",
3
+ "version": "25.18.1-beta.46",
4
4
  "description": "React-based UI component library implementing Fluent UI design for Univerus internal projects",
5
5
  "author": "Univerus",
6
6
  "license": "MIT",
@@ -1,3 +0,0 @@
1
- import { t as MenuPage_default } from "./MenuPage-BS8ti9lx.js";
2
-
3
- export { MenuPage_default as default };
@@ -1,3 +0,0 @@
1
- import { n as MyExportsPage_default, t as MyExportsPage } from "./MyExportsPage-BwcVZASe.js";
2
-
3
- export { MyExportsPage, MyExportsPage_default as default };
@@ -1,3 +0,0 @@
1
- import { t as Reports_default } from "./Reports-Cz5Pl1rM.js";
2
-
3
- export { Reports_default as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"UdpFormsSubmissionGrid-PWsnFyYB.js","names":["CustomMenuPage"],"sources":["../src/udp/pages/UdpFormsSubmissionGrid/UdpFormsSubmissionGrid.jsx"],"sourcesContent":["import React, {\n useMemo,\n useState,\n useEffect,\n useCallback,\n useRef\n} from 'react';\nimport { useUser } from '../../../utilities/auth/useUser';\nimport { useTenant } from '../../../utilities/tenant/useTenant';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { useSnackbar } from 'notistack';\nimport { CustomMenuPage } from '../../../menuPage';\nimport { useTranslation } from 'react-i18next';\nimport { apiMutate } from '../../../utilities';\nimport { ConfigService } from '../../../configService';\nimport { SearchMethodUdpGrid } from '../../../UI/templates/newGrid';\nimport { LoadingIndicator } from '../../../UI/loading/LoadingIndicator';\nimport { UdpPageEnums } from '../../../enums';\nimport { StatusCellRenderer } from '../../../UI/templates/ui/renderers';\nimport { SqlFilterOperators } from '../../../enums/aggridEnums';\nimport { SideSheet } from '../../../UI/surfaces/SideSheet';\nimport { Autocomplete } from '@material-ui/lab';\nimport { TextField } from '@material-ui/core';\nimport { PageLoading } from '../../../UI';\n\nconst UdpFormsSubmissionStatusEnum = Object.freeze({\n InProgress: 1,\n Submitted: 2,\n Created: 3\n});\n\nconst dateFormatter = (dateString) => {\n let normalizedDateString = dateString;\n\n // Check if the string is in the 'YYYY-MM-DD HH:mm:ss.sss' format (i.e., contains a space, not 'T')\n // If the input is '2025-12-10T20:23:23.055Z', it passes straight through.\n // This format is assumed to be missing timezone info and needs to be treated as UTC.\n if (dateString.includes(' ') && !dateString.includes('Z')) {\n // Replace the space with 'T' and append 'Z' to enforce UTC interpretation\n normalizedDateString = dateString.replace(' ', 'T') + 'Z';\n }\n\n const date = new Date(normalizedDateString);\n\n return date.toLocaleString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n });\n};\n\nconst filterConfigByUrlField = {\n form_name: { agGridField: 'form_Name', filterType: 'text' },\n formsubmission_formversion: {\n agGridField: 'formSubmission_FormVersion',\n filterType: 'number'\n },\n form_description: { agGridField: 'form_Description', filterType: 'text' },\n formsubmission_userdisplayname: {\n agGridField: 'formSubmission_UserDisplayName',\n filterType: 'text'\n },\n formsubmission_status: {\n agGridField: 'formSubmission_Status',\n filterType: 'number'\n },\n formsubmission_initialcreatedon: {\n agGridField: 'formSubmission_InitialCreatedOn',\n filterType: 'date'\n },\n formsubmission_lastmodifiedon: {\n agGridField: 'formSubmission_LastModifiedOn',\n filterType: 'date'\n },\n formsubmission_submittedon: {\n agGridField: 'formSubmission_SubmittedOn',\n filterType: 'date'\n },\n formsubmission_duedate: {\n agGridField: 'formSubmission_DueDate',\n filterType: 'date'\n }\n};\n\n// --- NEW HELPER FUNCTION ---\n/**\n * Maps your internal filter object structure (from URL processing)\n * to the ag-Grid Filter Model structure.\n * * @param {Array<{searchField: string, searchOperator: number, searchValue: string}>} filterObjects\n * @returns {object} ag-Grid Filter Model\n */\n/**\n * Maps your internal filter object structure (from URL processing)\n * to the ag-Grid Filter Model structure.\n * @param {Array<{searchField: string, searchOperator: number, searchValue: string}>} filterObjects\n * @returns {object} ag-Grid Filter Model\n */\nconst mapUrlFiltersToAgGridModel = (filterObjects) => {\n if (!filterObjects || filterObjects.length === 0) {\n return null;\n }\n\n const agGridModel = {};\n\n filterObjects.forEach((filter) => {\n const { searchField, searchOperator, searchValue } = filter;\n\n const searchKey = searchField.toLocaleLowerCase();\n const config = filterConfigByUrlField[searchKey];\n\n if (!config) {\n console.warn(\n `No configuration found for URL filter field: ${searchField}. Filter ignored.`\n );\n return;\n }\n\n const agGridField = config.agGridField;\n const filterType = config.filterType;\n\n let type = 'equals';\n switch (searchOperator) {\n case SqlFilterOperators.EQUALS:\n type = 'equals';\n break;\n case SqlFilterOperators.NOT_EQUALS:\n type = 'notEqual';\n break;\n case SqlFilterOperators.GREATER_THAN:\n type = 'greaterThan';\n break;\n case SqlFilterOperators.LESS_THAN:\n type = 'lessThan';\n break;\n case SqlFilterOperators.LIKE:\n type = 'contains';\n break;\n default:\n type = 'equals';\n }\n\n let filterValue = searchValue;\n\n if (\n !filterValue ||\n filterValue.toLowerCase() === 'undefined' ||\n filterValue.toLowerCase() === 'null'\n ) {\n console.warn(\n `Skipping filter for ${agGridField} due to invalid value: ${searchValue}`\n );\n return; \n }\n\n if (filterType == 'date'){\n agGridModel[agGridField] = {\n filterType,\n type,\n dateFrom: filterValue \n };\n } else {\n agGridModel[agGridField] = {\n filterType,\n type,\n filter: filterValue \n };\n }\n\n });\n\n return agGridModel;\n};\n\nexport const UdpFormsSubmissionGrid = ({\n isManagerMode = false,\n generic1 = undefined,\n generic2 = undefined,\n generic3 = undefined,\n formsRendererUrlPath = undefined\n}) => {\n const user = useUser();\n const tenant = useTenant();\n const history = useHistory();\n const location = useLocation();\n const { t } = useTranslation();\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n const [innerMenuItemList, setInnerMenuItemList] = useState([]);\n const [formSubmissionViewDataRaw, setFormSubmissionViewDataRaw] = useState([]);\n const [formDataRaw, setFormDataRaw] = useState([]);\n const [isSidesheetOpen, setIsSidesheetOpen] = useState(false);\n const [selectedUdpFormInSideSheet, setSelectedUdpFormInSideSheet] = useState({});\n const [formSubmissionUrlSearchObjs, setFormSubmissionUrlSearchObjs] = useState([]);\n\n const [gridApi, setGridApi] = useState(null); \n const handleGridApiCallback = useCallback((api) => {setGridApi(api); }, []);\n\n const initialFilterModel = useMemo(() => {\n return mapUrlFiltersToAgGridModel(formSubmissionUrlSearchObjs);\n }, [formSubmissionUrlSearchObjs]); \n\n useEffect(() => {\n if (gridApi && initialFilterModel) {\n gridApi.setFilterModel(initialFilterModel);\n gridApi.onFilterChanged();\n }\n }, [gridApi, initialFilterModel]);\n\n const buildFormSubmissionSearchParams = useCallback((search) => {\n const qs = new URLSearchParams(search);\n const filterObjects = [];\n qs.forEach((value, key) => {\n if (key.startsWith('udp_search')) {\n const keyParts = key.split('-');\n const searchField = keyParts[1] || undefined;\n const searchOperatorRaw = keyParts[2] || undefined;\n const searchOperator =\n SqlFilterOperators[searchOperatorRaw?.toUpperCase()] || undefined;\n const searchValue = value || undefined;\n if (searchField && searchOperator && searchValue) {\n filterObjects.push({\n searchField,\n searchOperator,\n searchValue\n });\n }\n }\n });\n return filterObjects;\n }, []);\n\n const handleSideSheetClosed = () => {\n setSelectedUdpFormInSideSheet({});\n setIsSidesheetOpen(false);\n };\n\n const consolidateAndSortFormsByFormId = useCallback(\n (forms, submissions = []) => {\n const resultMap = new Map();\n for (const item of forms) {\n const {\n id: formId,\n version: formVersion,\n name: formName,\n description: formDescription,\n initialCreatedOn: initialCreatedOn\n } = item;\n if (!formId || formVersion == null) continue;\n\n const key = String(formId);\n const existing = resultMap.get(key);\n\n // normalize version and timestamp\n const versionNum = Number(formVersion) || 0;\n const ts = initialCreatedOn ? new Date(initialCreatedOn).getTime() : 0;\n\n // robust comparison (coerce to string)\n const submissionCount = (submissions || []).filter(\n (sub) => String(sub?.formSubmission_FormId) === key\n ).length;\n\n if (!existing) {\n resultMap.set(key, {\n id: key,\n formId,\n formVersion: versionNum,\n name: formName || t('Untitled Form'),\n submissionCount,\n description: formDescription || '',\n mostRecentCreatedOn: ts\n });\n } else {\n // keep metadata (name/description/formVersion) from the highest version seen\n if (versionNum > (existing.formVersion || 0)) {\n existing.formVersion = versionNum;\n if (formName) existing.name = formName;\n if (formDescription) existing.description = formDescription;\n }\n }\n }\n\n const sortedOptions = Array.from(resultMap.values()).sort((a, b) =>\n b.name.localeCompare(a.name)\n );\n return sortedOptions;\n },\n [t]\n );\n\n const consolidateAndSortFormSubmissionsByFormId = useCallback(\n (submissions) => {\n const resultMap = new Map();\n for (const item of submissions) {\n const {\n formSubmission_FormId: formId,\n formSubmission_FormVersion: formVersion,\n form_Name: formName,\n form_Description: formDescription,\n formSubmission_InitialCreatedOn: initialCreatedOn\n } = item;\n if (!formId || formVersion == null) continue;\n\n const key = `${formId}`;\n const existing = resultMap.get(key);\n\n // normalize version and timestamp\n const versionNum = Number(formVersion) || 0;\n const ts = initialCreatedOn ? new Date(initialCreatedOn).getTime() : 0;\n\n if (!existing) {\n resultMap.set(key, {\n id: key,\n formId,\n formVersion: versionNum,\n name: formName || t('Untitled Form'),\n submissionCount: 1,\n description: formDescription || '',\n mostRecentCreatedOn: ts\n });\n } else {\n existing.submissionCount += 1;\n existing.mostRecentCreatedOn = Math.max(\n existing.mostRecentCreatedOn || 0,\n ts\n );\n\n // keep metadata (name/description/formVersion) from the highest version seen\n if (versionNum > (existing.formVersion || 0)) {\n existing.formVersion = versionNum;\n if (formName) existing.name = formName;\n if (formDescription) existing.description = formDescription;\n }\n }\n }\n\n const sortedOptions = Array.from(resultMap.values()).sort(\n (a, b) => b.mostRecentCreatedOn - a.mostRecentCreatedOn\n );\n return sortedOptions;\n },\n [t]\n );\n\n const filterSubmissionByTenantId = useCallback((submissions, tenantId) => {\n return submissions.filter(\n (submission) => submission.form_TenantId === tenantId\n );\n }, []);\n\n const fetchSubmissions = useCallback(async () => {\n try {\n if (!tenant?.activeTenant?.tenantId) return;\n\n const filterElements = [];\n\n filterElements.push({\n searchField: 'Form_TenantId',\n searchOperator: '=',\n searchValue: tenant.activeTenant.tenantId\n });\n\n if (!isManagerMode) {\n filterElements.push({\n searchField: 'FormSubmission_UnityUserId',\n searchOperator: '=',\n searchValue: user.id\n });\n }\n\n if (generic1 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic1',\n searchOperator: '=',\n searchValue: generic1\n });\n }\n\n if (generic2 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic2',\n searchOperator: '=',\n searchValue: generic2\n });\n }\n\n if (generic3 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic3',\n searchOperator: '=',\n searchValue: generic3\n });\n }\n\n const formSubmissionViewSearchResponse = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpFormWithSubmissionsView/search`,\n {\n method: 'POST',\n data: {\n eagerLoad: false,\n getAll: true,\n filterElements\n }\n },\n {}\n );\n\n const submissions = formSubmissionViewSearchResponse?.data.pageList || [];\n const processedSubmissions = filterSubmissionByTenantId(\n submissions,\n tenant.activeTenant.tenantId\n );\n setFormSubmissionViewDataRaw(processedSubmissions);\n } catch (e) {\n console.error('fetchSubmissions error:', e);\n }\n }, [\n user,\n tenant,\n isManagerMode,\n consolidateAndSortFormSubmissionsByFormId,\n t,\n generic1,\n generic2,\n generic3,\n filterSubmissionByTenantId\n ]);\n\n const fetchForms = useCallback(async () => {\n try {\n if (!tenant?.activeTenant?.tenantId) return;\n\n const filterElements = [];\n\n filterElements.push({\n searchField: 'tenantId',\n searchOperator: '=',\n searchValue: tenant.activeTenant.tenantId\n });\n\n const formResponse = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpForm/search`,\n {\n method: 'POST',\n data: {\n eagerLoad: false,\n getAll: true,\n filterElements\n }\n },\n {}\n );\n\n const forms = formResponse?.data.pageList || [];\n setFormDataRaw(forms);\n } catch (e) {\n console.error('fetchForms error:', e);\n }\n }, [user, tenant, consolidateAndSortFormSubmissionsByFormId]);\n\n const parseIdAndVersion = useCallback((input) => {\n const formSubmissionId = input.replace(/^form-submission-/, '');\n // Check for \"all forms\" special case\n if (formSubmissionId.includes('all-forms-key')) {\n return null;\n }\n return formSubmissionId;\n }, []);\n\n const getSearchMethodConfig = useCallback(\n (formId) => {\n if (!tenant?.activeTenant?.tenantId) return;\n\n const filterElements = [];\n\n if (!isManagerMode) {\n filterElements.push({\n searchField: 'formSubmission_unityUserId',\n searchOperator: '=',\n searchValue: user.id || ''\n });\n }\n\n if (formId) {\n filterElements.push({\n searchField: 'formSubmission_formId',\n searchOperator: '=',\n searchValue: formId\n });\n }\n\n if (generic1 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic1',\n searchOperator: '=',\n searchValue: generic1\n });\n }\n\n if (generic2 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic2',\n searchOperator: '=',\n searchValue: generic2\n });\n }\n\n if (generic3 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic3',\n searchOperator: '=',\n searchValue: generic3\n });\n }\n\n filterElements.push({\n searchField: 'form_tenantId',\n searchOperator: '=',\n searchValue: tenant?.activeTenant?.tenantId || ''\n });\n\n return {\n requestUrl: `${ConfigService.productV1ApiUrl}/UdpFormWithSubmissionsView/search`,\n customSearchObject: {\n eagerLoad: false,\n filterElements,\n orderElements: [\n {\n sortColumn: 'initialCreatedOn',\n sortDirection: 'DESC'\n }\n ]\n }\n // logicalSearchOperator: 1,\n // groupingType: '',\n // groupProperty: [],\n // groupOperationList: [],\n // type: 'advanced',\n // pageNumber: 1,\n // pageSize: 20,\n };\n },\n [user, isManagerMode, tenant, generic1, generic2, generic3]\n );\n\n const generateFormRendererUrlPath = useCallback(\n (formId, formVersion) => {\n const baseRoute = formsRendererUrlPath\n ? formsRendererUrlPath\n : 'page/' + UdpPageEnums.Udp_Form_Renderer_Page;\n\n return `${baseRoute}?udpf_formId=${encodeURIComponent(\n formId\n )}&udpf_version=${encodeURIComponent(formVersion)}`;\n },\n [generic1, generic2, generic3, formsRendererUrlPath]\n );\n\n const getGridHeaderConfig = useCallback(\n (formId, formVersion, formTitle) => {\n const config = {\n title: formTitle\n };\n\n if (!isManagerMode) {\n config.primaryActionButton = {\n label: t('Submit New Form'),\n onClick: () => {\n // Only show submit button when we have a specific form id and version\n if (formId && formVersion) {\n const urlPath = generateFormRendererUrlPath(formId, formVersion);\n history.push(urlPath);\n } else {\n setIsSidesheetOpen(true);\n }\n }\n };\n }\n\n return config;\n },\n [history, t, isManagerMode, generateFormRendererUrlPath]\n );\n\n const getGridOptions = useCallback(() => {\n return {\n pagination: true,\n defaultColDef: {\n sortable: true,\n filter: true,\n resizable: true\n },\n };\n }, []);\n\n const getStatus = useMemo(() => {\n return {\n Created: 'info',\n InProgress: 'warning',\n Submitted: 'success',\n Overdue: 'error'\n };\n }, []);\n\n const getSubmissionStatusLabel = (node) => {\n const formStatus = node?.data?.formSubmission_Status;\n const dueDateRaw = node?.data?.formSubmission_DueDate;\n\n // overdue check\n if (dueDateRaw && formStatus != UdpFormsSubmissionStatusEnum.Submitted) {\n const dueTs = Date.parse(String(dueDateRaw));\n if (!Number.isNaN(dueTs) && Date.now() > dueTs) return 'Overdue';\n }\n\n switch (formStatus) {\n case UdpFormsSubmissionStatusEnum.InProgress:\n return 'InProgress';\n case UdpFormsSubmissionStatusEnum.Created:\n return 'Created';\n case UdpFormsSubmissionStatusEnum.Submitted:\n return 'Submitted';\n default:\n return 'Unknown';\n }\n };\n\n const columnDefs = useMemo(\n () => [\n { headerName: 'Form ID', field: 'formSubmission_FormId', hide: true },\n {\n headerName: t('Form Name'),\n field: 'form_Name',\n type: 'text',\n sortable: true\n },\n {\n headerName: t('Form Version'),\n field: 'formSubmission_FormVersion',\n type: 'number',\n sortable: true\n },\n {\n headerName: t('Description'),\n field: 'form_Description',\n type: 'text',\n sortable: true\n },\n {\n headerName: t('Submitted By'),\n field: 'formSubmission_UserDisplayName',\n type: 'text',\n sortable: true\n },\n {\n headerName: 'Form Status',\n filter: false,\n field: 'formSubmission_Status',\n cellRenderer: 'statusRenderer',\n cellRendererParams: {\n statusMappingConfig: getStatus,\n getStatusValue: getSubmissionStatusLabel\n }\n },\n {\n headerName: t('Created On'),\n field: 'formSubmission_InitialCreatedOn',\n valueFormatter: (p) => (p.value ? dateFormatter(p.value) : ''),\n sortable: true,\n cellDataType: 'dateTimeString'\n },\n {\n headerName: t('Last Modified On'),\n field: 'formSubmission_LastModifiedOn',\n valueFormatter: (p) => (p.value ? dateFormatter(p.value) : ''),\n sortable: true,\n cellDataType: 'dateTimeString'\n },\n {\n headerName: t('Submitted On'),\n field: 'formSubmission_SubmittedOn',\n valueFormatter: (p) => (p.value ? dateFormatter(p.value) : ''),\n sortable: true,\n cellDataType: 'dateTimeString'\n },\n {\n headerName: t('Due On'),\n field: 'formSubmission_DueDate',\n valueFormatter: (p) => (p.value ? dateFormatter(p.value) : ''),\n sortable: true,\n cellDataType: 'dateTimeString'\n },\n {\n field: 'actions',\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList: [\n {\n id: 0,\n iconName: 'view',\n title: t('Open This Submission'),\n handleOnClick: (e, params) => {\n history.push(\n `${\n formsRendererUrlPath\n ? formsRendererUrlPath\n : '/page/' + UdpPageEnums.Udp_Form_Renderer_Page\n }?udpf_submissionId=${params?.data?.formSubmission_Id}`\n );\n }\n }\n ]\n }\n }\n ],\n [history, t, formsRendererUrlPath]\n );\n\n const gridFunctions = useMemo(\n () => [\n { name: 'agGridSizeColumnsToFit' },\n { name: 'agGridAutoSizeColumns' },\n { name: 'agGridResetColumns' },\n { name: 'agGridHideShowColumns' }\n ],\n []\n );\n\n const handleSidesheetPrimaryClick = useCallback(() => {\n // selectedUdpFormInSideSheet format is \"formId|formVersion\"\n const raw = selectedUdpFormInSideSheet.value || '';\n const [id, versionStr] = raw.split('|');\n const version = Number(versionStr || 0);\n if (!id || !version) {\n console.warn('Invalid selection:', selectedUdpFormInSideSheet);\n setIsSidesheetOpen(false);\n return;\n }\n\n setIsSidesheetOpen(false);\n const urlPath = generateFormRendererUrlPath(id, version);\n history.push(urlPath);\n }, [selectedUdpFormInSideSheet, history, generateFormRendererUrlPath]);\n\n const selectableItems = useMemo(() => {\n const map = new Map();\n\n for (const f of formDataRaw || []) {\n const formType = f.form_Type ?? f.formType ?? f.type;\n if (Number(formType) !== 1) continue;\n\n const formId = f.id ?? f.form_Id ?? f.formId ?? String(f?.Id ?? '');\n const version = Number(f.version ?? f.form_Version ?? f.formVersion ?? 0);\n const name =\n f.name ??\n f.form_Name ??\n f.formName ??\n f.Form_Name ??\n f.displayName ??\n t('Untitled Form');\n const description = f.description ?? f.form_Description ?? '';\n\n const existing = map.get(formId);\n if (!existing || version > existing.version) {\n map.set(formId, { id: formId, name, version, description });\n }\n }\n\n return Array.from(map.values()).sort((a, b) => b.version - a.version);\n }, [formDataRaw, t]);\n\n const selectorOptions = useMemo(() => {\n return (selectableItems || []).map((s) => ({\n value: `${s.id}|${s.version}`,\n label: s.version ? `${s.name} (v${s.version})` : s.name\n }));\n }, [selectableItems]);\n\n const handleSelectedUdpFormInSideSheetChange = (event, newValue) => {\n if (newValue !== null) {\n setSelectedUdpFormInSideSheet(newValue);\n }\n };\n\n const getMainGridContent = ({\n selectedNode,\n menuItemsList,\n idMap,\n classes\n }) => {\n if (!selectedNode) {\n return <PageLoading />;\n }\n const formId = parseIdAndVersion(selectedNode.id);\n const found = innerMenuItemList.find((form) => form.formId == formId);\n const formTitle = `${found?.name}` || 'Unknown Form';\n const newestFormVersion = formDataRaw\n .filter((formObj) => formObj.id == formId)\n .reduce((acc, curr) => {\n return Math.max(acc, curr.version);\n }, 0);\n\n return (\n <>\n <SideSheet\n open={isSidesheetOpen}\n title={t('Submit New Form')}\n position='right'\n width={'30%'}\n buttonLabel={t('New')}\n buttonOneDisabled={!selectedUdpFormInSideSheet.value}\n onSubmit={handleSidesheetPrimaryClick}\n onClose={handleSideSheetClosed}\n >\n <Autocomplete\n options={selectorOptions}\n getOptionLabel={(selectedOption) => selectedOption.label}\n onChange={handleSelectedUdpFormInSideSheetChange}\n value={selectedUdpFormInSideSheet.value}\n size='small'\n renderInput={(params) => (\n <TextField {...params} label='Choose a Form' variant='outlined' />\n )}\n />\n </SideSheet>\n <SearchMethodUdpGrid\n searchMethodConfig={getSearchMethodConfig(formId)}\n columnDefs={columnDefs}\n gridOptions={getGridOptions()}\n gridHeaderConfig={getGridHeaderConfig(\n formId,\n newestFormVersion,\n formTitle\n )}\n gridFunctions={gridFunctions}\n gridApiCallback={handleGridApiCallback} // Pass the setter/ref handler\n />\n </>\n );\n };\n\n useEffect(() => {\n if (!tenant?.activeTenant?.tenantId) return;\n\n const urlSearchObjs = buildFormSubmissionSearchParams(location.search);\n setFormSubmissionUrlSearchObjs(urlSearchObjs); // THIS LINE TRIGGERS initialFilterModel\n\n let cancelled = false;\n (async () => {\n try {\n // replicate fetchSubmissions logic but using local urlSearchObjs (avoids depending on the state)\n let filterElements = [];\n\n filterElements.push({\n searchField: 'Form_TenantId',\n searchOperator: '=',\n searchValue: tenant.activeTenant.tenantId\n });\n\n if (!isManagerMode) {\n filterElements.push({\n searchField: 'FormSubmission_UnityUserId',\n searchOperator: '=',\n searchValue: user.id\n });\n }\n\n if (generic1 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic1',\n searchOperator: '=',\n searchValue: generic1\n });\n }\n\n if (generic2 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic2',\n searchOperator: '=',\n searchValue: generic2\n });\n }\n\n if (generic3 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic3',\n searchOperator: '=',\n searchValue: generic3\n });\n }\n\n const formSubmissionViewSearchResponse = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpFormWithSubmissionsView/search`,\n {\n method: 'POST',\n data: {\n eagerLoad: false,\n getAll: true,\n filterElements\n }\n },\n {}\n );\n\n if (cancelled) return;\n\n const submissions = formSubmissionViewSearchResponse?.data.pageList || [];\n const processedSubmissions = submissions.filter((submission) =>\n submission.form_TenantId === tenant.activeTenant.tenantId\n );\n setFormSubmissionViewDataRaw(processedSubmissions);\n await fetchForms();\n } catch (err) {\n console.error('fetching submissions/forms failed', err);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [\n location.search,\n tenant?.activeTenant?.tenantId,\n generic1,\n generic2,\n generic3,\n isManagerMode,\n user?.id,\n fetchForms,\n buildFormSubmissionSearchParams\n ]);\n\n // derive menu items from fetched submissions (separate effect to avoid refetch loop)\n useEffect(() => {\n const innerMenuList = consolidateAndSortFormsByFormId(\n formDataRaw || [],\n formSubmissionViewDataRaw || []\n );\n\n innerMenuList.unshift({\n id: 'all-forms-key',\n name: t(\n isManagerMode ? 'All Form Submissions' : 'All My Form Submissions'\n ),\n submissionCount: formSubmissionViewDataRaw?.length || 0\n });\n setInnerMenuItemList(innerMenuList);\n }, [\n formSubmissionViewDataRaw,\n isManagerMode,\n consolidateAndSortFormsByFormId,\n formDataRaw,\n t\n ]);\n\n return (\n <div>\n <CustomMenuPage\n menuTitle={t('Forms')}\n items={innerMenuItemList}\n idPrefix='form-submission'\n showItemCount={true}\n itemCountAccessor={(item) => item?.submissionCount ?? 0}\n mainContent={({ selectedNode, menuItemsList, idMap, classes }) => {\n return (\n <div>\n {getMainGridContent({\n selectedNode,\n menuItemsList,\n idMap,\n classes\n })}\n </div>\n );\n }}\n />\n </div>\n );\n};\n"],"mappings":"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"}