@pega/lists-react 9.0.0-build.9.9 → 9.0.0

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 (433) hide show
  1. package/README.md +0 -4
  2. package/lib/Core/Components/A11y/RepeatingStructureA11y.d.ts.map +1 -1
  3. package/lib/Core/Components/A11y/RepeatingStructureA11y.js +2 -1
  4. package/lib/Core/Components/A11y/RepeatingStructureA11y.js.map +1 -1
  5. package/lib/Core/Components/AggregateMenu.d.ts.map +1 -1
  6. package/lib/Core/Components/AggregateMenu.js +6 -2
  7. package/lib/Core/Components/AggregateMenu.js.map +1 -1
  8. package/lib/Core/Components/AggregatorCell.d.ts.map +1 -1
  9. package/lib/Core/Components/AggregatorCell.js +3 -1
  10. package/lib/Core/Components/AggregatorCell.js.map +1 -1
  11. package/lib/Core/Components/ContextMenu/ContextMenuContainer.d.ts +6 -15
  12. package/lib/Core/Components/ContextMenu/ContextMenuContainer.d.ts.map +1 -1
  13. package/lib/Core/Components/ContextMenu/ContextMenuContainer.js +111 -166
  14. package/lib/Core/Components/ContextMenu/ContextMenuContainer.js.map +1 -1
  15. package/lib/Core/Components/ContextMenu/QuickFilter.js +1 -1
  16. package/lib/Core/Components/ContextMenu/QuickFilter.js.map +1 -1
  17. package/lib/Core/Components/DefaultComponents/CellRenderers/ColumnMergeTemplates/CustomCellWrapper.d.ts +1 -1
  18. package/lib/Core/Components/DefaultComponents/CellRenderers/ColumnMergeTemplates/CustomCellWrapper.d.ts.map +1 -1
  19. package/lib/Core/Components/DefaultComponents/CellRenderers/RowActionMenu.d.ts.map +1 -1
  20. package/lib/Core/Components/DefaultComponents/CellRenderers/RowActionMenu.js +33 -5
  21. package/lib/Core/Components/DefaultComponents/CellRenderers/RowActionMenu.js.map +1 -1
  22. package/lib/Core/Components/DefaultComponents/CellRenderers/RowDeleteAction.d.ts +10 -0
  23. package/lib/Core/Components/DefaultComponents/CellRenderers/RowDeleteAction.d.ts.map +1 -0
  24. package/lib/Core/Components/DefaultComponents/CellRenderers/RowDeleteAction.js +27 -0
  25. package/lib/Core/Components/DefaultComponents/CellRenderers/RowDeleteAction.js.map +1 -0
  26. package/lib/Core/Components/DefaultComponents/CellRenderers/index.d.ts +2 -2
  27. package/lib/Core/Components/DefaultComponents/CellRenderers/index.d.ts.map +1 -1
  28. package/lib/Core/Components/DefaultComponents/CellRenderers/index.js +2 -2
  29. package/lib/Core/Components/DefaultComponents/CellRenderers/index.js.map +1 -1
  30. package/lib/Core/Components/DefaultComponents/EmptyContainer.d.ts +3 -1
  31. package/lib/Core/Components/DefaultComponents/EmptyContainer.d.ts.map +1 -1
  32. package/lib/Core/Components/DefaultComponents/EmptyContainer.js +11 -2
  33. package/lib/Core/Components/DefaultComponents/EmptyContainer.js.map +1 -1
  34. package/lib/Core/Components/DefaultComponents/PersonalizationCreateEdit.d.ts +3 -2
  35. package/lib/Core/Components/DefaultComponents/PersonalizationCreateEdit.d.ts.map +1 -1
  36. package/lib/Core/Components/DefaultComponents/PersonalizationCreateEdit.js +13 -26
  37. package/lib/Core/Components/DefaultComponents/PersonalizationCreateEdit.js.map +1 -1
  38. package/lib/Core/Components/DefaultComponents/PersonalizationDeleteConfirmation.js +2 -2
  39. package/lib/Core/Components/DefaultComponents/PersonalizationDeleteConfirmation.js.map +1 -1
  40. package/lib/Core/Components/DefaultComponents/PersonalizationSelector.d.ts +0 -2
  41. package/lib/Core/Components/DefaultComponents/PersonalizationSelector.d.ts.map +1 -1
  42. package/lib/Core/Components/DefaultComponents/PersonalizationSelector.js +11 -9
  43. package/lib/Core/Components/DefaultComponents/PersonalizationSelector.js.map +1 -1
  44. package/lib/Core/Components/DefaultComponents/SelectAllCheckbox.d.ts.map +1 -1
  45. package/lib/Core/Components/DefaultComponents/SelectAllCheckbox.js +20 -19
  46. package/lib/Core/Components/DefaultComponents/SelectAllCheckbox.js.map +1 -1
  47. package/lib/Core/Components/DefaultComponents/index.d.ts +4 -3
  48. package/lib/Core/Components/DefaultComponents/index.d.ts.map +1 -1
  49. package/lib/Core/Components/DefaultComponents/index.js +0 -2
  50. package/lib/Core/Components/DefaultComponents/index.js.map +1 -1
  51. package/lib/Core/Components/Filters/AdvanceFilter.d.ts.map +1 -1
  52. package/lib/Core/Components/Filters/AdvanceFilter.js +5 -2
  53. package/lib/Core/Components/Filters/AdvanceFilter.js.map +1 -1
  54. package/lib/Core/Components/Filters/SelectFilter.d.ts +1 -1
  55. package/lib/Core/Components/Filters/SelectFilter.d.ts.map +1 -1
  56. package/lib/Core/Components/Filters/SelectFilter.js +43 -44
  57. package/lib/Core/Components/Filters/SelectFilter.js.map +1 -1
  58. package/lib/Core/Components/Filters/SimpleFilter.js +1 -1
  59. package/lib/Core/Components/Filters/SimpleFilter.js.map +1 -1
  60. package/lib/Core/Components/Filters/styles.d.ts +1 -1
  61. package/lib/Core/Components/FooterAggregators.d.ts.map +1 -1
  62. package/lib/Core/Components/FooterAggregators.js +6 -3
  63. package/lib/Core/Components/FooterAggregators.js.map +1 -1
  64. package/lib/Core/Components/GroupRenderer/GroupAdditionalFieldDataModal.d.ts +12 -0
  65. package/lib/Core/Components/GroupRenderer/GroupAdditionalFieldDataModal.d.ts.map +1 -0
  66. package/lib/Core/Components/GroupRenderer/GroupAdditionalFieldDataModal.js +62 -0
  67. package/lib/Core/Components/GroupRenderer/GroupAdditionalFieldDataModal.js.map +1 -0
  68. package/lib/Core/Components/GroupRenderer/GroupAdditionalInfo.d.ts +33 -0
  69. package/lib/Core/Components/GroupRenderer/GroupAdditionalInfo.d.ts.map +1 -0
  70. package/lib/Core/Components/GroupRenderer/GroupAdditionalInfo.js +106 -0
  71. package/lib/Core/Components/GroupRenderer/GroupAdditionalInfo.js.map +1 -0
  72. package/lib/Core/Components/GroupRenderer/index.d.ts +22 -0
  73. package/lib/Core/Components/GroupRenderer/index.d.ts.map +1 -0
  74. package/lib/Core/Components/GroupRenderer/index.js +395 -0
  75. package/lib/Core/Components/GroupRenderer/index.js.map +1 -0
  76. package/lib/Core/Components/Grouping/GroupingMenu.d.ts.map +1 -1
  77. package/lib/Core/Components/Grouping/GroupingMenu.js +2 -1
  78. package/lib/Core/Components/Grouping/GroupingMenu.js.map +1 -1
  79. package/lib/Core/Components/HeaderCell.d.ts.map +1 -1
  80. package/lib/Core/Components/HeaderCell.js +3 -3
  81. package/lib/Core/Components/HeaderCell.js.map +1 -1
  82. package/lib/Core/Components/HeaderMenu/actions.d.ts +1 -1
  83. package/lib/Core/Components/HeaderMenu/actions.d.ts.map +1 -1
  84. package/lib/Core/Components/HeaderMenu/actions.js +3 -4
  85. package/lib/Core/Components/HeaderMenu/actions.js.map +1 -1
  86. package/lib/Core/Components/HeaderMenu/index.d.ts.map +1 -1
  87. package/lib/Core/Components/HeaderMenu/index.js +5 -5
  88. package/lib/Core/Components/HeaderMenu/index.js.map +1 -1
  89. package/lib/Core/Components/HierarchicalGroupRenderer.d.ts.map +1 -1
  90. package/lib/Core/Components/HierarchicalGroupRenderer.js +6 -2
  91. package/lib/Core/Components/HierarchicalGroupRenderer.js.map +1 -1
  92. package/lib/Core/Components/NotificationManager.js +1 -1
  93. package/lib/Core/Components/NotificationManager.js.map +1 -1
  94. package/lib/Core/Components/RFColumnConfigurator.d.ts.map +1 -1
  95. package/lib/Core/Components/RFColumnConfigurator.js +32 -9
  96. package/lib/Core/Components/RFColumnConfigurator.js.map +1 -1
  97. package/lib/Core/Components/RSWrapper/HeaderBarGadget.d.ts.map +1 -1
  98. package/lib/Core/Components/RSWrapper/HeaderBarGadget.js +2 -1
  99. package/lib/Core/Components/RSWrapper/HeaderBarGadget.js.map +1 -1
  100. package/lib/Core/Components/RSWrapper/index.d.ts.map +1 -1
  101. package/lib/Core/Components/RSWrapper/index.js +2 -9
  102. package/lib/Core/Components/RSWrapper/index.js.map +1 -1
  103. package/lib/Core/Components/RenderingEngine/Formatter.d.ts.map +1 -1
  104. package/lib/Core/Components/RenderingEngine/Formatter.js +4 -1
  105. package/lib/Core/Components/RenderingEngine/Formatter.js.map +1 -1
  106. package/lib/Core/Components/RenderingEngine/RenderCell.d.ts.map +1 -1
  107. package/lib/Core/Components/RenderingEngine/RenderCell.js +19 -8
  108. package/lib/Core/Components/RenderingEngine/RenderCell.js.map +1 -1
  109. package/lib/Core/Components/RenderingEngine/useHighlighter.d.ts.map +1 -1
  110. package/lib/Core/Components/RenderingEngine/useHighlighter.js +0 -1
  111. package/lib/Core/Components/RenderingEngine/useHighlighter.js.map +1 -1
  112. package/lib/Core/Components/TestIdConstants.d.ts +2 -0
  113. package/lib/Core/Components/TestIdConstants.js +3 -1
  114. package/lib/Core/Components/TestIdConstants.js.map +1 -1
  115. package/lib/Core/Components/Toolbar/AdvanceToolbar.d.ts.map +1 -1
  116. package/lib/Core/Components/Toolbar/AdvanceToolbar.js +7 -18
  117. package/lib/Core/Components/Toolbar/AdvanceToolbar.js.map +1 -1
  118. package/lib/Core/Components/Toolbar/ColumnSelector.d.ts +6 -4
  119. package/lib/Core/Components/Toolbar/ColumnSelector.d.ts.map +1 -1
  120. package/lib/Core/Components/Toolbar/ColumnSelector.js +18 -21
  121. package/lib/Core/Components/Toolbar/ColumnSelector.js.map +1 -1
  122. package/lib/Core/Components/Toolbar/DebugInfo.d.ts +3 -5
  123. package/lib/Core/Components/Toolbar/DebugInfo.d.ts.map +1 -1
  124. package/lib/Core/Components/Toolbar/DebugInfo.js +3 -3
  125. package/lib/Core/Components/Toolbar/DebugInfo.js.map +1 -1
  126. package/lib/Core/Components/Toolbar/FieldSelector.d.ts +2 -1
  127. package/lib/Core/Components/Toolbar/FieldSelector.d.ts.map +1 -1
  128. package/lib/Core/Components/Toolbar/FieldSelector.js +14 -7
  129. package/lib/Core/Components/Toolbar/FieldSelector.js.map +1 -1
  130. package/lib/Core/Components/Toolbar/Grouping.types.d.ts +0 -6
  131. package/lib/Core/Components/Toolbar/Grouping.types.d.ts.map +1 -1
  132. package/lib/Core/Components/Toolbar/Grouping.types.js.map +1 -1
  133. package/lib/Core/Components/Toolbar/RefreshBanner.d.ts.map +1 -1
  134. package/lib/Core/Components/Toolbar/RefreshBanner.js +1 -0
  135. package/lib/Core/Components/Toolbar/RefreshBanner.js.map +1 -1
  136. package/lib/Core/Components/Toolbar/SimpleToolbar.d.ts.map +1 -1
  137. package/lib/Core/Components/Toolbar/SimpleToolbar.js +2 -4
  138. package/lib/Core/Components/Toolbar/SimpleToolbar.js.map +1 -1
  139. package/lib/Core/Components/Toolbar/hooks/useFilter.d.ts.map +1 -1
  140. package/lib/Core/Components/Toolbar/hooks/useFilter.js +4 -1
  141. package/lib/Core/Components/Toolbar/hooks/useFilter.js.map +1 -1
  142. package/lib/Core/Components/Toolbar/hooks/useGroup/DateFunctionSelector.d.ts +14 -18
  143. package/lib/Core/Components/Toolbar/hooks/useGroup/DateFunctionSelector.d.ts.map +1 -1
  144. package/lib/Core/Components/Toolbar/hooks/useGroup/DateFunctionSelector.js +15 -16
  145. package/lib/Core/Components/Toolbar/hooks/useGroup/DateFunctionSelector.js.map +1 -1
  146. package/lib/Core/Components/Toolbar/hooks/useGroup/GroupRenderer.d.ts +4 -2
  147. package/lib/Core/Components/Toolbar/hooks/useGroup/GroupRenderer.d.ts.map +1 -1
  148. package/lib/Core/Components/Toolbar/hooks/useGroup/GroupRenderer.js +30 -22
  149. package/lib/Core/Components/Toolbar/hooks/useGroup/GroupRenderer.js.map +1 -1
  150. package/lib/Core/Components/Toolbar/hooks/useGroup/useGroup.d.ts.map +1 -1
  151. package/lib/Core/Components/Toolbar/hooks/useGroup/useGroup.js +17 -6
  152. package/lib/Core/Components/Toolbar/hooks/useGroup/useGroup.js.map +1 -1
  153. package/lib/Core/Components/Toolbar/hooks/useGroup/utils.d.ts +7 -2
  154. package/lib/Core/Components/Toolbar/hooks/useGroup/utils.d.ts.map +1 -1
  155. package/lib/Core/Components/Toolbar/hooks/useGroup/utils.js +12 -5
  156. package/lib/Core/Components/Toolbar/hooks/useGroup/utils.js.map +1 -1
  157. package/lib/Core/Components/Toolbar/hooks/useMore.d.ts +1 -1
  158. package/lib/Core/Components/Toolbar/hooks/useMore.d.ts.map +1 -1
  159. package/lib/Core/Components/Toolbar/hooks/useMore.js +134 -80
  160. package/lib/Core/Components/Toolbar/hooks/useMore.js.map +1 -1
  161. package/lib/Core/Components/Toolbar/hooks/usePersonalization.d.ts +8 -6
  162. package/lib/Core/Components/Toolbar/hooks/usePersonalization.d.ts.map +1 -1
  163. package/lib/Core/Components/Toolbar/hooks/usePersonalization.js +18 -3
  164. package/lib/Core/Components/Toolbar/hooks/usePersonalization.js.map +1 -1
  165. package/lib/Core/Components/Toolbar/hooks/useSearch.d.ts.map +1 -1
  166. package/lib/Core/Components/Toolbar/hooks/useSearch.js +7 -10
  167. package/lib/Core/Components/Toolbar/hooks/useSearch.js.map +1 -1
  168. package/lib/Core/Components/Toolbar/hooks/useSort/Row.d.ts +8 -6
  169. package/lib/Core/Components/Toolbar/hooks/useSort/Row.d.ts.map +1 -1
  170. package/lib/Core/Components/Toolbar/hooks/useSort/Row.js +16 -10
  171. package/lib/Core/Components/Toolbar/hooks/useSort/Row.js.map +1 -1
  172. package/lib/Core/Components/Toolbar/hooks/useSort/SortRenderer.d.ts +4 -2
  173. package/lib/Core/Components/Toolbar/hooks/useSort/SortRenderer.d.ts.map +1 -1
  174. package/lib/Core/Components/Toolbar/hooks/useSort/SortRenderer.js +9 -3
  175. package/lib/Core/Components/Toolbar/hooks/useSort/SortRenderer.js.map +1 -1
  176. package/lib/Core/Components/Toolbar/hooks/useSort/useSort.d.ts.map +1 -1
  177. package/lib/Core/Components/Toolbar/hooks/useSort/useSort.js +8 -2
  178. package/lib/Core/Components/Toolbar/hooks/useSort/useSort.js.map +1 -1
  179. package/lib/Core/Components/Toolbar/hooks/useSort/utils.d.ts +1 -1
  180. package/lib/Core/Components/Toolbar/hooks/useSort/utils.d.ts.map +1 -1
  181. package/lib/Core/Components/Toolbar/hooks/useSort/utils.js +2 -2
  182. package/lib/Core/Components/Toolbar/hooks/useSort/utils.js.map +1 -1
  183. package/lib/Core/Components/Toolbar/hooks/useWrapAction.d.ts +2 -1
  184. package/lib/Core/Components/Toolbar/hooks/useWrapAction.d.ts.map +1 -1
  185. package/lib/Core/Components/Toolbar/hooks/useWrapAction.js +36 -12
  186. package/lib/Core/Components/Toolbar/hooks/useWrapAction.js.map +1 -1
  187. package/lib/Core/Components/Toolbar/utils/utils.d.ts +28 -7
  188. package/lib/Core/Components/Toolbar/utils/utils.d.ts.map +1 -1
  189. package/lib/Core/Components/Toolbar/utils/utils.js +43 -11
  190. package/lib/Core/Components/Toolbar/utils/utils.js.map +1 -1
  191. package/lib/Core/Components/Virtualise/Pagination.d.ts.map +1 -1
  192. package/lib/Core/Components/Virtualise/Pagination.js +2 -1
  193. package/lib/Core/Components/Virtualise/Pagination.js.map +1 -1
  194. package/lib/Core/Components/Virtualise/UseScroll.d.ts +4 -1
  195. package/lib/Core/Components/Virtualise/UseScroll.d.ts.map +1 -1
  196. package/lib/Core/Components/Virtualise/UseScroll.js +16 -3
  197. package/lib/Core/Components/Virtualise/UseScroll.js.map +1 -1
  198. package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/VariableHeightVirtualizer.js +1 -1
  199. package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/VariableHeightVirtualizer.js.map +1 -1
  200. package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/utils.d.ts +1 -1
  201. package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/utils.js +1 -1
  202. package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/utils.js.map +1 -1
  203. package/lib/Core/Components/Virtualise/VirtualizeInfinite.js +14 -4
  204. package/lib/Core/Components/Virtualise/VirtualizeInfinite.js.map +1 -1
  205. package/lib/Core/Components/Virtualise/index.js +19 -4
  206. package/lib/Core/Components/Virtualise/index.js.map +1 -1
  207. package/lib/Core/Components/Virtualise/utility.js +1 -1
  208. package/lib/Core/Components/Virtualise/utility.js.map +1 -1
  209. package/lib/Core/Components/WarningBanner.d.ts +11 -0
  210. package/lib/Core/Components/WarningBanner.d.ts.map +1 -0
  211. package/lib/Core/Components/WarningBanner.js +23 -0
  212. package/lib/Core/Components/WarningBanner.js.map +1 -0
  213. package/lib/Core/Context/LocalizationContext.d.ts +1 -1
  214. package/lib/Core/Context/LocalizationContext.d.ts.map +1 -1
  215. package/lib/Core/Context/LocalizationContext.js.map +1 -1
  216. package/lib/Core/Hooks/a11y/useAnnounce.d.ts +3 -4
  217. package/lib/Core/Hooks/a11y/useAnnounce.d.ts.map +1 -1
  218. package/lib/Core/Hooks/a11y/useAnnounce.js +3 -4
  219. package/lib/Core/Hooks/a11y/useAnnounce.js.map +1 -1
  220. package/lib/Core/Hooks/useDebounce.js +1 -1
  221. package/lib/Core/Hooks/useDebounce.js.map +1 -1
  222. package/lib/Core/Hooks/useDragDrop.d.ts +2 -2
  223. package/lib/Core/Hooks/useDragDrop.d.ts.map +1 -1
  224. package/lib/Core/Hooks/useDragDrop.js +9 -9
  225. package/lib/Core/Hooks/useDragDrop.js.map +1 -1
  226. package/lib/Core/Hooks/useRepeat.d.ts +1 -1
  227. package/lib/Core/Hooks/useRepeat.d.ts.map +1 -1
  228. package/lib/Core/Hooks/useRepeat.js +58 -11
  229. package/lib/Core/Hooks/useRepeat.js.map +1 -1
  230. package/lib/Core/Hooks/useSelectAllCheckbox.d.ts +21 -0
  231. package/lib/Core/Hooks/useSelectAllCheckbox.d.ts.map +1 -0
  232. package/lib/Core/Hooks/useSelectAllCheckbox.js +23 -0
  233. package/lib/Core/Hooks/useSelectAllCheckbox.js.map +1 -0
  234. package/lib/Core/Localization/defaultTranslations.d.ts +15 -13
  235. package/lib/Core/Localization/defaultTranslations.d.ts.map +1 -1
  236. package/lib/Core/Localization/defaultTranslations.js +16 -14
  237. package/lib/Core/Localization/defaultTranslations.js.map +1 -1
  238. package/lib/Core/Test/JUnitMocks.d.ts +12 -0
  239. package/lib/Core/Test/JUnitMocks.d.ts.map +1 -1
  240. package/lib/Core/Test/JUnitMocks.js +27 -8
  241. package/lib/Core/Test/JUnitMocks.js.map +1 -1
  242. package/lib/Core/Test/TestUtils.d.ts +0 -1
  243. package/lib/Core/Test/TestUtils.d.ts.map +1 -1
  244. package/lib/Core/Test/TestUtils.js +3 -7
  245. package/lib/Core/Test/TestUtils.js.map +1 -1
  246. package/lib/Core/Utils/index.d.ts +15 -0
  247. package/lib/Core/Utils/index.d.ts.map +1 -1
  248. package/lib/Core/Utils/index.js +22 -0
  249. package/lib/Core/Utils/index.js.map +1 -1
  250. package/lib/Core/Utils/styles.d.ts +2 -2
  251. package/lib/Core/Utils/styles.d.ts.map +1 -1
  252. package/lib/Core/Views/Gallery/Components/GalleryCard.d.ts +4 -0
  253. package/lib/Core/Views/Gallery/Components/GalleryCard.d.ts.map +1 -0
  254. package/lib/Core/Views/Gallery/Components/GalleryCard.js +29 -0
  255. package/lib/Core/Views/Gallery/Components/GalleryCard.js.map +1 -0
  256. package/lib/Core/Views/Gallery/Components/GalleryCheckboxCard.d.ts +8 -0
  257. package/lib/Core/Views/Gallery/Components/GalleryCheckboxCard.d.ts.map +1 -0
  258. package/lib/Core/Views/Gallery/Components/GalleryCheckboxCard.js +25 -0
  259. package/lib/Core/Views/Gallery/Components/GalleryCheckboxCard.js.map +1 -0
  260. package/lib/Core/Views/Gallery/Components/GalleryFieldValue.d.ts +8 -0
  261. package/lib/Core/Views/Gallery/Components/GalleryFieldValue.d.ts.map +1 -0
  262. package/lib/Core/Views/Gallery/Components/GalleryFieldValue.js +8 -0
  263. package/lib/Core/Views/Gallery/Components/GalleryFieldValue.js.map +1 -0
  264. package/lib/Core/Views/Gallery/Components/GalleryHeader.d.ts +8 -0
  265. package/lib/Core/Views/Gallery/Components/GalleryHeader.d.ts.map +1 -0
  266. package/lib/Core/Views/Gallery/Components/GalleryHeader.js +15 -0
  267. package/lib/Core/Views/Gallery/Components/GalleryHeader.js.map +1 -0
  268. package/lib/Core/Views/Gallery/Gallery.types.d.ts +8 -0
  269. package/lib/Core/Views/Gallery/Gallery.types.d.ts.map +1 -0
  270. package/lib/Core/Views/Gallery/Gallery.types.js +2 -0
  271. package/lib/Core/Views/Gallery/Gallery.types.js.map +1 -0
  272. package/lib/Core/Views/Gallery/GalleryA11y.d.ts +7 -5
  273. package/lib/Core/Views/Gallery/GalleryA11y.d.ts.map +1 -1
  274. package/lib/Core/Views/Gallery/GalleryA11y.js +9 -52
  275. package/lib/Core/Views/Gallery/GalleryA11y.js.map +1 -1
  276. package/lib/Core/Views/Gallery/GalleryContainer.d.ts +23 -0
  277. package/lib/Core/Views/Gallery/GalleryContainer.d.ts.map +1 -0
  278. package/lib/Core/Views/Gallery/GalleryContainer.js +66 -0
  279. package/lib/Core/Views/Gallery/GalleryContainer.js.map +1 -0
  280. package/lib/Core/Views/Gallery/_tests_/Samples/GalleryA11ySample.js +1 -1
  281. package/lib/Core/Views/Gallery/_tests_/Samples/GalleryA11ySample.js.map +1 -1
  282. package/lib/Core/Views/Gallery/hooks/useRowActions.d.ts +9 -0
  283. package/lib/Core/Views/Gallery/hooks/useRowActions.d.ts.map +1 -0
  284. package/lib/Core/Views/Gallery/hooks/useRowActions.js +25 -0
  285. package/lib/Core/Views/Gallery/hooks/useRowActions.js.map +1 -0
  286. package/lib/Core/Views/Gallery/index.d.ts +4 -8
  287. package/lib/Core/Views/Gallery/index.d.ts.map +1 -1
  288. package/lib/Core/Views/Gallery/index.js +38 -59
  289. package/lib/Core/Views/Gallery/index.js.map +1 -1
  290. package/lib/Core/Views/Gallery/utils.d.ts +36 -0
  291. package/lib/Core/Views/Gallery/utils.d.ts.map +1 -0
  292. package/lib/Core/Views/Gallery/utils.js +115 -0
  293. package/lib/Core/Views/Gallery/utils.js.map +1 -0
  294. package/lib/Core/Views/Map/Map.styles.d.ts +190 -6
  295. package/lib/Core/Views/Map/Map.styles.d.ts.map +1 -1
  296. package/lib/Core/Views/Map/Map.styles.js.map +1 -1
  297. package/lib/Core/Views/Map/index.d.ts.map +1 -1
  298. package/lib/Core/Views/Map/index.js +2 -2
  299. package/lib/Core/Views/Map/index.js.map +1 -1
  300. package/lib/Core/Views/RsCardWrapper.js.map +1 -1
  301. package/lib/Core/Views/Table/Body.d.ts.map +1 -1
  302. package/lib/Core/Views/Table/Body.js +5 -2
  303. package/lib/Core/Views/Table/Body.js.map +1 -1
  304. package/lib/Core/Views/Table/CellWrapper.d.ts +1 -1
  305. package/lib/Core/Views/Table/CellWrapper.d.ts.map +1 -1
  306. package/lib/Core/Views/Table/CellWrapper.js +4 -2
  307. package/lib/Core/Views/Table/CellWrapper.js.map +1 -1
  308. package/lib/Core/Views/Table/GroupingHeaderCell.d.ts +6 -15
  309. package/lib/Core/Views/Table/GroupingHeaderCell.d.ts.map +1 -1
  310. package/lib/Core/Views/Table/GroupingHeaderCell.js +16 -14
  311. package/lib/Core/Views/Table/GroupingHeaderCell.js.map +1 -1
  312. package/lib/Core/Views/Table/HeaderWrapper.d.ts.map +1 -1
  313. package/lib/Core/Views/Table/HeaderWrapper.js +5 -5
  314. package/lib/Core/Views/Table/HeaderWrapper.js.map +1 -1
  315. package/lib/Core/Views/Table/SkeletonRows.d.ts +1 -1
  316. package/lib/Core/Views/Table/SkeletonRows.d.ts.map +1 -1
  317. package/lib/Core/Views/Table/StyledTableContainer.d.ts +3 -1
  318. package/lib/Core/Views/Table/StyledTableContainer.d.ts.map +1 -1
  319. package/lib/Core/Views/Table/StyledTableContainer.js +270 -155
  320. package/lib/Core/Views/Table/StyledTableContainer.js.map +1 -1
  321. package/lib/Core/Views/Table/TableA11y.d.ts +13 -1
  322. package/lib/Core/Views/Table/TableA11y.d.ts.map +1 -1
  323. package/lib/Core/Views/Table/TableA11y.js +233 -13
  324. package/lib/Core/Views/Table/TableA11y.js.map +1 -1
  325. package/lib/Core/Views/Table/VirtualizeWrapper.d.ts +3 -1
  326. package/lib/Core/Views/Table/VirtualizeWrapper.d.ts.map +1 -1
  327. package/lib/Core/Views/Table/VirtualizeWrapper.js +16 -16
  328. package/lib/Core/Views/Table/VirtualizeWrapper.js.map +1 -1
  329. package/lib/Core/Views/Table/index.d.ts.map +1 -1
  330. package/lib/Core/Views/Table/index.js +16 -7
  331. package/lib/Core/Views/Table/index.js.map +1 -1
  332. package/lib/Core/Views/Timeline/Timeline.d.ts.map +1 -1
  333. package/lib/Core/Views/Timeline/Timeline.js +15 -20
  334. package/lib/Core/Views/Timeline/Timeline.js.map +1 -1
  335. package/lib/Core/Views/Timeline/Timeline.styles.d.ts +392 -15
  336. package/lib/Core/Views/Timeline/Timeline.styles.d.ts.map +1 -1
  337. package/lib/Core/Views/Timeline/Timeline.styles.js +44 -44
  338. package/lib/Core/Views/Timeline/Timeline.styles.js.map +1 -1
  339. package/lib/Core/Views/Timeline/Timeline.types.d.ts +11 -7
  340. package/lib/Core/Views/Timeline/Timeline.types.d.ts.map +1 -1
  341. package/lib/Core/Views/Timeline/Timeline.types.js.map +1 -1
  342. package/lib/Core/Views/Timeline/TimelineGroup.d.ts +13 -0
  343. package/lib/Core/Views/Timeline/TimelineGroup.d.ts.map +1 -0
  344. package/lib/Core/Views/Timeline/TimelineGroup.js +21 -0
  345. package/lib/Core/Views/Timeline/TimelineGroup.js.map +1 -0
  346. package/lib/Core/Views/Timeline/TimelineItem.d.ts +1 -3
  347. package/lib/Core/Views/Timeline/TimelineItem.d.ts.map +1 -1
  348. package/lib/Core/Views/Timeline/TimelineItem.js +7 -6
  349. package/lib/Core/Views/Timeline/TimelineItem.js.map +1 -1
  350. package/lib/Core/Views/Timeline/__tests__/Timeline.mocks.d.ts +2 -2
  351. package/lib/Core/Views/Timeline/__tests__/Timeline.mocks.d.ts.map +1 -1
  352. package/lib/Core/Views/Timeline/__tests__/Timeline.mocks.js.map +1 -1
  353. package/lib/Core/Views/Timeline/index.d.ts.map +1 -1
  354. package/lib/Core/Views/Timeline/index.js +13 -6
  355. package/lib/Core/Views/Timeline/index.js.map +1 -1
  356. package/lib/Core/Views/Timeline/utils.d.ts +8 -10
  357. package/lib/Core/Views/Timeline/utils.d.ts.map +1 -1
  358. package/lib/Core/Views/Timeline/utils.js +136 -58
  359. package/lib/Core/Views/Timeline/utils.js.map +1 -1
  360. package/lib/Core/Views/rs-styles.d.ts +1 -1
  361. package/lib/Core/a11y/loadingAnnouncementBehavior.d.ts +12 -0
  362. package/lib/Core/a11y/loadingAnnouncementBehavior.d.ts.map +1 -0
  363. package/lib/Core/a11y/loadingAnnouncementBehavior.js +37 -0
  364. package/lib/Core/a11y/loadingAnnouncementBehavior.js.map +1 -0
  365. package/lib/Core/constants.d.ts.map +1 -1
  366. package/lib/Core/constants.js +1 -0
  367. package/lib/Core/constants.js.map +1 -1
  368. package/lib/Core/index.d.ts.map +1 -1
  369. package/lib/Core/index.js +1 -2
  370. package/lib/Core/index.js.map +1 -1
  371. package/lib/Core/templateFeatureSupport.d.ts +17 -0
  372. package/lib/Core/templateFeatureSupport.d.ts.map +1 -0
  373. package/lib/Core/templateFeatureSupport.js +31 -0
  374. package/lib/Core/templateFeatureSupport.js.map +1 -0
  375. package/lib/index.d.ts +1 -1
  376. package/lib/index.d.ts.map +1 -1
  377. package/lib/index.js +1 -1
  378. package/lib/index.js.map +1 -1
  379. package/lib/types/RepeatingStructuresBoot.types.d.ts +12 -8
  380. package/lib/types/RepeatingStructuresBoot.types.d.ts.map +1 -1
  381. package/lib/types/RepeatingStructuresBoot.types.js.map +1 -1
  382. package/lib/types.d.ts +2 -0
  383. package/lib/types.d.ts.map +1 -1
  384. package/lib/types.js.map +1 -1
  385. package/package.json +11 -13
  386. package/lib/Core/Components/DefaultComponents/CardItem.d.ts +0 -3
  387. package/lib/Core/Components/DefaultComponents/CardItem.d.ts.map +0 -1
  388. package/lib/Core/Components/DefaultComponents/CardItem.js +0 -78
  389. package/lib/Core/Components/DefaultComponents/CardItem.js.map +0 -1
  390. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/DateTime.d.ts +0 -12
  391. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/DateTime.d.ts.map +0 -1
  392. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/DateTime.js +0 -36
  393. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/DateTime.js.map +0 -1
  394. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/Radio.d.ts +0 -15
  395. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/Radio.d.ts.map +0 -1
  396. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/Radio.js +0 -50
  397. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/Radio.js.map +0 -1
  398. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/TextInput.d.ts +0 -12
  399. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/TextInput.d.ts.map +0 -1
  400. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/TextInput.js +0 -44
  401. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/TextInput.js.map +0 -1
  402. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/index.d.ts +0 -16
  403. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/index.d.ts.map +0 -1
  404. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/index.js +0 -64
  405. package/lib/Core/Components/DefaultComponents/CellRenderers/EditComponents/index.js.map +0 -1
  406. package/lib/Core/Components/GroupRenderer.d.ts +0 -31
  407. package/lib/Core/Components/GroupRenderer.d.ts.map +0 -1
  408. package/lib/Core/Components/GroupRenderer.js +0 -348
  409. package/lib/Core/Components/GroupRenderer.js.map +0 -1
  410. package/lib/Core/Components/RSWrapper/__mocks__/uuid.d.ts +0 -2
  411. package/lib/Core/Components/RSWrapper/__mocks__/uuid.d.ts.map +0 -1
  412. package/lib/Core/Components/RSWrapper/__mocks__/uuid.js +0 -4
  413. package/lib/Core/Components/RSWrapper/__mocks__/uuid.js.map +0 -1
  414. package/lib/Core/Components/Toolbar/KeyboardInstructions.d.ts +0 -6
  415. package/lib/Core/Components/Toolbar/KeyboardInstructions.d.ts.map +0 -1
  416. package/lib/Core/Components/Toolbar/KeyboardInstructions.js +0 -32
  417. package/lib/Core/Components/Toolbar/KeyboardInstructions.js.map +0 -1
  418. package/lib/Core/Components/Toolbar/Timeline/TimelineToolbar.d.ts +0 -7
  419. package/lib/Core/Components/Toolbar/Timeline/TimelineToolbar.d.ts.map +0 -1
  420. package/lib/Core/Components/Toolbar/Timeline/TimelineToolbar.js +0 -109
  421. package/lib/Core/Components/Toolbar/Timeline/TimelineToolbar.js.map +0 -1
  422. package/lib/Core/Views/Gallery/ItemWrapper.d.ts +0 -19
  423. package/lib/Core/Views/Gallery/ItemWrapper.d.ts.map +0 -1
  424. package/lib/Core/Views/Gallery/ItemWrapper.js +0 -34
  425. package/lib/Core/Views/Gallery/ItemWrapper.js.map +0 -1
  426. package/lib/Core/Views/Gallery/StyledGalleryContainer.d.ts +0 -3
  427. package/lib/Core/Views/Gallery/StyledGalleryContainer.d.ts.map +0 -1
  428. package/lib/Core/Views/Gallery/StyledGalleryContainer.js +0 -51
  429. package/lib/Core/Views/Gallery/StyledGalleryContainer.js.map +0 -1
  430. package/lib/Core/Views/Timeline/utility.d.ts +0 -8
  431. package/lib/Core/Views/Timeline/utility.d.ts.map +0 -1
  432. package/lib/Core/Views/Timeline/utility.js +0 -120
  433. package/lib/Core/Views/Timeline/utility.js.map +0 -1
