@revolist/revogrid 4.12.2 → 4.12.4

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 (176) hide show
  1. package/dist/cjs/{app-globals-66b5e3d1.js → app-globals-f72a6199.js} +2 -2
  2. package/dist/cjs/{app-globals-66b5e3d1.js.map → app-globals-f72a6199.js.map} +1 -1
  3. package/dist/cjs/{column.drag.plugin-2c24c512.js → column.drag.plugin-f196a293.js} +181 -187
  4. package/dist/cjs/column.drag.plugin-f196a293.js.map +1 -0
  5. package/dist/cjs/{column.service-cb3d757e.js → column.service-b59380a3.js} +78 -58
  6. package/dist/cjs/column.service-b59380a3.js.map +1 -0
  7. package/dist/cjs/{dimension.helpers-4527475f.js → dimension.helpers-5b822a09.js} +3 -2
  8. package/dist/cjs/dimension.helpers-5b822a09.js.map +1 -0
  9. package/dist/cjs/{edit.utils-787a9e1d.js → edit.utils-32d4c9e4.js} +2 -2
  10. package/dist/cjs/{edit.utils-787a9e1d.js.map → edit.utils-32d4c9e4.js.map} +1 -1
  11. package/dist/cjs/{filter.button-48acc2db.js → filter.button-2708e602.js} +2 -2
  12. package/dist/cjs/{filter.button-48acc2db.js.map → filter.button-2708e602.js.map} +1 -1
  13. package/dist/cjs/{header-cell-renderer-9d81a1fe.js → header-cell-renderer-a66fe375.js} +3 -3
  14. package/dist/cjs/{header-cell-renderer-9d81a1fe.js.map → header-cell-renderer-a66fe375.js.map} +1 -1
  15. package/dist/cjs/{index-bdea2cb6.js → index-8006d065.js} +8 -1
  16. package/dist/cjs/index-8006d065.js.map +1 -0
  17. package/dist/cjs/index.cjs.js +26 -10
  18. package/dist/cjs/index.cjs.js.map +1 -1
  19. package/dist/cjs/{key.utils-fcd0dda2.js → key.utils-05f14738.js} +2 -2
  20. package/dist/cjs/{key.utils-fcd0dda2.js.map → key.utils-05f14738.js.map} +1 -1
  21. package/dist/cjs/loader.cjs.js +2 -2
  22. package/dist/cjs/revo-grid.cjs.entry.js +7 -7
  23. package/dist/cjs/revo-grid.cjs.js +2 -2
  24. package/dist/cjs/revogr-attribution_7.cjs.entry.js +7 -7
  25. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +5 -5
  26. package/dist/cjs/revogr-data_4.cjs.entry.js +15 -51
  27. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  28. package/dist/cjs/revogr-filter-panel.cjs.entry.js +2 -2
  29. package/dist/cjs/sorting.sign-a1e9d97a.js +72 -0
  30. package/dist/cjs/sorting.sign-a1e9d97a.js.map +1 -0
  31. package/dist/cjs/{text-editor-9f64bd5e.js → text-editor-82f53111.js} +3 -3
  32. package/dist/cjs/{text-editor-9f64bd5e.js.map → text-editor-82f53111.js.map} +1 -1
  33. package/dist/cjs/{throttle-6a2a8510.js → throttle-08957661.js} +2 -2
  34. package/dist/cjs/{throttle-6a2a8510.js.map → throttle-08957661.js.map} +1 -1
  35. package/dist/cjs/{viewport.store-0c68c932.js → viewport.store-4dbfeaa3.js} +2 -2
  36. package/dist/cjs/{viewport.store-0c68c932.js.map → viewport.store-4dbfeaa3.js.map} +1 -1
  37. package/dist/collection/components/data/cell-renderer.js +1 -1
  38. package/dist/collection/components/data/cell-renderer.js.map +1 -1
  39. package/dist/collection/components/data/revogr-data.js +2 -1
  40. package/dist/collection/components/data/revogr-data.js.map +1 -1
  41. package/dist/collection/plugins/filter/filter.plugin.js +1 -5
  42. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -1
  43. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +58 -57
  44. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -1
  45. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +16 -6
  46. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -1
  47. package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -1
  48. package/dist/collection/plugins/groupingRow/grouping.service.js +70 -54
  49. package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -1
  50. package/dist/collection/plugins/index.js +0 -1
  51. package/dist/collection/plugins/index.js.map +1 -1
  52. package/dist/collection/serve/data.js +5 -0
  53. package/dist/collection/store/dataSource/trimmed.plugin.js +1 -0
  54. package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -1
  55. package/dist/collection/types/interfaces.js.map +1 -1
  56. package/dist/collection/utils/column.utils.js +1 -1
  57. package/dist/collection/utils/column.utils.js.map +1 -1
  58. package/dist/esm/{app-globals-60fd3b54.js → app-globals-6b929fd8.js} +2 -2
  59. package/dist/esm/{app-globals-60fd3b54.js.map → app-globals-6b929fd8.js.map} +1 -1
  60. package/dist/esm/{column.drag.plugin-6a84d7b0.js → column.drag.plugin-caf3ce50.js} +180 -188
  61. package/dist/esm/column.drag.plugin-caf3ce50.js.map +1 -0
  62. package/dist/esm/{column.service-ff8f75de.js → column.service-f39c0a1d.js} +76 -59
  63. package/dist/esm/column.service-f39c0a1d.js.map +1 -0
  64. package/dist/esm/{dimension.helpers-a4dd4f76.js → dimension.helpers-5567e424.js} +3 -2
  65. package/dist/esm/dimension.helpers-5567e424.js.map +1 -0
  66. package/dist/esm/{edit.utils-dd8b5cd7.js → edit.utils-b59306be.js} +2 -2
  67. package/dist/esm/{edit.utils-dd8b5cd7.js.map → edit.utils-b59306be.js.map} +1 -1
  68. package/dist/esm/{filter.button-d9b783c1.js → filter.button-84396156.js} +2 -2
  69. package/dist/esm/{filter.button-d9b783c1.js.map → filter.button-84396156.js.map} +1 -1
  70. package/dist/esm/{header-cell-renderer-4508273a.js → header-cell-renderer-31f53644.js} +3 -3
  71. package/dist/esm/{header-cell-renderer-4508273a.js.map → header-cell-renderer-31f53644.js.map} +1 -1
  72. package/dist/esm/{index-b5695870.js → index-f6fae858.js} +8 -2
  73. package/dist/esm/index-f6fae858.js.map +1 -0
  74. package/dist/esm/index.js +11 -11
  75. package/dist/esm/{key.utils-38b263fb.js → key.utils-3632161b.js} +2 -2
  76. package/dist/esm/{key.utils-38b263fb.js.map → key.utils-3632161b.js.map} +1 -1
  77. package/dist/esm/loader.js +3 -3
  78. package/dist/esm/revo-grid.entry.js +7 -7
  79. package/dist/esm/revo-grid.js +3 -3
  80. package/dist/esm/revogr-attribution_7.entry.js +7 -7
  81. package/dist/esm/revogr-clipboard_3.entry.js +5 -5
  82. package/dist/esm/revogr-data_4.entry.js +13 -49
  83. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  84. package/dist/esm/revogr-filter-panel.entry.js +2 -2
  85. package/dist/esm/sorting.sign-c02e3b12.js +65 -0
  86. package/dist/esm/sorting.sign-c02e3b12.js.map +1 -0
  87. package/dist/esm/{text-editor-7fbbcea7.js → text-editor-e47e56c3.js} +3 -3
  88. package/dist/esm/{text-editor-7fbbcea7.js.map → text-editor-e47e56c3.js.map} +1 -1
  89. package/dist/esm/{throttle-61be638a.js → throttle-05489451.js} +2 -2
  90. package/dist/esm/{throttle-61be638a.js.map → throttle-05489451.js.map} +1 -1
  91. package/dist/esm/{viewport.store-e66c1a9b.js → viewport.store-c18a25a6.js} +2 -2
  92. package/dist/esm/{viewport.store-e66c1a9b.js.map → viewport.store-c18a25a6.js.map} +1 -1
  93. package/dist/revo-grid/app-globals-6b929fd8.js +5 -0
  94. package/dist/revo-grid/column.drag.plugin-caf3ce50.js +5 -0
  95. package/dist/revo-grid/column.drag.plugin-caf3ce50.js.map +1 -0
  96. package/dist/revo-grid/column.service-f39c0a1d.js +5 -0
  97. package/dist/revo-grid/column.service-f39c0a1d.js.map +1 -0
  98. package/dist/revo-grid/{dimension.helpers-a4dd4f76.js → dimension.helpers-5567e424.js} +2 -2
  99. package/dist/revo-grid/{dimension.helpers-a4dd4f76.js.map → dimension.helpers-5567e424.js.map} +1 -1
  100. package/dist/revo-grid/edit.utils-b59306be.js +5 -0
  101. package/dist/revo-grid/{filter.button-d9b783c1.js → filter.button-84396156.js} +2 -2
  102. package/dist/revo-grid/{header-cell-renderer-4508273a.js → header-cell-renderer-31f53644.js} +2 -2
  103. package/dist/revo-grid/index-f6fae858.js +6 -0
  104. package/dist/revo-grid/index-f6fae858.js.map +1 -0
  105. package/dist/revo-grid/index.esm.js +1 -1
  106. package/dist/revo-grid/index.esm.js.map +1 -1
  107. package/dist/revo-grid/key.utils-3632161b.js +5 -0
  108. package/dist/revo-grid/revo-grid.entry.js +1 -1
  109. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  110. package/dist/revo-grid/revo-grid.esm.js +1 -1
  111. package/dist/revo-grid/revogr-attribution_7.entry.js +1 -1
  112. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  113. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  114. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  115. package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
  116. package/dist/revo-grid/sorting.sign-c02e3b12.js +5 -0
  117. package/dist/revo-grid/sorting.sign-c02e3b12.js.map +1 -0
  118. package/dist/revo-grid/text-editor-e47e56c3.js +5 -0
  119. package/dist/revo-grid/{throttle-61be638a.js → throttle-05489451.js} +2 -2
  120. package/dist/revo-grid/{viewport.store-e66c1a9b.js → viewport.store-c18a25a6.js} +2 -2
  121. package/dist/types/plugins/filter/filter.plugin.d.ts +2 -1
  122. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +8 -4
  123. package/dist/types/plugins/groupingRow/grouping.row.renderer.d.ts +6 -3
  124. package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +6 -3
  125. package/dist/types/plugins/groupingRow/grouping.service.d.ts +0 -1
  126. package/dist/types/plugins/index.d.ts +0 -1
  127. package/dist/types/store/dataSource/trimmed.plugin.d.ts +3 -1
  128. package/dist/types/types/interfaces.d.ts +19 -0
  129. package/dist/types/utils/column.utils.d.ts +1 -1
  130. package/hydrate/index.js +187 -158
  131. package/hydrate/index.mjs +187 -158
  132. package/package.json +1 -1
  133. package/standalone/column.service.js +73 -56
  134. package/standalone/column.service.js.map +1 -1
  135. package/standalone/data.store.js +1 -0
  136. package/standalone/data.store.js.map +1 -1
  137. package/standalone/index.js +3 -2
  138. package/standalone/index.js.map +1 -1
  139. package/standalone/revo-grid.js +174 -182
  140. package/standalone/revo-grid.js.map +1 -1
  141. package/standalone/revogr-data2.js +19 -9
  142. package/standalone/revogr-data2.js.map +1 -1
  143. package/standalone/revogr-header2.js +1 -1
  144. package/standalone/revogr-overlay-selection2.js +1 -1
  145. package/dist/cjs/column.drag.plugin-2c24c512.js.map +0 -1
  146. package/dist/cjs/column.service-cb3d757e.js.map +0 -1
  147. package/dist/cjs/dimension.helpers-4527475f.js.map +0 -1
  148. package/dist/cjs/index-bdea2cb6.js.map +0 -1
  149. package/dist/cjs/sorting.sign-83d75503.js +0 -15
  150. package/dist/cjs/sorting.sign-83d75503.js.map +0 -1
  151. package/dist/esm/column.drag.plugin-6a84d7b0.js.map +0 -1
  152. package/dist/esm/column.service-ff8f75de.js.map +0 -1
  153. package/dist/esm/dimension.helpers-a4dd4f76.js.map +0 -1
  154. package/dist/esm/index-b5695870.js.map +0 -1
  155. package/dist/esm/sorting.sign-e096163a.js +0 -13
  156. package/dist/esm/sorting.sign-e096163a.js.map +0 -1
  157. package/dist/revo-grid/app-globals-60fd3b54.js +0 -5
  158. package/dist/revo-grid/column.drag.plugin-6a84d7b0.js +0 -5
  159. package/dist/revo-grid/column.drag.plugin-6a84d7b0.js.map +0 -1
  160. package/dist/revo-grid/column.service-ff8f75de.js +0 -5
  161. package/dist/revo-grid/column.service-ff8f75de.js.map +0 -1
  162. package/dist/revo-grid/edit.utils-dd8b5cd7.js +0 -5
  163. package/dist/revo-grid/index-b5695870.js +0 -6
  164. package/dist/revo-grid/index-b5695870.js.map +0 -1
  165. package/dist/revo-grid/key.utils-38b263fb.js +0 -5
  166. package/dist/revo-grid/sorting.sign-e096163a.js +0 -5
  167. package/dist/revo-grid/sorting.sign-e096163a.js.map +0 -1
  168. package/dist/revo-grid/text-editor-7fbbcea7.js +0 -5
  169. /package/dist/revo-grid/{app-globals-60fd3b54.js.map → app-globals-6b929fd8.js.map} +0 -0
  170. /package/dist/revo-grid/{edit.utils-dd8b5cd7.js.map → edit.utils-b59306be.js.map} +0 -0
  171. /package/dist/revo-grid/{filter.button-d9b783c1.js.map → filter.button-84396156.js.map} +0 -0
  172. /package/dist/revo-grid/{header-cell-renderer-4508273a.js.map → header-cell-renderer-31f53644.js.map} +0 -0
  173. /package/dist/revo-grid/{key.utils-38b263fb.js.map → key.utils-3632161b.js.map} +0 -0
  174. /package/dist/revo-grid/{text-editor-7fbbcea7.js.map → text-editor-e47e56c3.js.map} +0 -0
  175. /package/dist/revo-grid/{throttle-61be638a.js.map → throttle-05489451.js.map} +0 -0
  176. /package/dist/revo-grid/{viewport.store-e66c1a9b.js.map → viewport.store-c18a25a6.js.map} +0 -0
