@pega/lists-core 9.0.0-build.2.9 → 9.0.0-build.20.1

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 (169) hide show
  1. package/lib/index.d.ts +2 -2
  2. package/lib/index.d.ts.map +1 -1
  3. package/lib/index.js +2 -2
  4. package/lib/index.js.map +1 -1
  5. package/lib/src/core/StateResolver.d.ts.map +1 -1
  6. package/lib/src/core/StateResolver.js +6 -2
  7. package/lib/src/core/StateResolver.js.map +1 -1
  8. package/lib/src/core/a11y/BaseA11y.d.ts +11 -0
  9. package/lib/src/core/a11y/BaseA11y.d.ts.map +1 -1
  10. package/lib/src/core/a11y/BaseA11y.js +17 -0
  11. package/lib/src/core/a11y/BaseA11y.js.map +1 -1
  12. package/lib/src/core/actions/actionConstants.d.ts +1 -3
  13. package/lib/src/core/actions/actionConstants.d.ts.map +1 -1
  14. package/lib/src/core/actions/actionConstants.js +1 -3
  15. package/lib/src/core/actions/actionConstants.js.map +1 -1
  16. package/lib/src/core/actions/actions.d.ts +6 -18
  17. package/lib/src/core/actions/actions.d.ts.map +1 -1
  18. package/lib/src/core/actions/actions.js +7 -25
  19. package/lib/src/core/actions/actions.js.map +1 -1
  20. package/lib/src/core/actions/actions.types.d.ts +8 -17
  21. package/lib/src/core/actions/actions.types.d.ts.map +1 -1
  22. package/lib/src/core/actions/actions.types.js.map +1 -1
  23. package/lib/src/core/config/config.d.ts.map +1 -1
  24. package/lib/src/core/config/config.js +2 -1
  25. package/lib/src/core/config/config.js.map +1 -1
  26. package/lib/src/core/constants.d.ts +11 -101
  27. package/lib/src/core/constants.d.ts.map +1 -1
  28. package/lib/src/core/constants.js +8 -8
  29. package/lib/src/core/constants.js.map +1 -1
  30. package/lib/src/core/defaultTranslations.d.ts +6 -1
  31. package/lib/src/core/defaultTranslations.d.ts.map +1 -1
  32. package/lib/src/core/defaultTranslations.js +6 -1
  33. package/lib/src/core/defaultTranslations.js.map +1 -1
  34. package/lib/src/core/features/featureFactory.d.ts +1 -1
  35. package/lib/src/core/features/featureFactory.d.ts.map +1 -1
  36. package/lib/src/core/features/featureFactory.js +0 -2
  37. package/lib/src/core/features/featureFactory.js.map +1 -1
  38. package/lib/src/core/features/uIFeatures/afterRender/animation.d.ts.map +1 -1
  39. package/lib/src/core/features/uIFeatures/afterRender/animation.js +6 -0
  40. package/lib/src/core/features/uIFeatures/afterRender/animation.js.map +1 -1
  41. package/lib/src/core/features/uIFeatures/afterRender/columnSizing/autoSize.d.ts +2 -16
  42. package/lib/src/core/features/uIFeatures/afterRender/columnSizing/autoSize.d.ts.map +1 -1
  43. package/lib/src/core/features/uIFeatures/afterRender/columnSizing/autoSize.js +45 -81
  44. package/lib/src/core/features/uIFeatures/afterRender/columnSizing/autoSize.js.map +1 -1
  45. package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.d.ts.map +1 -1
  46. package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.js +13 -1
  47. package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.js.map +1 -1
  48. package/lib/src/core/features/uIFeatures/beforeRender/aggregation.d.ts +1 -0
  49. package/lib/src/core/features/uIFeatures/beforeRender/aggregation.d.ts.map +1 -1
  50. package/lib/src/core/features/uIFeatures/beforeRender/aggregation.js +3 -1
  51. package/lib/src/core/features/uIFeatures/beforeRender/aggregation.js.map +1 -1
  52. package/lib/src/core/features/uIFeatures/beforeRender/busyIndicator.d.ts +1 -0
  53. package/lib/src/core/features/uIFeatures/beforeRender/busyIndicator.d.ts.map +1 -1
  54. package/lib/src/core/features/uIFeatures/beforeRender/busyIndicator.js +3 -1
  55. package/lib/src/core/features/uIFeatures/beforeRender/busyIndicator.js.map +1 -1
  56. package/lib/src/core/features/uIFeatures/beforeRender/columnFormatter.d.ts.map +1 -1
  57. package/lib/src/core/features/uIFeatures/beforeRender/columnFormatter.js +5 -4
  58. package/lib/src/core/features/uIFeatures/beforeRender/columnFormatter.js.map +1 -1
  59. package/lib/src/core/features/uIFeatures/beforeRender/columnReOrder.d.ts.map +1 -1
  60. package/lib/src/core/features/uIFeatures/beforeRender/columnReOrder.js +2 -3
  61. package/lib/src/core/features/uIFeatures/beforeRender/columnReOrder.js.map +1 -1
  62. package/lib/src/core/features/uIFeatures/beforeRender/columnSizing/resize.d.ts +2 -4
  63. package/lib/src/core/features/uIFeatures/beforeRender/columnSizing/resize.d.ts.map +1 -1
  64. package/lib/src/core/features/uIFeatures/beforeRender/columnSizing/resize.js +47 -29
  65. package/lib/src/core/features/uIFeatures/beforeRender/columnSizing/resize.js.map +1 -1
  66. package/lib/src/core/features/uIFeatures/beforeRender/columnToggle.d.ts +1 -1
  67. package/lib/src/core/features/uIFeatures/beforeRender/columnToggle.d.ts.map +1 -1
  68. package/lib/src/core/features/uIFeatures/beforeRender/columnToggle.js +6 -1
  69. package/lib/src/core/features/uIFeatures/beforeRender/columnToggle.js.map +1 -1
  70. package/lib/src/core/features/uIFeatures/beforeRender/grouping.d.ts.map +1 -1
  71. package/lib/src/core/features/uIFeatures/beforeRender/grouping.js +28 -30
  72. package/lib/src/core/features/uIFeatures/beforeRender/grouping.js.map +1 -1
  73. package/lib/src/core/features/uIFeatures/beforeRender/prepareColumns.d.ts +2 -0
  74. package/lib/src/core/features/uIFeatures/beforeRender/prepareColumns.d.ts.map +1 -1
  75. package/lib/src/core/features/uIFeatures/beforeRender/prepareColumns.js +32 -5
  76. package/lib/src/core/features/uIFeatures/beforeRender/prepareColumns.js.map +1 -1
  77. package/lib/src/core/features/uIFeatures/beforeRender/rowDragDrop.d.ts.map +1 -1
  78. package/lib/src/core/features/uIFeatures/beforeRender/rowDragDrop.js +11 -3
  79. package/lib/src/core/features/uIFeatures/beforeRender/rowDragDrop.js.map +1 -1
  80. package/lib/src/core/features/uIFeatures/beforeRender/rowHeight.d.ts.map +1 -1
  81. package/lib/src/core/features/uIFeatures/beforeRender/rowHeight.js +4 -0
  82. package/lib/src/core/features/uIFeatures/beforeRender/rowHeight.js.map +1 -1
  83. package/lib/src/core/features/uIFeatures/beforeRender/stateHydration.d.ts.map +1 -1
  84. package/lib/src/core/features/uIFeatures/beforeRender/stateHydration.js +2 -1
  85. package/lib/src/core/features/uIFeatures/beforeRender/stateHydration.js.map +1 -1
  86. package/lib/src/core/features/uIFeatures/beforeRender/stateSanitization.d.ts.map +1 -1
  87. package/lib/src/core/features/uIFeatures/beforeRender/stateSanitization.js +53 -14
  88. package/lib/src/core/features/uIFeatures/beforeRender/stateSanitization.js.map +1 -1
  89. package/lib/src/core/features/uIFeatures/index.d.ts +0 -3
  90. package/lib/src/core/features/uIFeatures/index.d.ts.map +1 -1
  91. package/lib/src/core/features/uIFeatures/index.js +0 -4
  92. package/lib/src/core/features/uIFeatures/index.js.map +1 -1
  93. package/lib/src/core/generators/ColumnGenerator.d.ts +14 -19
  94. package/lib/src/core/generators/ColumnGenerator.d.ts.map +1 -1
  95. package/lib/src/core/generators/ColumnGenerator.js +28 -88
  96. package/lib/src/core/generators/ColumnGenerator.js.map +1 -1
  97. package/lib/src/core/generators/ColumnGenerator.types.d.ts +17 -14
  98. package/lib/src/core/generators/ColumnGenerator.types.d.ts.map +1 -1
  99. package/lib/src/core/generators/ColumnGenerator.types.js.map +1 -1
  100. package/lib/src/core/generators/GroupGenerator.d.ts +8 -1
  101. package/lib/src/core/generators/GroupGenerator.d.ts.map +1 -1
  102. package/lib/src/core/generators/GroupGenerator.js +24 -1
  103. package/lib/src/core/generators/GroupGenerator.js.map +1 -1
  104. package/lib/src/core/generators/RowGenerator.d.ts +1 -1
  105. package/lib/src/core/generators/RowGenerator.d.ts.map +1 -1
  106. package/lib/src/core/generators/RowGenerator.js +1 -1
  107. package/lib/src/core/generators/RowGenerator.js.map +1 -1
  108. package/lib/src/core/generators/RowGenerator.types.d.ts +2 -1
  109. package/lib/src/core/generators/RowGenerator.types.d.ts.map +1 -1
  110. package/lib/src/core/generators/RowGenerator.types.js.map +1 -1
  111. package/lib/src/core/generators/ViewGenerator.d.ts +6 -1
  112. package/lib/src/core/generators/ViewGenerator.d.ts.map +1 -1
  113. package/lib/src/core/generators/ViewGenerator.js +33 -8
  114. package/lib/src/core/generators/ViewGenerator.js.map +1 -1
  115. package/lib/src/core/generators/ViewGenerator.types.d.ts +3 -1
  116. package/lib/src/core/generators/ViewGenerator.types.d.ts.map +1 -1
  117. package/lib/src/core/generators/ViewGenerator.types.js.map +1 -1
  118. package/lib/src/core/generators/viewUtilityMethods.d.ts.map +1 -1
  119. package/lib/src/core/generators/viewUtilityMethods.js +6 -3
  120. package/lib/src/core/generators/viewUtilityMethods.js.map +1 -1
  121. package/lib/src/core/reducers/error.d.ts +4 -3
  122. package/lib/src/core/reducers/error.d.ts.map +1 -1
  123. package/lib/src/core/reducers/index.d.ts +4 -3
  124. package/lib/src/core/reducers/index.d.ts.map +1 -1
  125. package/lib/src/core/reducers/index.js +0 -2
  126. package/lib/src/core/reducers/index.js.map +1 -1
  127. package/lib/src/core/reducers/personalizationReducer.d.ts +1 -1
  128. package/lib/src/core/reducers/renderFormatter.d.ts.map +1 -1
  129. package/lib/src/core/reducers/renderFormatter.js +13 -3
  130. package/lib/src/core/reducers/renderFormatter.js.map +1 -1
  131. package/lib/src/core/test/junitMocks.d.ts +12 -0
  132. package/lib/src/core/test/junitMocks.d.ts.map +1 -1
  133. package/lib/src/core/test/junitMocks.js +15 -40
  134. package/lib/src/core/test/junitMocks.js.map +1 -1
  135. package/lib/src/core/utils/condition-utils.js +1 -1
  136. package/lib/src/core/utils/condition-utils.js.map +1 -1
  137. package/lib/src/core/utils/util.d.ts +3 -7
  138. package/lib/src/core/utils/util.d.ts.map +1 -1
  139. package/lib/src/core/utils/util.js +36 -15
  140. package/lib/src/core/utils/util.js.map +1 -1
  141. package/lib/types/ApiContext.types.d.ts +82 -6
  142. package/lib/types/ApiContext.types.d.ts.map +1 -1
  143. package/lib/types/ApiContext.types.js.map +1 -1
  144. package/lib/types/Meta.types.d.ts +101 -12
  145. package/lib/types/Meta.types.d.ts.map +1 -1
  146. package/lib/types/Meta.types.js +5 -1
  147. package/lib/types/Meta.types.js.map +1 -1
  148. package/lib/types/RsCoreBootArgs.types.d.ts +11 -0
  149. package/lib/types/RsCoreBootArgs.types.d.ts.map +1 -1
  150. package/lib/types/RsCoreBootArgs.types.js.map +1 -1
  151. package/lib/types/State.types.d.ts +27 -25
  152. package/lib/types/State.types.d.ts.map +1 -1
  153. package/lib/types/State.types.js.map +1 -1
  154. package/lib/types.d.ts +9 -2
  155. package/lib/types.d.ts.map +1 -1
  156. package/lib/types.js.map +1 -1
  157. package/package.json +6 -7
  158. package/lib/src/core/features/uIFeatures/beforeRender/edit.d.ts +0 -12
  159. package/lib/src/core/features/uIFeatures/beforeRender/edit.d.ts.map +0 -1
  160. package/lib/src/core/features/uIFeatures/beforeRender/edit.js +0 -94
  161. package/lib/src/core/features/uIFeatures/beforeRender/edit.js.map +0 -1
  162. package/lib/src/core/features/uIFeatures/beforeRender/resizeGroupedDragDropColumn.d.ts +0 -7
  163. package/lib/src/core/features/uIFeatures/beforeRender/resizeGroupedDragDropColumn.d.ts.map +0 -1
  164. package/lib/src/core/features/uIFeatures/beforeRender/resizeGroupedDragDropColumn.js +0 -24
  165. package/lib/src/core/features/uIFeatures/beforeRender/resizeGroupedDragDropColumn.js.map +0 -1
  166. package/lib/src/core/reducers/edit.d.ts +0 -5
  167. package/lib/src/core/reducers/edit.d.ts.map +0 -1
  168. package/lib/src/core/reducers/edit.js +0 -65
  169. package/lib/src/core/reducers/edit.js.map +0 -1