@@ -30,9 +30,11 @@ const prepareCategoryItems = (categories, items) => {
30
30
  /**
31
31
  * returns copy of embedded property's leafNode model from store or null
32
32
  * @function getMenuItemsFromColumns
33
- * @param {array} columns columns array containing each column object
33
+ * @param fieldDefs - field definitions to build menu items from
34
34
  * @param {string} fieldProp value for id prop(either 'name' of 'id')
35
- * @param {string} selectedField field which is already selected as part of sort/group/filter action
35
+ * @param options.selectedField - field id that is already selected (for sort/group/filter actions)
36
+ * @param options.columns - live column objects that expose `field.filterPickList` and `getUniqueValues()`
37
+ * @param options.defaultType - fallback field type if not specified on the field definition
36
38
  * @returns {array} returns an array of objects where each object is one category
37
39
  *
38
40
  * @example <caption>Example for getMenuItemsFromColumns.</caption>
@@ -56,38 +58,68 @@ const prepareCategoryItems = (categories, items) => {
56
58
  id: '3',
57
59
  category: [{ label: 'Profile' }],
58
60
  sort: true
61
+ },
62
+ {
63
+ type: 'text',
64
+ name: 'pyOperatorName',
65
+ label: 'Operator name',
66
+ id: '4',
67
+ filterPicklist:true
59
68
  }
60
69
  ]
61
70
  *
62
- * getMenuItemsFromColumns(columns) returns :
71
+ * getMenuItemsFromColumns(fieldDefs) returns :
63
72
  * [
64
73
  {
65
- id: 'ID',
74
+ id: 'pyID',
66
75
  primary: ID,
67
76
  items: undefined,
68
77
  selected: undefined
69
78
  },
70
79
  {
71
- id: ‘Bugs Class’,
72
- primary: ‘Bugs Class’,
80
+ id: ‘pyLabel’,
81
+ primary: ‘Name’,
73
82
  selected: undefined,
74
83
  items: [ {id: ‘Priority', primary: ‘Priority’, selected: true, items: undefined}]
84
+ },
85
+ {
86
+ id: 'pyOperatorName',
87
+ primary: 'Operator name',
88
+ selected: undefined,
89
+ possibleValues: function() {
90
+ // Fetch unique values for Operator name column
91
+ }
75
92
  }
93
+
76
94
  ]
77
95
  */
78
- function getMenuItemsFromColumns(columns, fieldProp, selectedField, defaultType = FieldType.TEXT) {
96
+ function getMenuItemsFromColumns(fieldDefs, fieldProp, { selectedField, columns = [], defaultType = FieldType.TEXT } = {}) {
79
97
  const items = [];
80
98
  let categoryArr = [];
81
- if (!columns) {
99
+ if (!fieldDefs) {
82
100
  return items;
83
101
  }
84
- columns.forEach(column => {
85
- const { field } = column;
102
+ fieldDefs.forEach(field => {
103
+ const filterPickListColumn = field.filterPickList && columns?.find(c => c.field.name === field[fieldProp]);
86
104
  const leafCategoryItem = {
87
105
  id: field[fieldProp],
88
106
  primary: field.label,
89
107
  type: typeMap[field.type?.toLowerCase()] || typeMap[defaultType],
90
- selected: field.id === selectedField
108
+ selected: field.id === selectedField,
109
+ // Attach possibleValues for picklist columns (e.g. UserReference, WorkStatus)
110
+ // TODO primary should be renderer rather string for user reference fields to show display value instead of id in condition builder.
111
+ ...(filterPickListColumn && {
112
+ possibleValues: args => filterPickListColumn.getUniqueValues().then(records => {
113
+ const filtered = records
114
+ .filter(id => id !== null && id !== undefined)
115
+ .map(id => ({ id, primary: id }));
116
+ // ConditionBuilder calls with { ids } to resolve display text for pre-selected values
117
+ if (args && 'ids' in args) {
118
+ return filtered.filter(({ id }) => args.ids?.includes(id));
119
+ }
120
+ return filtered;
121
+ })
122
+ })
91
123
  };
92
124
  categoryArr = items;
93
125
  if (field.category) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/utils/utils.js"],"names":[],"mappings":"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","sourcesContent":["import { FieldType } from 'pega-repeating-structures-core';\n\nimport { typeMap } from '../../Filters/config';\n\nconst getCategoryItems = (id, arr) => {\n for (const obj of arr) {\n if (obj.id === id && obj.items) {\n return obj.items;\n }\n }\n};\n\nconst prepareCategoryInfo = (id, label, arr) => {\n const items = [];\n arr.push({ id, primary: label, items });\n return items;\n};\n\nconst prepareCategoryItems = (categories, items) => {\n let curPath = '';\n let leafCategoryArr = items;\n for (let i = 0; i < categories.length; i += 1) {\n curPath = i > 0 ? `${curPath}.${categories[i].label}-${i}` : `${categories[i].label}-${i}`;\n\n const existingCategoryArr = getCategoryItems(curPath, leafCategoryArr);\n if (!existingCategoryArr) {\n leafCategoryArr = prepareCategoryInfo(curPath, categories[i].label, leafCategoryArr);\n } else {\n leafCategoryArr = existingCategoryArr;\n }\n }\n return leafCategoryArr;\n};\n\n/**\n * returns copy of embedded property's leafNode model from store or null\n * @function getMenuItemsFromColumns\n * @param {array} columns columns array containing each column object\n * @param {string} fieldProp value for id prop(either 'name' of 'id')\n * @param {string} selectedField field which is already selected as part of sort/group/filter action\n * @returns {array} returns an array of objects where each object is one category\n *\n * @example <caption>Example for getMenuItemsFromColumns.</caption>\n * We have two fields named ID and Priority where ID does not belong to any category and priority belongs to Bugs class category\n *\n * columns example(fieldDefs) :\n * [\n * {\n filter: true,\n type: 'text',\n name: 'pyID',\n label: 'ID',\n id: '2',\n category: [{ label: 'Profile' }],\n sort: true\n },\n {\n type: 'text',\n name: 'pyLabel',\n label: 'Name',\n id: '3',\n category: [{ label: 'Profile' }],\n sort: true\n }\n ]\n *\n * getMenuItemsFromColumns(columns) returns :\n * [\n {\n id: 'ID',\n primary: ID,\n items: undefined,\n selected: undefined\n },\n {\n id: ‘Bugs Class’,\n primary: ‘Bugs Class’,\n selected: undefined,\n items: [ {id: ‘Priority', primary: ‘Priority’, selected: true, items: undefined}]\n }\n ]\n*/\n\nfunction getMenuItemsFromColumns(columns, fieldProp, selectedField, defaultType = FieldType.TEXT) {\n const items = [];\n let categoryArr = [];\n\n if (!columns) {\n return items;\n }\n columns.forEach(column => {\n const { field } = column;\n const leafCategoryItem = {\n id: field[fieldProp],\n primary: field.label,\n type: typeMap[field.type?.toLowerCase()] || typeMap[defaultType],\n selected: field.id === selectedField\n };\n\n categoryArr = items;\n if (field.category) {\n categoryArr = prepareCategoryItems(field.category, categoryArr);\n }\n categoryArr.push(leafCategoryItem);\n });\n\n return items;\n}\nexport default getMenuItemsFromColumns;\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../Core/Components/Toolbar/utils/utils.js"],"names":[],"mappings":"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","sourcesContent":["import { FieldType } from 'pega-repeating-structures-core';\n\nimport { typeMap } from '../../Filters/config';\n\nconst getCategoryItems = (id, arr) => {\n for (const obj of arr) {\n if (obj.id === id && obj.items) {\n return obj.items;\n }\n }\n};\n\nconst prepareCategoryInfo = (id, label, arr) => {\n const items = [];\n arr.push({ id, primary: label, items });\n return items;\n};\n\nconst prepareCategoryItems = (categories, items) => {\n let curPath = '';\n let leafCategoryArr = items;\n for (let i = 0; i < categories.length; i += 1) {\n curPath = i > 0 ? `${curPath}.${categories[i].label}-${i}` : `${categories[i].label}-${i}`;\n\n const existingCategoryArr = getCategoryItems(curPath, leafCategoryArr);\n if (!existingCategoryArr) {\n leafCategoryArr = prepareCategoryInfo(curPath, categories[i].label, leafCategoryArr);\n } else {\n leafCategoryArr = existingCategoryArr;\n }\n }\n return leafCategoryArr;\n};\n\n/**\n * returns copy of embedded property's leafNode model from store or null\n * @function getMenuItemsFromColumns\n * @param fieldDefs - field definitions to build menu items from\n * @param {string} fieldProp value for id prop(either 'name' of 'id')\n * @param options.selectedField - field id that is already selected (for sort/group/filter actions)\n * @param options.columns - live column objects that expose `field.filterPickList` and `getUniqueValues()`\n * @param options.defaultType - fallback field type if not specified on the field definition\n * @returns {array} returns an array of objects where each object is one category\n *\n * @example <caption>Example for getMenuItemsFromColumns.</caption>\n * We have two fields named ID and Priority where ID does not belong to any category and priority belongs to Bugs class category\n *\n * columns example(fieldDefs) :\n * [\n * {\n filter: true,\n type: 'text',\n name: 'pyID',\n label: 'ID',\n id: '2',\n category: [{ label: 'Profile' }],\n sort: true\n },\n {\n type: 'text',\n name: 'pyLabel',\n label: 'Name',\n id: '3',\n category: [{ label: 'Profile' }],\n sort: true\n },\n {\n type: 'text',\n name: 'pyOperatorName',\n label: 'Operator name',\n id: '4',\n filterPicklist:true\n }\n ]\n *\n * getMenuItemsFromColumns(fieldDefs) returns :\n * [\n {\n id: 'pyID',\n primary: ID,\n items: undefined,\n selected: undefined\n },\n {\n id: ‘pyLabel’,\n primary: ‘Name’,\n selected: undefined,\n items: [ {id: ‘Priority', primary: ‘Priority’, selected: true, items: undefined}]\n },\n {\n id: 'pyOperatorName',\n primary: 'Operator name',\n selected: undefined,\n possibleValues: function() {\n // Fetch unique values for Operator name column\n }\n }\n\n ]\n*/\n\nfunction getMenuItemsFromColumns(\n fieldDefs,\n fieldProp,\n { selectedField, columns = [], defaultType = FieldType.TEXT } = {}\n) {\n const items = [];\n let categoryArr = [];\n\n if (!fieldDefs) {\n return items;\n }\n\n fieldDefs.forEach(field => {\n const filterPickListColumn =\n field.filterPickList && columns?.find(c => c.field.name === field[fieldProp]);\n\n const leafCategoryItem = {\n id: field[fieldProp],\n primary: field.label,\n type: typeMap[field.type?.toLowerCase()] || typeMap[defaultType],\n selected: field.id === selectedField,\n // Attach possibleValues for picklist columns (e.g. UserReference, WorkStatus)\n // TODO primary should be renderer rather string for user reference fields to show display value instead of id in condition builder.\n ...(filterPickListColumn && {\n possibleValues: args =>\n filterPickListColumn.getUniqueValues().then(records => {\n const filtered = records\n .filter(id => id !== null && id !== undefined)\n .map(id => ({ id, primary: id }));\n\n // ConditionBuilder calls with { ids } to resolve display text for pre-selected values\n if (args && 'ids' in args) {\n return filtered.filter(({ id }) => args.ids?.includes(id));\n }\n\n return filtered;\n })\n })\n };\n\n categoryArr = items;\n if (field.category) {\n categoryArr = prepareCategoryItems(field.category, categoryArr);\n }\n categoryArr.push(leafCategoryItem);\n });\n\n return items;\n}\nexport default getMenuItemsFromColumns;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/Pagination.js"],"names":[],"mappings":"AAkQA;;;;;;;;;;EAsBC;AAvRD,gCAAiC,qBAAqB,CAAC"}
1
+ {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/Pagination.js"],"names":[],"mappings":"AAoQA;;;;;;;;;;EAsBC;AAzRD,gCAAiC,qBAAqB,CAAC"}
@@ -117,7 +117,8 @@ function getOptimalInfo(target, rowHeight, rContainer, bufferContainer, oldEleme
117
117
  const INITIAL_BUFFER = 10;
118
118
  const buffer = INITIAL_BUFFER * bufferMultiplier;
119
119
  let bottomBufferIndex = buffer * 5;
120
- const scrollDirectionBuffer = buffer * 2;
120
+ // Since in Infinite scroll, the records need to be fetched in one direction only, fetching more records reduce the number of API calls.
121
+ const scrollDirectionBuffer = isInfiniteScroll ? buffer * 4 : buffer * 2;
121
122
  const scrollOppositeDirectionBuffer = buffer;
122
123
  let rowsInView = heightComposingOldElementCount
123
124
  ? Math.floor((oldElementCount / heightComposingOldElementCount) * target.offsetHeight)
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/Pagination.js"],"names":[],"mappings":"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","sourcesContent":["const RowIndexAttribute = 'data-index';\nexport const StickyGroupHeader = 'sticky-group-header';\n\nfunction getKeyWithMaxValueFromMap(map) {\n if (!map) return;\n return [...map.entries()].reduce((a, b) => (b[1] > a[1] ? b : a))[0];\n}\n\n// Find nearest element to view.\n// It always find nearest element from top left of container.\nfunction getNearestElementTo(rContainer, targetBoundingBox) {\n const elements = Array.from(rContainer.childNodes);\n const itemCoords = [];\n const items = [];\n const overlappingGroupHeadersCountMap = new Map();\n\n elements.forEach(item => {\n const rect = item.getBoundingClientRect();\n const inHorizontalBoundaries =\n rect.right >= targetBoundingBox.left && rect.left <= targetBoundingBox.right;\n // considering only those items which are in view area.\n if (\n (rect.top >= targetBoundingBox.top &&\n rect.top <= targetBoundingBox.bottom &&\n inHorizontalBoundaries) ||\n (rect.bottom >= targetBoundingBox.top &&\n rect.bottom <= targetBoundingBox.bottom &&\n inHorizontalBoundaries)\n ) {\n itemCoords.push([rect.left, rect.bottom]);\n items.push(item);\n }\n });\n const distances = [];\n itemCoords.forEach((itemCoord, index) => {\n const distance = Math.hypot(\n itemCoord[0] - targetBoundingBox.left,\n itemCoord[1] - targetBoundingBox.top\n );\n const parsedDistance = parseInt(distance, 10);\n distances.push(parsedDistance);\n\n // Keeping track of group header distances to identify the overlap due to sticky position.\n // The distance with max count will represent the sub-group user is actually seeing.\n if (items[index]?.classList?.contains(StickyGroupHeader)) {\n overlappingGroupHeadersCountMap.set(\n parsedDistance,\n (overlappingGroupHeadersCountMap.get(parsedDistance) || 0) + 1\n );\n }\n });\n\n if (distances.length) {\n // BUG-740809 The closest item to view in case of sticky-group-header is first visible sticky-group-header\n const closestItemIndexFromTop = distances.lastIndexOf(Math.min(...distances));\n\n let closestItemFromTop = items[closestItemIndexFromTop];\n /**\n * BUG-81875: Considering sticky sub-group headers\n * When nested grouping is applied and groups have sticky position, the parent group will always be on the top and nested group headers will come after that.\n * Due to this, the nearest element will always be the parent group header even though user might have scrolled down some sub-group header.\n * Actual nearest element should be the sub-group visible to the user.\n */\n if (closestItemFromTop.classList?.contains(StickyGroupHeader)) {\n const topVisibleGroupKey = getKeyWithMaxValueFromMap(overlappingGroupHeadersCountMap);\n closestItemFromTop = items[distances.lastIndexOf(topVisibleGroupKey)];\n }\n const closestItemIndexFromBottom = distances.lastIndexOf(Math.max(...distances));\n\n if (targetBoundingBox.height === 0) {\n closestItemFromTop = elements[0];\n }\n return [closestItemFromTop, items[closestItemIndexFromBottom]];\n }\n return [];\n}\n\n// When element is present in view , find which direction has\n// enough count as we need to get record in another direction.\n// direction 1 - up, -1 - down\n// Nearest element is one which lies in view boundary.\n\nfunction getDirectionWhereCountIsEnough(nearestViewElement, currentRowIndex, targetBoundingBox) {\n let previousSiblingsCountAboveView = 0;\n let nextSiblingsCountBelowView = 0;\n let startElement = nearestViewElement;\n let dir = 1;\n if (currentRowIndex !== 0 && !startElement.previousElementSibling) dir = -1;\n else {\n while (startElement.previousElementSibling) {\n // BUG-740809 in case of overlapped sticky-group-header the previousElementSibling are at same 'top' location\n if (startElement.previousElementSibling.classList.contains(StickyGroupHeader)) {\n previousSiblingsCountAboveView += 1;\n } else {\n const itemCoords = startElement.previousElementSibling.getBoundingClientRect();\n if (itemCoords.bottom < targetBoundingBox.top) previousSiblingsCountAboveView += 1;\n }\n startElement = startElement.previousElementSibling;\n }\n if (nearestViewElement.classList.contains(StickyGroupHeader))\n previousSiblingsCountAboveView -= 1;\n if (parseInt(startElement.getAttribute(RowIndexAttribute), 10) === 0) dir = 1;\n else {\n startElement = nearestViewElement;\n while (startElement.nextElementSibling) {\n const itemCoords = startElement.nextElementSibling.getBoundingClientRect();\n if (itemCoords.top > targetBoundingBox.bottom) nextSiblingsCountBelowView += 1;\n startElement = startElement.nextElementSibling;\n }\n // iterate in either direction where count is more\n // until you find top element whose left match with nearest view element match.\n // and matched index will be either top or bottom buffer index.\n if (currentRowIndex !== 0 && nextSiblingsCountBelowView >= previousSiblingsCountAboveView)\n dir = -1;\n }\n }\n return dir;\n}\n\n// Get start and end index which view represent at any monument.\n// Add extra information as well to adjust virtualiser position.\n\nfunction getOptimalInfo(\n target,\n rowHeight,\n rContainer,\n bufferContainer,\n oldElementCount,\n heightComposingOldElementCount,\n totalRecords,\n bufferMultiplier,\n isRefresh,\n isInfiniteScroll\n) {\n let currentRowIndex = 0;\n let topRowIndex = 0;\n let topBufferIndex = 0;\n let existingItemBoundingBox;\n\n // Estimated buffer count based on view height and row container count.\n // Increase in buffer count can improve performance.\n // A safeguard value which will apply on initial load.\n const INITIAL_BUFFER = 10;\n const buffer = INITIAL_BUFFER * bufferMultiplier;\n let bottomBufferIndex = buffer * 5;\n const scrollDirectionBuffer = buffer * 2;\n const scrollOppositeDirectionBuffer = buffer;\n\n let rowsInView = heightComposingOldElementCount\n ? Math.floor((oldElementCount / heightComposingOldElementCount) * target.offsetHeight)\n : 0;\n rowsInView = Number.isNaN(rowsInView) ? 0 : rowsInView;\n\n if (totalRecords > 0) {\n const targetBoundingBox = target.getBoundingClientRect();\n const rowConBoundingBox = rContainer.getBoundingClientRect();\n\n // Check if any element exist in current view. Calculation will change the required index\n // As we have to fix the container to not show any flicker.\n const [nearestViewElementFromTop, nearestViewElementFromBottom] = getNearestElementTo(\n rContainer,\n targetBoundingBox\n );\n if (nearestViewElementFromTop) {\n currentRowIndex = parseInt(nearestViewElementFromTop.getAttribute(RowIndexAttribute), 10);\n existingItemBoundingBox = nearestViewElementFromTop.getBoundingClientRect();\n\n // check how long this nearest item is from top of view.\n // to estimate top row index ( What could be possible index on view top.)\n const spaceInMid = existingItemBoundingBox.top - targetBoundingBox.top;\n const elementsInMid = Math.floor(\n (oldElementCount / heightComposingOldElementCount) * spaceInMid\n );\n topRowIndex = elementsInMid < 0 ? currentRowIndex : currentRowIndex - elementsInMid;\n } else {\n currentRowIndex =\n Math.floor((target.scrollTop / heightComposingOldElementCount) * oldElementCount) || 0;\n topRowIndex = currentRowIndex;\n }\n\n // If element exist in current view, traverse dom elements\n // to find top buffer index or bottom buffer index\n // where left match to not change layout.\n if (existingItemBoundingBox) {\n let dir = 1;\n\n // We will consider direction 1 always in case of refresh as item count might have been changed.\n // change in item count is always from downside.\n if (!isRefresh)\n dir = getDirectionWhereCountIsEnough(\n nearestViewElementFromTop,\n currentRowIndex,\n targetBoundingBox\n );\n\n // We will iterate either upside or downside and pick that element\n // which we can select as either top buffer or botton buffer and don't\n // change layout as well and go for max iteration of buffer.\n let maxIteration = buffer;\n let startElement = dir === 1 ? nearestViewElementFromTop : nearestViewElementFromBottom;\n while (startElement && maxIteration > 0) {\n const e = dir === 1 ? startElement.previousElementSibling : startElement.nextElementSibling;\n if (\n e &&\n rowConBoundingBox.left ===\n e.getBoundingClientRect().left - parseInt(window.getComputedStyle(e).marginLeft, 10)\n ) {\n if (dir === 1) topBufferIndex = parseInt(e.getAttribute(RowIndexAttribute), 10);\n else bottomBufferIndex = parseInt(e.getAttribute(RowIndexAttribute), 10);\n }\n startElement = e;\n maxIteration -= 1;\n }\n\n if (dir === 1) bottomBufferIndex = currentRowIndex + rowsInView + scrollDirectionBuffer;\n else topBufferIndex = topRowIndex - scrollDirectionBuffer;\n } else {\n // if user jumps the scroll and there is no overlapping with the previous records\n topBufferIndex = currentRowIndex - scrollOppositeDirectionBuffer;\n bottomBufferIndex = currentRowIndex + rowsInView + scrollDirectionBuffer;\n }\n }\n\n // Safe edge check when indexes goes out of range.\n if (topBufferIndex < 0) topBufferIndex = 0;\n // As safari does elastic scroll, so currentRowIndex and topRowIndex can go negative , fallback these to zero.\n if (currentRowIndex < 0) currentRowIndex = 0;\n if (topRowIndex < 0) topRowIndex = 0;\n if (\n !isInfiniteScroll &&\n bottomBufferIndex > totalRecords &&\n totalRecords !== null &&\n totalRecords !== undefined\n )\n bottomBufferIndex = totalRecords - 1;\n\n // When we get start index 0 from scrolling then , on edge case we might get whitespace\n // As we always adjust row container top to show previous item in place.\n // To solve this, make sure top index is also 0 when start index is zero to avoid white space\n // otherwise we will make start index to 1 if it is zero.\n // if (topBufferIndex === 0 && topRowIndex !== 0) topBufferIndex = 1;\n\n // before pagination is in progress, put scroll node coords here\n // to track how much user scrolled while pagination is in progress.\n const bufferOldCords = bufferContainer.getBoundingClientRect();\n return {\n existingItemBoundingBox, // coordinates of current row index.\n currentRowIndex, // common visible item in view before and after paint (previous and next paint)\n topRowIndex, // What could be possible index on view top.\n bufferOldCords, // buffer coordinates while pagination.\n bufferNewCords: bufferOldCords, // buffer coordinates while pagination is in progress and user scroll.\n view: {\n startIndex: Math.floor(topBufferIndex),\n endIndex: Math.floor(bottomBufferIndex)\n }\n };\n}\n\nexport default function getPaginationInfo(\n target,\n totalRecords,\n vi,\n isRefresh = false,\n isInfiniteScroll = false\n) {\n const oldElementCount = vi.itemCount === undefined ? 0 : vi.itemCount;\n const heightComposingOldElementCount =\n vi.rowContainerHeight === undefined ? 0 : vi.rowContainerHeight;\n return getOptimalInfo(\n target,\n vi.itemHeight,\n vi.rContainer,\n vi.bContainer,\n oldElementCount,\n heightComposingOldElementCount,\n totalRecords,\n vi.bufferMultiplier,\n isRefresh,\n isInfiniteScroll\n );\n}\n"]}
1
+ {"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/Pagination.js"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD,SAAS,yBAAyB,CAAC,GAAG;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,gCAAgC;AAChC,6DAA6D;AAC7D,SAAS,mBAAmB,CAAC,UAAU,EAAE,iBAAiB;IACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,+BAA+B,GAAG,IAAI,GAAG,EAAE,CAAC;IAElD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC1C,MAAM,sBAAsB,GAC1B,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAC/E,uDAAuD;QACvD,IACE,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC,GAAG;YAChC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC,MAAM;YACpC,sBAAsB,CAAC;YACzB,CAAC,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,GAAG;gBACnC,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,MAAM;gBACvC,sBAAsB,CAAC,EACzB,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,SAAS,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,EACrC,SAAS,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CACrC,CAAC;QACF,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE/B,0FAA0F;QAC1F,oFAAoF;QACpF,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzD,+BAA+B,CAAC,GAAG,CACjC,cAAc,EACd,CAAC,+BAA+B,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,0GAA0G;QAC1G,MAAM,uBAAuB,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAE9E,IAAI,kBAAkB,GAAG,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACxD;;;;;WAKG;QACH,IAAI,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9D,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,+BAA+B,CAAC,CAAC;YACtF,kBAAkB,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,0BAA0B,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAEjF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,6DAA6D;AAC7D,8DAA8D;AAC9D,8BAA8B;AAC9B,sDAAsD;AAEtD,SAAS,8BAA8B,CAAC,kBAAkB,EAAE,eAAe,EAAE,iBAAiB;IAC5F,IAAI,8BAA8B,GAAG,CAAC,CAAC;IACvC,IAAI,0BAA0B,GAAG,CAAC,CAAC;IACnC,IAAI,YAAY,GAAG,kBAAkB,CAAC;IACtC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,eAAe,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB;QAAE,GAAG,GAAG,CAAC,CAAC,CAAC;SACvE,CAAC;QACJ,OAAO,YAAY,CAAC,sBAAsB,EAAE,CAAC;YAC3C,6GAA6G;YAC7G,IAAI,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC9E,8BAA8B,IAAI,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,YAAY,CAAC,sBAAsB,CAAC,qBAAqB,EAAE,CAAC;gBAC/E,IAAI,UAAU,CAAC,MAAM,GAAG,iBAAiB,CAAC,GAAG;oBAAE,8BAA8B,IAAI,CAAC,CAAC;YACrF,CAAC;YACD,YAAY,GAAG,YAAY,CAAC,sBAAsB,CAAC;QACrD,CAAC;QACD,IAAI,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC1D,8BAA8B,IAAI,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;YAAE,GAAG,GAAG,CAAC,CAAC;aACzE,CAAC;YACJ,YAAY,GAAG,kBAAkB,CAAC;YAClC,OAAO,YAAY,CAAC,kBAAkB,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,YAAY,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;gBAC3E,IAAI,UAAU,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM;oBAAE,0BAA0B,IAAI,CAAC,CAAC;gBAC/E,YAAY,GAAG,YAAY,CAAC,kBAAkB,CAAC;YACjD,CAAC;YACD,kDAAkD;YAClD,+EAA+E;YAC/E,+DAA+D;YAC/D,IAAI,eAAe,KAAK,CAAC,IAAI,0BAA0B,IAAI,8BAA8B;gBACvF,GAAG,GAAG,CAAC,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gEAAgE;AAChE,gEAAgE;AAEhE,SAAS,cAAc,CACrB,MAAM,EACN,SAAS,EACT,UAAU,EACV,eAAe,EACf,eAAe,EACf,8BAA8B,EAC9B,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,gBAAgB;IAEhB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,uBAAuB,CAAC;IAE5B,uEAAuE;IACvE,oDAAoD;IACpD,sDAAsD;IACtD,MAAM,cAAc,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,cAAc,GAAG,gBAAgB,CAAC;IACjD,IAAI,iBAAiB,GAAG,MAAM,GAAG,CAAC,CAAC;IAEnC,wIAAwI;IACxI,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACzE,MAAM,6BAA6B,GAAG,MAAM,CAAC;IAE7C,IAAI,UAAU,GAAG,8BAA8B;QAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,8BAA8B,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;QACtF,CAAC,CAAC,CAAC,CAAC;IACN,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEvD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,iBAAiB,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACzD,MAAM,iBAAiB,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC;QAE7D,yFAAyF;QACzF,2DAA2D;QAC3D,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAAG,mBAAmB,CACnF,UAAU,EACV,iBAAiB,CAClB,CAAC;QACF,IAAI,yBAAyB,EAAE,CAAC;YAC9B,eAAe,GAAG,QAAQ,CAAC,yBAAyB,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1F,uBAAuB,GAAG,yBAAyB,CAAC,qBAAqB,EAAE,CAAC;YAE5E,wDAAwD;YACxD,yEAAyE;YACzE,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC;YACvE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAC9B,CAAC,eAAe,GAAG,8BAA8B,CAAC,GAAG,UAAU,CAChE,CAAC;YACF,WAAW,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,GAAG,aAAa,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,eAAe;gBACb,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,8BAA8B,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACzF,WAAW,GAAG,eAAe,CAAC;QAChC,CAAC;QAED,0DAA0D;QAC1D,kDAAkD;QAClD,yCAAyC;QACzC,IAAI,uBAAuB,EAAE,CAAC;YAC5B,IAAI,GAAG,GAAG,CAAC,CAAC;YAEZ,gGAAgG;YAChG,gDAAgD;YAChD,IAAI,CAAC,SAAS;gBACZ,GAAG,GAAG,8BAA8B,CAClC,yBAAyB,EACzB,eAAe,EACf,iBAAiB,CAClB,CAAC;YAEJ,kEAAkE;YAClE,sEAAsE;YACtE,4DAA4D;YAC5D,IAAI,YAAY,GAAG,MAAM,CAAC;YAC1B,IAAI,YAAY,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,4BAA4B,CAAC;YACxF,OAAO,YAAY,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC;gBAC5F,IACE,CAAC;oBACD,iBAAiB,CAAC,IAAI;wBACpB,CAAC,CAAC,qBAAqB,EAAE,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EACtF,CAAC;oBACD,IAAI,GAAG,KAAK,CAAC;wBAAE,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC;;wBAC3E,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3E,CAAC;gBACD,YAAY,GAAG,CAAC,CAAC;gBACjB,YAAY,IAAI,CAAC,CAAC;YACpB,CAAC;YAED,IAAI,GAAG,KAAK,CAAC;gBAAE,iBAAiB,GAAG,eAAe,GAAG,UAAU,GAAG,qBAAqB,CAAC;;gBACnF,cAAc,GAAG,WAAW,GAAG,qBAAqB,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,iFAAiF;YACjF,cAAc,GAAG,eAAe,GAAG,6BAA6B,CAAC;YACjE,iBAAiB,GAAG,eAAe,GAAG,UAAU,GAAG,qBAAqB,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,IAAI,cAAc,GAAG,CAAC;QAAE,cAAc,GAAG,CAAC,CAAC;IAC3C,8GAA8G;IAC9G,IAAI,eAAe,GAAG,CAAC;QAAE,eAAe,GAAG,CAAC,CAAC;IAC7C,IAAI,WAAW,GAAG,CAAC;QAAE,WAAW,GAAG,CAAC,CAAC;IACrC,IACE,CAAC,gBAAgB;QACjB,iBAAiB,GAAG,YAAY;QAChC,YAAY,KAAK,IAAI;QACrB,YAAY,KAAK,SAAS;QAE1B,iBAAiB,GAAG,YAAY,GAAG,CAAC,CAAC;IAEvC,uFAAuF;IACvF,wEAAwE;IACxE,6FAA6F;IAC7F,yDAAyD;IACzD,qEAAqE;IAErE,gEAAgE;IAChE,mEAAmE;IACnE,MAAM,cAAc,GAAG,eAAe,CAAC,qBAAqB,EAAE,CAAC;IAC/D,OAAO;QACL,uBAAuB,EAAE,oCAAoC;QAC7D,eAAe,EAAE,+EAA+E;QAChG,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,uCAAuC;QACvD,cAAc,EAAE,cAAc,EAAE,sEAAsE;QACtG,IAAI,EAAE;YACJ,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACxC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,MAAM,EACN,YAAY,EACZ,EAAE,EACF,SAAS,GAAG,KAAK,EACjB,gBAAgB,GAAG,KAAK;IAExB,MAAM,eAAe,GAAG,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;IACtE,MAAM,8BAA8B,GAClC,EAAE,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC;IAClE,OAAO,cAAc,CACnB,MAAM,EACN,EAAE,CAAC,UAAU,EACb,EAAE,CAAC,UAAU,EACb,EAAE,CAAC,UAAU,EACb,eAAe,EACf,8BAA8B,EAC9B,YAAY,EACZ,EAAE,CAAC,gBAAgB,EACnB,SAAS,EACT,gBAAgB,CACjB,CAAC;AACJ,CAAC","sourcesContent":["const RowIndexAttribute = 'data-index';\nexport const StickyGroupHeader = 'sticky-group-header';\n\nfunction getKeyWithMaxValueFromMap(map) {\n if (!map) return;\n return [...map.entries()].reduce((a, b) => (b[1] > a[1] ? b : a))[0];\n}\n\n// Find nearest element to view.\n// It always find nearest element from top left of container.\nfunction getNearestElementTo(rContainer, targetBoundingBox) {\n const elements = Array.from(rContainer.childNodes);\n const itemCoords = [];\n const items = [];\n const overlappingGroupHeadersCountMap = new Map();\n\n elements.forEach(item => {\n const rect = item.getBoundingClientRect();\n const inHorizontalBoundaries =\n rect.right >= targetBoundingBox.left && rect.left <= targetBoundingBox.right;\n // considering only those items which are in view area.\n if (\n (rect.top >= targetBoundingBox.top &&\n rect.top <= targetBoundingBox.bottom &&\n inHorizontalBoundaries) ||\n (rect.bottom >= targetBoundingBox.top &&\n rect.bottom <= targetBoundingBox.bottom &&\n inHorizontalBoundaries)\n ) {\n itemCoords.push([rect.left, rect.bottom]);\n items.push(item);\n }\n });\n const distances = [];\n itemCoords.forEach((itemCoord, index) => {\n const distance = Math.hypot(\n itemCoord[0] - targetBoundingBox.left,\n itemCoord[1] - targetBoundingBox.top\n );\n const parsedDistance = parseInt(distance, 10);\n distances.push(parsedDistance);\n\n // Keeping track of group header distances to identify the overlap due to sticky position.\n // The distance with max count will represent the sub-group user is actually seeing.\n if (items[index]?.classList?.contains(StickyGroupHeader)) {\n overlappingGroupHeadersCountMap.set(\n parsedDistance,\n (overlappingGroupHeadersCountMap.get(parsedDistance) || 0) + 1\n );\n }\n });\n\n if (distances.length) {\n // BUG-740809 The closest item to view in case of sticky-group-header is first visible sticky-group-header\n const closestItemIndexFromTop = distances.lastIndexOf(Math.min(...distances));\n\n let closestItemFromTop = items[closestItemIndexFromTop];\n /**\n * BUG-81875: Considering sticky sub-group headers\n * When nested grouping is applied and groups have sticky position, the parent group will always be on the top and nested group headers will come after that.\n * Due to this, the nearest element will always be the parent group header even though user might have scrolled down some sub-group header.\n * Actual nearest element should be the sub-group visible to the user.\n */\n if (closestItemFromTop.classList?.contains(StickyGroupHeader)) {\n const topVisibleGroupKey = getKeyWithMaxValueFromMap(overlappingGroupHeadersCountMap);\n closestItemFromTop = items[distances.lastIndexOf(topVisibleGroupKey)];\n }\n const closestItemIndexFromBottom = distances.lastIndexOf(Math.max(...distances));\n\n if (targetBoundingBox.height === 0) {\n closestItemFromTop = elements[0];\n }\n return [closestItemFromTop, items[closestItemIndexFromBottom]];\n }\n return [];\n}\n\n// When element is present in view , find which direction has\n// enough count as we need to get record in another direction.\n// direction 1 - up, -1 - down\n// Nearest element is one which lies in view boundary.\n\nfunction getDirectionWhereCountIsEnough(nearestViewElement, currentRowIndex, targetBoundingBox) {\n let previousSiblingsCountAboveView = 0;\n let nextSiblingsCountBelowView = 0;\n let startElement = nearestViewElement;\n let dir = 1;\n if (currentRowIndex !== 0 && !startElement.previousElementSibling) dir = -1;\n else {\n while (startElement.previousElementSibling) {\n // BUG-740809 in case of overlapped sticky-group-header the previousElementSibling are at same 'top' location\n if (startElement.previousElementSibling.classList.contains(StickyGroupHeader)) {\n previousSiblingsCountAboveView += 1;\n } else {\n const itemCoords = startElement.previousElementSibling.getBoundingClientRect();\n if (itemCoords.bottom < targetBoundingBox.top) previousSiblingsCountAboveView += 1;\n }\n startElement = startElement.previousElementSibling;\n }\n if (nearestViewElement.classList.contains(StickyGroupHeader))\n previousSiblingsCountAboveView -= 1;\n if (parseInt(startElement.getAttribute(RowIndexAttribute), 10) === 0) dir = 1;\n else {\n startElement = nearestViewElement;\n while (startElement.nextElementSibling) {\n const itemCoords = startElement.nextElementSibling.getBoundingClientRect();\n if (itemCoords.top > targetBoundingBox.bottom) nextSiblingsCountBelowView += 1;\n startElement = startElement.nextElementSibling;\n }\n // iterate in either direction where count is more\n // until you find top element whose left match with nearest view element match.\n // and matched index will be either top or bottom buffer index.\n if (currentRowIndex !== 0 && nextSiblingsCountBelowView >= previousSiblingsCountAboveView)\n dir = -1;\n }\n }\n return dir;\n}\n\n// Get start and end index which view represent at any monument.\n// Add extra information as well to adjust virtualiser position.\n\nfunction getOptimalInfo(\n target,\n rowHeight,\n rContainer,\n bufferContainer,\n oldElementCount,\n heightComposingOldElementCount,\n totalRecords,\n bufferMultiplier,\n isRefresh,\n isInfiniteScroll\n) {\n let currentRowIndex = 0;\n let topRowIndex = 0;\n let topBufferIndex = 0;\n let existingItemBoundingBox;\n\n // Estimated buffer count based on view height and row container count.\n // Increase in buffer count can improve performance.\n // A safeguard value which will apply on initial load.\n const INITIAL_BUFFER = 10;\n const buffer = INITIAL_BUFFER * bufferMultiplier;\n let bottomBufferIndex = buffer * 5;\n\n // Since in Infinite scroll, the records need to be fetched in one direction only, fetching more records reduce the number of API calls.\n const scrollDirectionBuffer = isInfiniteScroll ? buffer * 4 : buffer * 2;\n const scrollOppositeDirectionBuffer = buffer;\n\n let rowsInView = heightComposingOldElementCount\n ? Math.floor((oldElementCount / heightComposingOldElementCount) * target.offsetHeight)\n : 0;\n rowsInView = Number.isNaN(rowsInView) ? 0 : rowsInView;\n\n if (totalRecords > 0) {\n const targetBoundingBox = target.getBoundingClientRect();\n const rowConBoundingBox = rContainer.getBoundingClientRect();\n\n // Check if any element exist in current view. Calculation will change the required index\n // As we have to fix the container to not show any flicker.\n const [nearestViewElementFromTop, nearestViewElementFromBottom] = getNearestElementTo(\n rContainer,\n targetBoundingBox\n );\n if (nearestViewElementFromTop) {\n currentRowIndex = parseInt(nearestViewElementFromTop.getAttribute(RowIndexAttribute), 10);\n existingItemBoundingBox = nearestViewElementFromTop.getBoundingClientRect();\n\n // check how long this nearest item is from top of view.\n // to estimate top row index ( What could be possible index on view top.)\n const spaceInMid = existingItemBoundingBox.top - targetBoundingBox.top;\n const elementsInMid = Math.floor(\n (oldElementCount / heightComposingOldElementCount) * spaceInMid\n );\n topRowIndex = elementsInMid < 0 ? currentRowIndex : currentRowIndex - elementsInMid;\n } else {\n currentRowIndex =\n Math.floor((target.scrollTop / heightComposingOldElementCount) * oldElementCount) || 0;\n topRowIndex = currentRowIndex;\n }\n\n // If element exist in current view, traverse dom elements\n // to find top buffer index or bottom buffer index\n // where left match to not change layout.\n if (existingItemBoundingBox) {\n let dir = 1;\n\n // We will consider direction 1 always in case of refresh as item count might have been changed.\n // change in item count is always from downside.\n if (!isRefresh)\n dir = getDirectionWhereCountIsEnough(\n nearestViewElementFromTop,\n currentRowIndex,\n targetBoundingBox\n );\n\n // We will iterate either upside or downside and pick that element\n // which we can select as either top buffer or botton buffer and don't\n // change layout as well and go for max iteration of buffer.\n let maxIteration = buffer;\n let startElement = dir === 1 ? nearestViewElementFromTop : nearestViewElementFromBottom;\n while (startElement && maxIteration > 0) {\n const e = dir === 1 ? startElement.previousElementSibling : startElement.nextElementSibling;\n if (\n e &&\n rowConBoundingBox.left ===\n e.getBoundingClientRect().left - parseInt(window.getComputedStyle(e).marginLeft, 10)\n ) {\n if (dir === 1) topBufferIndex = parseInt(e.getAttribute(RowIndexAttribute), 10);\n else bottomBufferIndex = parseInt(e.getAttribute(RowIndexAttribute), 10);\n }\n startElement = e;\n maxIteration -= 1;\n }\n\n if (dir === 1) bottomBufferIndex = currentRowIndex + rowsInView + scrollDirectionBuffer;\n else topBufferIndex = topRowIndex - scrollDirectionBuffer;\n } else {\n // if user jumps the scroll and there is no overlapping with the previous records\n topBufferIndex = currentRowIndex - scrollOppositeDirectionBuffer;\n bottomBufferIndex = currentRowIndex + rowsInView + scrollDirectionBuffer;\n }\n }\n\n // Safe edge check when indexes goes out of range.\n if (topBufferIndex < 0) topBufferIndex = 0;\n // As safari does elastic scroll, so currentRowIndex and topRowIndex can go negative , fallback these to zero.\n if (currentRowIndex < 0) currentRowIndex = 0;\n if (topRowIndex < 0) topRowIndex = 0;\n if (\n !isInfiniteScroll &&\n bottomBufferIndex > totalRecords &&\n totalRecords !== null &&\n totalRecords !== undefined\n )\n bottomBufferIndex = totalRecords - 1;\n\n // When we get start index 0 from scrolling then , on edge case we might get whitespace\n // As we always adjust row container top to show previous item in place.\n // To solve this, make sure top index is also 0 when start index is zero to avoid white space\n // otherwise we will make start index to 1 if it is zero.\n // if (topBufferIndex === 0 && topRowIndex !== 0) topBufferIndex = 1;\n\n // before pagination is in progress, put scroll node coords here\n // to track how much user scrolled while pagination is in progress.\n const bufferOldCords = bufferContainer.getBoundingClientRect();\n return {\n existingItemBoundingBox, // coordinates of current row index.\n currentRowIndex, // common visible item in view before and after paint (previous and next paint)\n topRowIndex, // What could be possible index on view top.\n bufferOldCords, // buffer coordinates while pagination.\n bufferNewCords: bufferOldCords, // buffer coordinates while pagination is in progress and user scroll.\n view: {\n startIndex: Math.floor(topBufferIndex),\n endIndex: Math.floor(bottomBufferIndex)\n }\n };\n}\n\nexport default function getPaginationInfo(\n target,\n totalRecords,\n vi,\n isRefresh = false,\n isInfiniteScroll = false\n) {\n const oldElementCount = vi.itemCount === undefined ? 0 : vi.itemCount;\n const heightComposingOldElementCount =\n vi.rowContainerHeight === undefined ? 0 : vi.rowContainerHeight;\n return getOptimalInfo(\n target,\n vi.itemHeight,\n vi.rContainer,\n vi.bContainer,\n oldElementCount,\n heightComposingOldElementCount,\n totalRecords,\n vi.bufferMultiplier,\n isRefresh,\n isInfiniteScroll\n );\n}\n"]}
@@ -1,3 +1,6 @@
1
- export default function useScroll(callback: any, getContext: any, vi: any, totalRecordCount: any, header: any, isFetching: any, viewHeight: any): ((top: any) => void)[];
1
+ export default function useScroll(callback: any, getContext: any, vi: any, totalRecordCount: any, header: any, isFetching: any, viewHeight: any, paginationTriggerRatios?: {
2
+ down: number;
3
+ up: number;
4
+ }): ((top: any) => void)[];
2
5
  export function useApplyStyleOnScroll(vi: any): () => void;
3
6
  //# sourceMappingURL=UseScroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UseScroll.d.ts","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/UseScroll.js"],"names":[],"mappings":"AA0BA,yKA8FC;AAjHM,2DAiBN"}
1
+ {"version":3,"file":"UseScroll.d.ts","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/UseScroll.js"],"names":[],"mappings":"AA+BA;;;2BAwGC;AA3HM,2DAiBN"}
@@ -2,6 +2,10 @@ import { useState, useEffect, useRef, useCallback } from 'react';
2
2
  import useThrottle from '../../Hooks/useThrottle';
3
3
  import { getRecordCountForLayoutPaint, isViewNotFilled } from './utility';
4
4
  // import useDebounce from '../../Hooks/UseDebounce';
5
+ const DEFAULT_PAGINATION_TRIGGER_RATIOS = {
6
+ down: 0.8,
7
+ up: 0.2
8
+ };
5
9
  export const useApplyStyleOnScroll = vi => {
6
10
  const footerElement = vi.pContainer?.querySelector('.footer > .row');
7
11
  return useCallback(() => {
@@ -17,7 +21,7 @@ export const useApplyStyleOnScroll = vi => {
17
21
  }
18
22
  }, [vi.pContainer, vi.rContainer, vi.pContainer?.offsetHeight, footerElement]);
19
23
  };
20
- export default function useScroll(callback, getContext, vi, totalRecordCount, header, isFetching, viewHeight) {
24
+ export default function useScroll(callback, getContext, vi, totalRecordCount, header, isFetching, viewHeight, paginationTriggerRatios = DEFAULT_PAGINATION_TRIGGER_RATIOS) {
21
25
  const applyScrollEndStyle = useApplyStyleOnScroll(vi);
22
26
  const [vScroll, setVScroll] = useState();
23
27
  const ref = useRef({
@@ -57,7 +61,7 @@ export default function useScroll(callback, getContext, vi, totalRecordCount, he
57
61
  if (!context)
58
62
  return;
59
63
  const direction = getDirection();
60
- const distance = direction === 1 ? 0.8 : 0.2;
64
+ const distance = direction === 1 ? paginationTriggerRatios.down : paginationTriggerRatios.up;
61
65
  const eleIndex = Math.floor(vi.rContainer.childElementCount * distance);
62
66
  const boundaryEle = vi.rContainer.childNodes[eleIndex];
63
67
  const boundaryElePos = boundaryEle?.getBoundingClientRect();
@@ -71,7 +75,16 @@ export default function useScroll(callback, getContext, vi, totalRecordCount, he
71
75
  vi.direction = direction;
72
76
  callback();
73
77
  }
74
- }, [getDirection, vi, getContext, isFetching, totalRecordCount, header, callback]);
78
+ }, [
79
+ getDirection,
80
+ paginationTriggerRatios,
81
+ vi,
82
+ getContext,
83
+ isFetching,
84
+ totalRecordCount,
85
+ header,
86
+ callback
87
+ ]);
75
88
  useThrottle(vScroll, handleScroll);
76
89
  useEffect(() => {
77
90
  const context = getContext();
@@ -1 +1 @@
1
- {"version":3,"file":"UseScroll.js","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/UseScroll.js"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\n\nimport useThrottle from '../../Hooks/useThrottle';\n\nimport { getRecordCountForLayoutPaint, isViewNotFilled } from './utility';\n// import useDebounce from '../../Hooks/UseDebounce';\n\nexport const useApplyStyleOnScroll = vi => {\n const footerElement = vi.pContainer?.querySelector('.footer > .row');\n return useCallback(() => {\n // Calculate the difference between bottom co-ordinates of p and r Containers\n // along with the row height of footer element to check if the bottom of the table is reached.\n if (\n Math.abs(\n vi.pContainer.getBoundingClientRect().bottom -\n vi.rContainer.getBoundingClientRect().bottom -\n (footerElement?.hasChildNodes() ? footerElement.offsetHeight : 0)\n ) < 1\n ) {\n vi.rContainer.classList.add('scroll-end');\n } else {\n vi.rContainer.classList.remove('scroll-end');\n }\n }, [vi.pContainer, vi.rContainer, vi.pContainer?.offsetHeight, footerElement]);\n};\n\nexport default function useScroll(\n callback,\n getContext,\n vi,\n totalRecordCount,\n header,\n isFetching,\n viewHeight\n) {\n const applyScrollEndStyle = useApplyStyleOnScroll(vi);\n const [vScroll, setVScroll] = useState();\n const ref = useRef({\n oldScrollTop: 0\n }).current;\n const updateScrollTop = useCallback(\n top => {\n ref.oldScrollTop = top;\n },\n [ref]\n );\n // const deBouncedVScroll = useDebounce(vScroll, 100);\n\n const getDirection = useCallback(() => {\n const context = getContext();\n let dir;\n if (ref.oldScrollTop > context.scrollTop) dir = -1;\n else if (ref.oldScrollTop < context.scrollTop) dir = 1;\n ref.oldScrollTop = context.scrollTop;\n return dir;\n }, [getContext, ref.oldScrollTop]);\n\n const onScroll = useCallback(\n e => {\n setVScroll(e.target.scrollTop);\n vi.pInfo.bufferNewCords = vi.bContainer.getBoundingClientRect();\n\n // Style is to be applied upon scroll after successful\n // check of bottom position of containers\n applyScrollEndStyle(vi.rContainer, vi.pContainer);\n },\n [\n isFetching,\n vi.pInfo.bufferNewCords,\n vi.bContainer,\n vi.pContainer,\n vi.rContainer,\n applyScrollEndStyle\n ]\n );\n\n const handleScroll = useCallback(() => {\n const context = getContext();\n // Returning in case the throttle function runs after some delay and by that time the virtualizer has unmounted\n if (!context) return;\n\n const direction = getDirection();\n const distance = direction === 1 ? 0.8 : 0.2;\n const eleIndex = Math.floor(vi.rContainer.childElementCount * distance);\n const boundaryEle = vi.rContainer.childNodes[eleIndex];\n const boundaryElePos = boundaryEle?.getBoundingClientRect();\n const { bottom, top } = context?.getBoundingClientRect() || {};\n if (\n (direction === 1 &&\n boundaryElePos?.bottom < bottom &&\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.endIndex + 1 < totalRecordCount) ||\n (direction === -1 && boundaryElePos?.top > top && vi.pInfo?.view?.startIndex > 0) ||\n isViewNotFilled(getRecordCountForLayoutPaint(totalRecordCount), vi, context, header)\n ) {\n vi.direction = direction;\n callback();\n }\n }, [getDirection, vi, getContext, isFetching, totalRecordCount, header, callback]);\n\n useThrottle(vScroll, handleScroll);\n\n useEffect(() => {\n const context = getContext();\n if (context) context.addEventListener('scroll', onScroll);\n return () => {\n if (context) context.removeEventListener('scroll', onScroll);\n };\n }, [getContext, onScroll, vi.rContainer, vi.pContainer, applyScrollEndStyle]);\n\n // useEffect for scrollEndStyle hook\n useEffect(() => {\n applyScrollEndStyle(vi.rContainer, vi.pContainer);\n }, [vi.rContainer, vi.pContainer, applyScrollEndStyle, totalRecordCount, viewHeight]);\n // useEffect(() => {\n // if (deBouncedVScroll !== undefined)\n // handleScroll();\n // }, [deBouncedVScroll]);\n\n return [updateScrollTop];\n}\n"]}
1
+ {"version":3,"file":"UseScroll.js","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/UseScroll.js"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\n\nimport useThrottle from '../../Hooks/useThrottle';\n\nimport { getRecordCountForLayoutPaint, isViewNotFilled } from './utility';\n// import useDebounce from '../../Hooks/UseDebounce';\n\nconst DEFAULT_PAGINATION_TRIGGER_RATIOS = {\n down: 0.8,\n up: 0.2\n};\n\nexport const useApplyStyleOnScroll = vi => {\n const footerElement = vi.pContainer?.querySelector('.footer > .row');\n return useCallback(() => {\n // Calculate the difference between bottom co-ordinates of p and r Containers\n // along with the row height of footer element to check if the bottom of the table is reached.\n if (\n Math.abs(\n vi.pContainer.getBoundingClientRect().bottom -\n vi.rContainer.getBoundingClientRect().bottom -\n (footerElement?.hasChildNodes() ? footerElement.offsetHeight : 0)\n ) < 1\n ) {\n vi.rContainer.classList.add('scroll-end');\n } else {\n vi.rContainer.classList.remove('scroll-end');\n }\n }, [vi.pContainer, vi.rContainer, vi.pContainer?.offsetHeight, footerElement]);\n};\n\nexport default function useScroll(\n callback,\n getContext,\n vi,\n totalRecordCount,\n header,\n isFetching,\n viewHeight,\n paginationTriggerRatios = DEFAULT_PAGINATION_TRIGGER_RATIOS\n) {\n const applyScrollEndStyle = useApplyStyleOnScroll(vi);\n const [vScroll, setVScroll] = useState();\n const ref = useRef({\n oldScrollTop: 0\n }).current;\n const updateScrollTop = useCallback(\n top => {\n ref.oldScrollTop = top;\n },\n [ref]\n );\n // const deBouncedVScroll = useDebounce(vScroll, 100);\n\n const getDirection = useCallback(() => {\n const context = getContext();\n let dir;\n if (ref.oldScrollTop > context.scrollTop) dir = -1;\n else if (ref.oldScrollTop < context.scrollTop) dir = 1;\n ref.oldScrollTop = context.scrollTop;\n return dir;\n }, [getContext, ref.oldScrollTop]);\n\n const onScroll = useCallback(\n e => {\n setVScroll(e.target.scrollTop);\n vi.pInfo.bufferNewCords = vi.bContainer.getBoundingClientRect();\n\n // Style is to be applied upon scroll after successful\n // check of bottom position of containers\n applyScrollEndStyle(vi.rContainer, vi.pContainer);\n },\n [\n isFetching,\n vi.pInfo.bufferNewCords,\n vi.bContainer,\n vi.pContainer,\n vi.rContainer,\n applyScrollEndStyle\n ]\n );\n\n const handleScroll = useCallback(() => {\n const context = getContext();\n // Returning in case the throttle function runs after some delay and by that time the virtualizer has unmounted\n if (!context) return;\n\n const direction = getDirection();\n const distance = direction === 1 ? paginationTriggerRatios.down : paginationTriggerRatios.up;\n const eleIndex = Math.floor(vi.rContainer.childElementCount * distance);\n const boundaryEle = vi.rContainer.childNodes[eleIndex];\n const boundaryElePos = boundaryEle?.getBoundingClientRect();\n const { bottom, top } = context?.getBoundingClientRect() || {};\n if (\n (direction === 1 &&\n boundaryElePos?.bottom < bottom &&\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.endIndex + 1 < totalRecordCount) ||\n (direction === -1 && boundaryElePos?.top > top && vi.pInfo?.view?.startIndex > 0) ||\n isViewNotFilled(getRecordCountForLayoutPaint(totalRecordCount), vi, context, header)\n ) {\n vi.direction = direction;\n callback();\n }\n }, [\n getDirection,\n paginationTriggerRatios,\n vi,\n getContext,\n isFetching,\n totalRecordCount,\n header,\n callback\n ]);\n\n useThrottle(vScroll, handleScroll);\n\n useEffect(() => {\n const context = getContext();\n if (context) context.addEventListener('scroll', onScroll);\n return () => {\n if (context) context.removeEventListener('scroll', onScroll);\n };\n }, [getContext, onScroll, vi.rContainer, vi.pContainer, applyScrollEndStyle]);\n\n // useEffect for scrollEndStyle hook\n useEffect(() => {\n applyScrollEndStyle(vi.rContainer, vi.pContainer);\n }, [vi.rContainer, vi.pContainer, applyScrollEndStyle, totalRecordCount, viewHeight]);\n // useEffect(() => {\n // if (deBouncedVScroll !== undefined)\n // handleScroll();\n // }, [deBouncedVScroll]);\n\n return [updateScrollTop];\n}\n"]}
@@ -239,7 +239,7 @@ const VariableHeightVirtualizer = forwardRef(({ id, children, buffer = 15, apiCa
239
239
  left: 0,
240
240
  width: '100%',
241
241
  height: `${itemContainerHeight}px`
242
- }, className: `${itemContainerClass} row-container`, children: children }), isDataFetching && !isForceRefreshedPagination && (_jsx(StyledLoader, { "$style": {
242
+ }, className: `${itemContainerClass} row-container`, children: totalItemCount === 0 && !isDataFetching ? null : children }), isDataFetching && !isForceRefreshedPagination && (_jsx(StyledLoader, { "$style": {
243
243
  top: '--below-loader-top',
244
244
  left: '--loader-left'
245
245
  }, children: _jsx(Progress, { className: 'below-loader', placement: 'block', tabIndex: 0, "aria-label": translate('Loading more results') }) }))] }), virtualizedCount === 0 && !isDataFetching && renderEmptyRecords
@@ -1 +1 @@
1
- {"version":3,"file":"VariableHeightVirtualizer.js","sourceRoot":"","sources":["../../../../../Core/Components/Virtualise/VariableHeightVirtualizer/VariableHeightVirtualizer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useRef,\n useEffect,\n useState,\n useCallback,\n useLayoutEffect,\n forwardRef,\n useImperativeHandle,\n useMemo\n} from 'react';\nimport type { ReactNode, ForwardedRef } from 'react';\nimport Styled from 'styled-components';\n\nimport { Progress } from '@pega/cosmos-react-core';\n\nimport useResizeObserver from '../UseResizeObserver';\nimport useTranslate from '../../../Hooks/useTranslate';\n\nimport useChildrenHeightResizeObserver from './useChildrenHeightResizeObserver';\nimport useLoaderPositioning from './useLoaderPositioning';\nimport usePagination from './usePagination';\nimport useScroll from './useScroll';\nimport useVirtualizerItemCount from './useVirtualizerItemCount';\nimport {\n calculateCumulativeItemSizeChange,\n getMaxHeight,\n isViewNotFilled,\n calculateTotalBufferHeight,\n getChangedItemsHeight,\n updateItemPositionStyles\n} from './utils';\n\nexport interface ItemsHeight {\n [index: number]: number;\n}\n\nexport interface LoadedDataRange {\n startIndex?: number;\n endIndex?: number;\n}\n\ninterface StyledLoaderProps {\n $style: {\n top: string;\n left: string;\n };\n}\n\nexport interface VariableHeightVirtualizerProps {\n /** Unique identifier for the virtualizer instance. */\n id: string;\n /** The React children elements to render inside the virtualizer. */\n children: ReactNode;\n /** Callback to fetch paginated data. */\n apiCallback: (\n params: { startIndex: number; endIndex: number; id: string },\n options: { takeLatestAction: boolean }\n ) => void;\n /** Indicates if data is currently being fetched. */\n isDataFetching: boolean;\n /** Range of data that is already loaded. */\n loadedDataRange: LoadedDataRange;\n /** Default height for items if not measured. */\n defaultItemHeight?: number;\n /** Total number of items in the list. */\n totalItemCount?: number | null;\n /** Number of items to buffer before/after the visible range. */\n buffer?: number;\n /** Maximum number of items to render at once. */\n maxItemsToPaint?: number;\n /** Function to render the header. */\n renderHeader?: (() => ReactNode) | null;\n /** Function to render the footer. */\n renderFooter?: (() => ReactNode) | null;\n /** Function to render the no-result state. */\n renderEmptyRecords?: (() => ReactNode) | null;\n /** CSS class for the item container. */\n itemContainerClass?: string;\n /** Maximum height for the view container. */\n viewMaxHeight?: string | number | null;\n /** Minimum height for the view container. */\n minHeight?: string | number;\n /** Minimum height when no items are rendered. */\n minHeightWhenNoItemsRendered?: string;\n}\n\ninterface VirtualizerRef {\n /** Scrolls the parent container to the top. */\n scrollToTop: () => void;\n /** Returns the parent container element. */\n getParentContainer: () => HTMLElement | null;\n /** Returns the buffer container element. */\n getBufferContainer: () => HTMLElement | null;\n /** Triggers a count change notification. */\n notifyCountChange: () => void;\n}\n\nconst StyledLoader = Styled.div<StyledLoaderProps>`\n display: flex;\n justify-content: center;\n padding: 0.5rem;\n position: absolute;\n width: var(--container-width);\n left: ${props => `var(${props.$style.left})`};\n top: ${props => `var(${props.$style.top})`};\n width: 100%;\n`;\n\n/**\n * Flow:\n * 1. First load/user scrolls/screen size change/column resize\n * 2. Calculate new pagination range based on scroll position or if view not filled\n * 3. Consumer executes API call to fetch new data\n * 4. New items are prepared and rendered\n * 5. Update cache of item heights\n * 6. Update buffer height\n * 7. Adjust itemContainer top\n * 8. Adjust scrollTop (if needed) to keep the items at same position visually\n */\n\n/**\n * VariableHeightVirtualizer is a React component that efficiently renders large lists with items of variable heights,\n * using virtualization techniques to minimize DOM nodes and improve performance.\n *\n * @param props - {@link VariableHeightVirtualizerProps}\n * @param ref - Forwarded ref exposing imperative APIs: scrollToTop, getParentContainer, getBufferContainer, notifyCountChange.\n *\n * @example\n * ```tsx\n * <VariableHeightVirtualizer\n * id=\"my-list\"\n * totalItemCount={10000}\n * loadedDataRange={{ startIndex: 0, endIndex: 49 }}\n * isDataFetching={isLoading}\n * apiCallback={fetchData}\n * defaultItemHeight={40}\n * buffer={10}\n * renderHeader={() => <Header />}\n * renderFooter={() => <Footer />}\n * renderEmptyRecords={() => <NoResults />}\n * >\n * {items.map(item => <ListItem key={item.id} {...item} />)}\n * </VariableHeightVirtualizer>\n * ```\n */\nconst VariableHeightVirtualizer = forwardRef<VirtualizerRef, VariableHeightVirtualizerProps>(\n (\n {\n id,\n children,\n buffer = 15,\n apiCallback,\n loadedDataRange = {},\n defaultItemHeight = 30,\n totalItemCount,\n maxItemsToPaint = 5000,\n renderHeader = null,\n renderFooter = null,\n renderEmptyRecords = null,\n itemContainerClass = '',\n viewMaxHeight = null,\n minHeight = 'auto',\n isDataFetching = false,\n minHeightWhenNoItemsRendered = 'auto'\n },\n ref: ForwardedRef<VirtualizerRef>\n ) => {\n const [startIndex, setStartIndex] = useState<number>(0);\n const [endIndex, setEndIndex] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n const [totalBufferHeight, setTotalBufferHeight] = useState<number>(0);\n const [itemsHeight, setItemsHeight] = useState<ItemsHeight>({});\n const [itemContainerHeight, setItemContainerHeight] = useState<number>(0);\n\n const [countChangeTrigger, setCountChangeTrigger] = useState<number>(0);\n const [itemHeightChangeTrigger, setItemHeightChangeTrigger] = useState<number>(0);\n const [parentContainerDimensionChangeTrigger, setParentContainerDimensionChangeTrigger] =\n useState<number>(0);\n\n const parentContainerRef = useRef<HTMLDivElement>(null);\n const bufferContainerRef = useRef<HTMLDivElement>(null);\n const itemContainerRef = useRef<HTMLDivElement>(null);\n const previousItemsHeightRef = useRef<ItemsHeight>({});\n const previousFirstItemDataIndexRef = useRef<number | null>(null);\n\n const [translate] = useTranslate();\n\n const onParentContainerDimensionUpdate = useCallback(() => {\n const { height: parentContainerHeight, width: parentContainerWidth } =\n parentContainerRef.current?.getBoundingClientRect() ?? {};\n // trigger virtualizer operations only when the container has some height and width\n if (parentContainerHeight && parentContainerWidth) {\n setParentContainerDimensionChangeTrigger(value => value + 1);\n }\n }, []);\n\n const getParentContainer = useCallback(\n (): HTMLDivElement | null => parentContainerRef.current,\n []\n );\n useResizeObserver(getParentContainer, onParentContainerDimensionUpdate);\n\n const { isInfiniteMode, virtualizedCount } = useVirtualizerItemCount({\n totalItemCount,\n startIndex,\n endIndex,\n loadedDataRange,\n isDataFetching,\n itemContainerRef,\n children,\n buffer,\n countResetSignal: countChangeTrigger\n });\n\n const { triggerPagination, isForceRefreshedPagination } = usePagination({\n apiCallback,\n id,\n buffer,\n maxItemsToPaint,\n startIndex,\n endIndex,\n virtualizedCount,\n isInfiniteMode,\n itemsHeight,\n defaultItemHeight,\n parentContainerRef,\n itemContainerRef,\n setStartIndex,\n setEndIndex,\n previousFirstItemDataIndexRef\n });\n\n // Listens to the scroll events and trigger pagination when more records are needed to enable smooth scrolling\n useScroll({\n parentContainerRef,\n itemContainerRef,\n onThresholdBreach: (sTop: number) => {\n setScrollTop(sTop);\n triggerPagination(sTop);\n },\n delay: 150\n });\n\n // Expose APIs to the consumer\n useImperativeHandle(\n ref,\n (): VirtualizerRef => ({\n scrollToTop: () => {\n if (parentContainerRef.current) {\n parentContainerRef.current.scrollTop = 0;\n setScrollTop(0);\n\n triggerPagination(0, true);\n }\n },\n getParentContainer: () => parentContainerRef.current,\n getBufferContainer: () => itemContainerRef.current,\n notifyCountChange: () => setCountChangeTrigger(value => value + 1)\n })\n );\n\n // Measure height of rendered items and cache the heights\n useLayoutEffect(() => {\n if (!itemContainerRef.current) return;\n\n const newHeights = getChangedItemsHeight(\n itemContainerRef.current,\n itemsHeight,\n defaultItemHeight\n );\n if (Object.keys(newHeights).length > 0) {\n setItemsHeight((prev: ItemsHeight) => ({ ...prev, ...newHeights }));\n }\n }, [\n startIndex,\n itemsHeight,\n children,\n isDataFetching,\n defaultItemHeight,\n itemHeightChangeTrigger\n ]);\n\n // buffer height calculation\n useLayoutEffect(() => {\n const newBufferHeight = calculateTotalBufferHeight(\n virtualizedCount,\n itemsHeight,\n defaultItemHeight\n );\n\n if (newBufferHeight !== totalBufferHeight) {\n setTotalBufferHeight(newBufferHeight);\n }\n }, [itemsHeight, virtualizedCount, defaultItemHeight, totalBufferHeight]);\n\n // itemContainer size and position adjustments\n useLayoutEffect(() => {\n if (!itemContainerRef.current) return;\n\n setItemContainerHeight(\n updateItemPositionStyles(itemContainerRef.current, itemsHeight, defaultItemHeight)\n );\n }, [children, itemsHeight, defaultItemHeight]);\n\n // scroll position adjustment if rendered height is different than estimated height\n useLayoutEffect(() => {\n if (!parentContainerRef.current) return;\n\n const atTop = parentContainerRef.current.scrollTop === 0;\n if (!atTop) {\n const delta = calculateCumulativeItemSizeChange(\n startIndex,\n previousFirstItemDataIndexRef.current,\n itemsHeight,\n previousItemsHeightRef.current,\n defaultItemHeight\n );\n\n if (delta !== 0) {\n parentContainerRef.current.scrollTop += delta;\n }\n }\n\n previousItemsHeightRef.current = { ...itemsHeight };\n }, [startIndex, itemsHeight, defaultItemHeight]);\n\n // Adjust loader positions\n useLoaderPositioning({\n isDataFetching,\n parentContainerRef,\n itemContainerRef,\n children,\n itemsHeight,\n defaultItemHeight\n });\n\n // Initial pagination trigger and subsequent triggers if the view is not completely filled\n useEffect(() => {\n // If consumer already has data for initial items, then no need to trigger pagination. Just hydrate the internal state in sync with existing data.\n if (\n !endIndex &&\n loadedDataRange.startIndex !== undefined &&\n loadedDataRange.startIndex >= 0 &&\n loadedDataRange.endIndex !== undefined &&\n loadedDataRange.endIndex >= 0\n ) {\n setStartIndex(loadedDataRange.startIndex);\n setEndIndex(loadedDataRange.endIndex);\n return;\n }\n\n // If the consumer doesn't have data or view not filled then trigger pagination\n if (\n !isDataFetching &&\n (!endIndex ||\n (itemContainerRef.current &&\n parentContainerRef.current &&\n isViewNotFilled(\n virtualizedCount,\n itemContainerRef.current,\n parentContainerRef.current,\n !!renderHeader\n )))\n ) {\n triggerPagination(scrollTop);\n }\n }, [\n loadedDataRange,\n scrollTop,\n virtualizedCount,\n endIndex,\n triggerPagination,\n parentContainerDimensionChangeTrigger,\n isDataFetching,\n renderHeader\n ]);\n\n // Resize observer on items to track height changes\n const onItemsHeightUpdate = useCallback(() => {\n setItemHeightChangeTrigger(value => value + 1);\n }, []);\n useChildrenHeightResizeObserver({\n childrenContainerRef: itemContainerRef,\n children,\n itemsHeight,\n defaultItemHeight,\n onItemsHeightUpdate\n });\n\n const maxHeight = useMemo((): string => getMaxHeight(viewMaxHeight), [viewMaxHeight]);\n\n return (\n <div\n ref={parentContainerRef}\n style={{\n maxHeight,\n minHeight: virtualizedCount === 0 ? minHeightWhenNoItemsRendered : minHeight,\n overflowY: 'auto',\n position: 'relative',\n width: '100%'\n }}\n className='pContainer variableHeightVirtualizer'\n data-total-records={totalItemCount}\n >\n {renderHeader && renderHeader()}\n <div\n className='bContainer'\n ref={bufferContainerRef}\n style={{ height: totalBufferHeight, position: 'relative' }}\n >\n {isDataFetching && !isForceRefreshedPagination && (\n <StyledLoader\n $style={{\n top: '--above-loader-top',\n left: '--loader-left'\n }}\n >\n <Progress\n className='above-loader'\n placement='block'\n tabIndex={0}\n aria-label={translate('Loading more results')}\n />\n </StyledLoader>\n )}\n\n <div\n ref={itemContainerRef}\n style={{\n position: 'absolute',\n left: 0,\n width: '100%',\n height: `${itemContainerHeight}px`\n }}\n className={`${itemContainerClass} row-container`}\n >\n {children}\n </div>\n\n {isDataFetching && !isForceRefreshedPagination && (\n <StyledLoader\n $style={{\n top: '--below-loader-top',\n left: '--loader-left'\n }}\n >\n <Progress\n className='below-loader'\n placement='block'\n tabIndex={0}\n aria-label={translate('Loading more results')}\n />\n </StyledLoader>\n )}\n </div>\n {virtualizedCount === 0 && !isDataFetching && renderEmptyRecords\n ? renderEmptyRecords()\n : null}\n {renderFooter && renderFooter()}\n </div>\n );\n }\n);\n\nVariableHeightVirtualizer.displayName = 'VariableHeightVirtualizer';\n\nexport default VariableHeightVirtualizer;\n"]}
1
+ {"version":3,"file":"VariableHeightVirtualizer.js","sourceRoot":"","sources":["../../../../../Core/Components/Virtualise/VariableHeightVirtualizer/VariableHeightVirtualizer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useRef,\n useEffect,\n useState,\n useCallback,\n useLayoutEffect,\n forwardRef,\n useImperativeHandle,\n useMemo\n} from 'react';\nimport type { ReactNode, ForwardedRef } from 'react';\nimport Styled from 'styled-components';\n\nimport { Progress } from '@pega/cosmos-react-core';\n\nimport useResizeObserver from '../UseResizeObserver';\nimport useTranslate from '../../../Hooks/useTranslate';\n\nimport useChildrenHeightResizeObserver from './useChildrenHeightResizeObserver';\nimport useLoaderPositioning from './useLoaderPositioning';\nimport usePagination from './usePagination';\nimport useScroll from './useScroll';\nimport useVirtualizerItemCount from './useVirtualizerItemCount';\nimport {\n calculateCumulativeItemSizeChange,\n getMaxHeight,\n isViewNotFilled,\n calculateTotalBufferHeight,\n getChangedItemsHeight,\n updateItemPositionStyles\n} from './utils';\n\nexport interface ItemsHeight {\n [index: number]: number;\n}\n\nexport interface LoadedDataRange {\n startIndex?: number;\n endIndex?: number;\n}\n\ninterface StyledLoaderProps {\n $style: {\n top: string;\n left: string;\n };\n}\n\nexport interface VariableHeightVirtualizerProps {\n /** Unique identifier for the virtualizer instance. */\n id: string;\n /** The React children elements to render inside the virtualizer. */\n children: ReactNode;\n /** Callback to fetch paginated data. */\n apiCallback: (\n params: { startIndex: number; endIndex: number; id: string },\n options: { takeLatestAction: boolean }\n ) => void;\n /** Indicates if data is currently being fetched. */\n isDataFetching: boolean;\n /** Range of data that is already loaded. */\n loadedDataRange: LoadedDataRange;\n /** Default height for items if not measured. */\n defaultItemHeight?: number;\n /** Total number of items in the list. */\n totalItemCount?: number | null;\n /** Number of items to buffer before/after the visible range. */\n buffer?: number;\n /** Maximum number of items to render at once. */\n maxItemsToPaint?: number;\n /** Function to render the header. */\n renderHeader?: (() => ReactNode) | null;\n /** Function to render the footer. */\n renderFooter?: (() => ReactNode) | null;\n /** Function to render the no-result state. */\n renderEmptyRecords?: (() => ReactNode) | null;\n /** CSS class for the item container. */\n itemContainerClass?: string;\n /** Maximum height for the view container. */\n viewMaxHeight?: string | number | null;\n /** Minimum height for the view container. */\n minHeight?: string | number;\n /** Minimum height when no items are rendered. */\n minHeightWhenNoItemsRendered?: string;\n}\n\ninterface VirtualizerRef {\n /** Scrolls the parent container to the top. */\n scrollToTop: () => void;\n /** Returns the parent container element. */\n getParentContainer: () => HTMLElement | null;\n /** Returns the buffer container element. */\n getBufferContainer: () => HTMLElement | null;\n /** Triggers a count change notification. */\n notifyCountChange: () => void;\n}\n\nconst StyledLoader = Styled.div<StyledLoaderProps>`\n display: flex;\n justify-content: center;\n padding: 0.5rem;\n position: absolute;\n width: var(--container-width);\n left: ${props => `var(${props.$style.left})`};\n top: ${props => `var(${props.$style.top})`};\n width: 100%;\n`;\n\n/**\n * Flow:\n * 1. First load/user scrolls/screen size change/column resize\n * 2. Calculate new pagination range based on scroll position or if view not filled\n * 3. Consumer executes API call to fetch new data\n * 4. New items are prepared and rendered\n * 5. Update cache of item heights\n * 6. Update buffer height\n * 7. Adjust itemContainer top\n * 8. Adjust scrollTop (if needed) to keep the items at same position visually\n */\n\n/**\n * VariableHeightVirtualizer is a React component that efficiently renders large lists with items of variable heights,\n * using virtualization techniques to minimize DOM nodes and improve performance.\n *\n * @param props - {@link VariableHeightVirtualizerProps}\n * @param ref - Forwarded ref exposing imperative APIs: scrollToTop, getParentContainer, getBufferContainer, notifyCountChange.\n *\n * @example\n * ```tsx\n * <VariableHeightVirtualizer\n * id=\"my-list\"\n * totalItemCount={10000}\n * loadedDataRange={{ startIndex: 0, endIndex: 49 }}\n * isDataFetching={isLoading}\n * apiCallback={fetchData}\n * defaultItemHeight={40}\n * buffer={10}\n * renderHeader={() => <Header />}\n * renderFooter={() => <Footer />}\n * renderEmptyRecords={() => <NoResults />}\n * >\n * {items.map(item => <ListItem key={item.id} {...item} />)}\n * </VariableHeightVirtualizer>\n * ```\n */\nconst VariableHeightVirtualizer = forwardRef<VirtualizerRef, VariableHeightVirtualizerProps>(\n (\n {\n id,\n children,\n buffer = 15,\n apiCallback,\n loadedDataRange = {},\n defaultItemHeight = 30,\n totalItemCount,\n maxItemsToPaint = 5000,\n renderHeader = null,\n renderFooter = null,\n renderEmptyRecords = null,\n itemContainerClass = '',\n viewMaxHeight = null,\n minHeight = 'auto',\n isDataFetching = false,\n minHeightWhenNoItemsRendered = 'auto'\n },\n ref: ForwardedRef<VirtualizerRef>\n ) => {\n const [startIndex, setStartIndex] = useState<number>(0);\n const [endIndex, setEndIndex] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n const [totalBufferHeight, setTotalBufferHeight] = useState<number>(0);\n const [itemsHeight, setItemsHeight] = useState<ItemsHeight>({});\n const [itemContainerHeight, setItemContainerHeight] = useState<number>(0);\n\n const [countChangeTrigger, setCountChangeTrigger] = useState<number>(0);\n const [itemHeightChangeTrigger, setItemHeightChangeTrigger] = useState<number>(0);\n const [parentContainerDimensionChangeTrigger, setParentContainerDimensionChangeTrigger] =\n useState<number>(0);\n\n const parentContainerRef = useRef<HTMLDivElement>(null);\n const bufferContainerRef = useRef<HTMLDivElement>(null);\n const itemContainerRef = useRef<HTMLDivElement>(null);\n const previousItemsHeightRef = useRef<ItemsHeight>({});\n const previousFirstItemDataIndexRef = useRef<number | null>(null);\n\n const [translate] = useTranslate();\n\n const onParentContainerDimensionUpdate = useCallback(() => {\n const { height: parentContainerHeight, width: parentContainerWidth } =\n parentContainerRef.current?.getBoundingClientRect() ?? {};\n // trigger virtualizer operations only when the container has some height and width\n if (parentContainerHeight && parentContainerWidth) {\n setParentContainerDimensionChangeTrigger(value => value + 1);\n }\n }, []);\n\n const getParentContainer = useCallback(\n (): HTMLDivElement | null => parentContainerRef.current,\n []\n );\n useResizeObserver(getParentContainer, onParentContainerDimensionUpdate);\n\n const { isInfiniteMode, virtualizedCount } = useVirtualizerItemCount({\n totalItemCount,\n startIndex,\n endIndex,\n loadedDataRange,\n isDataFetching,\n itemContainerRef,\n children,\n buffer,\n countResetSignal: countChangeTrigger\n });\n\n const { triggerPagination, isForceRefreshedPagination } = usePagination({\n apiCallback,\n id,\n buffer,\n maxItemsToPaint,\n startIndex,\n endIndex,\n virtualizedCount,\n isInfiniteMode,\n itemsHeight,\n defaultItemHeight,\n parentContainerRef,\n itemContainerRef,\n setStartIndex,\n setEndIndex,\n previousFirstItemDataIndexRef\n });\n\n // Listens to the scroll events and trigger pagination when more records are needed to enable smooth scrolling\n useScroll({\n parentContainerRef,\n itemContainerRef,\n onThresholdBreach: (sTop: number) => {\n setScrollTop(sTop);\n triggerPagination(sTop);\n },\n delay: 150\n });\n\n // Expose APIs to the consumer\n useImperativeHandle(\n ref,\n (): VirtualizerRef => ({\n scrollToTop: () => {\n if (parentContainerRef.current) {\n parentContainerRef.current.scrollTop = 0;\n setScrollTop(0);\n\n triggerPagination(0, true);\n }\n },\n getParentContainer: () => parentContainerRef.current,\n getBufferContainer: () => itemContainerRef.current,\n notifyCountChange: () => setCountChangeTrigger(value => value + 1)\n })\n );\n\n // Measure height of rendered items and cache the heights\n useLayoutEffect(() => {\n if (!itemContainerRef.current) return;\n\n const newHeights = getChangedItemsHeight(\n itemContainerRef.current,\n itemsHeight,\n defaultItemHeight\n );\n if (Object.keys(newHeights).length > 0) {\n setItemsHeight((prev: ItemsHeight) => ({ ...prev, ...newHeights }));\n }\n }, [\n startIndex,\n itemsHeight,\n children,\n isDataFetching,\n defaultItemHeight,\n itemHeightChangeTrigger\n ]);\n\n // buffer height calculation\n useLayoutEffect(() => {\n const newBufferHeight = calculateTotalBufferHeight(\n virtualizedCount,\n itemsHeight,\n defaultItemHeight\n );\n\n if (newBufferHeight !== totalBufferHeight) {\n setTotalBufferHeight(newBufferHeight);\n }\n }, [itemsHeight, virtualizedCount, defaultItemHeight, totalBufferHeight]);\n\n // itemContainer size and position adjustments\n useLayoutEffect(() => {\n if (!itemContainerRef.current) return;\n\n setItemContainerHeight(\n updateItemPositionStyles(itemContainerRef.current, itemsHeight, defaultItemHeight)\n );\n }, [children, itemsHeight, defaultItemHeight]);\n\n // scroll position adjustment if rendered height is different than estimated height\n useLayoutEffect(() => {\n if (!parentContainerRef.current) return;\n\n const atTop = parentContainerRef.current.scrollTop === 0;\n if (!atTop) {\n const delta = calculateCumulativeItemSizeChange(\n startIndex,\n previousFirstItemDataIndexRef.current,\n itemsHeight,\n previousItemsHeightRef.current,\n defaultItemHeight\n );\n\n if (delta !== 0) {\n parentContainerRef.current.scrollTop += delta;\n }\n }\n\n previousItemsHeightRef.current = { ...itemsHeight };\n }, [startIndex, itemsHeight, defaultItemHeight]);\n\n // Adjust loader positions\n useLoaderPositioning({\n isDataFetching,\n parentContainerRef,\n itemContainerRef,\n children,\n itemsHeight,\n defaultItemHeight\n });\n\n // Initial pagination trigger and subsequent triggers if the view is not completely filled\n useEffect(() => {\n // If consumer already has data for initial items, then no need to trigger pagination. Just hydrate the internal state in sync with existing data.\n if (\n !endIndex &&\n loadedDataRange.startIndex !== undefined &&\n loadedDataRange.startIndex >= 0 &&\n loadedDataRange.endIndex !== undefined &&\n loadedDataRange.endIndex >= 0\n ) {\n setStartIndex(loadedDataRange.startIndex);\n setEndIndex(loadedDataRange.endIndex);\n return;\n }\n\n // If the consumer doesn't have data or view not filled then trigger pagination\n if (\n !isDataFetching &&\n (!endIndex ||\n (itemContainerRef.current &&\n parentContainerRef.current &&\n isViewNotFilled(\n virtualizedCount,\n itemContainerRef.current,\n parentContainerRef.current,\n !!renderHeader\n )))\n ) {\n triggerPagination(scrollTop);\n }\n }, [\n loadedDataRange,\n scrollTop,\n virtualizedCount,\n endIndex,\n triggerPagination,\n parentContainerDimensionChangeTrigger,\n isDataFetching,\n renderHeader\n ]);\n\n // Resize observer on items to track height changes\n const onItemsHeightUpdate = useCallback(() => {\n setItemHeightChangeTrigger(value => value + 1);\n }, []);\n useChildrenHeightResizeObserver({\n childrenContainerRef: itemContainerRef,\n children,\n itemsHeight,\n defaultItemHeight,\n onItemsHeightUpdate\n });\n\n const maxHeight = useMemo((): string => getMaxHeight(viewMaxHeight), [viewMaxHeight]);\n\n return (\n <div\n ref={parentContainerRef}\n style={{\n maxHeight,\n minHeight: virtualizedCount === 0 ? minHeightWhenNoItemsRendered : minHeight,\n overflowY: 'auto',\n position: 'relative',\n width: '100%'\n }}\n className='pContainer variableHeightVirtualizer'\n data-total-records={totalItemCount}\n >\n {renderHeader && renderHeader()}\n <div\n className='bContainer'\n ref={bufferContainerRef}\n style={{ height: totalBufferHeight, position: 'relative' }}\n >\n {isDataFetching && !isForceRefreshedPagination && (\n <StyledLoader\n $style={{\n top: '--above-loader-top',\n left: '--loader-left'\n }}\n >\n <Progress\n className='above-loader'\n placement='block'\n tabIndex={0}\n aria-label={translate('Loading more results')}\n />\n </StyledLoader>\n )}\n\n <div\n ref={itemContainerRef}\n style={{\n position: 'absolute',\n left: 0,\n width: '100%',\n height: `${itemContainerHeight}px`\n }}\n className={`${itemContainerClass} row-container`}\n >\n {totalItemCount === 0 && !isDataFetching ? null : children}\n </div>\n\n {isDataFetching && !isForceRefreshedPagination && (\n <StyledLoader\n $style={{\n top: '--below-loader-top',\n left: '--loader-left'\n }}\n >\n <Progress\n className='below-loader'\n placement='block'\n tabIndex={0}\n aria-label={translate('Loading more results')}\n />\n </StyledLoader>\n )}\n </div>\n {virtualizedCount === 0 && !isDataFetching && renderEmptyRecords\n ? renderEmptyRecords()\n : null}\n {renderFooter && renderFooter()}\n </div>\n );\n }\n);\n\nVariableHeightVirtualizer.displayName = 'VariableHeightVirtualizer';\n\nexport default VariableHeightVirtualizer;\n"]}
@@ -23,7 +23,7 @@ interface GetVirtualizedPaginationIndicesParams {
23
23
  /**
24
24
  * Calculates the start and end indices for virtualized pagination in a variable-height list.
25
25
  *
26
- * @returns {{ startIndex: number, endIndex: number }} Object containing the calculated start and end indices for rendering (inclusive both indices).
26
+ * @returns Object containing the calculated start and end indices for rendering (inclusive both indices).
27
27
  */
28
28
  export declare const getVirtualizedPaginationIndices: (param: GetVirtualizedPaginationIndicesParams) => {
29
29
  startIndex: number;
@@ -3,7 +3,7 @@ import { isInstance } from '@pega/cosmos-react-core';
3
3
  /**
4
4
  * Calculates the start and end indices for virtualized pagination in a variable-height list.
5
5
  *
6
- * @returns {{ startIndex: number, endIndex: number }} Object containing the calculated start and end indices for rendering (inclusive both indices).
6
+ * @returns Object containing the calculated start and end indices for rendering (inclusive both indices).
7
7
  */
8
8
  export const getVirtualizedPaginationIndices = (param) => {
9
9
  const { totalItemCount, buffer, itemContainerRef, scrollTop, containerRef, itemsHeight, defaultItemHeight, endIndexLimit, isInfiniteMode } = param;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../Core/Components/Virtualise/VariableHeightVirtualizer/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RefObject } from 'react';\n\nimport { getScrollbarWidth } from 'pega-repeating-structures-core';\nimport { isInstance } from '@pega/cosmos-react-core';\n\nimport type { ItemsHeight } from './VariableHeightVirtualizer';\n\ninterface GetVirtualizedPaginationIndicesParams {\n /** Current vertical scroll offset of the container. */\n scrollTop: number;\n /** Ref to the scrolling container element */\n containerRef: RefObject<HTMLDivElement>;\n /** Ref to the container holding the list items */\n itemContainerRef: RefObject<HTMLDivElement>;\n\n /** Total number of items. */\n totalItemCount: number;\n /** Mapping of item indices and their actual height. */\n itemsHeight: ItemsHeight;\n /** Default height for items if not measured. */\n defaultItemHeight: number;\n\n /** Number of extra items to render above and below the visible viewport for smooth scrolling. */\n buffer: number;\n /** Maximum allowed end index (exclusive). */\n endIndexLimit: number;\n /** If true, allows indices to exceed totalCount for infinite scrolling by including buffer. */\n isInfiniteMode?: boolean;\n}\n\n/**\n * Calculates the start and end indices for virtualized pagination in a variable-height list.\n *\n * @returns {{ startIndex: number, endIndex: number }} Object containing the calculated start and end indices for rendering (inclusive both indices).\n */\nexport const getVirtualizedPaginationIndices = (\n param: GetVirtualizedPaginationIndicesParams\n): { startIndex: number; endIndex: number } => {\n const {\n totalItemCount,\n buffer,\n itemContainerRef,\n scrollTop,\n containerRef,\n itemsHeight,\n defaultItemHeight,\n endIndexLimit,\n isInfiniteMode\n } = param;\n\n const minimumItemsToFetchOnTop = buffer * 4;\n if (totalItemCount === 0 || itemContainerRef.current?.childElementCount === 0) {\n return { startIndex: 0, endIndex: minimumItemsToFetchOnTop };\n }\n\n const viewportHeight = containerRef.current?.clientHeight || 0;\n\n // Find the first visible item index for the current scroll position\n let aboveTheFoldItemsHeight = 0;\n let visibleStartIndex = 0;\n while (\n visibleStartIndex < totalItemCount &&\n aboveTheFoldItemsHeight + (itemsHeight[visibleStartIndex] ?? defaultItemHeight) < scrollTop\n ) {\n aboveTheFoldItemsHeight += itemsHeight[visibleStartIndex] ?? defaultItemHeight;\n visibleStartIndex += 1;\n }\n\n // Find the last visible item index for the current scroll position\n let inViewItemsHeight = 0;\n let visibleEndIndex = visibleStartIndex;\n while (visibleEndIndex < totalItemCount && inViewItemsHeight < viewportHeight) {\n inViewItemsHeight += itemsHeight[visibleEndIndex] ?? defaultItemHeight;\n visibleEndIndex += 1;\n }\n\n const startIndex = Math.max(0, visibleStartIndex - buffer);\n let endIndex = Math.min(visibleEndIndex + buffer, endIndexLimit - 1);\n if (isInfiniteMode) {\n endIndex = Math.max(endIndex, minimumItemsToFetchOnTop);\n } else {\n // In cases where the count is very less due to filters, we would fetch more items to avoid unnecessary API calls if the count after the filter removed is more\n endIndex = Math.max(Math.min(totalItemCount - 1, endIndex), minimumItemsToFetchOnTop);\n }\n return { startIndex, endIndex };\n};\n\n/**\n * Calculates the total buffer height for a list of items, using their individual heights if available,\n * or a default height otherwise.\n *\n * @param totalItemCount - The total number of items in the list.\n * @param itemsHeight - An object or array containing the heights of individual items, indexed by item position.\n * @param defaultItemHeight - The default height to use for items whose height is not specified in `itemsHeight`.\n * @returns The sum of all item heights, using the default height for any missing values.\n */\nexport const calculateTotalBufferHeight = (\n totalItemCount: number,\n itemsHeight: ItemsHeight,\n defaultItemHeight: number\n): number => {\n let totalBufferHeight = 0;\n for (let i = 0; i < totalItemCount; i += 1) {\n totalBufferHeight += itemsHeight[i] || defaultItemHeight;\n }\n\n return totalBufferHeight;\n};\n\n/**\n * Returns a CSS-compatible max-height value based on the input.\n *\n * @param viewMaxHeight - The maximum height value, which can be a number (pixels), a string (CSS value), or `null`.\n * @returns A string representing the CSS max-height value.\n */\nexport const getMaxHeight = (viewMaxHeight: number | string | null): string => {\n if (!viewMaxHeight) return 'none';\n return typeof viewMaxHeight === 'number' ? `${viewMaxHeight}px` : viewMaxHeight;\n};\n\n/**\n * Calculates the vertical offset for a given item index in a list with variable item heights.\n *\n * @param index - The index of the item for which to calculate the offset.\n * @param itemsHeight - Mapping of item indices and their actual height.\n * @param defaultItemHeight - The default height to use for items not present in the cache.\n * @returns The total offset (in pixels) from the top of the list to the specified index.\n */\nexport const getOffsetForIndex = (\n index: number,\n itemsHeight: ItemsHeight,\n defaultItemHeight: number\n): number => {\n let offset = 0;\n\n for (let i = 0; i < index; i += 1) {\n offset += itemsHeight[i] ?? defaultItemHeight;\n }\n return offset;\n};\n\n/**\n * Determines whether the viewable area of a virtualized list is not fully filled with rendered items.\n *\n * @param totalItemCount - The total number of items that should be rendered.\n * @param itemContainer - The HTML element containing the rendered items.\n * @param parentContainer - The parent HTML element that contains the items and possibly the header.\n * @param renderHeader - Indicates whether a header is rendered at the top of the parent container.\n * @returns `true` if the view is not filled with all items, `false` otherwise.\n */\nexport const isViewNotFilled = (\n totalItemCount: number,\n itemContainer: HTMLDivElement,\n parentContainer: HTMLDivElement,\n renderHeader: boolean\n): boolean => {\n const parentContainerPosition = parentContainer.getBoundingClientRect();\n let headerHeight = 0;\n if (renderHeader && parentContainer.childElementCount > 1) {\n const firstChild = parentContainer.children[0];\n if (isInstance(firstChild, HTMLDivElement)) {\n headerHeight = firstChild.offsetHeight;\n }\n }\n\n const scrollbarWidth = getScrollbarWidth();\n const items = Array.from(itemContainer.children);\n\n if (!items.length && !totalItemCount) return false;\n if (!items.length && totalItemCount) return true;\n\n return (\n !!totalItemCount &&\n items.length !== totalItemCount &&\n (Math.floor(items[items.length - 1].getBoundingClientRect().bottom) <\n Math.floor(parentContainerPosition.bottom - scrollbarWidth) ||\n Math.floor(items[0].getBoundingClientRect().top) >\n Math.floor(parentContainerPosition.top + headerHeight) ||\n items.length === 0)\n );\n};\n\n/**\n * Retrieves the numeric data index from the `data-index` attribute of a given Element.\n *\n * @param element - The Element from which to extract the data index.\n * @returns The parsed integer value of the `data-index` attribute, or `null` if the attribute is not present.\n */\nexport const getDataIndex = (element: Element): number | null => {\n const dataIndexStr = element?.getAttribute('data-index');\n if (!dataIndexStr) return null;\n const parsedDataIndex = parseInt(dataIndexStr, 10);\n return Number.isNaN(parsedDataIndex) ? null : parsedDataIndex;\n};\n\n/**\n * Calculates and returns an object containing the heights of items whose heights have changed\n * compared to their previous values.\n *\n * @param itemContainer - The container HTMLElement whose child nodes represent items to measure.\n * @param itemsHeight - An object mapping item indices to their measured heights.\n * @param defaultItemHeight - The default height to use for items not present in `itemsHeight`.\n * @returns An object mapping item indices to their new heights for items whose heights have changed.\n */\nexport function getChangedItemsHeight(\n itemContainer: HTMLDivElement,\n itemsHeight: ItemsHeight,\n defaultItemHeight: number\n): ItemsHeight {\n if (!itemContainer) return {};\n\n const newHeights: ItemsHeight = {};\n const nodes = Array.from(itemContainer.children);\n\n nodes.forEach(node => {\n const itemDataIndex = getDataIndex(node);\n if (itemDataIndex === null) return;\n\n const measuredHeight = node.getBoundingClientRect().height;\n const prevHeight = itemsHeight[itemDataIndex] ?? defaultItemHeight;\n if (measuredHeight !== prevHeight) {\n newHeights[itemDataIndex] = measuredHeight;\n }\n });\n\n return newHeights;\n}\n\n/**\n * Calculates the cumulative change in item heights between two sets of item height data,\n * for a range of items starting from `startIndex` up to (but not including) `previousFirstItemDataIndex`.\n *\n * This function compares the current heights (`itemsHeight`) with the previous heights (`previousItemsHeight`)\n * for each item in the specified range, using `defaultItemHeight` as a fallback if a previous height is missing.\n * The result is the sum of the differences in height for all items in the range.\n *\n * @param startIndex - The index at which to start calculating the cumulative height change.\n * @param previousFirstItemDataIndex - The index up to which to calculate (exclusive). If `null` or less than or equal to 0, returns 0.\n * @param itemsHeight - An object mapping item indices to their measured heights.\n * @param previousItemsHeight - An object mapping item indices of previously rendered items to their heights.\n * @param defaultItemHeight - The default height to use if a previous height is not available.\n * @returns The cumulative change in item heights for the specified range, or 0 if the result is not finite.\n */\nexport const calculateCumulativeItemSizeChange = (\n startIndex: number,\n previousFirstItemDataIndex: number | null,\n itemsHeight: ItemsHeight,\n previousItemsHeight: ItemsHeight,\n defaultItemHeight: number\n): number => {\n if (previousFirstItemDataIndex === null || previousFirstItemDataIndex <= 0) {\n return 0;\n }\n\n let delta = 0;\n\n for (let i = startIndex; i < previousFirstItemDataIndex; i += 1) {\n const actualHeight = itemsHeight[i];\n const previousHeight = previousItemsHeight[i] ?? defaultItemHeight;\n\n if (actualHeight !== null && actualHeight !== undefined) {\n delta += actualHeight - previousHeight;\n }\n }\n\n return Number.isFinite(delta) ? delta : 0;\n};\n\n/**\n * Updates the position styles of child items within a container element to enable virtualized rendering.\n * Sets the container's top offset and positions each child absolutely based on their calculated heights.\n *\n * @param itemContainer - The HTML element containing the list items to be positioned.\n * @param itemsHeight - An object mapping item indices to their measured heights.\n * @param defaultItemHeight - The default height to use for items without a specified height.\n * @returns The total height of all items within the container, rounded down to the nearest integer.\n */\nexport const updateItemPositionStyles = (\n itemContainer: HTMLDivElement,\n itemsHeight: ItemsHeight,\n defaultItemHeight: number\n): number => {\n const items = itemContainer.children;\n if (!items?.length) {\n return 0;\n }\n\n const firstItemDataIndex = getDataIndex(items[0]);\n if (firstItemDataIndex === null) return 0;\n\n const offset = getOffsetForIndex(firstItemDataIndex, itemsHeight, defaultItemHeight);\n itemContainer.style.top = `${offset}px`;\n\n let itemContainerCurrentHeight = 0;\n let currentItemIndex = firstItemDataIndex;\n Array.from(items).forEach(item => {\n if (!isInstance(item, HTMLDivElement)) return;\n\n item.style.position = 'absolute';\n item.style.top = `${itemContainerCurrentHeight}px`;\n itemContainerCurrentHeight += itemsHeight[currentItemIndex] ?? defaultItemHeight;\n currentItemIndex += 1;\n });\n\n return Math.floor(itemContainerCurrentHeight);\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../Core/Components/Virtualise/VariableHeightVirtualizer/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RefObject } from 'react';\n\nimport { getScrollbarWidth } from 'pega-repeating-structures-core';\nimport { isInstance } from '@pega/cosmos-react-core';\n\nimport type { ItemsHeight } from './VariableHeightVirtualizer';\n\ninterface GetVirtualizedPaginationIndicesParams {\n /** Current vertical scroll offset of the container. */\n scrollTop: number;\n /** Ref to the scrolling container element */\n containerRef: RefObject<HTMLDivElement>;\n /** Ref to the container holding the list items */\n itemContainerRef: RefObject<HTMLDivElement>;\n\n /** Total number of items. */\n totalItemCount: number;\n /** Mapping of item indices and their actual height. */\n itemsHeight: ItemsHeight;\n /** Default height for items if not measured. */\n defaultItemHeight: number;\n\n /** Number of extra items to render above and below the visible viewport for smooth scrolling. */\n buffer: number;\n /** Maximum allowed end index (exclusive). */\n endIndexLimit: number;\n /** If true, allows indices to exceed totalCount for infinite scrolling by including buffer. */\n isInfiniteMode?: boolean;\n}\n\n/**\n * Calculates the start and end indices for virtualized pagination in a variable-height list.\n *\n * @returns Object containing the calculated start and end indices for rendering (inclusive both indices).\n */\nexport const getVirtualizedPaginationIndices = (\n param: GetVirtualizedPaginationIndicesParams\n): { startIndex: number; endIndex: number } => {\n const {\n totalItemCount,\n buffer,\n itemContainerRef,\n scrollTop,\n containerRef,\n itemsHeight,\n defaultItemHeight,\n endIndexLimit,\n isInfiniteMode\n } = param;\n\n const minimumItemsToFetchOnTop = buffer * 4;\n if (totalItemCount === 0 || itemContainerRef.current?.childElementCount === 0) {\n return { startIndex: 0, endIndex: minimumItemsToFetchOnTop };\n }\n\n const viewportHeight = containerRef.current?.clientHeight || 0;\n\n // Find the first visible item index for the current scroll position\n let aboveTheFoldItemsHeight = 0;\n let visibleStartIndex = 0;\n while (\n visibleStartIndex < totalItemCount &&\n aboveTheFoldItemsHeight + (itemsHeight[visibleStartIndex] ?? defaultItemHeight) < scrollTop\n ) {\n aboveTheFoldItemsHeight += itemsHeight[visibleStartIndex] ?? defaultItemHeight;\n visibleStartIndex += 1;\n }\n\n // Find the last visible item index for the current scroll position\n let inViewItemsHeight = 0;\n let visibleEndIndex = visibleStartIndex;\n while (visibleEndIndex < totalItemCount && inViewItemsHeight < viewportHeight) {\n inViewItemsHeight += itemsHeight[visibleEndIndex] ?? defaultItemHeight;\n visibleEndIndex += 1;\n }\n\n const startIndex = Math.max(0, visibleStartIndex - buffer);\n let endIndex = Math.min(visibleEndIndex + buffer, endIndexLimit - 1);\n if (isInfiniteMode) {\n endIndex = Math.max(endIndex, minimumItemsToFetchOnTop);\n } else {\n // In cases where the count is very less due to filters, we would fetch more items to avoid unnecessary API calls if the count after the filter removed is more\n endIndex = Math.max(Math.min(totalItemCount - 1, endIndex), minimumItemsToFetchOnTop);\n }\n return { startIndex, endIndex };\n};\n\n/**\n * Calculates the total buffer height for a list of items, using their individual heights if available,\n * or a default height otherwise.\n *\n * @param totalItemCount - The total number of items in the list.\n * @param itemsHeight - An object or array containing the heights of individual items, indexed by item position.\n * @param defaultItemHeight - The default height to use for items whose height is not specified in `itemsHeight`.\n * @returns The sum of all item heights, using the default height for any missing values.\n */\nexport const calculateTotalBufferHeight = (\n totalItemCount: number,\n itemsHeight: ItemsHeight,\n defaultItemHeight: number\n): number => {\n let totalBufferHeight = 0;\n for (let i = 0; i < totalItemCount; i += 1) {\n totalBufferHeight += itemsHeight[i] || defaultItemHeight;\n }\n\n return totalBufferHeight;\n};\n\n/**\n * Returns a CSS-compatible max-height value based on the input.\n *\n * @param viewMaxHeight - The maximum height value, which can be a number (pixels), a string (CSS value), or `null`.\n * @returns A string representing the CSS max-height value.\n */\nexport const getMaxHeight = (viewMaxHeight: number | string | null): string => {\n if (!viewMaxHeight) return 'none';\n return typeof viewMaxHeight === 'number' ? `${viewMaxHeight}px` : viewMaxHeight;\n};\n\n/**\n * Calculates the vertical offset for a given item index in a list with variable item heights.\n *\n * @param index - The index of the item for which to calculate the offset.\n * @param itemsHeight - Mapping of item indices and their actual height.\n * @param defaultItemHeight - The default height to use for items not present in the cache.\n * @returns The total offset (in pixels) from the top of the list to the specified index.\n */\nexport const getOffsetForIndex = (\n index: number,\n itemsHeight: ItemsHeight,\n defaultItemHeight: number\n): number => {\n let offset = 0;\n\n for (let i = 0; i < index; i += 1) {\n offset += itemsHeight[i] ?? defaultItemHeight;\n }\n return offset;\n};\n\n/**\n * Determines whether the viewable area of a virtualized list is not fully filled with rendered items.\n *\n * @param totalItemCount - The total number of items that should be rendered.\n * @param itemContainer - The HTML element containing the rendered items.\n * @param parentContainer - The parent HTML element that contains the items and possibly the header.\n * @param renderHeader - Indicates whether a header is rendered at the top of the parent container.\n * @returns `true` if the view is not filled with all items, `false` otherwise.\n */\nexport const isViewNotFilled = (\n totalItemCount: number,\n itemContainer: HTMLDivElement,\n parentContainer: HTMLDivElement,\n renderHeader: boolean\n): boolean => {\n const parentContainerPosition = parentContainer.getBoundingClientRect();\n let headerHeight = 0;\n if (renderHeader && parentContainer.childElementCount > 1) {\n const firstChild = parentContainer.children[0];\n if (isInstance(firstChild, HTMLDivElement)) {\n headerHeight = firstChild.offsetHeight;\n }\n }\n\n const scrollbarWidth = getScrollbarWidth();\n const items = Array.from(itemContainer.children);\n\n if (!items.length && !totalItemCount) return false;\n if (!items.length && totalItemCount) return true;\n\n return (\n !!totalItemCount &&\n items.length !== totalItemCount &&\n (Math.floor(items[items.length - 1].getBoundingClientRect().bottom) <\n Math.floor(parentContainerPosition.bottom - scrollbarWidth) ||\n Math.floor(items[0].getBoundingClientRect().top) >\n Math.floor(parentContainerPosition.top + headerHeight) ||\n items.length === 0)\n );\n};\n\n/**\n * Retrieves the numeric data index from the `data-index` attribute of a given Element.\n *\n * @param element - The Element from which to extract the data index.\n * @returns The parsed integer value of the `data-index` attribute, or `null` if the attribute is not present.\n */\nexport const getDataIndex = (element: Element): number | null => {\n const dataIndexStr = element?.getAttribute('data-index');\n if (!dataIndexStr) return null;\n const parsedDataIndex = parseInt(dataIndexStr, 10);\n return Number.isNaN(parsedDataIndex) ? null : parsedDataIndex;\n};\n\n/**\n * Calculates and returns an object containing the heights of items whose heights have changed\n * compared to their previous values.\n *\n * @param itemContainer - The container HTMLElement whose child nodes represent items to measure.\n * @param itemsHeight - An object mapping item indices to their measured heights.\n * @param defaultItemHeight - The default height to use for items not present in `itemsHeight`.\n * @returns An object mapping item indices to their new heights for items whose heights have changed.\n */\nexport function getChangedItemsHeight(\n itemContainer: HTMLDivElement,\n itemsHeight: ItemsHeight,\n defaultItemHeight: number\n): ItemsHeight {\n if (!itemContainer) return {};\n\n const newHeights: ItemsHeight = {};\n const nodes = Array.from(itemContainer.children);\n\n nodes.forEach(node => {\n const itemDataIndex = getDataIndex(node);\n if (itemDataIndex === null) return;\n\n const measuredHeight = node.getBoundingClientRect().height;\n const prevHeight = itemsHeight[itemDataIndex] ?? defaultItemHeight;\n if (measuredHeight !== prevHeight) {\n newHeights[itemDataIndex] = measuredHeight;\n }\n });\n\n return newHeights;\n}\n\n/**\n * Calculates the cumulative change in item heights between two sets of item height data,\n * for a range of items starting from `startIndex` up to (but not including) `previousFirstItemDataIndex`.\n *\n * This function compares the current heights (`itemsHeight`) with the previous heights (`previousItemsHeight`)\n * for each item in the specified range, using `defaultItemHeight` as a fallback if a previous height is missing.\n * The result is the sum of the differences in height for all items in the range.\n *\n * @param startIndex - The index at which to start calculating the cumulative height change.\n * @param previousFirstItemDataIndex - The index up to which to calculate (exclusive). If `null` or less than or equal to 0, returns 0.\n * @param itemsHeight - An object mapping item indices to their measured heights.\n * @param previousItemsHeight - An object mapping item indices of previously rendered items to their heights.\n * @param defaultItemHeight - The default height to use if a previous height is not available.\n * @returns The cumulative change in item heights for the specified range, or 0 if the result is not finite.\n */\nexport const calculateCumulativeItemSizeChange = (\n startIndex: number,\n previousFirstItemDataIndex: number | null,\n itemsHeight: ItemsHeight,\n previousItemsHeight: ItemsHeight,\n defaultItemHeight: number\n): number => {\n if (previousFirstItemDataIndex === null || previousFirstItemDataIndex <= 0) {\n return 0;\n }\n\n let delta = 0;\n\n for (let i = startIndex; i < previousFirstItemDataIndex; i += 1) {\n const actualHeight = itemsHeight[i];\n const previousHeight = previousItemsHeight[i] ?? defaultItemHeight;\n\n if (actualHeight !== null && actualHeight !== undefined) {\n delta += actualHeight - previousHeight;\n }\n }\n\n return Number.isFinite(delta) ? delta : 0;\n};\n\n/**\n * Updates the position styles of child items within a container element to enable virtualized rendering.\n * Sets the container's top offset and positions each child absolutely based on their calculated heights.\n *\n * @param itemContainer - The HTML element containing the list items to be positioned.\n * @param itemsHeight - An object mapping item indices to their measured heights.\n * @param defaultItemHeight - The default height to use for items without a specified height.\n * @returns The total height of all items within the container, rounded down to the nearest integer.\n */\nexport const updateItemPositionStyles = (\n itemContainer: HTMLDivElement,\n itemsHeight: ItemsHeight,\n defaultItemHeight: number\n): number => {\n const items = itemContainer.children;\n if (!items?.length) {\n return 0;\n }\n\n const firstItemDataIndex = getDataIndex(items[0]);\n if (firstItemDataIndex === null) return 0;\n\n const offset = getOffsetForIndex(firstItemDataIndex, itemsHeight, defaultItemHeight);\n itemContainer.style.top = `${offset}px`;\n\n let itemContainerCurrentHeight = 0;\n let currentItemIndex = firstItemDataIndex;\n Array.from(items).forEach(item => {\n if (!isInstance(item, HTMLDivElement)) return;\n\n item.style.position = 'absolute';\n item.style.top = `${itemContainerCurrentHeight}px`;\n itemContainerCurrentHeight += itemsHeight[currentItemIndex] ?? defaultItemHeight;\n currentItemIndex += 1;\n });\n\n return Math.floor(itemContainerCurrentHeight);\n};\n"]}