package/hydrate/index.mjs CHANGED
@@ -2585,6 +2585,12 @@ var registerHost = (elm, cmpMeta) => {
2585
2585
  elm["s-rc"] = [];
2586
2586
  return hostRefs.set(elm, hostRef);
2587
2587
  };
2588
+ var Build = {
2589
+ isDev: false,
2590
+ isBrowser: false,
2591
+ isServer: true,
2592
+ isTesting: false
2593
+ };
2588
2594
  var styles = /* @__PURE__ */ new Map();
2589
2595
 
2590
2596
 
@@ -6636,6 +6642,7 @@ const trimmedPlugin$1 = (store) => ({
6636
6642
  // full sorted items list
6637
6643
  const proxy = store.get('proxyItems');
6638
6644
  const trimmed = gatherTrimmedItems(newVal);
6645
+ // filter our physical indexes which are not trimmed
6639
6646
  const newItems = proxy.filter(v => !trimmed[v]);
6640
6647
  // set trimmed items in store
6641
6648
  store.set('items', newItems);
@@ -6856,7 +6863,7 @@ function getCellData(val) {
6856
6863
  }
6857
6864
  return val;
6858
6865
  }
6859
- function getCellRaw(model, column) {
6866
+ function getCellRaw(model = {}, column) {
6860
6867
  if (!column) {
6861
6868
  return;
6862
6869
  }
@@ -8787,13 +8794,70 @@ function getSource(source, items, withoutGrouping = false) {
8787
8794
  function getExpanded(model = {}) {
8788
8795
  return model[GROUP_EXPANDED];
8789
8796
  }
8797
+ function flattenGroupMaps({ groupedValues, parentIds, isExpanded, itemIndex, expandedAll, prevExpanded, columnProps, }) {
8798
+ const depth = parentIds.length;
8799
+ const sourceWithGroups = [];
8800
+ // collapse all groups in the beginning
8801
+ let trimmed = {};
8802
+ // index mapping
8803
+ let oldNewIndexMap = {};
8804
+ groupedValues.forEach((innerGroupedValues, groupId) => {
8805
+ const levelIds = [...parentIds, groupId];
8806
+ const mergedIds = levelIds.join(',');
8807
+ const isGroupExpanded = isExpanded && (!!expandedAll || !!prevExpanded[mergedIds]);
8808
+ sourceWithGroups.push({
8809
+ [PSEUDO_GROUP_ITEM]: groupId,
8810
+ [GROUP_DEPTH]: depth,
8811
+ [PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),
8812
+ [PSEUDO_GROUP_ITEM_VALUE]: mergedIds,
8813
+ [GROUP_EXPANDED]: isGroupExpanded,
8814
+ [GROUP_COLUMN_PROP]: columnProps[depth],
8815
+ [columnProps[depth]]: groupId,
8816
+ });
8817
+ itemIndex += 1;
8818
+ if (!isGroupExpanded && depth) {
8819
+ trimmed[itemIndex] = true;
8820
+ }
8821
+ if (Array.isArray(innerGroupedValues)) {
8822
+ innerGroupedValues.forEach(value => {
8823
+ itemIndex += 1;
8824
+ if (!isGroupExpanded) {
8825
+ trimmed[itemIndex] = true;
8826
+ }
8827
+ oldNewIndexMap[value[GROUP_ORIGINAL_INDEX]] = itemIndex;
8828
+ });
8829
+ sourceWithGroups.push(...innerGroupedValues);
8830
+ }
8831
+ else {
8832
+ const children = flattenGroupMaps({
8833
+ groupedValues: innerGroupedValues,
8834
+ parentIds: levelIds,
8835
+ isExpanded: isGroupExpanded,
8836
+ itemIndex,
8837
+ expandedAll,
8838
+ prevExpanded,
8839
+ columnProps,
8840
+ });
8841
+ sourceWithGroups.push(...children.source);
8842
+ trimmed = Object.assign(Object.assign({}, children.trimmed), trimmed);
8843
+ oldNewIndexMap = Object.assign(Object.assign({}, children.oldNewIndexMap), oldNewIndexMap);
8844
+ itemIndex = children.itemIndex;
8845
+ }
8846
+ });
8847
+ return {
8848
+ source: sourceWithGroups,
8849
+ oldNewIndexMap,
8850
+ trimmed,
8851
+ itemIndex,
8852
+ };
8853
+ }
8790
8854
  /**
8791
8855
  * Gather data for grouping
8792
8856
  * @param array - flat data array
8793
8857
  * @param columnProps - ids of groups
8794
8858
  * @param expanded - potentially expanded items if present
8795
8859
  */
8796
- function gatherGrouping(array, columnProps, { prevExpanded, expandedAll, getGroupValue = getGroupValueDefault, }) {
8860
+ function gatherGrouping(array, columnProps, { prevExpanded = {}, expandedAll = false, getGroupValue = getGroupValueDefault, }) {
8797
8861
  const groupedItems = new Map();
8798
8862
  array.forEach((item, originalIndex) => {
8799
8863
  const groupLevelValues = columnProps.map(groupId => getGroupValue(item, groupId));
@@ -8806,72 +8870,31 @@ function gatherGrouping(array, columnProps, { prevExpanded, expandedAll, getGrou
8806
8870
  currentGroupLevel = currentGroupLevel.get(value);
8807
8871
  });
8808
8872
  if (!currentGroupLevel.has(lastLevelValue)) {
8809
- currentGroupLevel.set(lastLevelValue, []);
8873
+ const groupItems = [];
8874
+ currentGroupLevel.set(lastLevelValue, groupItems);
8810
8875
  }
8811
8876
  const lastLevelItems = currentGroupLevel.get(lastLevelValue);
8812
8877
  lastLevelItems.push(Object.assign(Object.assign({}, item), { [GROUP_ORIGINAL_INDEX]: originalIndex }));
8813
8878
  });
8814
- let itemIndex = -1;
8815
8879
  const groupingDepth = columnProps.length;
8816
- // collapse all groups in the beginning
8817
- const trimmed = {};
8818
- // index mapping
8819
- const oldNewIndexMap = {};
8820
- // check if group header exists
8821
- const pseudoGroupTest = {};
8822
- const sourceWithGroups = [];
8823
- function flattenGroupMaps(groupedValues, parentIds, isExpanded) {
8824
- const depth = parentIds.length;
8825
- groupedValues.forEach((innerGroupedValues, groupId) => {
8826
- const levelIds = [...parentIds, groupId];
8827
- const mergedIds = levelIds.join(',');
8828
- const isGroupExpanded = isExpanded && (!!expandedAll || !!(prevExpanded === null || prevExpanded === void 0 ? void 0 : prevExpanded[mergedIds]));
8829
- sourceWithGroups.push({
8830
- [PSEUDO_GROUP_ITEM]: groupId,
8831
- [GROUP_DEPTH]: depth,
8832
- [PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),
8833
- [PSEUDO_GROUP_ITEM_VALUE]: mergedIds,
8834
- [GROUP_EXPANDED]: isGroupExpanded,
8835
- [GROUP_COLUMN_PROP]: columnProps[depth],
8836
- [columnProps[depth]]: groupId,
8837
- });
8838
- itemIndex += 1;
8839
- if (!isGroupExpanded && depth) {
8840
- trimmed[itemIndex] = true;
8841
- }
8842
- if (Array.isArray(innerGroupedValues)) {
8843
- innerGroupedValues.forEach(value => {
8844
- itemIndex += 1;
8845
- if (!isGroupExpanded) {
8846
- trimmed[itemIndex] = true;
8847
- }
8848
- oldNewIndexMap[value[GROUP_ORIGINAL_INDEX]] = itemIndex;
8849
- const pseudoGroupTestIds = levelIds.map((_value, index) => levelIds.slice(0, index + 1).join(','));
8850
- pseudoGroupTestIds.forEach(pseudoGroupTestId => {
8851
- if (!pseudoGroupTest[pseudoGroupTestId]) {
8852
- pseudoGroupTest[pseudoGroupTestId] = [];
8853
- }
8854
- pseudoGroupTest[pseudoGroupTestId].push(itemIndex);
8855
- });
8856
- });
8857
- sourceWithGroups.push(...innerGroupedValues);
8858
- }
8859
- else {
8860
- flattenGroupMaps(innerGroupedValues, levelIds, isGroupExpanded);
8861
- }
8862
- });
8863
- }
8864
- flattenGroupMaps(groupedItems, [], true);
8880
+ const { source: sourceWithGroups, trimmed, oldNewIndexMap } = flattenGroupMaps({
8881
+ groupedValues: groupedItems,
8882
+ parentIds: [],
8883
+ isExpanded: true,
8884
+ itemIndex: -1,
8885
+ expandedAll,
8886
+ prevExpanded,
8887
+ columnProps
8888
+ });
8865
8889
  return {
8866
8890
  sourceWithGroups, // updates source mirror
8867
8891
  depth: groupingDepth, // largest depth for grouping
8868
8892
  trimmed, // used for expand/collapse grouping values
8869
8893
  oldNewIndexMap, // used for mapping old values to new
8870
- childrenByGroup: pseudoGroupTest, // used to get child items in group
8871
8894
  };
8872
8895
  }
8873
8896
  function getGroupingName(rgRow) {
8874
- return rgRow && rgRow[PSEUDO_GROUP_ITEM];
8897
+ return rgRow === null || rgRow === void 0 ? void 0 : rgRow[PSEUDO_GROUP_ITEM];
8875
8898
  }
8876
8899
  function isGrouping(rgRow) {
8877
8900
  return typeof (rgRow === null || rgRow === void 0 ? void 0 : rgRow[PSEUDO_GROUP_ITEM]) !== 'undefined';
@@ -11736,11 +11759,7 @@ class FilterPlugin extends BasePlugin {
11736
11759
  if (defaultPrevented) {
11737
11760
  return;
11738
11761
  }
11739
- // check is trimmed event prevented
11740
- const isAddedEvent = await this.revogrid.addTrimmed(detail.itemsToFilter, FILTER_TRIMMED_TYPE);
11741
- if (isAddedEvent.defaultPrevented) {
11742
- return;
11743
- }
11762
+ this.providers.data.setTrimmed({ [FILTER_TRIMMED_TYPE]: detail.itemsToFilter });
11744
11763
  // applies the hasFilter to the columns to show filter icon
11745
11764
  this.providers.column.updateColumns(columnsToUpdate);
11746
11765
  this.emit('afterfilterapply', {
@@ -12752,6 +12771,56 @@ function processDoubleConversionTrimmed(initiallyTrimed, firstLevelMap, secondLe
12752
12771
  return trimemedOptionsToUpgrade;
12753
12772
  }
12754
12773
 
12774
+ const PADDING_DEPTH = 10;
12775
+ const RowRenderer = ({ rowClass, index, size, start, depth }, cells) => {
12776
+ const props = Object.assign({ [DATA_ROW]: index });
12777
+ return (hAsync("div", Object.assign({}, props, { class: `rgRow ${rowClass || ''}`, style: {
12778
+ height: `${size}px`,
12779
+ transform: `translateY(${start}px)`,
12780
+ paddingLeft: depth ? `${PADDING_DEPTH * depth}px` : undefined,
12781
+ } }), cells));
12782
+ };
12783
+
12784
+ function expandEvent(e, model, virtualIndex) {
12785
+ var _a;
12786
+ const event = new CustomEvent('groupexpandclick', {
12787
+ detail: {
12788
+ model,
12789
+ virtualIndex,
12790
+ },
12791
+ cancelable: true,
12792
+ bubbles: true,
12793
+ });
12794
+ (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(event);
12795
+ }
12796
+ const GroupingRowRenderer = (props) => {
12797
+ const { model, itemIndex, hasExpand, groupingCustomRenderer, providers } = props;
12798
+ const name = model[PSEUDO_GROUP_ITEM];
12799
+ const expanded = model[GROUP_EXPANDED];
12800
+ const depth = parseInt(model[GROUP_DEPTH], 10) || 0;
12801
+ if (!hasExpand) {
12802
+ return hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }));
12803
+ }
12804
+ if (groupingCustomRenderer) {
12805
+ return (hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }),
12806
+ hAsync("div", { onClick: e => expandEvent(e, model, itemIndex) }, groupingCustomRenderer(hAsync, {
12807
+ name,
12808
+ model,
12809
+ itemIndex,
12810
+ expanded,
12811
+ depth,
12812
+ providers,
12813
+ }))));
12814
+ }
12815
+ return (hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }),
12816
+ hAsync("button", { class: { [GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) }, expandSvgIconVNode(expanded)),
12817
+ name));
12818
+ };
12819
+ const expandSvgIconVNode = (expanded = false) => {
12820
+ return (hAsync("svg", { "aria-hidden": "true", style: { transform: `rotate(${!expanded ? -90 : 0}deg)` }, focusable: "false", viewBox: "0 0 448 512" },
12821
+ hAsync("path", { fill: "currentColor", d: "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z" })));
12822
+ };
12823
+
12755
12824
  class GroupingRowPlugin extends BasePlugin {
12756
12825
  getStore(type = GROUPING_ROW_TYPE) {
12757
12826
  return this.providers.data.stores[type].store;
@@ -12835,53 +12904,6 @@ class GroupingRowPlugin extends BasePlugin {
12835
12904
  const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
12836
12905
  return !!(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sortingPromise);
12837
12906
  }
12838
- // subscribe to grid events to process them accordingly
12839
- subscribe() {
12840
- /** if grouping present and new data source arrived */
12841
- this.addEventListener('beforesourceset', ({ detail }) => {
12842
- var _a, _b, _c;
12843
- if (!(((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.length) && ((_c = detail === null || detail === void 0 ? void 0 : detail.source) === null || _c === void 0 ? void 0 : _c.length))) {
12844
- return;
12845
- }
12846
- // if sorting is running don't apply grouping, wait for sorting, then it'll apply in @aftersortingapply
12847
- if (this.isSortingRunning()) {
12848
- return;
12849
- }
12850
- this.onDataSet(detail);
12851
- });
12852
- this.addEventListener('beforecolumnsset', ({ detail }) => {
12853
- this.setColumns(detail);
12854
- });
12855
- /**
12856
- * filter applied need to clear grouping and apply again
12857
- * based on new results can be new grouping
12858
- */
12859
- this.addEventListener('beforetrimmed', ({ detail: { trimmed, trimmedType } }) => this.beforeTrimmedApply(trimmed, trimmedType));
12860
- /**
12861
- * sorting applied need to clear grouping and apply again
12862
- * based on new results whole grouping order will changed
12863
- */
12864
- this.addEventListener('aftersortingapply', () => {
12865
- var _a, _b;
12866
- if (!((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.length)) {
12867
- return;
12868
- }
12869
- this.doSourceUpdate(Object.assign({}, this.options));
12870
- });
12871
- /**
12872
- * Apply logic for focus inside of grouping
12873
- * We can't focus on grouping rows, navigation only inside of groups for now
12874
- */
12875
- this.addEventListener('beforecellfocus', e => this.onFocus(e));
12876
- /**
12877
- * Prevent rgRow drag outside the group
12878
- */
12879
- this.addEventListener('roworderchanged', e => this.onDrag(e));
12880
- /**
12881
- * When grouping expand icon was clicked
12882
- */
12883
- this.addEventListener('groupexpandclick', e => this.onExpand(e.detail));
12884
- }
12885
12907
  /**
12886
12908
  * Starts global source update with group clearing and applying new one
12887
12909
  * Initiated when need to reapply grouping
@@ -12898,11 +12920,11 @@ class GroupingRowPlugin extends BasePlugin {
12898
12920
  * Group again
12899
12921
  * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes
12900
12922
  */
12901
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, childrenByGroup, } = gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], expanded);
12923
+ const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], expanded);
12902
12924
  const customRenderer = options === null || options === void 0 ? void 0 : options.groupLabelTemplate;
12903
12925
  // setup source
12904
12926
  this.providers.data.setData(sourceWithGroups, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer }, true);