@@ -3,7 +3,7 @@ import { actionGroupingExpandCollapseAll } from '../../../actions/actions';
3
3
  import { AFTER_FETCH } from '../../../pubSub/events';
4
4
  import GroupGenerator from '../../../generators/GroupGenerator';
5
5
  function isNodeExpanded(groupToggle, node, defaultState) {
6
- /** Groups with 0 count should not be expandable. */
6
+ /** Groups with count 0 should not be expandable. */
7
7
  if (node.count === 0) {
8
8
  return false;
9
9
  }
@@ -15,13 +15,12 @@ const getLabel = (view, groupBy, getState) => {
15
15
  const { columnId, dateFunction } = getGroupFromKey(groupBy, getState().groups);
16
16
  let { label } = view.columns.find(column => column.field.id.toString() === columnId.toString());
17
17
  if (dateFunction) {
18
- // @ts-expect-error dateFunction cannot be used to index dateFunctionLabels. Check this.
19
18
  label += ` (${dateFunctionLabels[dateFunction]})`;
20
19
  }
21
20
  return label;
22
21
  };
23
- // This function checks if hierarchy exist or not.
24
- // which will decide whether start and end Index would be there on leaf node or on hierarchical node.
22
+ // This function checks if hierarchy exists or not.
23
+ // which will decide whether start and end Index would be there on the leaf node or on the hierarchical node.
25
24
  const doesExistInViewInfo = (viewInfo, hierarchy = [], isHierarchical = false) => {
26
25
  return viewInfo.some(v => {
27
26
  const filters = Object.values(v.filters);
@@ -40,13 +39,13 @@ const doesExistInViewInfo = (viewInfo, hierarchy = [], isHierarchical = false) =
40
39
  };
41
40
  const prepareGroupHeaders = (props) => {
42
41
  const [groupingInfo = [], viewInfo = [], rsInternal, groupToggle = {}, allGroupsExpanded] = props;
43
- // If group and viewInfo are empty, prerape group header for top level leaf node.
42
+ // If group and viewInfo are empty, prepare group header for top level leaf node.
44
43
  // This is for easing on UI , one contract whether grouping is in place/not.
45
44
  // TODO: support for enabling feature on view.
46
45
  const view = rsInternal.getView();
47
46
  const { getState } = rsInternal.getRsStateResolver();
48
47
  if (groupingInfo.length === 0) {
49
- // construct view header object.
48
+ // construct a view header object.
50
49
  const viewHeader = new GroupGenerator({
51
50
  isVisible: false,
52
51
  isLeafNode: true,
@@ -75,7 +74,7 @@ const prepareGroupHeaders = (props) => {
75
74
  const isExpanded = isNodeExpanded(groupToggle, child, allGroupsExpanded);
76
75
  const isSubGroupPresent = child.children && child.children.length;
77
76
  const label = child.isHierarchical ? '' : getLabel(view, child.groupBy, getState);
78
- // construct view header object.
77
+ // construct a view header object.
79
78
  const viewHeader = new GroupGenerator({
80
79
  isVisible: !!child.visibleRow,
81
80
  isLeafNode: !isSubGroupPresent,
@@ -89,10 +88,11 @@ const prepareGroupHeaders = (props) => {
89
88
  aggregation: child.agg,
90
89
  showHierarchicalFooter: child.showHierarchicalFooter,
91
90
  isHierarchical: child.isHierarchical,
92
- info: child.info,
93
- data: child.data
91
+ info: 'info' in child ? child.info : undefined,
92
+ data: 'data' in child ? child.data : undefined,
93
+ additionalFieldsData: 'additionalFieldsData' in child ? child.additionalFieldsData : undefined
94
94
  }, rsInternal);
95
- // If header node is a leaf node then , add start index and endIndex to resolve data.
95
+ // If the header node is a leaf node, then, add start index and endIndex to resolve data.
96
96
  if ((viewHeader.isLeafNode || viewHeader.isHierarchical) &&
97
97
  viewHeader.isExpanded &&
98
98
  doesExistInViewInfo(viewInfo, viewHeader.hierarchy, viewHeader.isHierarchical)) {
@@ -135,7 +135,7 @@ function getRecordsCount(group, count, includedRowCount, parentGroup, from, to,
135
135
  parentGroups[currentGroup.groupBy] = currentGroup.name;
136
136
  }
137
137
  count += 1;
138
- // group has subgroups and group is expanded
138
+ // the group has subgroups and a group is expanded
139
139
  const isExpanded = isNodeExpanded(groupToggle, group[i], allGroupsExpanded);
140
140
  let includeThisGroup = false;
141
141
  if (count > from && count - 1 <= to) {
@@ -143,8 +143,8 @@ function getRecordsCount(group, count, includedRowCount, parentGroup, from, to,
143
143
  includedRowCount += 1;
144
144
  }
145
145
  group[i].visibleRow = includeThisGroup;
146
- // Footer should be shown only if node expands.
147
- // groupToggle will effect footer visibility so reset footer flag.
146
+ // Footer should be shown only if the node expands.
147
+ // groupToggle will affect footer visibility so reset a footer flag.
148
148
  group[i].showHierarchicalFooter = false;
149
149
  if (group[i].children && isExpanded) {
150
150
  [count, includedRowCount] = getRecordsCount(group[i].children, count, includedRowCount, parentGroups, from, to, groupFilters, groupToggle, allGroupsExpanded, state, getView);
@@ -153,7 +153,7 @@ function getRecordsCount(group, count, includedRowCount, parentGroup, from, to,
153
153
  !!group[i].children.find(g => g.visibleRow && (g.isHierarchical || !g.children));
154
154
  }
155
155
  else if (!group[i].children && isExpanded) {
156
- // group doesn't have subgroups and group is expanded
156
+ // the group doesn't have subgroups and the group is expanded
157
157
  const innerCount = count + group[i].count;
158
158
  if (count <= to) {
159
159
  let groupFrom = 0;
@@ -183,10 +183,7 @@ function getRecordsCount(group, count, includedRowCount, parentGroup, from, to,
183
183
  }
184
184
  count = innerCount;
185
185
  }
186
- if (group[i].isHierarchical &&
187
- aggregationInfo &&
188
- aggregationInfo.length > 0 &&
189
- isExpanded) {
186
+ if (group[i].isHierarchical && aggregationInfo && aggregationInfo.length > 0 && isExpanded) {
190
187
  count += 1;
191
188
  group[i].showHierarchicalFooter = true;
192
189
  if (group[i].visibleRow && includedRowCount <= to) {
@@ -201,8 +198,8 @@ const constructGroupingPagination = (groupingInfo, groupToggle, paginationOption
201
198
  getRecordsCount(groupingInfo, 0, 0, {}, paginationOptions.startIndex, paginationOptions.endIndex, groupFilters, groupToggle, allGroupsExpanded, state, getView);
202
199
  return groupFilters;
203
200
  };
204
- // This is basically used to update count on non leaf node.
205
- // which is sum of count of leaf node children in their hierarchy.
201
+ // This is basically used to update count on non-leaf node.
202
+ // which is the sum of count of leaf node children in their hierarchy.
206
203
  function updateCountOnNonLeafNode(groupingInfo) {
207
204
  const updateCount = (child) => {
208
205
  if (child.count !== undefined)
@@ -341,8 +338,8 @@ const getTotalItemCount = (getView, state, groupingInfo) => {
341
338
  const { groupToggle, allGroupsExpanded } = state;
342
339
  while (stack.length) {
343
340
  const child = stack.shift();
344
- // We are considering header count whether if it is of hierarchical node or
345
- // a normal group node and it has data associated with it in its hierarchy.
341
+ // We are considering header count whether if it is of a hierarchical node or
342
+ // a normal group node, and it has data associated with it in its hierarchy.
346
343
  if (child) {
347
344
  totalItemCount += 1;
348
345
  const isSubGroupPresent = child.children && child.children.length;
@@ -376,15 +373,15 @@ function postFetch(rsInternal, memoizedPrepareGroupHeaders) {
376
373
  const rsStore = getRsStore();
377
374
  const { getState } = getRsStateResolver();
378
375
  if (!rsStore.groupingInfo || !rsStore.groupingInfo.length) {
379
- // As we are giving ways to always use header though grouping is not in place
376
+ // As we are giving ways to always use header, though grouping is not in place
380
377
  // update total item count given by API.
381
378
  getView().setProp('totalItemCount', getView().resultsCount);
382
379
  memoizedPrepareGroupHeaders([[], [], rsInternal], [getView().rows.length]);
383
380
  }
384
381
  else {
385
- // As our group headers are representing data in UI , so
382
+ // As our group headers are representing data in UI, so
386
383
  // like data after every fetch group headers should also change so that
387
- // UI get to know about latest group.
384
+ // UI get to know about the latest group.
388
385
  getView().setProp('totalItemCount', getTotalItemCount(getView, getState(), rsStore.groupingInfo));
389
386
  memoizedPrepareGroupHeaders([
390
387
  rsStore.groupingInfo,
@@ -410,8 +407,8 @@ export default (rsInternal) => {
410
407
  const memorizeOnHierarchicalGroupChange = withMemoization(onHierarchicalGroupChange);
411
408
  const memoizedUpdateGroupFilters = withMemoization(updateGroupFilters);
412
409
  const memoizedAutoExpandGroups = withMemoization(autoExpandGroups);
413
- // Prepare group header even though groups are not present to have one flow.
414
- // depend on after fetch event as , it depends on data when no grouping is there.
410
+ // Prepare a group header even though groups are not present to have one flow.
411
+ // depend on after fetch event as it depends on data when no grouping is there.
415
412
  rsInternal
416
413
  .getPubSubUtils()
417
414
  .subscribe(AFTER_FETCH, () => postFetch(rsInternal, withMemoization(prepareGroupHeaders)));
@@ -425,7 +422,8 @@ export default (rsInternal) => {
425
422
  state.search?.query,
426
423
  state.personalization?.active,
427
424
  state.refresh,
428
- state.aggregationInfo
425
+ state.aggregationInfo,
426
+ state.hiddenColumns
429
427
  ]);
430
428
  memoizedAutoExpandGroups([featureProps], [state.personalization?.active]);
431
429
  await memorizeOnHierarchicalGroupChange([featureProps], [
@@ -435,10 +433,10 @@ export default (rsInternal) => {
435
433
  state.aggregationInfo,
436
434
  state.personalization?.active
437
435
  ]);
438
- // In new grouping, update group info in state.
436
+ // In the new grouping, update group info in state.
439
437
  // Action dispatched for group info will prepare group headers.
440
438
  if (state.paginationOptions) {
441
- // TODO: use this comarator for optimization but isVisible calculated prop on grouping info needs to be handled.ISSUE-80012
439
+ // TODO: use this comparator for optimization but isVisible calculated prop on grouping info needs to be handled.ISSUE-80012
442
440
  // const comparator =(prev, next) => {
443
441
  // if (prev[1] !== next[1] || prev[3] !== next[3]) return false;
444
442
  // return compareArray(prev[2], next[2], ['children', 'count', 'name']);
@@ -1 +1 @@
1
- {"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/grouping.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport {\n getGroupKey,\n getGroupFromKey,\n withMemoization,\n compareArray,\n dateFunctionLabels,\n deepCopy,\n isEmpty\n} from '../../../utils/util';\nimport { actionGroupingExpandCollapseAll } from '../../../actions/actions';\nimport { AFTER_FETCH } from '../../../pubSub/events';\nimport type RsInternal from '../../../RsInternal';\nimport type { BeforeRenderFeatureProps } from '../../featureFactory';\nimport type { MemoizedFunction } from '../../../utils/util.types';\nimport type { Group, GroupFilter, GroupToggle, State } from '../../../../../types/State.types';\nimport type { HierarchicalInfo } from '../../../../../types/Meta.types';\nimport GroupGenerator from '../../../generators/GroupGenerator';\nimport type View from '../../../generators/ViewGenerator';\nimport type RsStore from '../../../RsStore';\nimport type {\n GroupedInfo,\n HierarchicalGroupedInfo,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ApiContext\n} from '../../../../../types/ApiContext.types';\n\nexport interface CommonGroupingInfo {\n /** Id of the field on which grouping is applied. */\n groupBy: string;\n /** Current group level, starts with 0 for 1st level of grouping. */\n level: number;\n /** Path of the grouped column value. */\n hierarchy: (string | number | boolean | Date)[];\n visibleRow?: boolean;\n showHierarchicalFooter?: boolean;\n groupFrom?: number;\n groupTo?: number;\n isHierarchical?: boolean;\n}\n\nexport type GroupingInfo = OmitStrict<GroupedInfo, 'children'> &\n CommonGroupingInfo & {\n children?: GroupingInfo[];\n };\n\nexport type HierarchicalGroupingInfo = OmitStrict<HierarchicalGroupedInfo, 'children'> &\n CommonGroupingInfo & {\n children?: HierarchicalGroupingInfo[];\n parentId?: string;\n targetId?: string;\n name?: null | string | number | boolean | Date;\n };\n\nfunction isNodeExpanded(\n groupToggle: GroupToggle | undefined,\n node: GroupingInfo | HierarchicalGroupingInfo,\n defaultState: boolean | undefined\n): boolean {\n /** Groups with 0 count should not be expandable. */\n if (node.count === 0) {\n return false;\n }\n\n const index = groupToggle?.[node.groupBy!]?.findIndex(gct => compareArray(gct, node.hierarchy!));\n const childToggleState = index! >= 0 ? !defaultState : !!defaultState;\n return childToggleState === true;\n}\n\nconst getLabel = (view: View, groupBy: string, getState: BeforeRenderFeatureProps['getState']) => {\n const { columnId, dateFunction } = getGroupFromKey(groupBy, getState().groups)!;\n let { label } = view.columns!.find(column => column.field.id.toString() === columnId.toString())!;\n if (dateFunction) {\n // @ts-expect-error dateFunction cannot be used to index dateFunctionLabels. Check this.\n label += ` (${dateFunctionLabels[dateFunction]})`;\n }\n return label;\n};\n\n// This function checks if hierarchy exist or not.\n// which will decide whether start and end Index would be there on leaf node or on hierarchical node.\nconst doesExistInViewInfo = (\n viewInfo: GroupFilter[],\n hierarchy: (string | number | boolean | Date)[] = [],\n isHierarchical = false\n) => {\n return viewInfo.some(v => {\n const filters = Object.values(v.filters);\n\n if (isHierarchical) {\n return filters.every(value => value === [...hierarchy].pop());\n }\n\n if (filters.length === hierarchy.length) {\n const tempHierarchy = [...hierarchy];\n // eslint-disable-next-line @typescript-eslint/require-array-sort-compare\n tempHierarchy.sort();\n // eslint-disable-next-line @typescript-eslint/require-array-sort-compare\n return filters.sort().every((value, index) => value === tempHierarchy[index]);\n }\n return false;\n });\n};\n\nconst prepareGroupHeaders = (\n props: [\n groupingInfo: RsStore['groupingInfo'],\n groupFilters: RsStore['groupFilters'],\n rsInternal: RsInternal,\n groupToggle?: State['groupToggle'],\n allGroupsExpanded?: boolean\n ]\n) => {\n const [groupingInfo = [], viewInfo = [], rsInternal, groupToggle = {}, allGroupsExpanded] = props;\n\n // If group and viewInfo are empty, prerape group header for top level leaf node.\n // This is for easing on UI , one contract whether grouping is in place/not.\n // TODO: support for enabling feature on view.\n const view = rsInternal.getView();\n const { getState } = rsInternal.getRsStateResolver();\n if (groupingInfo.length === 0) {\n // construct view header object.\n\n const viewHeader = new GroupGenerator(\n {\n isVisible: false,\n isLeafNode: true,\n isExpanded: true,\n name: '',\n groupBy: '',\n level: 0,\n label: '',\n hierarchy: [],\n count: view.rows!.length\n },\n rsInternal\n );\n viewHeader.startIndex = 0;\n viewHeader.endIndex = view.rows ? view.rows.length : 0;\n view.setProp('groupHeaders', [viewHeader]);\n return;\n }\n // Creating flat objects from view group info using DFT.\n const result = [];\n let counter = 0;\n\n const stack = groupingInfo.map(v => ({ ...v }));\n let leafNodeCountInView = 0;\n let lastDataIndex = 0;\n while (stack.length) {\n const child = stack.shift();\n if (child) {\n const isExpanded = isNodeExpanded(groupToggle, child, allGroupsExpanded);\n const isSubGroupPresent = child.children && child.children.length;\n const label = child.isHierarchical ? '' : getLabel(view, child.groupBy!, getState);\n // construct view header object.\n const viewHeader = new GroupGenerator(\n {\n isVisible: !!child.visibleRow,\n isLeafNode: !isSubGroupPresent,\n isExpanded,\n name: child.name!,\n groupBy: child.groupBy,\n level: child.level,\n label: label!,\n hierarchy: child.hierarchy,\n count: child.count,\n aggregation: child.agg,\n showHierarchicalFooter: child.showHierarchicalFooter,\n isHierarchical: child.isHierarchical,\n info: (child as HierarchicalGroupingInfo).info,\n data: (child as GroupingInfo).data\n },\n rsInternal\n );\n // If header node is a leaf node then , add start index and endIndex to resolve data.\n if (\n (viewHeader.isLeafNode || viewHeader.isHierarchical) &&\n viewHeader.isExpanded &&\n doesExistInViewInfo(viewInfo, viewHeader.hierarchy, viewHeader.isHierarchical)\n ) {\n const { groupFrom, groupTo } = viewInfo[leafNodeCountInView] || {};\n if (groupFrom >= 0 && groupTo >= 0) {\n viewHeader.startIndex = lastDataIndex;\n viewHeader.endIndex = viewHeader.startIndex + groupTo - groupFrom;\n lastDataIndex = viewHeader.endIndex;\n leafNodeCountInView += 1;\n }\n }\n // BUG-775861 - Adding index to visible groupHeaders so that this can be used to set the z-index for groupHeaders\n if (viewHeader.isVisible) {\n viewHeader.index = counter;\n counter += 1;\n }\n result.push(viewHeader);\n if (isExpanded && isSubGroupPresent) {\n stack.unshift(...child.children!);\n }\n }\n }\n view.setProp('groupHeaders', result);\n};\n\nfunction includeGroup(\n group: GroupingInfo | HierarchicalGroupingInfo,\n groupFrom: number,\n groupTo: number,\n parentGroups: Record<string, any>,\n groupFilters: GroupFilter[]\n) {\n group.groupFrom = groupFrom;\n group.groupTo = groupTo;\n groupFilters.push({ groupFrom, groupTo, filters: parentGroups });\n}\n\nfunction getRecordsCount(\n group: NonNullable<RsStore['groupingInfo']>,\n count: number,\n includedRowCount: number,\n parentGroup: Record<string, any>,\n from: number,\n to: number,\n groupFilters: GroupFilter[],\n groupToggle: GroupToggle | undefined,\n allGroupsExpanded: boolean | undefined,\n state: State,\n getView: BeforeRenderFeatureProps['getView']\n): [count: number, includedRowCount: number] {\n const { aggregationInfo } = state;\n\n for (let i = 0; i < group.length; i += 1) {\n const parentGroups = { ...parentGroup };\n if ((group[i] as HierarchicalGroupingInfo).isHierarchical) {\n const currentGroup = group[i] as HierarchicalGroupingInfo;\n parentGroups[currentGroup.parentId!] = currentGroup.info![currentGroup.targetId!];\n } else {\n const currentGroup = group![i] as GroupingInfo;\n parentGroups[currentGroup.groupBy!] = currentGroup.name;\n }\n count += 1;\n // group has subgroups and group is expanded\n const isExpanded = isNodeExpanded(groupToggle, group[i], allGroupsExpanded);\n let includeThisGroup = false;\n if (count > from && count - 1 <= to) {\n includeThisGroup = true;\n includedRowCount += 1;\n }\n group[i].visibleRow = includeThisGroup;\n // Footer should be shown only if node expands.\n // groupToggle will effect footer visibility so reset footer flag.\n group[i].showHierarchicalFooter = false;\n\n if (group[i].children && isExpanded) {\n [count, includedRowCount] = getRecordsCount(\n group[i].children!,\n count,\n includedRowCount,\n parentGroups,\n from,\n to,\n groupFilters,\n groupToggle,\n allGroupsExpanded,\n state,\n getView\n );\n group[i].visibleRow =\n group[i].visibleRow ||\n !!group[i].children!.find(\n g => g.visibleRow && ((g as HierarchicalGroupingInfo).isHierarchical || !g.children)\n );\n } else if (!group[i].children && isExpanded) {\n // group doesn't have subgroups and group is expanded\n const innerCount = count + group[i].count;\n if (count <= to) {\n let groupFrom = 0;\n let groupTo = 0;\n if (innerCount >= from) {\n groupFrom = Math.max(from - count, 0);\n if (innerCount <= to + 1) {\n groupTo = group[i].count;\n } else {\n groupTo = groupFrom + (to + 1 - from - includedRowCount);\n }\n group[i].visibleRow = true;\n let updatedGroupFrom = groupFrom;\n // Sticky group header logic\n if (!includeThisGroup && groupTo > groupFrom + 2) {\n if (group[i].level! >= 1) {\n updatedGroupFrom = groupFrom + 2;\n } else {\n updatedGroupFrom = groupFrom + 1;\n }\n }\n includeGroup(group[i], updatedGroupFrom, groupTo, parentGroups, groupFilters);\n }\n includedRowCount += groupTo - groupFrom;\n }\n count = innerCount;\n }\n\n if (\n (group[i] as HierarchicalGroupingInfo).isHierarchical &&\n aggregationInfo &&\n aggregationInfo.length > 0 &&\n isExpanded\n ) {\n count += 1;\n group[i].showHierarchicalFooter = true;\n\n if (group[i].visibleRow && includedRowCount <= to) {\n includedRowCount += 1;\n }\n }\n }\n return [count, includedRowCount];\n}\n\nconst constructGroupingPagination = (\n groupingInfo: NonNullable<RsStore['groupingInfo']>,\n groupToggle: GroupToggle | undefined,\n paginationOptions: NonNullable<State['paginationOptions']>[keyof NonNullable<\n State['paginationOptions']\n >],\n allGroupsExpanded: boolean | undefined,\n state: State,\n getView: BeforeRenderFeatureProps['getView']\n) => {\n const groupFilters = [] as GroupFilter[];\n getRecordsCount(\n groupingInfo,\n 0,\n 0,\n {},\n paginationOptions.startIndex,\n paginationOptions.endIndex,\n groupFilters,\n groupToggle,\n allGroupsExpanded,\n state,\n getView\n );\n return groupFilters;\n};\n\n// This is basically used to update count on non leaf node.\n// which is sum of count of leaf node children in their hierarchy.\nfunction updateCountOnNonLeafNode(groupingInfo: GroupedInfo[]) {\n const updateCount = (child: GroupedInfo) => {\n if (child.count !== undefined) return child.count;\n child.count = child.children!.reduce((acc, c) => {\n acc += updateCount(c)!;\n return acc;\n }, 0);\n };\n groupingInfo.forEach(g => updateCount(g));\n}\n\nfunction updateGroupInfo(groupingInfo: GroupedInfo[], groups: Group[]): GroupingInfo[] {\n // iterate groupingInfo using BFS and update basic information.\n const queue = [...groupingInfo] as GroupingInfo[];\n while (queue.length) {\n const child = queue.pop();\n if (child) {\n if (!child.hierarchy) child.hierarchy = [child.name!];\n child.level = child.level || 0;\n const matchingGroup = groups.find(g => g.level === child.level);\n child.groupBy = getGroupKey(matchingGroup!);\n\n if (child.children) {\n // update level before pushing children to queue.\n child.children.forEach(c => {\n c.level = child.level + 1;\n c.hierarchy = [...child.hierarchy];\n c.hierarchy.push(c.name!);\n });\n queue.push(...child.children);\n }\n }\n }\n return groupingInfo as GroupingInfo[];\n}\n\nfunction updateCountFromGroupingInfo(\n getView: BeforeRenderFeatureProps['getView'],\n getRsStore: BeforeRenderFeatureProps['getRsStore']\n) {\n if (getView().countGeneratedInternally || isEmpty(getView().resultsCount)) {\n const countFromGroupingInfo = getRsStore().groupingInfo?.reduce(\n (acc, group) => (group.count ? acc + group.count : acc),\n 0\n );\n\n const countPayload = { count: countFromGroupingInfo, _countGeneratedInternally: true };\n getView().type.setRecordCount(countPayload);\n }\n}\n\nasync function onGroupsChange([{ getRsProps, getRsStore, getView, getState }]: [\n featureProps: BeforeRenderFeatureProps\n]) {\n const rsStore = getRsStore();\n const rsProps = getRsProps();\n const state = getState();\n const { groups } = state;\n\n if (groups?.length! > 0 && getView().meta.grouping) {\n try {\n const groupingInfo =\n (await rsProps.apiContext.fetchGroupedInfo?.(deepCopy(state), getView().meta, {\n ...(getRsStore().refreshInProgress && {\n invalidateCache: true,\n invalidateCacheToken: getRsStore().refreshToken\n })\n })) || [];\n // Here update group info with basic properties like level, group by, expand state etc.\n // to make calculation easy.\n // TODO: FIXME - Check if count on non leaf node is required\n updateCountOnNonLeafNode(groupingInfo);\n rsStore.groupingInfo = updateGroupInfo(groupingInfo, groups!);\n\n // FIXME: once infinite virtualizer supports the grouping, we need not compute the count from grouping\n // Prepare the count from the groups count until the actual count returns\n updateCountFromGroupingInfo(getView, getRsStore);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('API call failed', err);\n }\n } else rsStore.groupingInfo = [];\n\n getView().columns!.forEach(column => {\n const grouped = groups?.findIndex(group => group.columnId === column.field.id)! >= 0;\n column = column.setProp('grouped', grouped);\n });\n}\n\nfunction autoExpandGroups([{ dispatch, getState }]: [featureProps: BeforeRenderFeatureProps]) {\n const { allGroupsExpanded = true } = getState();\n dispatch(actionGroupingExpandCollapseAll(allGroupsExpanded));\n}\n\nfunction updateHierarchicalGroupInfo(\n groupingInfo: HierarchicalGroupedInfo[],\n hierarchicalGroup: HierarchicalInfo\n) {\n const queue = [...groupingInfo] as HierarchicalGroupingInfo[];\n\n while (queue.length) {\n const child = queue.pop();\n const node = child!.info;\n\n if (child) {\n child.level = child.level || 0;\n child.isHierarchical = true;\n child.parentId = hierarchicalGroup.parentId;\n child.targetId = hierarchicalGroup.targetId;\n child.groupBy = (hierarchicalGroup.sortById || hierarchicalGroup.targetId)!;\n\n if (node) {\n child.name = node[(hierarchicalGroup.sortById || hierarchicalGroup.targetId)!] as string;\n child.hierarchy = [node[hierarchicalGroup.targetId!] as string];\n }\n\n if (child.children) {\n // update level before pushing children to queue.\n child.children.forEach(c => {\n c.level = child.level! + 1;\n });\n queue.push(...child.children);\n }\n }\n }\n}\n\nasync function onHierarchicalGroupChange([{ getState, getRsProps, getRsStore, getView }]: [\n featureProps: BeforeRenderFeatureProps\n]) {\n const { hierarchicalGroup } = getState();\n const rsProps = getRsProps();\n const rsStore = getRsStore();\n if (hierarchicalGroup && hierarchicalGroup.parentId) {\n try {\n const groupingInfo =\n (await rsProps.apiContext.fetchHierarchicalGroupedInfo?.(\n deepCopy(getState()),\n getView().meta,\n {\n ...(getRsStore().refreshInProgress && {\n invalidateCache: true,\n invalidateCacheToken: getRsStore().refreshToken\n })\n }\n )) || [];\n\n getView().setProp('hierarchicalGroupEnabled', true);\n\n updateHierarchicalGroupInfo(groupingInfo, hierarchicalGroup);\n rsStore.groupingInfo = groupingInfo as HierarchicalGroupingInfo[];\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('API call failed', err);\n }\n } else {\n getView().setProp('hierarchicalGroupEnabled', false);\n }\n}\n\nconst getTotalItemCount = (\n getView: BeforeRenderFeatureProps['getView'],\n state: State,\n groupingInfo: NonNullable<RsStore['groupingInfo']>\n) => {\n // Calculate total group count and update instance.\n // and datanode count based on group expand state.\n let totalItemCount = 0;\n const stack = [...groupingInfo];\n const { groupToggle, allGroupsExpanded } = state;\n\n while (stack.length) {\n const child = stack.shift();\n // We are considering header count whether if it is of hierarchical node or\n // a normal group node and it has data associated with it in its hierarchy.\n if (child) {\n totalItemCount += 1;\n const isSubGroupPresent = child.children && child.children.length;\n const isExpanded = isNodeExpanded(groupToggle, child, allGroupsExpanded);\n if (isExpanded && isSubGroupPresent) {\n stack.unshift(...child.children!);\n } else if (isExpanded && !isSubGroupPresent) {\n totalItemCount += child.count;\n }\n\n if (child.showHierarchicalFooter) {\n totalItemCount += 1;\n }\n }\n }\n return totalItemCount;\n};\n\nconst updateGroupFilters = ([{ getState, getRsStore, getView }]: [\n featureProps: BeforeRenderFeatureProps\n]) => {\n const { paginationOptions, groupToggle, allGroupsExpanded } = getState();\n const rsStore = getRsStore();\n const { groupingInfo } = rsStore;\n // group info is expected to be [] when there are no groups.\n if (groupingInfo) {\n if (!groupingInfo.length && rsStore.groupFilters && !rsStore.groupFilters.length) return;\n rsStore.groupFilters = constructGroupingPagination(\n groupingInfo,\n groupToggle,\n paginationOptions!.rootVirtualiser,\n allGroupsExpanded,\n getState(),\n getView\n );\n }\n};\n\nfunction postFetch(\n rsInternal: RsInternal,\n memoizedPrepareGroupHeaders: MemoizedFunction<\n [\n groupingInfo: RsStore['groupingInfo'],\n groupFilters: RsStore['groupFilters'],\n rsInternal: RsInternal,\n groupToggle?: State['groupToggle'],\n allGroupsExpanded?: State['allGroupsExpanded']\n ],\n ReturnType<typeof prepareGroupHeaders>\n >\n) {\n const { getRsStore, getView, getRsStateResolver } = rsInternal;\n const rsStore = getRsStore();\n const { getState } = getRsStateResolver();\n if (!rsStore.groupingInfo || !rsStore.groupingInfo.length) {\n // As we are giving ways to always use header though grouping is not in place\n // update total item count given by API.\n getView().setProp('totalItemCount', getView().resultsCount);\n memoizedPrepareGroupHeaders([[], [], rsInternal], [getView().rows!.length]);\n } else {\n // As our group headers are representing data in UI , so\n // like data after every fetch group headers should also change so that\n // UI get to know about latest group.\n getView().setProp(\n 'totalItemCount',\n getTotalItemCount(getView, getState(), rsStore.groupingInfo)\n );\n memoizedPrepareGroupHeaders([\n rsStore.groupingInfo,\n rsStore.groupFilters,\n rsInternal,\n getState().groupToggle,\n getState().allGroupsExpanded\n ]);\n }\n}\n\n// TODO: Need to make changes in grouping to support 0 based indexing inclusive start and end index.\n/**\n * Handles the grouping feature for repeating structures.\n *\n * This method performs the following tasks:\n * - Fetches the grouping information, either via {@link ApiContext.fetchGroupedInfo} or {@link ApiContext.fetchHierarchicalGroupedInfo}, and stores the result in {@link RsStore.groupingInfo}.\n * - Prepares group filters based on the grouping information, then sets these filters in {@link RsStore.groupFilters}.\n * - Manages the automatic expansion of groups.\n * - Prepares group headers from the fetched grouping information and sets them in {@link View.groupHeaders}.\n */\nexport default (rsInternal: RsInternal) => {\n const memoizedOnGroupsChange = withMemoization(onGroupsChange);\n const memorizeOnHierarchicalGroupChange = withMemoization(onHierarchicalGroupChange);\n const memoizedUpdateGroupFilters = withMemoization(updateGroupFilters);\n const memoizedAutoExpandGroups = withMemoization(autoExpandGroups);\n\n // Prepare group header even though groups are not present to have one flow.\n // depend on after fetch event as , it depends on data when no grouping is there.\n rsInternal\n .getPubSubUtils()\n .subscribe(AFTER_FETCH, () => postFetch(rsInternal, withMemoization(prepareGroupHeaders)));\n\n async function execute(featureProps: BeforeRenderFeatureProps) {\n const { getState, getRsStore } = featureProps;\n const state = getState();\n // TOdo: Fixme ISSUE-76344... try to not rely on state.personalization?.active\n await memoizedOnGroupsChange(\n [featureProps],\n [\n state.groups,\n state.filterExpression,\n state.search?.query,\n state.personalization?.active,\n state.refresh,\n state.aggregationInfo\n ]\n );\n\n memoizedAutoExpandGroups([featureProps], [state.personalization?.active]);\n\n await memorizeOnHierarchicalGroupChange(\n [featureProps],\n [\n state.hierarchicalGroup,\n state.filterExpression,\n state.search?.query,\n state.aggregationInfo,\n state.personalization?.active\n ]\n );\n // In new grouping, update group info in state.\n // Action dispatched for group info will prepare group headers.\n if (state.paginationOptions) {\n // TODO: use this comarator for optimization but isVisible calculated prop on grouping info needs to be handled.ISSUE-80012\n // const comparator =(prev, next) => {\n // if (prev[1] !== next[1] || prev[3] !== next[3]) return false;\n // return compareArray(prev[2], next[2], ['children', 'count', 'name']);\n // };\n memoizedUpdateGroupFilters(\n [featureProps],\n [\n state.paginationOptions[Object.keys(state.paginationOptions || {})[0]],\n getRsStore().groupingInfo,\n state.groupToggle,\n state.allGroupsExpanded\n ]\n );\n }\n }\n\n // As we are generating one flow, this is required. TODO: Need to take decision\n // conditional block on UI or feature push though not enabled.\n if (rsInternal.getView().meta.grouping) {\n return execute;\n }\n\n return undefined;\n};\n"]}
1
+ {"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/grouping.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,OAAO,EACR,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMrD,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAqChE,SAAS,cAAc,CACrB,WAAoC,EACpC,IAA6C,EAC7C,YAAiC;IAEjC,oDAAoD;IACpD,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,OAAQ,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,SAAU,CAAC,CAAC,CAAC;IACjG,MAAM,gBAAgB,GAAG,KAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IACtE,OAAO,gBAAgB,KAAK,IAAI,CAAC;AACnC,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,OAAe,EAAE,QAA8C,EAAE,EAAE;IAC/F,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAE,CAAC;IAChF,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAE,CAAC;IAClG,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,IAAI,KAAK,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,mDAAmD;AACnD,6GAA6G;AAC7G,MAAM,mBAAmB,GAAG,CAC1B,QAAuB,EACvB,YAAkD,EAAE,EACpD,cAAc,GAAG,KAAK,EACtB,EAAE;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;YACrC,yEAAyE;YACzE,aAAa,CAAC,IAAI,EAAE,CAAC;YACrB,yEAAyE;YACzE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,KAMC,EACD,EAAE;IACF,MAAM,CAAC,YAAY,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,GAAG,EAAE,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC;IAElG,iFAAiF;IACjF,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;IACrD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,kCAAkC;QAElC,MAAM,UAAU,GAAG,IAAI,cAAc,CACnC;YACE,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,IAAI,CAAC,IAAK,CAAC,MAAM;SACzB,EACD,UAAU,CACX,CAAC;QACF,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;QAC1B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,wDAAwD;IACxD,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACzE,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAClE,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,OAAQ,EAAE,QAAQ,CAAC,CAAC;YACnF,kCAAkC;YAClC,MAAM,UAAU,GAAG,IAAI,cAAc,CACnC;gBACE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU;gBAC7B,UAAU,EAAE,CAAC,iBAAiB;gBAC9B,UAAU;gBACV,IAAI,EAAE,KAAK,CAAC,IAAK;gBACjB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,KAAM;gBACb,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,KAAK,CAAC,GAAG;gBACtB,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;gBACpD,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBAC9C,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBAC9C,oBAAoB,EAClB,sBAAsB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;aAC3E,EACD,UAAU,CACX,CAAC;YACF,yFAAyF;YACzF,IACE,CAAC,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,cAAc,CAAC;gBACpD,UAAU,CAAC,UAAU;gBACrB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,cAAc,CAAC,EAC9E,CAAC;gBACD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;gBACnE,IAAI,SAAS,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;oBACnC,UAAU,CAAC,UAAU,GAAG,aAAa,CAAC;oBACtC,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;oBAClE,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC;oBACpC,mBAAmB,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,iHAAiH;YACjH,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACzB,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC;gBAC3B,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAAC;gBACpC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,SAAS,YAAY,CACnB,KAA8C,EAC9C,SAAiB,EACjB,OAAe,EACf,YAAiC,EACjC,YAA2B;IAE3B,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,eAAe,CACtB,KAA2C,EAC3C,KAAa,EACb,gBAAwB,EACxB,WAAgC,EAChC,IAAY,EACZ,EAAU,EACV,YAA2B,EAC3B,WAAoC,EACpC,iBAAsC,EACtC,KAAY,EACZ,OAA4C;IAE5C,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAA6B,CAAC;YAC1D,YAAY,CAAC,YAAY,CAAC,QAAS,CAAC,GAAG,YAAY,CAAC,IAAK,CAAC,YAAY,CAAC,QAAS,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,KAAM,CAAC,CAAC,CAAiB,CAAC;YAC/C,YAAY,CAAC,YAAY,CAAC,OAAQ,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;QAC1D,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QACX,kDAAkD;QAClD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAC5E,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,gBAAgB,GAAG,IAAI,CAAC;YACxB,gBAAgB,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,gBAAgB,CAAC;QACvC,mDAAmD;QACnD,oEAAoE;QACpE,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,GAAG,KAAK,CAAC;QAExC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC;YACpC,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,eAAe,CACzC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAS,EAClB,KAAK,EACL,gBAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,EAAE,EACF,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,KAAK,EACL,OAAO,CACR,CAAC;YACF,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU;gBACjB,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU;oBACnB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtF,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC;YAC5C,6DAA6D;YAC7D,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1C,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;gBAChB,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,IAAI,OAAO,GAAG,CAAC,CAAC;gBAChB,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;oBACvB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAI,UAAU,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;wBACzB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC3B,CAAC;yBAAM,CAAC;wBACN,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,gBAAgB,CAAC,CAAC;oBAC3D,CAAC;oBACD,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;oBAC3B,IAAI,gBAAgB,GAAG,SAAS,CAAC;oBACjC,4BAA4B;oBAC5B,IAAI,CAAC,gBAAgB,IAAI,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;wBACjD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAM,IAAI,CAAC,EAAE,CAAC;4BACzB,gBAAgB,GAAG,SAAS,GAAG,CAAC,CAAC;wBACnC,CAAC;6BAAM,CAAC;4BACN,gBAAgB,GAAG,SAAS,GAAG,CAAC,CAAC;wBACnC,CAAC;oBACH,CAAC;oBACD,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;gBAChF,CAAC;gBACD,gBAAgB,IAAI,OAAO,GAAG,SAAS,CAAC;YAC1C,CAAC;YACD,KAAK,GAAG,UAAU,CAAC;QACrB,CAAC;QAED,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3F,KAAK,IAAI,CAAC,CAAC;YACX,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,GAAG,IAAI,CAAC;YAEvC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,gBAAgB,IAAI,EAAE,EAAE,CAAC;gBAClD,gBAAgB,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,2BAA2B,GAAG,CAClC,YAAkD,EAClD,WAAoC,EACpC,iBAEE,EACF,iBAAsC,EACtC,KAAY,EACZ,OAA4C,EAC5C,EAAE;IACF,MAAM,YAAY,GAAkB,EAAE,CAAC;IACvC,eAAe,CACb,YAAY,EACZ,CAAC,EACD,CAAC,EACD,EAAE,EACF,iBAAiB,CAAC,UAAU,EAC5B,iBAAiB,CAAC,QAAQ,EAC1B,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,KAAK,EACL,OAAO,CACR,CAAC;IACF,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,2DAA2D;AAC3D,sEAAsE;AACtE,SAAS,wBAAwB,CAAC,YAA2B;IAC3D,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC;QAClD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,GAAG,IAAI,WAAW,CAAC,CAAC,CAAE,CAAC;YACvB,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC,CAAC;IACF,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,YAA2B,EAAE,MAAe;IACnE,+DAA+D;IAC/D,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAAmB,CAAC;IAClD,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC;YACtD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YAC/B,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;YAChE,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,aAAc,CAAC,CAAC;YAE5C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,iDAAiD;gBACjD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACzB,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC1B,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;oBACnC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAK,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,YAA8B,CAAC;AACxC,CAAC;AAED,SAAS,2BAA2B,CAClC,OAA4C,EAC5C,UAAkD;IAElD,IAAI,OAAO,EAAE,CAAC,wBAAwB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1E,MAAM,qBAAqB,GAAG,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,CAC7D,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EACvD,CAAC,CACF,CAAC;QAEF,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC;QACvF,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAE3E;IACC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzB,IAAI,MAAM,EAAE,MAAO,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,YAAY,GAChB,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE;gBAC5E,GAAG,CAAC,UAAU,EAAE,CAAC,iBAAiB,IAAI;oBACpC,eAAe,EAAE,IAAI;oBACrB,oBAAoB,EAAE,UAAU,EAAE,CAAC,YAAY;iBAChD,CAAC;aACH,CAAC,CAAC,IAAI,EAAE,CAAC;YACZ,uFAAuF;YACvF,4BAA4B;YAC5B,4DAA4D;YAC5D,wBAAwB,CAAC,YAAY,CAAC,CAAC;YACvC,OAAO,CAAC,YAAY,GAAG,eAAe,CAAC,YAAY,EAAE,MAAO,CAAC,CAAC;YAE9D,sGAAsG;YACtG,yEAAyE;YACzE,2BAA2B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;;QAAM,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;IAEjC,OAAO,EAAE,CAAC,OAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAClC,MAAM,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAE,IAAI,CAAC,CAAC;QACrF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAA2C;IAC1F,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;IAChD,QAAQ,CAAC,+BAA+B,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,2BAA2B,CAClC,YAAuC,EACvC,iBAAmC;IAEnC,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAA+B,CAAC;IAE9D,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAM,CAAC,IAAI,CAAC;QAEzB,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YAC/B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YAC5B,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;YAC5C,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;YAC5C,KAAK,CAAC,OAAO,GAAG,CAAC,iBAAiB,CAAC,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,CAAE,CAAC;YAE5E,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,iBAAiB,CAAC,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,CAAE,CAAW,CAAC;gBACzF,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAS,CAAW,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,iDAAiD;gBACjD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACzB,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAM,GAAG,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,CAEtF;IACC,MAAM,EAAE,iBAAiB,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,YAAY,GAChB,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,4BAA4B,EAAE,CACtD,QAAQ,CAAC,QAAQ,EAAE,CAAC,EACpB,OAAO,EAAE,CAAC,IAAI,EACd;gBACE,GAAG,CAAC,UAAU,EAAE,CAAC,iBAAiB,IAAI;oBACpC,eAAe,EAAE,IAAI;oBACrB,oBAAoB,EAAE,UAAU,EAAE,CAAC,YAAY;iBAChD,CAAC;aACH,CACF,CAAC,IAAI,EAAE,CAAC;YAEX,OAAO,EAAE,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;YAEpD,2BAA2B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;YAC7D,OAAO,CAAC,YAAY,GAAG,YAA0C,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,CACxB,OAA4C,EAC5C,KAAY,EACZ,YAAkD,EAClD,EAAE;IACF,mDAAmD;IACnD,kDAAkD;IAClD,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IAChC,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAEjD,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,6EAA6E;QAC7E,4EAA4E;QAC5E,IAAI,KAAK,EAAE,CAAC;YACV,cAAc,IAAI,CAAC,CAAC;YACpB,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAClE,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACzE,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAAC;gBACpC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAS,CAAC,CAAC;YACpC,CAAC;iBAAM,IAAI,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5C,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC;YAChC,CAAC;YAED,IAAI,KAAK,CAAC,sBAAsB,EAAE,CAAC;gBACjC,cAAc,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAE7D,EAAE,EAAE;IACH,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACjC,4DAA4D;IAC5D,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM;YAAE,OAAO;QACzF,OAAO,CAAC,YAAY,GAAG,2BAA2B,CAChD,YAAY,EACZ,WAAW,EACX,iBAAkB,CAAC,eAAe,EAClC,iBAAiB,EACjB,QAAQ,EAAE,EACV,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,SAAS,CAChB,UAAsB,EACtB,2BASC;IAED,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,UAAU,CAAC;IAC/D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC1D,8EAA8E;QAC9E,wCAAwC;QACxC,OAAO,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC5D,2BAA2B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,uDAAuD;QACvD,uEAAuE;QACvE,yCAAyC;QACzC,OAAO,EAAE,CAAC,OAAO,CACf,gBAAgB,EAChB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAC7D,CAAC;QACF,2BAA2B,CAAC;YAC1B,OAAO,CAAC,YAAY;YACpB,OAAO,CAAC,YAAY;YACpB,UAAU;YACV,QAAQ,EAAE,CAAC,WAAW;YACtB,QAAQ,EAAE,CAAC,iBAAiB;SAC7B,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG;;;;;;;;GAQG;AACH,eAAe,CAAC,UAAsB,EAAE,EAAE;IACxC,MAAM,sBAAsB,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,iCAAiC,GAAG,eAAe,CAAC,yBAAyB,CAAC,CAAC;IACrF,MAAM,0BAA0B,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACvE,MAAM,wBAAwB,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAEnE,8EAA8E;IAC9E,+EAA+E;IAC/E,UAAU;SACP,cAAc,EAAE;SAChB,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAE7F,KAAK,UAAU,OAAO,CAAC,YAAsC;QAC3D,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;QAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,8EAA8E;QAC9E,MAAM,sBAAsB,CAC1B,CAAC,YAAY,CAAC,EACd;YACE,KAAK,CAAC,MAAM;YACZ,KAAK,CAAC,gBAAgB;YACtB,KAAK,CAAC,MAAM,EAAE,KAAK;YACnB,KAAK,CAAC,eAAe,EAAE,MAAM;YAC7B,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,eAAe;YACrB,KAAK,CAAC,aAAa;SACpB,CACF,CAAC;QAEF,wBAAwB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QAE1E,MAAM,iCAAiC,CACrC,CAAC,YAAY,CAAC,EACd;YACE,KAAK,CAAC,iBAAiB;YACvB,KAAK,CAAC,gBAAgB;YACtB,KAAK,CAAC,MAAM,EAAE,KAAK;YACnB,KAAK,CAAC,eAAe;YACrB,KAAK,CAAC,eAAe,EAAE,MAAM;SAC9B,CACF,CAAC;QACF,mDAAmD;QACnD,+DAA+D;QAC/D,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,4HAA4H;YAC5H,sCAAsC;YACtC,kEAAkE;YAClE,0EAA0E;YAC1E,KAAK;YACL,0BAA0B,CACxB,CAAC,YAAY,CAAC,EACd;gBACE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,UAAU,EAAE,CAAC,YAAY;gBACzB,KAAK,CAAC,WAAW;gBACjB,KAAK,CAAC,iBAAiB;aACxB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,8DAA8D;IAC9D,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC","sourcesContent":["import type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport {\n getGroupKey,\n getGroupFromKey,\n withMemoization,\n compareArray,\n dateFunctionLabels,\n deepCopy,\n isEmpty\n} from '../../../utils/util';\nimport { actionGroupingExpandCollapseAll } from '../../../actions/actions';\nimport { AFTER_FETCH } from '../../../pubSub/events';\nimport type RsInternal from '../../../RsInternal';\nimport type { BeforeRenderFeatureProps } from '../../featureFactory';\nimport type { MemoizedFunction } from '../../../utils/util.types';\nimport type { Group, GroupFilter, GroupToggle, State } from '../../../../../types/State.types';\nimport type { HierarchicalInfo } from '../../../../../types/Meta.types';\nimport GroupGenerator from '../../../generators/GroupGenerator';\nimport type View from '../../../generators/ViewGenerator';\nimport type RsStore from '../../../RsStore';\nimport type {\n GroupedInfo,\n HierarchicalGroupedInfo,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ApiContext\n} from '../../../../../types/ApiContext.types';\n\nexport interface CommonGroupingInfo {\n /** Id of the field on which grouping is applied. */\n groupBy: string;\n /** Current group level, starts with 0 for 1st level of grouping. */\n level: number;\n /** Path of the grouped column value. */\n hierarchy: (string | number | boolean | Date)[];\n visibleRow?: boolean;\n showHierarchicalFooter?: boolean;\n groupFrom?: number;\n groupTo?: number;\n isHierarchical?: boolean;\n}\n\nexport type GroupingInfo = OmitStrict<GroupedInfo, 'children'> &\n CommonGroupingInfo & {\n children?: GroupingInfo[];\n };\n\nexport type HierarchicalGroupingInfo = OmitStrict<HierarchicalGroupedInfo, 'children'> &\n CommonGroupingInfo & {\n children?: HierarchicalGroupingInfo[];\n parentId?: string;\n targetId?: string;\n name?: null | string | number | boolean | Date;\n };\n\nfunction isNodeExpanded(\n groupToggle: GroupToggle | undefined,\n node: GroupingInfo | HierarchicalGroupingInfo,\n defaultState: boolean | undefined\n): boolean {\n /** Groups with count 0 should not be expandable. */\n if (node.count === 0) {\n return false;\n }\n\n const index = groupToggle?.[node.groupBy!]?.findIndex(gct => compareArray(gct, node.hierarchy!));\n const childToggleState = index! >= 0 ? !defaultState : !!defaultState;\n return childToggleState === true;\n}\n\nconst getLabel = (view: View, groupBy: string, getState: BeforeRenderFeatureProps['getState']) => {\n const { columnId, dateFunction } = getGroupFromKey(groupBy, getState().groups)!;\n let { label } = view.columns!.find(column => column.field.id.toString() === columnId.toString())!;\n if (dateFunction) {\n label += ` (${dateFunctionLabels[dateFunction]})`;\n }\n return label;\n};\n\n// This function checks if hierarchy exists or not.\n// which will decide whether start and end Index would be there on the leaf node or on the hierarchical node.\nconst doesExistInViewInfo = (\n viewInfo: GroupFilter[],\n hierarchy: (string | number | boolean | Date)[] = [],\n isHierarchical = false\n) => {\n return viewInfo.some(v => {\n const filters = Object.values(v.filters);\n\n if (isHierarchical) {\n return filters.every(value => value === [...hierarchy].pop());\n }\n\n if (filters.length === hierarchy.length) {\n const tempHierarchy = [...hierarchy];\n // eslint-disable-next-line @typescript-eslint/require-array-sort-compare\n tempHierarchy.sort();\n // eslint-disable-next-line @typescript-eslint/require-array-sort-compare\n return filters.sort().every((value, index) => value === tempHierarchy[index]);\n }\n return false;\n });\n};\n\nconst prepareGroupHeaders = (\n props: [\n groupingInfo: RsStore['groupingInfo'],\n groupFilters: RsStore['groupFilters'],\n rsInternal: RsInternal,\n groupToggle?: State['groupToggle'],\n allGroupsExpanded?: boolean\n ]\n) => {\n const [groupingInfo = [], viewInfo = [], rsInternal, groupToggle = {}, allGroupsExpanded] = props;\n\n // If group and viewInfo are empty, prepare group header for top level leaf node.\n // This is for easing on UI , one contract whether grouping is in place/not.\n // TODO: support for enabling feature on view.\n const view = rsInternal.getView();\n const { getState } = rsInternal.getRsStateResolver();\n if (groupingInfo.length === 0) {\n // construct a view header object.\n\n const viewHeader = new GroupGenerator(\n {\n isVisible: false,\n isLeafNode: true,\n isExpanded: true,\n name: '',\n groupBy: '',\n level: 0,\n label: '',\n hierarchy: [],\n count: view.rows!.length\n },\n rsInternal\n );\n viewHeader.startIndex = 0;\n viewHeader.endIndex = view.rows ? view.rows.length : 0;\n view.setProp('groupHeaders', [viewHeader]);\n return;\n }\n // Creating flat objects from view group info using DFT.\n const result = [];\n let counter = 0;\n\n const stack = groupingInfo.map(v => ({ ...v }));\n let leafNodeCountInView = 0;\n let lastDataIndex = 0;\n while (stack.length) {\n const child = stack.shift();\n if (child) {\n const isExpanded = isNodeExpanded(groupToggle, child, allGroupsExpanded);\n const isSubGroupPresent = child.children && child.children.length;\n const label = child.isHierarchical ? '' : getLabel(view, child.groupBy!, getState);\n // construct a view header object.\n const viewHeader = new GroupGenerator(\n {\n isVisible: !!child.visibleRow,\n isLeafNode: !isSubGroupPresent,\n isExpanded,\n name: child.name!,\n groupBy: child.groupBy,\n level: child.level,\n label: label!,\n hierarchy: child.hierarchy,\n count: child.count,\n aggregation: child.agg,\n showHierarchicalFooter: child.showHierarchicalFooter,\n isHierarchical: child.isHierarchical,\n info: 'info' in child ? child.info : undefined,\n data: 'data' in child ? child.data : undefined,\n additionalFieldsData:\n 'additionalFieldsData' in child ? child.additionalFieldsData : undefined\n },\n rsInternal\n );\n // If the header node is a leaf node, then, add start index and endIndex to resolve data.\n if (\n (viewHeader.isLeafNode || viewHeader.isHierarchical) &&\n viewHeader.isExpanded &&\n doesExistInViewInfo(viewInfo, viewHeader.hierarchy, viewHeader.isHierarchical)\n ) {\n const { groupFrom, groupTo } = viewInfo[leafNodeCountInView] || {};\n if (groupFrom >= 0 && groupTo >= 0) {\n viewHeader.startIndex = lastDataIndex;\n viewHeader.endIndex = viewHeader.startIndex + groupTo - groupFrom;\n lastDataIndex = viewHeader.endIndex;\n leafNodeCountInView += 1;\n }\n }\n // BUG-775861 - Adding index to visible groupHeaders so that this can be used to set the z-index for groupHeaders\n if (viewHeader.isVisible) {\n viewHeader.index = counter;\n counter += 1;\n }\n result.push(viewHeader);\n if (isExpanded && isSubGroupPresent) {\n stack.unshift(...child.children!);\n }\n }\n }\n view.setProp('groupHeaders', result);\n};\n\nfunction includeGroup(\n group: GroupingInfo | HierarchicalGroupingInfo,\n groupFrom: number,\n groupTo: number,\n parentGroups: Record<string, any>,\n groupFilters: GroupFilter[]\n) {\n group.groupFrom = groupFrom;\n group.groupTo = groupTo;\n groupFilters.push({ groupFrom, groupTo, filters: parentGroups });\n}\n\nfunction getRecordsCount(\n group: NonNullable<RsStore['groupingInfo']>,\n count: number,\n includedRowCount: number,\n parentGroup: Record<string, any>,\n from: number,\n to: number,\n groupFilters: GroupFilter[],\n groupToggle: GroupToggle | undefined,\n allGroupsExpanded: boolean | undefined,\n state: State,\n getView: BeforeRenderFeatureProps['getView']\n): [count: number, includedRowCount: number] {\n const { aggregationInfo } = state;\n\n for (let i = 0; i < group.length; i += 1) {\n const parentGroups = { ...parentGroup };\n if (group[i].isHierarchical) {\n const currentGroup = group[i] as HierarchicalGroupingInfo;\n parentGroups[currentGroup.parentId!] = currentGroup.info![currentGroup.targetId!];\n } else {\n const currentGroup = group![i] as GroupingInfo;\n parentGroups[currentGroup.groupBy!] = currentGroup.name;\n }\n count += 1;\n // the group has subgroups and a group is expanded\n const isExpanded = isNodeExpanded(groupToggle, group[i], allGroupsExpanded);\n let includeThisGroup = false;\n if (count > from && count - 1 <= to) {\n includeThisGroup = true;\n includedRowCount += 1;\n }\n group[i].visibleRow = includeThisGroup;\n // Footer should be shown only if the node expands.\n // groupToggle will affect footer visibility so reset a footer flag.\n group[i].showHierarchicalFooter = false;\n\n if (group[i].children && isExpanded) {\n [count, includedRowCount] = getRecordsCount(\n group[i].children!,\n count,\n includedRowCount,\n parentGroups,\n from,\n to,\n groupFilters,\n groupToggle,\n allGroupsExpanded,\n state,\n getView\n );\n group[i].visibleRow =\n group[i].visibleRow ||\n !!group[i].children!.find(g => g.visibleRow && (g.isHierarchical || !g.children));\n } else if (!group[i].children && isExpanded) {\n // the group doesn't have subgroups and the group is expanded\n const innerCount = count + group[i].count;\n if (count <= to) {\n let groupFrom = 0;\n let groupTo = 0;\n if (innerCount >= from) {\n groupFrom = Math.max(from - count, 0);\n if (innerCount <= to + 1) {\n groupTo = group[i].count;\n } else {\n groupTo = groupFrom + (to + 1 - from - includedRowCount);\n }\n group[i].visibleRow = true;\n let updatedGroupFrom = groupFrom;\n // Sticky group header logic\n if (!includeThisGroup && groupTo > groupFrom + 2) {\n if (group[i].level! >= 1) {\n updatedGroupFrom = groupFrom + 2;\n } else {\n updatedGroupFrom = groupFrom + 1;\n }\n }\n includeGroup(group[i], updatedGroupFrom, groupTo, parentGroups, groupFilters);\n }\n includedRowCount += groupTo - groupFrom;\n }\n count = innerCount;\n }\n\n if (group[i].isHierarchical && aggregationInfo && aggregationInfo.length > 0 && isExpanded) {\n count += 1;\n group[i].showHierarchicalFooter = true;\n\n if (group[i].visibleRow && includedRowCount <= to) {\n includedRowCount += 1;\n }\n }\n }\n return [count, includedRowCount];\n}\n\nconst constructGroupingPagination = (\n groupingInfo: NonNullable<RsStore['groupingInfo']>,\n groupToggle: GroupToggle | undefined,\n paginationOptions: NonNullable<State['paginationOptions']>[keyof NonNullable<\n State['paginationOptions']\n >],\n allGroupsExpanded: boolean | undefined,\n state: State,\n getView: BeforeRenderFeatureProps['getView']\n) => {\n const groupFilters: GroupFilter[] = [];\n getRecordsCount(\n groupingInfo,\n 0,\n 0,\n {},\n paginationOptions.startIndex,\n paginationOptions.endIndex,\n groupFilters,\n groupToggle,\n allGroupsExpanded,\n state,\n getView\n );\n return groupFilters;\n};\n\n// This is basically used to update count on non-leaf node.\n// which is the sum of count of leaf node children in their hierarchy.\nfunction updateCountOnNonLeafNode(groupingInfo: GroupedInfo[]) {\n const updateCount = (child: GroupedInfo) => {\n if (child.count !== undefined) return child.count;\n child.count = child.children!.reduce((acc, c) => {\n acc += updateCount(c)!;\n return acc;\n }, 0);\n };\n groupingInfo.forEach(g => updateCount(g));\n}\n\nfunction updateGroupInfo(groupingInfo: GroupedInfo[], groups: Group[]): GroupingInfo[] {\n // iterate groupingInfo using BFS and update basic information.\n const queue = [...groupingInfo] as GroupingInfo[];\n while (queue.length) {\n const child = queue.pop();\n if (child) {\n if (!child.hierarchy) child.hierarchy = [child.name!];\n child.level = child.level || 0;\n const matchingGroup = groups.find(g => g.level === child.level);\n child.groupBy = getGroupKey(matchingGroup!);\n\n if (child.children) {\n // update level before pushing children to queue.\n child.children.forEach(c => {\n c.level = child.level + 1;\n c.hierarchy = [...child.hierarchy];\n c.hierarchy.push(c.name!);\n });\n queue.push(...child.children);\n }\n }\n }\n return groupingInfo as GroupingInfo[];\n}\n\nfunction updateCountFromGroupingInfo(\n getView: BeforeRenderFeatureProps['getView'],\n getRsStore: BeforeRenderFeatureProps['getRsStore']\n) {\n if (getView().countGeneratedInternally || isEmpty(getView().resultsCount)) {\n const countFromGroupingInfo = getRsStore().groupingInfo?.reduce(\n (acc, group) => (group.count ? acc + group.count : acc),\n 0\n );\n\n const countPayload = { count: countFromGroupingInfo, _countGeneratedInternally: true };\n getView().type.setRecordCount(countPayload);\n }\n}\n\nasync function onGroupsChange([{ getRsProps, getRsStore, getView, getState }]: [\n featureProps: BeforeRenderFeatureProps\n]) {\n const rsStore = getRsStore();\n const rsProps = getRsProps();\n const state = getState();\n const { groups } = state;\n\n if (groups?.length! > 0 && getView().meta.grouping) {\n try {\n const groupingInfo =\n (await rsProps.apiContext.fetchGroupedInfo?.(deepCopy(state), getView().meta, {\n ...(getRsStore().refreshInProgress && {\n invalidateCache: true,\n invalidateCacheToken: getRsStore().refreshToken\n })\n })) || [];\n // Here update group info with basic properties like level, group by, expand state etc.\n // to make calculation easy.\n // TODO: FIXME - Check if count on non leaf node is required\n updateCountOnNonLeafNode(groupingInfo);\n rsStore.groupingInfo = updateGroupInfo(groupingInfo, groups!);\n\n // FIXME: once infinite virtualizer supports the grouping, we need not compute the count from grouping\n // Prepare the count from the groups count until the actual count returns\n updateCountFromGroupingInfo(getView, getRsStore);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('API call failed', err);\n }\n } else rsStore.groupingInfo = [];\n\n getView().columns!.forEach(column => {\n const grouped = groups?.findIndex(group => group.columnId === column.field.id)! >= 0;\n column = column.setProp('grouped', grouped);\n });\n}\n\nfunction autoExpandGroups([{ dispatch, getState }]: [featureProps: BeforeRenderFeatureProps]) {\n const { allGroupsExpanded = true } = getState();\n dispatch(actionGroupingExpandCollapseAll(allGroupsExpanded));\n}\n\nfunction updateHierarchicalGroupInfo(\n groupingInfo: HierarchicalGroupedInfo[],\n hierarchicalGroup: HierarchicalInfo\n) {\n const queue = [...groupingInfo] as HierarchicalGroupingInfo[];\n\n while (queue.length) {\n const child = queue.pop();\n const node = child!.info;\n\n if (child) {\n child.level = child.level || 0;\n child.isHierarchical = true;\n child.parentId = hierarchicalGroup.parentId;\n child.targetId = hierarchicalGroup.targetId;\n child.groupBy = (hierarchicalGroup.sortById || hierarchicalGroup.targetId)!;\n\n if (node) {\n child.name = node[(hierarchicalGroup.sortById || hierarchicalGroup.targetId)!] as string;\n child.hierarchy = [node[hierarchicalGroup.targetId!] as string];\n }\n\n if (child.children) {\n // update level before pushing children to queue.\n child.children.forEach(c => {\n c.level = child.level! + 1;\n });\n queue.push(...child.children);\n }\n }\n }\n}\n\nasync function onHierarchicalGroupChange([{ getState, getRsProps, getRsStore, getView }]: [\n featureProps: BeforeRenderFeatureProps\n]) {\n const { hierarchicalGroup } = getState();\n const rsProps = getRsProps();\n const rsStore = getRsStore();\n if (hierarchicalGroup && hierarchicalGroup.parentId) {\n try {\n const groupingInfo =\n (await rsProps.apiContext.fetchHierarchicalGroupedInfo?.(\n deepCopy(getState()),\n getView().meta,\n {\n ...(getRsStore().refreshInProgress && {\n invalidateCache: true,\n invalidateCacheToken: getRsStore().refreshToken\n })\n }\n )) || [];\n\n getView().setProp('hierarchicalGroupEnabled', true);\n\n updateHierarchicalGroupInfo(groupingInfo, hierarchicalGroup);\n rsStore.groupingInfo = groupingInfo as HierarchicalGroupingInfo[];\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('API call failed', err);\n }\n } else {\n getView().setProp('hierarchicalGroupEnabled', false);\n }\n}\n\nconst getTotalItemCount = (\n getView: BeforeRenderFeatureProps['getView'],\n state: State,\n groupingInfo: NonNullable<RsStore['groupingInfo']>\n) => {\n // Calculate total group count and update instance.\n // and datanode count based on group expand state.\n let totalItemCount = 0;\n const stack = [...groupingInfo];\n const { groupToggle, allGroupsExpanded } = state;\n\n while (stack.length) {\n const child = stack.shift();\n // We are considering header count whether if it is of a hierarchical node or\n // a normal group node, and it has data associated with it in its hierarchy.\n if (child) {\n totalItemCount += 1;\n const isSubGroupPresent = child.children && child.children.length;\n const isExpanded = isNodeExpanded(groupToggle, child, allGroupsExpanded);\n if (isExpanded && isSubGroupPresent) {\n stack.unshift(...child.children!);\n } else if (isExpanded && !isSubGroupPresent) {\n totalItemCount += child.count;\n }\n\n if (child.showHierarchicalFooter) {\n totalItemCount += 1;\n }\n }\n }\n return totalItemCount;\n};\n\nconst updateGroupFilters = ([{ getState, getRsStore, getView }]: [\n featureProps: BeforeRenderFeatureProps\n]) => {\n const { paginationOptions, groupToggle, allGroupsExpanded } = getState();\n const rsStore = getRsStore();\n const { groupingInfo } = rsStore;\n // group info is expected to be [] when there are no groups.\n if (groupingInfo) {\n if (!groupingInfo.length && rsStore.groupFilters && !rsStore.groupFilters.length) return;\n rsStore.groupFilters = constructGroupingPagination(\n groupingInfo,\n groupToggle,\n paginationOptions!.rootVirtualiser,\n allGroupsExpanded,\n getState(),\n getView\n );\n }\n};\n\nfunction postFetch(\n rsInternal: RsInternal,\n memoizedPrepareGroupHeaders: MemoizedFunction<\n [\n groupingInfo: RsStore['groupingInfo'],\n groupFilters: RsStore['groupFilters'],\n rsInternal: RsInternal,\n groupToggle?: State['groupToggle'],\n allGroupsExpanded?: State['allGroupsExpanded']\n ],\n ReturnType<typeof prepareGroupHeaders>\n >\n) {\n const { getRsStore, getView, getRsStateResolver } = rsInternal;\n const rsStore = getRsStore();\n const { getState } = getRsStateResolver();\n if (!rsStore.groupingInfo || !rsStore.groupingInfo.length) {\n // As we are giving ways to always use header, though grouping is not in place\n // update total item count given by API.\n getView().setProp('totalItemCount', getView().resultsCount);\n memoizedPrepareGroupHeaders([[], [], rsInternal], [getView().rows!.length]);\n } else {\n // As our group headers are representing data in UI, so\n // like data after every fetch group headers should also change so that\n // UI get to know about the latest group.\n getView().setProp(\n 'totalItemCount',\n getTotalItemCount(getView, getState(), rsStore.groupingInfo)\n );\n memoizedPrepareGroupHeaders([\n rsStore.groupingInfo,\n rsStore.groupFilters,\n rsInternal,\n getState().groupToggle,\n getState().allGroupsExpanded\n ]);\n }\n}\n\n// TODO: Need to make changes in grouping to support 0 based indexing inclusive start and end index.\n/**\n * Handles the grouping feature for repeating structures.\n *\n * This method performs the following tasks:\n * - Fetches the grouping information, either via {@link ApiContext.fetchGroupedInfo} or {@link ApiContext.fetchHierarchicalGroupedInfo}, and stores the result in {@link RsStore.groupingInfo}.\n * - Prepares group filters based on the grouping information, then sets these filters in {@link RsStore.groupFilters}.\n * - Manages the automatic expansion of groups.\n * - Prepares group headers from the fetched grouping information and sets them in {@link View.groupHeaders}.\n */\nexport default (rsInternal: RsInternal) => {\n const memoizedOnGroupsChange = withMemoization(onGroupsChange);\n const memorizeOnHierarchicalGroupChange = withMemoization(onHierarchicalGroupChange);\n const memoizedUpdateGroupFilters = withMemoization(updateGroupFilters);\n const memoizedAutoExpandGroups = withMemoization(autoExpandGroups);\n\n // Prepare a group header even though groups are not present to have one flow.\n // depend on after fetch event as it depends on data when no grouping is there.\n rsInternal\n .getPubSubUtils()\n .subscribe(AFTER_FETCH, () => postFetch(rsInternal, withMemoization(prepareGroupHeaders)));\n\n async function execute(featureProps: BeforeRenderFeatureProps) {\n const { getState, getRsStore } = featureProps;\n const state = getState();\n // TOdo: Fixme ISSUE-76344... try to not rely on state.personalization?.active\n await memoizedOnGroupsChange(\n [featureProps],\n [\n state.groups,\n state.filterExpression,\n state.search?.query,\n state.personalization?.active,\n state.refresh,\n state.aggregationInfo,\n state.hiddenColumns\n ]\n );\n\n memoizedAutoExpandGroups([featureProps], [state.personalization?.active]);\n\n await memorizeOnHierarchicalGroupChange(\n [featureProps],\n [\n state.hierarchicalGroup,\n state.filterExpression,\n state.search?.query,\n state.aggregationInfo,\n state.personalization?.active\n ]\n );\n // In the new grouping, update group info in state.\n // Action dispatched for group info will prepare group headers.\n if (state.paginationOptions) {\n // TODO: use this comparator for optimization but isVisible calculated prop on grouping info needs to be handled.ISSUE-80012\n // const comparator =(prev, next) => {\n // if (prev[1] !== next[1] || prev[3] !== next[3]) return false;\n // return compareArray(prev[2], next[2], ['children', 'count', 'name']);\n // };\n memoizedUpdateGroupFilters(\n [featureProps],\n [\n state.paginationOptions[Object.keys(state.paginationOptions || {})[0]],\n getRsStore().groupingInfo,\n state.groupToggle,\n state.allGroupsExpanded\n ]\n );\n }\n }\n\n // As we are generating one flow, this is required. TODO: Need to take decision\n // conditional block on UI or feature push though not enabled.\n if (rsInternal.getView().meta.grouping) {\n return execute;\n }\n\n return undefined;\n};\n"]}
@@ -1,4 +1,6 @@
1
1
  import type RsInternal from '../../../RsInternal';
2
+ import defaultTranslations from '../../../defaultTranslations';
3
+ export declare const isTranslationKey: (key: string) => key is keyof typeof defaultTranslations;
2
4
  /**
3
5
  * Prepares {@link View.columns columns} for the view from {@link Meta.fieldDefs fieldDefs}.
4
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"prepareColumns.d.ts","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/prepareColumns.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAgFlD;;GAEG;yBACa,YAAY,UAAU;AAAtC,wBAOE"}
1
+ {"version":3,"file":"prepareColumns.d.ts","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/prepareColumns.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAWlD,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAqB/D,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,GAAG,IAAI,MAAM,OAAO,mBAElE,CAAC;AA2EF;;GAEG;yBACa,YAAY,UAAU;AAAtC,wBAOE"}
@@ -1,6 +1,7 @@
1
1
  import { isRowErrorFieldEnabled, isRowReorderFieldEnabled, isRowSelectFieldEnabled, withMemoization } from '../../../utils/util';
2
2
  import Column from '../../../generators/ColumnGenerator';
3
- import { rowActionColumnMeta, rowDragDropColumnMeta, rowErrorColumnMeta, rowSelectColumnMeta, SELECTION_MODES, TEMPLATES } from '../../../constants';
3
+ import { rowActionColumnMeta, rowDragDropColumnMeta, rowErrorColumnMeta, rowSelectColumnMeta } from '../../../constants';
4
+ import defaultTranslations from '../../../defaultTranslations';
4
5
  const addFrozenColumnAtIndex = (rsInternal, field, options, index) => {
5
6
  const { getView, getRsStateResolver } = rsInternal;
6
7
  const { getState } = getRsStateResolver();
@@ -11,28 +12,54 @@ const addFrozenColumnAtIndex = (rsInternal, field, options, index) => {
11
12
  getView().columns[index].applyFreezeAtIndex(index);
12
13
  }
13
14
  };
15
+ export const isTranslationKey = (key) => {
16
+ return key in defaultTranslations;
17
+ };
14
18
  const prepareOOTBColumns = ([rsInternal]) => {
15
19
  const { getView } = rsInternal;
20
+ const translate = rsInternal.getRsStore().translate;
16
21
  let ootColumnsIndex = 0;
17
22
  // Add error column.
18
23
  if (isRowErrorFieldEnabled(getView().meta)) {
19
24
  addFrozenColumnAtIndex(rsInternal,
20
25
  // Error column is added as a hidden column. Toggles based on state.errors.dataErrors
21
- { ...rowErrorColumnMeta.field, show: getView().meta.rowErrorField?.show ?? false }, rowErrorColumnMeta.options, ootColumnsIndex);
26
+ {
27
+ ...rowErrorColumnMeta.field,
28
+ label: isTranslationKey(rowErrorColumnMeta.field.label)
29
+ ? translate(rowErrorColumnMeta.field.label)
30
+ : rowErrorColumnMeta.field.label,
31
+ show: getView().meta.rowErrorField?.show ?? false
32
+ }, rowErrorColumnMeta.options, ootColumnsIndex);
22
33
  ootColumnsIndex += 1;
23
34
  }
24
35
  // Add row drag drop column.
25
36
  if (isRowReorderFieldEnabled(getView().meta)) {
26
- addFrozenColumnAtIndex(rsInternal, { ...rowDragDropColumnMeta.field, show: getView().meta.rowReorderField?.show ?? true }, rowDragDropColumnMeta.options, ootColumnsIndex);
37
+ addFrozenColumnAtIndex(rsInternal, {
38
+ ...rowDragDropColumnMeta.field,
39
+ label: isTranslationKey(rowDragDropColumnMeta.field.label)
40
+ ? translate(rowDragDropColumnMeta.field.label)
41
+ : rowDragDropColumnMeta.field.label,
42
+ show: getView().meta.rowReorderField?.show ?? true
43
+ }, rowDragDropColumnMeta.options, ootColumnsIndex);
27
44
  ootColumnsIndex += 1;
28
45
  }
29
46
  // Add selection column.
30
47
  if (isRowSelectFieldEnabled(getView().meta)) {
31
- addFrozenColumnAtIndex(rsInternal, rowSelectColumnMeta.field, rowSelectColumnMeta.options, ootColumnsIndex);
48
+ addFrozenColumnAtIndex(rsInternal, {
49
+ ...rowSelectColumnMeta.field,
50
+ label: isTranslationKey(rowSelectColumnMeta.field.label)
51
+ ? translate(rowSelectColumnMeta.field.label)
52
+ : rowSelectColumnMeta.field.label
53
+ }, rowSelectColumnMeta.options, ootColumnsIndex);
32
54
  }
33
55
  // Add row action column.
34
56
  if (getView().meta.editing || getView().meta.deleting) {
35
- getView().addColumn(rowActionColumnMeta.field, rowActionColumnMeta.options);
57
+ getView().addColumn({
58
+ ...rowActionColumnMeta.field,
59
+ label: isTranslationKey(rowActionColumnMeta.field.label)
60
+ ? translate(rowActionColumnMeta.field.label)
61
+ : rowActionColumnMeta.field.label
62
+ }, rowActionColumnMeta.options);
36
63
  }
37
64
  };
38
65
  function prepareColumns([rsInternal]) {
@@ -1 +1 @@
1
- {"version":3,"file":"prepareColumns.js","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/prepareColumns.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport {\n isRowErrorFieldEnabled,\n isRowReorderFieldEnabled,\n isRowSelectFieldEnabled,\n withMemoization\n} from '../../../utils/util';\nimport Column from '../../../generators/ColumnGenerator';\nimport type RsInternal from '../../../RsInternal';\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type View from '../../../generators/ViewGenerator';\nimport type { FieldDef, Meta } from '../../../../../types/Meta.types';\nimport {\n rowActionColumnMeta,\n rowDragDropColumnMeta,\n rowErrorColumnMeta,\n rowSelectColumnMeta,\n SELECTION_MODES,\n TEMPLATES\n} from '../../../constants';\nimport type { ColumnConfig } from '../../../generators/ColumnGenerator.types';\n\nconst addFrozenColumnAtIndex = (\n rsInternal: RsInternal,\n field: FieldDef,\n options: OmitStrict<ColumnConfig, 'field'>,\n index: number\n) => {\n const { getView, getRsStateResolver } = rsInternal;\n const { getState } = getRsStateResolver();\n getView().addColumnAtIndex(\n // error column initially should be hidden and will be displayed only when there are errors in state, unless consumer needs to display it on load.\n field,\n options,\n index\n );\n if (!getState().freezeColumns?.includes(field.id)) {\n getView().columns![index].applyFreezeAtIndex(index);\n }\n};\n\nconst prepareOOTBColumns = ([rsInternal]: [rsInternal: RsInternal]) => {\n const { getView } = rsInternal;\n let ootColumnsIndex = 0;\n // Add error column.\n if (isRowErrorFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n // Error column is added as a hidden column. Toggles based on state.errors.dataErrors\n { ...rowErrorColumnMeta.field, show: getView().meta.rowErrorField?.show ?? false },\n rowErrorColumnMeta.options,\n ootColumnsIndex\n );\n ootColumnsIndex += 1;\n }\n // Add row drag drop column.\n if (isRowReorderFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n { ...rowDragDropColumnMeta.field, show: getView().meta.rowReorderField?.show ?? true },\n rowDragDropColumnMeta.options,\n ootColumnsIndex\n );\n ootColumnsIndex += 1;\n }\n // Add selection column.\n if (isRowSelectFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n rowSelectColumnMeta.field,\n rowSelectColumnMeta.options,\n ootColumnsIndex\n );\n }\n\n // Add row action column.\n if (getView().meta.editing || getView().meta.deleting) {\n getView().addColumn(rowActionColumnMeta.field, rowActionColumnMeta.options);\n }\n};\n\nfunction prepareColumns([rsInternal]: [rsInternal: RsInternal]) {\n const columns = rsInternal\n .getView()\n .meta.fieldDefs.map(f => new Column({ field: f }, rsInternal));\n rsInternal.getView().columns = columns;\n}\n\n/**\n * Prepares {@link View.columns columns} for the view from {@link Meta.fieldDefs fieldDefs}.\n */\nexport default (rsInternal: RsInternal) => {\n const memoizedPrepareColumns = withMemoization(prepareColumns);\n const memoizedPrepareOOTBColumns = withMemoization(prepareOOTBColumns);\n return function execute() {\n memoizedPrepareColumns([rsInternal], [rsInternal.getView().meta.fieldDefs]);\n memoizedPrepareOOTBColumns([rsInternal], [rsInternal.getView().meta]);\n };\n};\n"]}
1
+ {"version":3,"file":"prepareColumns.js","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/prepareColumns.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport {\n isRowErrorFieldEnabled,\n isRowReorderFieldEnabled,\n isRowSelectFieldEnabled,\n withMemoization\n} from '../../../utils/util';\nimport Column from '../../../generators/ColumnGenerator';\nimport type RsInternal from '../../../RsInternal';\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type View from '../../../generators/ViewGenerator';\nimport type { FieldDef, Meta } from '../../../../../types/Meta.types';\nimport {\n rowActionColumnMeta,\n rowDragDropColumnMeta,\n rowErrorColumnMeta,\n rowSelectColumnMeta\n} from '../../../constants';\nimport type { ColumnConfig } from '../../../generators/ColumnGenerator.types';\nimport defaultTranslations from '../../../defaultTranslations';\n\nconst addFrozenColumnAtIndex = (\n rsInternal: RsInternal,\n field: FieldDef,\n options: OmitStrict<ColumnConfig, 'field'>,\n index: number\n) => {\n const { getView, getRsStateResolver } = rsInternal;\n const { getState } = getRsStateResolver();\n getView().addColumnAtIndex(\n // error column initially should be hidden and will be displayed only when there are errors in state, unless consumer needs to display it on load.\n field,\n options,\n index\n );\n if (!getState().freezeColumns?.includes(field.id)) {\n getView().columns![index].applyFreezeAtIndex(index);\n }\n};\n\nexport const isTranslationKey = (key: string): key is keyof typeof defaultTranslations => {\n return key in defaultTranslations;\n};\n\nconst prepareOOTBColumns = ([rsInternal]: [rsInternal: RsInternal]) => {\n const { getView } = rsInternal;\n const translate = rsInternal.getRsStore().translate;\n let ootColumnsIndex = 0;\n // Add error column.\n if (isRowErrorFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n // Error column is added as a hidden column. Toggles based on state.errors.dataErrors\n {\n ...rowErrorColumnMeta.field,\n label: isTranslationKey(rowErrorColumnMeta.field.label)\n ? translate(rowErrorColumnMeta.field.label)\n : rowErrorColumnMeta.field.label,\n show: getView().meta.rowErrorField?.show ?? false\n },\n rowErrorColumnMeta.options,\n ootColumnsIndex\n );\n ootColumnsIndex += 1;\n }\n // Add row drag drop column.\n if (isRowReorderFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n {\n ...rowDragDropColumnMeta.field,\n label: isTranslationKey(rowDragDropColumnMeta.field.label)\n ? translate(rowDragDropColumnMeta.field.label)\n : rowDragDropColumnMeta.field.label,\n show: getView().meta.rowReorderField?.show ?? true\n },\n rowDragDropColumnMeta.options,\n ootColumnsIndex\n );\n ootColumnsIndex += 1;\n }\n // Add selection column.\n if (isRowSelectFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n {\n ...rowSelectColumnMeta.field,\n label: isTranslationKey(rowSelectColumnMeta.field.label)\n ? translate(rowSelectColumnMeta.field.label)\n : rowSelectColumnMeta.field.label\n },\n rowSelectColumnMeta.options,\n ootColumnsIndex\n );\n }\n\n // Add row action column.\n if (getView().meta.editing || getView().meta.deleting) {\n getView().addColumn(\n {\n ...rowActionColumnMeta.field,\n label: isTranslationKey(rowActionColumnMeta.field.label)\n ? translate(rowActionColumnMeta.field.label)\n : rowActionColumnMeta.field.label\n },\n rowActionColumnMeta.options\n );\n }\n};\n\nfunction prepareColumns([rsInternal]: [rsInternal: RsInternal]) {\n const columns = rsInternal\n .getView()\n .meta.fieldDefs.map(f => new Column({ field: f }, rsInternal));\n rsInternal.getView().columns = columns;\n}\n\n/**\n * Prepares {@link View.columns columns} for the view from {@link Meta.fieldDefs fieldDefs}.\n */\nexport default (rsInternal: RsInternal) => {\n const memoizedPrepareColumns = withMemoization(prepareColumns);\n const memoizedPrepareOOTBColumns = withMemoization(prepareOOTBColumns);\n return function execute() {\n memoizedPrepareColumns([rsInternal], [rsInternal.getView().meta.fieldDefs]);\n memoizedPrepareOOTBColumns([rsInternal], [rsInternal.getView().meta]);\n };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rowDragDrop.d.ts","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/rowDragDrop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAyQrE;;;GAGG;yBACa,YAAY,UAAU,MASZ,cAAc,wBAAwB;AAThE,wBAgBE"}
1
+ {"version":3,"file":"rowDragDrop.d.ts","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/rowDragDrop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAkRrE;;;GAGG;yBACa,YAAY,UAAU,MASZ,cAAc,wBAAwB;AAThE,wBAgBE"}
@@ -27,7 +27,9 @@ const setGhostImage = ({ getView }, e) => {
27
27
  dragProxy.style.background = 'rgba(0, 0, 0, 0.21)';
28
28
  dragProxy.style.zIndex = '-1';
29
29
  getView().getDomContainer().appendChild(dragProxy);
30
- e.dataTransfer.setDragImage(dragProxy, 0, 0);
30
+ if (e.dataTransfer) {
31
+ e.dataTransfer.setDragImage(dragProxy, 0, 0);
32
+ }
31
33
  setTimeout(() => {
32
34
  dragProxy.parentNode.removeChild(dragProxy);
33
35
  }, 1000);
@@ -108,7 +110,11 @@ const dragStartCb = (featureProps, ev) => {
108
110
  featureProps.getRsStore().rowDragDropRef.contextDropCb = dropCallBack;
109
111
  featureProps.getRsStore().rowDragDropRef.contextDragOverCb = dragOverCallBack;
110
112
  setGhostImage(featureProps, ev);
111
- ev.dataTransfer.effectAllowed = 'move';
113
+ if (ev.dataTransfer) {
114
+ ev.dataTransfer.effectAllowed = 'move';
115
+ // Setting up some dummy data(dragged row item key) to make drag drop work in firefox. Refer https://medium.com/%40reiberdatschi/common-pitfalls-with-html5-drag-n-drop-api-9f011a09ee6c
116
+ ev.dataTransfer.setData('text/plain', 'RS_Dragged_Row_Item');
117
+ }
112
118
  // fail safe reset drag target.
113
119
  if (featureProps.getRsStore().rowDragDropRef.dragTarget)
114
120
  featureProps.getRsStore().rowDragDropRef.dragTarget = undefined;
@@ -159,7 +165,9 @@ const dragEnterCb = ({ getRsStore }, ev) => {
159
165
  : [];
160
166
  rsStore.rowDragDropRef.dropTarget.push(ev.currentTarget);
161
167
  ev.currentTarget.classList.add('dragEnter');
162
- ev.dataTransfer.dropEffect = 'move';
168
+ if (ev.dataTransfer) {
169
+ ev.dataTransfer.dropEffect = 'move';
170
+ }
163
171
  rsStore.rowDragDropRef.dropTargetCoord = ev.currentTarget.getBoundingClientRect();
164
172
  addDropEffect(ev.currentTarget);
165
173
  if (rsStore.rowDragDropRef.dropTarget.length > 1) {