12905
- this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap);
12927
+ this.updateTrimmed(trimmed, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap);
12906
12928
  }
12907
12929
  /**
12908
12930
  * Apply grouping on data set
@@ -12918,13 +12940,13 @@ class GroupingRowPlugin extends BasePlugin {
12918
12940
  }
12919
12941
  const source = data.source.filter(s => !isGrouping(s));
12920
12942
  const options = Object.assign(Object.assign({}, (this.revogrid.grouping || {})), { prevExpanded: preservedExpanded });
12921
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, childrenByGroup, } = gatherGrouping(source, ((_b = this.options) === null || _b === void 0 ? void 0 : _b.props) || [], options);
12943
+ const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = gatherGrouping(source, ((_b = this.options) === null || _b === void 0 ? void 0 : _b.props) || [], options);
12922
12944
  data.source = sourceWithGroups;
12923
12945
  this.providers.data.setGrouping({ depth });
12924
- this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexMap);
12946
+ this.updateTrimmed(trimmed, oldNewIndexMap);
12925
12947
  }
12926
12948
  /**
12927
- * Externam call to apply grouping. Called by revogrid when prop changed.
12949
+ * External call to apply grouping. Called by revogrid when prop changed.
12928
12950
  */
12929
12951
  setGrouping(options) {
12930
12952
  var _a, _b;
@@ -12936,12 +12958,12 @@ class GroupingRowPlugin extends BasePlugin {
12936
12958
  this.clearGrouping();
12937
12959
  return;
12938
12960
  }
12939
- // props exist and source inited
12961
+ // props exist and source initd
12940
12962
  const { source } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'));
12941
12963
  if (source.length) {
12942
12964
  this.doSourceUpdate(Object.assign({}, options));
12943
12965
  }
12944
- // props exist and columns inited
12966
+ // props exist and columns initd
12945
12967
  for (let t of columnTypes) {
12946
12968
  if (this.setColumnGrouping(this.providers.column.getColumns(t))) {
12947
12969
  this.providers.column.refreshByType(t);
@@ -12949,7 +12971,50 @@ class GroupingRowPlugin extends BasePlugin {
12949
12971
  }
12950
12972
  }
12951
12973
  // if has any grouping subscribe to events again
12952
- this.subscribe();
12974
+ /** if grouping present and new data source arrived */
12975
+ this.addEventListener('beforesourceset', ({ detail }) => {
12976
+ var _a, _b, _c;
12977
+ if (!(((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.length) && ((_c = detail === null || detail === void 0 ? void 0 : detail.source) === null || _c === void 0 ? void 0 : _c.length))) {
12978
+ return;
12979
+ }
12980
+ // if sorting is running don't apply grouping, wait for sorting, then it'll apply in @aftersortingapply
12981
+ if (this.isSortingRunning()) {
12982
+ return;
12983
+ }
12984
+ this.onDataSet(detail);
12985
+ });
12986
+ this.addEventListener('beforecolumnsset', ({ detail }) => {
12987
+ this.setColumns(detail);
12988
+ });
12989
+ /**
12990
+ * filter applied need to clear grouping and apply again
12991
+ * based on new results can be new grouping
12992
+ */
12993
+ this.addEventListener('beforetrimmed', ({ detail: { trimmed, trimmedType } }) => this.beforeTrimmedApply(trimmed, trimmedType));
12994
+ /**
12995
+ * sorting applied need to clear grouping and apply again
12996
+ * based on new results whole grouping order will changed
12997
+ */
12998
+ this.addEventListener('aftersortingapply', () => {
12999
+ var _a, _b;
13000
+ if (!((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.length)) {
13001
+ return;
13002
+ }
13003
+ this.doSourceUpdate(Object.assign({}, this.options));
13004
+ });
13005
+ /**
13006
+ * Apply logic for focus inside of grouping
13007
+ * We can't focus on grouping rows, navigation only inside of groups for now
13008
+ */
13009
+ this.addEventListener('beforecellfocus', e => this.onFocus(e));
13010
+ /**
13011
+ * Prevent rgRow drag outside the group
13012
+ */
13013
+ this.addEventListener('roworderchanged', e => this.onDrag(e));
13014
+ /**
13015
+ * When grouping expand icon was clicked
13016
+ */
13017
+ this.addEventListener('groupexpandclick', e => this.onExpand(e.detail));
12953
13018
  }
12954
13019
  // clear grouping
12955
13020
  clearGrouping() {
@@ -12973,7 +13038,7 @@ class GroupingRowPlugin extends BasePlugin {
12973
13038
  this.providers.data.setData(source, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, undefined, true);
12974
13039
  this.updateTrimmed(undefined, undefined, oldNewIndexes);
12975
13040
  }
12976
- updateTrimmed(trimmedGroup = {}, _childrenByGroup = {}, firstLevelMap = {}, secondLevelMap) {
13041
+ updateTrimmed(trimmedGroup = {}, firstLevelMap = {}, secondLevelMap) {
12977
13042
  // map previously trimmed data
12978
13043
  const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(this.getStore().get('trimmed'), firstLevelMap, secondLevelMap);
12979
13044
  for (let type in trimemedOptionsToUpgrade) {
@@ -15257,47 +15322,6 @@ class RevoGridExtra {
15257
15322
  }; }
15258
15323
  }
15259
15324
 
15260
- const PADDING_DEPTH = 10;
15261
- const RowRenderer = ({ rowClass, index, size, start, depth }, cells) => {
15262
- const props = Object.assign({ [DATA_ROW]: index });
15263
- return (hAsync("div", Object.assign({}, props, { class: `rgRow ${rowClass || ''}`, style: {
15264
- height: `${size}px`,
15265
- transform: `translateY(${start}px)`,
15266
- paddingLeft: depth ? `${PADDING_DEPTH * depth}px` : undefined,
15267
- } }), cells));
15268
- };
15269
-
15270
- function expandEvent(e, model, virtualIndex) {
15271
- var _a;
15272
- const event = new CustomEvent('groupexpandclick', {
15273
- detail: {
15274
- model,
15275
- virtualIndex,
15276
- },
15277
- cancelable: true,
15278
- bubbles: true,
15279
- });
15280
- (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(event);
15281
- }
15282
- const GroupingRowRenderer = (props) => {
15283
- const { model, itemIndex, hasExpand, groupingCustomRenderer } = props;
15284
- const name = model[PSEUDO_GROUP_ITEM];
15285
- const expanded = model[GROUP_EXPANDED];
15286
- const depth = parseInt(model[GROUP_DEPTH], 10) || 0;
15287
- if (!hasExpand) {
15288
- return hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }));
15289
- }
15290
- if (groupingCustomRenderer) {
15291
- return (hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }),
15292
- hAsync("div", { onClick: e => expandEvent(e, model, itemIndex) }, groupingCustomRenderer(hAsync, { name, model, itemIndex, expanded, depth }))));
15293
- }
15294
- return (hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }),
15295
- hAsync("button", { class: { [GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) },
15296
- hAsync("svg", { "aria-hidden": "true", style: { transform: `rotate(${!expanded ? -90 : 0}deg)` }, focusable: "false", viewBox: "0 0 448 512" },
15297
- hAsync("path", { fill: "currentColor", d: "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z" }))),
15298
- name));
15299
- };
15300
-
15301
15325
  /**
15302
15326
  * Class is responsible for highlighting rows in a table.
15303
15327
  */
@@ -15372,6 +15396,10 @@ function renderCell(v) {
15372
15396
  // #region Regular cell
15373
15397
  else {
15374
15398
  if (!v.schemaModel.column) {
15399
+ // something is wrong with data
15400
+ if (Build === null || Build === void 0 ? void 0 : Build.isDev) {
15401
+ console.error('Investigate column problem.', v.schemaModel);
15402
+ }
15375
15403
  return '';
15376
15404
  }
15377
15405
  // Row drag
@@ -15505,7 +15533,8 @@ class RevogrData {
15505
15533
  const dataItem = getSourceItem(this.dataStore, rgRow.itemIndex);
15506
15534
  // #region Grouping
15507
15535
  if (isGrouping(dataItem)) {
15508
- rowsEls.push(hAsync(GroupingRowRenderer, Object.assign({}, rgRow, { index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer: groupingCustomRenderer, hasExpand: this.columnService.hasGrouping })));
15536
+ const gmodel = Object.assign(Object.assign({}, rgRow), { index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer, hasExpand: this.columnService.hasGrouping, providers: this.providers });
15537
+ rowsEls.push(hAsync(GroupingRowRenderer, Object.assign({}, gmodel)));
15509
15538
  continue;
15510
15539
  }
15511
15540
  // #endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revolist/revogrid",
3
- "version": "4.12.2",
3
+ "version": "4.12.4",
4
4
  "type": "module",
5
5
  "description": "Virtual reactive data grid spreadsheet component - RevoGrid.",
6
6
  "license": "MIT",
@@ -195,7 +195,7 @@ function getCellData(val) {
195
195
  }
196
196
  return val;
197
197
  }
198
- function getCellRaw(model, column) {
198
+ function getCellRaw(model = {}, column) {
199
199
  if (!column) {
200
200
  return;
201
201
  }
@@ -773,6 +773,7 @@ const GROUP_EXPANDED = `${GRID_INTERNALS}-expanded`;
773
773
  const GROUP_COLUMN_PROP = `${GRID_INTERNALS}-prop`;
774
774
  const GROUP_ORIGINAL_INDEX = `${GRID_INTERNALS}-original-index`;
775
775
  const GROUP_EXPAND_BTN = `group-expand`;
776
+ const GROUP_EXPAND_EVENT = `groupexpandclick`;
776
777
  const GROUPING_ROW_TYPE = 'rgRow';
777
778
 
778
779
  function getGroupValueDefault(item, prop) {
@@ -810,13 +811,70 @@ function getSource(source, items, withoutGrouping = false) {
810
811
  function getExpanded(model = {}) {
811
812
  return model[GROUP_EXPANDED];
812
813
  }
814
+ function flattenGroupMaps({ groupedValues, parentIds, isExpanded, itemIndex, expandedAll, prevExpanded, columnProps, }) {
815
+ const depth = parentIds.length;
816
+ const sourceWithGroups = [];
817
+ // collapse all groups in the beginning
818
+ let trimmed = {};
819
+ // index mapping
820
+ let oldNewIndexMap = {};
821
+ groupedValues.forEach((innerGroupedValues, groupId) => {
822
+ const levelIds = [...parentIds, groupId];
823
+ const mergedIds = levelIds.join(',');
824
+ const isGroupExpanded = isExpanded && (!!expandedAll || !!prevExpanded[mergedIds]);
825
+ sourceWithGroups.push({
826
+ [PSEUDO_GROUP_ITEM]: groupId,
827
+ [GROUP_DEPTH]: depth,
828
+ [PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),
829
+ [PSEUDO_GROUP_ITEM_VALUE]: mergedIds,
830
+ [GROUP_EXPANDED]: isGroupExpanded,
831
+ [GROUP_COLUMN_PROP]: columnProps[depth],
832
+ [columnProps[depth]]: groupId,
833
+ });
834
+ itemIndex += 1;
835
+ if (!isGroupExpanded && depth) {
836
+ trimmed[itemIndex] = true;
837
+ }
838
+ if (Array.isArray(innerGroupedValues)) {
839
+ innerGroupedValues.forEach(value => {
840
+ itemIndex += 1;
841
+ if (!isGroupExpanded) {
842
+ trimmed[itemIndex] = true;
843
+ }
844
+ oldNewIndexMap[value[GROUP_ORIGINAL_INDEX]] = itemIndex;
845
+ });
846
+ sourceWithGroups.push(...innerGroupedValues);
847
+ }
848
+ else {
849
+ const children = flattenGroupMaps({
850
+ groupedValues: innerGroupedValues,
851
+ parentIds: levelIds,
852
+ isExpanded: isGroupExpanded,
853
+ itemIndex,
854
+ expandedAll,
855
+ prevExpanded,
856
+ columnProps,
857
+ });
858
+ sourceWithGroups.push(...children.source);
859
+ trimmed = Object.assign(Object.assign({}, children.trimmed), trimmed);
860
+ oldNewIndexMap = Object.assign(Object.assign({}, children.oldNewIndexMap), oldNewIndexMap);
861
+ itemIndex = children.itemIndex;
862
+ }
863
+ });
864
+ return {
865
+ source: sourceWithGroups,
866
+ oldNewIndexMap,
867
+ trimmed,
868
+ itemIndex,
869
+ };
870
+ }
813
871
  /**
814
872
  * Gather data for grouping
815
873
  * @param array - flat data array
816
874
  * @param columnProps - ids of groups
817
875
  * @param expanded - potentially expanded items if present
818
876
  */
819
- function gatherGrouping(array, columnProps, { prevExpanded, expandedAll, getGroupValue = getGroupValueDefault, }) {
877
+ function gatherGrouping(array, columnProps, { prevExpanded = {}, expandedAll = false, getGroupValue = getGroupValueDefault, }) {
820
878
  const groupedItems = new Map();
821
879
  array.forEach((item, originalIndex) => {
822
880
  const groupLevelValues = columnProps.map(groupId => getGroupValue(item, groupId));
@@ -829,72 +887,31 @@ function gatherGrouping(array, columnProps, { prevExpanded, expandedAll, getGrou
829
887
  currentGroupLevel = currentGroupLevel.get(value);
830
888
  });
831
889
  if (!currentGroupLevel.has(lastLevelValue)) {
832
- currentGroupLevel.set(lastLevelValue, []);
890
+ const groupItems = [];
891
+ currentGroupLevel.set(lastLevelValue, groupItems);
833
892
  }
834
893
  const lastLevelItems = currentGroupLevel.get(lastLevelValue);
835
894
  lastLevelItems.push(Object.assign(Object.assign({}, item), { [GROUP_ORIGINAL_INDEX]: originalIndex }));
836
895
  });
837
- let itemIndex = -1;
838
896
  const groupingDepth = columnProps.length;
839
- // collapse all groups in the beginning
840
- const trimmed = {};
841
- // index mapping
842
- const oldNewIndexMap = {};
843
- // check if group header exists
844
- const pseudoGroupTest = {};
845
- const sourceWithGroups = [];
846
- function flattenGroupMaps(groupedValues, parentIds, isExpanded) {
847
- const depth = parentIds.length;
848
- groupedValues.forEach((innerGroupedValues, groupId) => {
849
- const levelIds = [...parentIds, groupId];
850
- const mergedIds = levelIds.join(',');
851
- const isGroupExpanded = isExpanded && (!!expandedAll || !!(prevExpanded === null || prevExpanded === void 0 ? void 0 : prevExpanded[mergedIds]));
852
- sourceWithGroups.push({
853
- [PSEUDO_GROUP_ITEM]: groupId,
854
- [GROUP_DEPTH]: depth,
855
- [PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),
856
- [PSEUDO_GROUP_ITEM_VALUE]: mergedIds,
857
- [GROUP_EXPANDED]: isGroupExpanded,
858
- [GROUP_COLUMN_PROP]: columnProps[depth],
859
- [columnProps[depth]]: groupId,
860
- });
861
- itemIndex += 1;
862
- if (!isGroupExpanded && depth) {
863
- trimmed[itemIndex] = true;
864
- }
865
- if (Array.isArray(innerGroupedValues)) {
866
- innerGroupedValues.forEach(value => {
867
- itemIndex += 1;
868
- if (!isGroupExpanded) {
869
- trimmed[itemIndex] = true;
870
- }
871
- oldNewIndexMap[value[GROUP_ORIGINAL_INDEX]] = itemIndex;
872
- const pseudoGroupTestIds = levelIds.map((_value, index) => levelIds.slice(0, index + 1).join(','));
873
- pseudoGroupTestIds.forEach(pseudoGroupTestId => {
874
- if (!pseudoGroupTest[pseudoGroupTestId]) {
875
- pseudoGroupTest[pseudoGroupTestId] = [];
876
- }
877
- pseudoGroupTest[pseudoGroupTestId].push(itemIndex);
878
- });
879
- });
880
- sourceWithGroups.push(...innerGroupedValues);
881
- }
882
- else {
883
- flattenGroupMaps(innerGroupedValues, levelIds, isGroupExpanded);
884
- }
885
- });
886
- }
887
- flattenGroupMaps(groupedItems, [], true);
897
+ const { source: sourceWithGroups, trimmed, oldNewIndexMap } = flattenGroupMaps({
898
+ groupedValues: groupedItems,
899
+ parentIds: [],
900
+ isExpanded: true,
901
+ itemIndex: -1,
902
+ expandedAll,
903
+ prevExpanded,
904
+ columnProps
905
+ });
888
906
  return {
889
907
  sourceWithGroups, // updates source mirror
890
908
  depth: groupingDepth, // largest depth for grouping
891
909
  trimmed, // used for expand/collapse grouping values
892
910
  oldNewIndexMap, // used for mapping old values to new
893
- childrenByGroup: pseudoGroupTest, // used to get child items in group
894
911
  };
895
912
  }
896
913
  function getGroupingName(rgRow) {
897
- return rgRow && rgRow[PSEUDO_GROUP_ITEM];
914
+ return rgRow === null || rgRow === void 0 ? void 0 : rgRow[PSEUDO_GROUP_ITEM];
898
915
  }
899
916
  function isGrouping(rgRow) {
900
917
  return typeof (rgRow === null || rgRow === void 0 ? void 0 : rgRow[PSEUDO_GROUP_ITEM]) !== 'undefined';
@@ -1277,6 +1294,6 @@ function doPropMerge(existing, extra) {
1277
1294
  return props;
1278
1295
  }
1279
1296
 
1280
- export { PSEUDO_GROUP_ITEM_VALUE as A, GROUPING_ROW_TYPE as B, PSEUDO_GROUP_COLUMN as C, SelectionStoreConnector as D, EMPTY_INDEX as E, doPropMerge as F, GROUP_EXPANDED as G, GROUP_EXPAND_BTN as H, PSEUDO_GROUP_ITEM as I, isRowDragService as J, ColumnService as K, getCellEditor as L, PSEUDO_GROUP_ITEM_ID as P, SelectionStore as S, isRangeSingleCell as a, getSource as b, cropCellToMax as c, getExpanded as d, gatherGrouping as e, getGroupingName as f, getRange as g, isGrouping as h, isHiddenStore as i, isGroupingColumn as j, getParsedGroup as k, isSameGroup as l, measureEqualDepth as m, nextCell as n, getCellData as o, getCellRaw as p, getCellDataParsed as q, getColumnType as r, getColumnSizes as s, isColGrouping as t, getColumns as u, gatherGroup as v, getColumnByProp as w, reduce as x, baseEach$1 as y, GROUP_DEPTH as z };
1297
+ export { getColumnType as A, getColumnSizes as B, isColGrouping as C, getColumns as D, gatherGroup as E, getColumnByProp as F, GROUP_DEPTH as G, reduce as H, baseEach$1 as I, EMPTY_INDEX as J, SelectionStoreConnector as K, doPropMerge as L, isRowDragService as M, ColumnService as N, getCellEditor as O, PSEUDO_GROUP_ITEM as P, SelectionStore as S, isRangeSingleCell as a, PSEUDO_GROUP_ITEM_ID as b, cropCellToMax as c, PSEUDO_GROUP_ITEM_VALUE as d, PSEUDO_GROUP_COLUMN as e, GROUP_EXPANDED as f, getRange as g, GROUP_COLUMN_PROP as h, isHiddenStore as i, GROUP_ORIGINAL_INDEX as j, GROUP_EXPAND_BTN as k, GROUP_EXPAND_EVENT as l, GROUPING_ROW_TYPE as m, nextCell as n, getSource as o, getExpanded as p, gatherGrouping as q, getGroupingName as r, isGrouping as s, isGroupingColumn as t, measureEqualDepth as u, getParsedGroup as v, isSameGroup as w, getCellData as x, getCellRaw as y, getCellDataParsed as z };
1281
1298
 
1282
1299
  //# sourceMappingURL=column.service.js.map