@revolist/revogrid 4.24.0 → 4.24.2

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 (62) hide show
  1. package/dist/cjs/{cell-renderer-DfUCisis.js → cell-renderer-DnOCJ9ge.js} +58 -4
  2. package/dist/cjs/{column.drag.plugin-Cz-T4y3M.js → column.drag.plugin-DSiFObaj.js} +17 -12
  3. package/dist/cjs/{column.service-BNWNiJW3.js → column.service-CD70rNL2.js} +8 -5
  4. package/dist/cjs/{dimension.helpers-B9HgANnM.js → dimension.helpers-CB5sNw5J.js} +2 -1
  5. package/dist/cjs/{edit.utils-pKeiYFLJ.js → edit.utils-DDxnq9lw.js} +1 -1
  6. package/dist/cjs/{header-cell-renderer-DyjOxArm.js → header-cell-renderer-JXYFwayd.js} +1 -1
  7. package/dist/cjs/{index-DxaSE5uZ.js → index-BF6JDcMr.js} +1 -1
  8. package/dist/cjs/index.cjs.js +10 -9
  9. package/dist/cjs/revo-grid.cjs.entry.js +12 -8
  10. package/dist/cjs/revogr-attribution_7.cjs.entry.js +5 -5
  11. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +4 -4
  12. package/dist/cjs/revogr-data_4.cjs.entry.js +6 -4
  13. package/dist/cjs/{text-editor-B4W-m-r-.js → text-editor-CvgloQdG.js} +2 -2
  14. package/dist/cjs/{viewport.store-BscUCiUk.js → viewport.store-Ci8H1bI9.js} +1 -1
  15. package/dist/collection/components/data/revogr-data.js +2 -0
  16. package/dist/collection/components/revoGrid/revo-grid.js +1 -1
  17. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +12 -7
  18. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +59 -3
  19. package/dist/collection/plugins/groupingRow/grouping.service.js +7 -4
  20. package/dist/collection/services/data.provider.js +6 -2
  21. package/dist/collection/store/dataSource/data.store.js +2 -1
  22. package/dist/{revo-grid/cell-renderer-CLTRlCa5.js → esm/cell-renderer-BQjko1zB.js} +58 -5
  23. package/dist/esm/{column.drag.plugin-DKkf7Zqb.js → column.drag.plugin-Cf9DYdQj.js} +17 -12
  24. package/dist/esm/{column.service-C6hByxPy.js → column.service-BnFqXqQG.js} +8 -5
  25. package/dist/{revo-grid/dimension.helpers-CGKwSvw6.js → esm/dimension.helpers-CXrsUc6f.js} +2 -1
  26. package/dist/esm/{edit.utils-Dnnbd0xG.js → edit.utils-CXmmCnxE.js} +1 -1
  27. package/dist/{revo-grid/header-cell-renderer-BMmXRsd_.js → esm/header-cell-renderer-B3mYpZD3.js} +1 -1
  28. package/dist/{revo-grid/index-Db3qZoW5.js → esm/index-DBqlJITb.js} +1 -1
  29. package/dist/esm/index.js +10 -10
  30. package/dist/esm/revo-grid.entry.js +12 -8
  31. package/dist/esm/revogr-attribution_7.entry.js +5 -5
  32. package/dist/esm/revogr-clipboard_3.entry.js +4 -4
  33. package/dist/esm/revogr-data_4.entry.js +6 -4
  34. package/dist/{revo-grid/text-editor-C3RUSwH5.js → esm/text-editor-DQtz2Y7B.js} +2 -2
  35. package/dist/{revo-grid/viewport.store-_c579YyM.js → esm/viewport.store-D5jEuhLq.js} +1 -1
  36. package/dist/{esm/cell-renderer-CLTRlCa5.js → revo-grid/cell-renderer-BQjko1zB.js} +58 -5
  37. package/dist/revo-grid/{column.drag.plugin-DKkf7Zqb.js → column.drag.plugin-Cf9DYdQj.js} +17 -12
  38. package/dist/revo-grid/{column.service-C6hByxPy.js → column.service-BnFqXqQG.js} +8 -5
  39. package/dist/{esm/dimension.helpers-CGKwSvw6.js → revo-grid/dimension.helpers-CXrsUc6f.js} +2 -1
  40. package/dist/revo-grid/{edit.utils-Dnnbd0xG.js → edit.utils-CXmmCnxE.js} +1 -1
  41. package/dist/{esm/header-cell-renderer-BMmXRsd_.js → revo-grid/header-cell-renderer-B3mYpZD3.js} +1 -1
  42. package/dist/{esm/index-Db3qZoW5.js → revo-grid/index-DBqlJITb.js} +1 -1
  43. package/dist/revo-grid/index.esm.js +10 -10
  44. package/dist/revo-grid/revo-grid.entry.js +12 -8
  45. package/dist/revo-grid/revogr-attribution_7.entry.js +5 -5
  46. package/dist/revo-grid/revogr-clipboard_3.entry.js +4 -4
  47. package/dist/revo-grid/revogr-data_4.entry.js +6 -4
  48. package/dist/{esm/text-editor-C3RUSwH5.js → revo-grid/text-editor-DQtz2Y7B.js} +2 -2
  49. package/dist/{esm/viewport.store-_c579YyM.js → revo-grid/viewport.store-D5jEuhLq.js} +1 -1
  50. package/dist/types/plugins/groupingRow/grouping.row.renderer.d.ts +6 -1
  51. package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +47 -1
  52. package/dist/types/plugins/groupingRow/grouping.service.d.ts +1 -1
  53. package/dist/types/services/data.provider.d.ts +5 -2
  54. package/dist/types/store/dataSource/data.store.d.ts +3 -1
  55. package/hydrate/index.js +84 -16
  56. package/hydrate/index.mjs +84 -16
  57. package/package.json +1 -1
  58. package/standalone/column.service.js +1 -1
  59. package/standalone/data.store.js +1 -1
  60. package/standalone/index.js +1 -1
  61. package/standalone/revo-grid.js +1 -1
  62. package/standalone/revogr-data2.js +1 -1
@@ -4,8 +4,8 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
8
- var column_service = require('./column.service-BNWNiJW3.js');
7
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
8
+ var column_service = require('./column.service-CD70rNL2.js');
9
9
 
10
10
  /**
11
11
  * Renders sorting direction and optional additive sorting rank.
@@ -55,8 +55,58 @@ function expandEvent(e, model, virtualIndex) {
55
55
  });
56
56
  (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(event);
57
57
  }
58
+ function renderGroupCells(props, { name, expanded, depth, }) {
59
+ const { additionalData, columnItems, groupingCellRenderer, hasExpand, itemIndex, model, providers, size, start, end, } = props;
60
+ if (!groupingCellRenderer) {
61
+ return [];
62
+ }
63
+ const renderOffset = providers.viewport.get('renderOffset') || 0;
64
+ const data = providers.data.get('source');
65
+ const rowItem = { itemIndex, size, start, end };
66
+ const onExpand = (event) => expandEvent(event, model, itemIndex);
67
+ return columnItems.map(columnItem => {
68
+ const column = dimension_helpers.getSourceItem(providers.columns, columnItem.itemIndex);
69
+ if (!column) {
70
+ return null;
71
+ }
72
+ const isLabelColumn = column_service.isGroupingColumn(column);
73
+ const templateProps = {
74
+ prop: column.prop,
75
+ model,
76
+ data,
77
+ column,
78
+ rowIndex: itemIndex,
79
+ colIndex: columnItem.itemIndex,
80
+ colType: providers.colType,
81
+ type: providers.type,
82
+ value: column_service.getCellRaw(model, column),
83
+ providers,
84
+ columnItem,
85
+ rowItem,
86
+ group: {
87
+ name,
88
+ depth,
89
+ expanded,
90
+ prop: model[column_service.GROUP_COLUMN_PROP],
91
+ isLabelColumn,
92
+ canExpand: hasExpand,
93
+ onExpand,
94
+ },
95
+ };
96
+ return (index.h("div", { key: columnItem.itemIndex, class: {
97
+ [dimension_helpers.CELL_CLASS]: true,
98
+ groupingCell: true,
99
+ groupingLabelCell: isLabelColumn,
100
+ }, [dimension_helpers.DATA_COL]: columnItem.itemIndex,
101
+ [dimension_helpers.DATA_ROW]: itemIndex, style: {
102
+ width: `${columnItem.size}px`,
103
+ transform: `translateX(${columnItem.start - renderOffset}px)`,
104
+ height: size ? `${size}px` : undefined,
105
+ } }, groupingCellRenderer(index.h, templateProps, additionalData)));
106
+ });
107
+ }
58
108
  const GroupingRowRenderer = (props) => {
59
- const { model, itemIndex, hasExpand, groupingCustomRenderer } = props;
109
+ const { model, itemIndex, hasExpand, groupingCustomRenderer, groupingCellRenderer, } = props;
60
110
  const name = model[column_service.PSEUDO_GROUP_ITEM];
61
111
  const expanded = model[column_service.GROUP_EXPANDED];
62
112
  const depth = parseInt(model[column_service.GROUP_DEPTH], 10) || 0;
@@ -65,6 +115,9 @@ const GroupingRowRenderer = (props) => {
65
115
  depth,
66
116
  expanded,
67
117
  };
118
+ if (groupingCellRenderer) {
119
+ return (index.h(RowRenderer, Object.assign({ index: props.index, size: props.size, start: props.start }, groupRowAttrs), renderGroupCells(props, { name, expanded, depth })));
120
+ }
68
121
  if (groupingCustomRenderer) {
69
122
  return (index.h(RowRenderer, Object.assign({}, props, groupRowAttrs), index.h("div", { onClick: e => expandEvent(e, model, itemIndex) }, groupingCustomRenderer(index.h, Object.assign(Object.assign({}, props), { colType: props.providers.colType, name,
70
123
  expanded,
@@ -72,7 +125,7 @@ const GroupingRowRenderer = (props) => {
72
125
  }
73
126
  return (index.h(RowRenderer, Object.assign({}, props, groupRowAttrs), hasExpand && [
74
127
  index.h("button", { class: { [column_service.GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) }, expandSvgIconVNode(expanded)),
75
- name,
128
+ String(name),
76
129
  ]));
77
130
  };
78
131
  const expandSvgIconVNode = (expanded = false) => {
@@ -124,3 +177,4 @@ exports.RowRenderer = RowRenderer;
124
177
  exports.SortingSign = SortingSign;
125
178
  exports.expandEvent = expandEvent;
126
179
  exports.expandSvgIconVNode = expandSvgIconVNode;
180
+ exports.renderGroupCells = renderGroupCells;
@@ -3,14 +3,14 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var column_service = require('./column.service-BNWNiJW3.js');
7
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
8
- var viewport_store = require('./viewport.store-BscUCiUk.js');
9
- var index$1 = require('./index-DxaSE5uZ.js');
6
+ var column_service = require('./column.service-CD70rNL2.js');
7
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
8
+ var viewport_store = require('./viewport.store-Ci8H1bI9.js');
9
+ var index$1 = require('./index-BF6JDcMr.js');
10
10
  var index = require('./index-Dq8Xzj5l.js');
11
11
  var filter_button = require('./filter.button-C4xpvyyE.js');
12
12
  var debounce = require('./debounce-CcpHiH2p.js');
13
- var headerCellRenderer = require('./header-cell-renderer-DyjOxArm.js');
13
+ var headerCellRenderer = require('./header-cell-renderer-JXYFwayd.js');
14
14
 
15
15
  function calculateRealSize({ count, originItemSize, sizes, }) {
16
16
  const safeCount = Math.max(0, count);
@@ -2454,7 +2454,7 @@ class GroupingRowPlugin extends BasePlugin {
2454
2454
  * Initiated when need to reapply grouping
2455
2455
  */
2456
2456
  doSourceUpdate(options) {
2457
- var _a;
2457
+ var _a, _b;
2458
2458
  /**
2459
2459
  * Get source without grouping
2460
2460
  * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping
@@ -2466,10 +2466,11 @@ class GroupingRowPlugin extends BasePlugin {
2466
2466
  * Group again
2467
2467
  * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes
2468
2468
  */
2469
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = column_service.gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], expanded);
2469
+ const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = column_service.gatherGrouping(source, (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) !== null && _b !== void 0 ? _b : [], expanded);
2470
2470
  const customRenderer = options === null || options === void 0 ? void 0 : options.groupLabelTemplate;
2471
+ const cellRenderer = options === null || options === void 0 ? void 0 : options.groupCellTemplate;
2471
2472
  // setup source
2472
- this.providers.data.setData(sourceWithGroups, column_service.GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer }, true);
2473
+ this.providers.data.setData(sourceWithGroups, column_service.GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer, cellRenderer }, true);
2473
2474
  this.updateTrimmed(trimmed, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, sourceWithGroups);
2474
2475
  }
2475
2476
  /**
@@ -2478,17 +2479,21 @@ class GroupingRowPlugin extends BasePlugin {
2478
2479
  * If source came from other plugin
2479
2480
  */
2480
2481
  onDataSet(data) {
2481
- var _a, _b;
2482
+ var _a, _b, _c;
2482
2483
  let preservedExpanded = {};
2483
2484
  if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.preserveGroupingOnUpdate) !== false) {
2484
2485
  let { prevExpanded } = column_service.getSource(this.getStore().get('source'), this.getStore().get('proxyItems'), true);
2485
2486
  preservedExpanded = prevExpanded;
2486
2487
  }
2487
2488
  const source = data.source.filter(s => !column_service.isGrouping(s));
2488
- const options = Object.assign(Object.assign({}, (this.revogrid.grouping || {})), { prevExpanded: preservedExpanded });
2489
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = column_service.gatherGrouping(source, ((_b = this.options) === null || _b === void 0 ? void 0 : _b.props) || [], options);
2489
+ const options = Object.assign(Object.assign({}, this.options), { prevExpanded: preservedExpanded });
2490
+ const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = column_service.gatherGrouping(source, (_c = (_b = this.options) === null || _b === void 0 ? void 0 : _b.props) !== null && _c !== void 0 ? _c : [], options);
2490
2491
  data.source = sourceWithGroups;
2491
- this.providers.data.setGrouping({ depth });
2492
+ this.providers.data.setGrouping({
2493
+ depth,
2494
+ customRenderer: options.groupLabelTemplate,
2495
+ cellRenderer: options.groupCellTemplate,
2496
+ });
2492
2497
  this.updateTrimmed(trimmed, oldNewIndexMap, undefined, sourceWithGroups);
2493
2498
  }
2494
2499
  /**
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
6
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
7
7
 
8
8
  /**
9
9
  * Converts `value` to an integer.
@@ -436,8 +436,9 @@ const GROUP_EXPAND_BTN = `group-expand`;
436
436
  const GROUP_EXPAND_EVENT = `groupexpandclick`;
437
437
  const GROUPING_ROW_TYPE = 'rgRow';
438
438
 
439
- function getGroupValueDefault(item, prop) {
440
- return item[prop] || null;
439
+ function getGroupValueDefault(item, prop, emptyGroupValue) {
440
+ var _a;
441
+ return (_a = item[prop]) !== null && _a !== void 0 ? _a : emptyGroupValue;
441
442
  }
442
443
  function isDataRow(item) {
443
444
  return item != null;
@@ -543,13 +544,15 @@ function flattenGroupMaps({ groupedValues, parentIds, isExpanded, itemIndex, exp
543
544
  * @param columnProps - ids of groups
544
545
  * @param expanded - potentially expanded items if present
545
546
  */
546
- function gatherGrouping(array, columnProps, { prevExpanded = {}, expandedAll = false, getGroupValue = getGroupValueDefault, }) {
547
+ function gatherGrouping(array, columnProps, { prevExpanded = {}, expandedAll = false, getGroupValue, emptyGroupValue = '', }) {
547
548
  const groupedItems = new Map();
548
549
  array.forEach((item, originalIndex) => {
549
550
  if (!isDataRow(item)) {
550
551
  return;
551
552
  }
552
- const groupLevelValues = columnProps.map(groupId => getGroupValue(item, groupId));
553
+ const groupLevelValues = columnProps.map(groupId => getGroupValue
554
+ ? getGroupValue(item, groupId)
555
+ : getGroupValueDefault(item, groupId, emptyGroupValue));
553
556
  const lastLevelValue = groupLevelValues.pop();
554
557
  let currentGroupLevel = groupedItems;
555
558
  groupLevelValues.forEach(value => {
@@ -3143,7 +3143,7 @@ class DataStore {
3143
3143
  return this.dataStore;
3144
3144
  }
3145
3145
  constructor(type, storeData) {
3146
- const store = (this.dataStore = createStore(Object.assign({ items: [], proxyItems: [], source: [], groupingDepth: 0, groups: {}, type, trimmed: {}, groupingCustomRenderer: undefined }, storeData)));
3146
+ const store = (this.dataStore = createStore(Object.assign({ items: [], proxyItems: [], source: [], groupingDepth: 0, groups: {}, type, trimmed: {}, groupingCustomRenderer: undefined, groupingCellRenderer: undefined }, storeData)));
3147
3147
  store.use(proxyPlugin(store));
3148
3148
  store.use(trimmedPlugin(store));
3149
3149
  }
@@ -3183,6 +3183,7 @@ class DataStore {
3183
3183
  // if groups are not provided, we will consider that there is only one group with all items
3184
3184
  groups: grouping.groups,
3185
3185
  groupingCustomRenderer: grouping.customRenderer,
3186
+ groupingCellRenderer: grouping.cellRenderer,
3186
3187
  });
3187
3188
  }
3188
3189
  }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
6
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
7
7
 
8
8
  function isMetaKey(code) {
9
9
  const keys = [
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var column_service = require('./column.service-BNWNiJW3.js');
7
+ var column_service = require('./column.service-CD70rNL2.js');
8
8
 
9
9
  /**
10
10
  * Dispatches a custom event to a specified target element.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- require('./dimension.helpers-B9HgANnM.js');
6
+ require('./dimension.helpers-CB5sNw5J.js');
7
7
 
8
8
  /* Generate range on size
9
9
  */
@@ -3,16 +3,16 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var column_service = require('./column.service-BNWNiJW3.js');
7
- var column_drag_plugin = require('./column.drag.plugin-Cz-T4y3M.js');
8
- var headerCellRenderer = require('./header-cell-renderer-DyjOxArm.js');
9
- var cellRenderer = require('./cell-renderer-DfUCisis.js');
10
- var index$1 = require('./index-DxaSE5uZ.js');
11
- var textEditor = require('./text-editor-B4W-m-r-.js');
12
- var edit_utils = require('./edit.utils-pKeiYFLJ.js');
6
+ var column_service = require('./column.service-CD70rNL2.js');
7
+ var column_drag_plugin = require('./column.drag.plugin-DSiFObaj.js');
8
+ var headerCellRenderer = require('./header-cell-renderer-JXYFwayd.js');
9
+ var cellRenderer = require('./cell-renderer-DnOCJ9ge.js');
10
+ var index$1 = require('./index-BF6JDcMr.js');
11
+ var textEditor = require('./text-editor-CvgloQdG.js');
12
+ var edit_utils = require('./edit.utils-DDxnq9lw.js');
13
13
  var index = require('./index-Dq8Xzj5l.js');
14
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
15
- var viewport_store = require('./viewport.store-BscUCiUk.js');
14
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
15
+ var viewport_store = require('./viewport.store-Ci8H1bI9.js');
16
16
  var filter_button = require('./filter.button-C4xpvyyE.js');
17
17
  require('./debounce-CcpHiH2p.js');
18
18
 
@@ -249,6 +249,7 @@ exports.GroupingRowRenderer = cellRenderer.GroupingRowRenderer;
249
249
  exports.SortingSign = cellRenderer.SortingSign;
250
250
  exports.expandEvent = cellRenderer.expandEvent;
251
251
  exports.expandSvgIconVNode = cellRenderer.expandSvgIconVNode;
252
+ exports.renderGroupCells = cellRenderer.renderGroupCells;
252
253
  exports.applyMixins = index$1.applyMixins;
253
254
  exports.findPositionInArray = index$1.findPositionInArray;
254
255
  exports.getScrollbarSize = index$1.getScrollbarSize;
@@ -4,17 +4,17 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var column_service = require('./column.service-BNWNiJW3.js');
8
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
7
+ var column_service = require('./column.service-CD70rNL2.js');
8
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
9
9
  var debounce = require('./debounce-CcpHiH2p.js');
10
10
  var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
11
- var column_drag_plugin = require('./column.drag.plugin-Cz-T4y3M.js');
12
- var viewport_store = require('./viewport.store-BscUCiUk.js');
11
+ var column_drag_plugin = require('./column.drag.plugin-DSiFObaj.js');
12
+ var viewport_store = require('./viewport.store-Ci8H1bI9.js');
13
13
  var theme_service = require('./theme.service-BgnxGIjK.js');
14
- var index$1 = require('./index-DxaSE5uZ.js');
14
+ var index$1 = require('./index-BF6JDcMr.js');
15
15
  var events = require('./events-DeLDyZlb.js');
16
16
  require('./filter.button-C4xpvyyE.js');
17
- require('./header-cell-renderer-DyjOxArm.js');
17
+ require('./header-cell-renderer-JXYFwayd.js');
18
18
 
19
19
  class ColumnDataProvider {
20
20
  get stores() {
@@ -219,8 +219,12 @@ class DataProvider {
219
219
  const items = this.stores[type].store.get('items');
220
220
  this.stores[type].setData({ items: [...items] });
221
221
  }
222
- setGrouping({ depth }, type = 'rgRow') {
223
- this.stores[type].setData({ groupingDepth: depth });
222
+ setGrouping({ depth, customRenderer, cellRenderer, }, type = 'rgRow') {
223
+ this.stores[type].setData({
224
+ groupingDepth: depth,
225
+ groupingCustomRenderer: customRenderer,
226
+ groupingCellRenderer: cellRenderer,
227
+ });
224
228
  }
225
229
  setTrimmed(trimmed, type = 'rgRow') {
226
230
  const store = this.stores[type];
@@ -4,13 +4,13 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
7
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
8
8
  var events = require('./events-DeLDyZlb.js');
9
- var column_service = require('./column.service-BNWNiJW3.js');
10
- var edit_utils = require('./edit.utils-pKeiYFLJ.js');
11
- var index$1 = require('./index-DxaSE5uZ.js');
9
+ var column_service = require('./column.service-CD70rNL2.js');
10
+ var edit_utils = require('./edit.utils-DDxnq9lw.js');
11
+ var index$1 = require('./index-BF6JDcMr.js');
12
12
  var debounce = require('./debounce-CcpHiH2p.js');
13
- var viewport_store = require('./viewport.store-BscUCiUk.js');
13
+ var viewport_store = require('./viewport.store-Ci8H1bI9.js');
14
14
  var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
15
15
  var throttle = require('./throttle-fV6BUmM7.js');
16
16
 
@@ -4,11 +4,11 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
8
- var textEditor = require('./text-editor-B4W-m-r-.js');
9
- var edit_utils = require('./edit.utils-pKeiYFLJ.js');
7
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
8
+ var textEditor = require('./text-editor-CvgloQdG.js');
9
+ var edit_utils = require('./edit.utils-DDxnq9lw.js');
10
10
  var debounce = require('./debounce-CcpHiH2p.js');
11
- require('./index-DxaSE5uZ.js');
11
+ require('./index-BF6JDcMr.js');
12
12
 
13
13
  const Clipboard = class {
14
14
  constructor(hostRef) {
@@ -4,11 +4,11 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var column_service = require('./column.service-BNWNiJW3.js');
8
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
9
- var cellRenderer = require('./cell-renderer-DfUCisis.js');
7
+ var column_service = require('./column.service-CD70rNL2.js');
8
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
9
+ var cellRenderer = require('./cell-renderer-DnOCJ9ge.js');
10
10
  var filter_button = require('./filter.button-C4xpvyyE.js');
11
- var headerCellRenderer = require('./header-cell-renderer-DyjOxArm.js');
11
+ var headerCellRenderer = require('./header-cell-renderer-JXYFwayd.js');
12
12
  var throttle = require('./throttle-fV6BUmM7.js');
13
13
  var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
14
14
  require('./debounce-CcpHiH2p.js');
@@ -169,6 +169,7 @@ const RevogrData = class {
169
169
  const rowsEls = [];
170
170
  const depth = this.dataStore.get('groupingDepth');
171
171
  const groupingCustomRenderer = this.dataStore.get('groupingCustomRenderer');
172
+ const groupingCellRenderer = this.dataStore.get('groupingCellRenderer');
172
173
  const groupDepth = this.columnService.hasGrouping ? depth : 0;
173
174
  const rowRenderOffset = this.viewportRow.get('renderOffset') || 0;
174
175
  const colRenderOffset = this.viewportCol.get('renderOffset') || 0;
@@ -177,6 +178,7 @@ const RevogrData = class {
177
178
  // #region Grouping
178
179
  if (column_service.isGrouping(dataItem)) {
179
180
  const gmodel = Object.assign(Object.assign({}, rgRow), { start: rgRow.start - rowRenderOffset, index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer,
181
+ groupingCellRenderer, additionalData: this.additionalData,
180
182
  // Only show expand button if grouping is enabled and not in row headers
181
183
  hasExpand: this.columnService.hasGrouping && this.colType !== 'rowHeaders', columnItems: cols, providers: this.providers });
182
184
  rowsEls.push(index.h(cellRenderer.GroupingRowRenderer, Object.assign({}, gmodel)));
@@ -3,8 +3,8 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var edit_utils = require('./edit.utils-pKeiYFLJ.js');
7
- var index = require('./index-DxaSE5uZ.js');
6
+ var edit_utils = require('./edit.utils-DDxnq9lw.js');
7
+ var index = require('./index-BF6JDcMr.js');
8
8
 
9
9
  class TextEditor {
10
10
  constructor(data, saveCallback) {
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
6
+ var dimension_helpers = require('./dimension.helpers-CB5sNw5J.js');
7
7
 
8
8
  const LETTER_BLOCK_SIZE = 10;
9
9
  const calculateRowHeaderSize = (itemsLength, rowHeaderColumn, minWidth = 50) => {
@@ -101,6 +101,7 @@ export class RevogrData {
101
101
  const rowsEls = [];
102
102
  const depth = this.dataStore.get('groupingDepth');
103
103
  const groupingCustomRenderer = this.dataStore.get('groupingCustomRenderer');
104
+ const groupingCellRenderer = this.dataStore.get('groupingCellRenderer');
104
105
  const groupDepth = this.columnService.hasGrouping ? depth : 0;
105
106
  const rowRenderOffset = this.viewportRow.get('renderOffset') || 0;
106
107
  const colRenderOffset = this.viewportCol.get('renderOffset') || 0;
@@ -109,6 +110,7 @@ export class RevogrData {
109
110
  // #region Grouping
110
111
  if (isGrouping(dataItem)) {
111
112
  const gmodel = Object.assign(Object.assign({}, rgRow), { start: rgRow.start - rowRenderOffset, index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer,
113
+ groupingCellRenderer, additionalData: this.additionalData,
112
114
  // Only show expand button if grouping is enabled and not in row headers
113
115
  hasExpand: this.columnService.hasGrouping && this.colType !== 'rowHeaders', columnItems: cols, providers: this.providers });
114
116
  rowsEls.push(h(GroupingRowRenderer, Object.assign({}, gmodel)));
@@ -1776,7 +1776,7 @@ export class RevoGridComponent {
1776
1776
  "mutable": false,
1777
1777
  "complexType": {
1778
1778
  "original": "GroupingOptions",
1779
- "resolved": "{ props?: ColumnProp[] | undefined; preserveGroupingOnUpdate?: boolean | undefined; groupLabelTemplate?: GroupLabelTemplateFunc | undefined; } & ExpandedOptions",
1779
+ "resolved": "{ props?: ColumnProp[] | undefined; preserveGroupingOnUpdate?: boolean | undefined; groupLabelTemplate?: GroupLabelTemplateFunc | undefined; groupCellTemplate?: GroupCellTemplateFunc | undefined; } & ExpandedOptions",
1780
1780
  "references": {
1781
1781
  "GroupingOptions": {
1782
1782
  "location": "import",
@@ -126,7 +126,7 @@ export class GroupingRowPlugin extends BasePlugin {
126
126
  * Initiated when need to reapply grouping
127
127
  */
128
128
  doSourceUpdate(options) {
129
- var _a;
129
+ var _a, _b;
130
130
  /**
131
131
  * Get source without grouping
132
132
  * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping
@@ -138,10 +138,11 @@ export class GroupingRowPlugin extends BasePlugin {
138
138
  * Group again
139
139
  * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes
140
140
  */
141
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], expanded);
141
+ const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = gatherGrouping(source, (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) !== null && _b !== void 0 ? _b : [], expanded);
142
142
  const customRenderer = options === null || options === void 0 ? void 0 : options.groupLabelTemplate;
143
+ const cellRenderer = options === null || options === void 0 ? void 0 : options.groupCellTemplate;
143
144
  // setup source
144
- this.providers.data.setData(sourceWithGroups, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer }, true);
145
+ this.providers.data.setData(sourceWithGroups, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer, cellRenderer }, true);
145
146
  this.updateTrimmed(trimmed, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, sourceWithGroups);
146
147
  }
147
148
  /**
@@ -150,17 +151,21 @@ export class GroupingRowPlugin extends BasePlugin {
150
151
  * If source came from other plugin
151
152
  */
152
153
  onDataSet(data) {
153
- var _a, _b;
154
+ var _a, _b, _c;
154
155
  let preservedExpanded = {};
155
156
  if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.preserveGroupingOnUpdate) !== false) {
156
157
  let { prevExpanded } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'), true);
157
158
  preservedExpanded = prevExpanded;
158
159
  }
159
160
  const source = data.source.filter(s => !isGrouping(s));
160
- const options = Object.assign(Object.assign({}, (this.revogrid.grouping || {})), { prevExpanded: preservedExpanded });
161
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = gatherGrouping(source, ((_b = this.options) === null || _b === void 0 ? void 0 : _b.props) || [], options);
161
+ const options = Object.assign(Object.assign({}, this.options), { prevExpanded: preservedExpanded });
162
+ const { sourceWithGroups, depth, trimmed, oldNewIndexMap, } = gatherGrouping(source, (_c = (_b = this.options) === null || _b === void 0 ? void 0 : _b.props) !== null && _c !== void 0 ? _c : [], options);
162
163
  data.source = sourceWithGroups;
163
- this.providers.data.setGrouping({ depth });
164
+ this.providers.data.setGrouping({
165
+ depth,
166
+ customRenderer: options.groupLabelTemplate,
167
+ cellRenderer: options.groupCellTemplate,
168
+ });
164
169
  this.updateTrimmed(trimmed, oldNewIndexMap, undefined, sourceWithGroups);
165
170
  }
166
171
  /**
@@ -3,7 +3,10 @@
3
3
  */
4
4
  import { h } from "@stencil/core";
5
5
  import RowRenderer from "../../components/data/row-renderer";
6
- import { GROUP_DEPTH, GROUP_EXPANDED, GROUP_EXPAND_BTN, PSEUDO_GROUP_ITEM, GROUP_EXPAND_EVENT, } from "./grouping.const";
6
+ import { GROUP_DEPTH, GROUP_EXPANDED, GROUP_EXPAND_BTN, PSEUDO_GROUP_ITEM, GROUP_EXPAND_EVENT, GROUP_COLUMN_PROP, } from "./grouping.const";
7
+ import { getSourceItem } from "../../store/index";
8
+ import { CELL_CLASS, DATA_COL, DATA_ROW, getCellRaw } from "../../utils";
9
+ import { isGroupingColumn } from "./grouping.service";
7
10
  export function expandEvent(e, model, virtualIndex) {
8
11
  var _a;
9
12
  const event = new CustomEvent(GROUP_EXPAND_EVENT, {
@@ -16,8 +19,58 @@ export function expandEvent(e, model, virtualIndex) {
16
19
  });
17
20
  (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(event);
18
21
  }
22
+ export function renderGroupCells(props, { name, expanded, depth, }) {
23
+ const { additionalData, columnItems, groupingCellRenderer, hasExpand, itemIndex, model, providers, size, start, end, } = props;
24
+ if (!groupingCellRenderer) {
25
+ return [];
26
+ }
27
+ const renderOffset = providers.viewport.get('renderOffset') || 0;
28
+ const data = providers.data.get('source');
29
+ const rowItem = { itemIndex, size, start, end };
30
+ const onExpand = (event) => expandEvent(event, model, itemIndex);
31
+ return columnItems.map(columnItem => {
32
+ const column = getSourceItem(providers.columns, columnItem.itemIndex);
33
+ if (!column) {
34
+ return null;
35
+ }
36
+ const isLabelColumn = isGroupingColumn(column);
37
+ const templateProps = {
38
+ prop: column.prop,
39
+ model,
40
+ data,
41
+ column,
42
+ rowIndex: itemIndex,
43
+ colIndex: columnItem.itemIndex,
44
+ colType: providers.colType,
45
+ type: providers.type,
46
+ value: getCellRaw(model, column),
47
+ providers,
48
+ columnItem,
49
+ rowItem,
50
+ group: {
51
+ name,
52
+ depth,
53
+ expanded,
54
+ prop: model[GROUP_COLUMN_PROP],
55
+ isLabelColumn,
56
+ canExpand: hasExpand,
57
+ onExpand,
58
+ },
59
+ };
60
+ return (h("div", { key: columnItem.itemIndex, class: {
61
+ [CELL_CLASS]: true,
62
+ groupingCell: true,
63
+ groupingLabelCell: isLabelColumn,
64
+ }, [DATA_COL]: columnItem.itemIndex,
65
+ [DATA_ROW]: itemIndex, style: {
66
+ width: `${columnItem.size}px`,
67
+ transform: `translateX(${columnItem.start - renderOffset}px)`,
68
+ height: size ? `${size}px` : undefined,
69
+ } }, groupingCellRenderer(h, templateProps, additionalData)));
70
+ });
71
+ }
19
72
  export const GroupingRowRenderer = (props) => {
20
- const { model, itemIndex, hasExpand, groupingCustomRenderer } = props;
73
+ const { model, itemIndex, hasExpand, groupingCustomRenderer, groupingCellRenderer, } = props;
21
74
  const name = model[PSEUDO_GROUP_ITEM];
22
75
  const expanded = model[GROUP_EXPANDED];
23
76
  const depth = parseInt(model[GROUP_DEPTH], 10) || 0;
@@ -26,6 +79,9 @@ export const GroupingRowRenderer = (props) => {
26
79
  depth,
27
80
  expanded,
28
81
  };
82
+ if (groupingCellRenderer) {
83
+ return (h(RowRenderer, Object.assign({ index: props.index, size: props.size, start: props.start }, groupRowAttrs), renderGroupCells(props, { name, expanded, depth })));
84
+ }
29
85
  if (groupingCustomRenderer) {
30
86
  return (h(RowRenderer, Object.assign({}, props, groupRowAttrs), h("div", { onClick: e => expandEvent(e, model, itemIndex) }, groupingCustomRenderer(h, Object.assign(Object.assign({}, props), { colType: props.providers.colType, name,
31
87
  expanded,
@@ -33,7 +89,7 @@ export const GroupingRowRenderer = (props) => {
33
89
  }
34
90
  return (h(RowRenderer, Object.assign({}, props, groupRowAttrs), hasExpand && [
35
91
  h("button", { class: { [GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) }, expandSvgIconVNode(expanded)),
36
- name,
92
+ String(name),
37
93
  ]));
38
94
  };
39
95
  export const expandSvgIconVNode = (expanded = false) => {
@@ -2,8 +2,9 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { GROUP_DEPTH, GROUP_EXPANDED, PSEUDO_GROUP_COLUMN, PSEUDO_GROUP_ITEM, PSEUDO_GROUP_ITEM_ID, PSEUDO_GROUP_ITEM_VALUE, GROUP_ORIGINAL_INDEX, GROUP_COLUMN_PROP, } from "./grouping.const";
5
- function getGroupValueDefault(item, prop) {
6
- return item[prop] || null;
5
+ function getGroupValueDefault(item, prop, emptyGroupValue) {
6
+ var _a;
7
+ return (_a = item[prop]) !== null && _a !== void 0 ? _a : emptyGroupValue;
7
8
  }
8
9
  function isDataRow(item) {
9
10
  return item != null;
@@ -109,13 +110,15 @@ function flattenGroupMaps({ groupedValues, parentIds, isExpanded, itemIndex, exp
109
110
  * @param columnProps - ids of groups
110
111
  * @param expanded - potentially expanded items if present
111
112
  */
112
- export function gatherGrouping(array, columnProps, { prevExpanded = {}, expandedAll = false, getGroupValue = getGroupValueDefault, }) {
113
+ export function gatherGrouping(array, columnProps, { prevExpanded = {}, expandedAll = false, getGroupValue, emptyGroupValue = '', }) {
113
114
  const groupedItems = new Map();
114
115
  array.forEach((item, originalIndex) => {
115
116
  if (!isDataRow(item)) {
116
117
  return;
117
118
  }
118
- const groupLevelValues = columnProps.map(groupId => getGroupValue(item, groupId));
119
+ const groupLevelValues = columnProps.map(groupId => getGroupValue
120
+ ? getGroupValue(item, groupId)
121
+ : getGroupValueDefault(item, groupId, emptyGroupValue));
119
122
  const lastLevelValue = groupLevelValues.pop();
120
123
  let currentGroupLevel = groupedItems;
121
124
  groupLevelValues.forEach(value => {
@@ -93,8 +93,12 @@ export class DataProvider {
93
93
  const items = this.stores[type].store.get('items');
94
94
  this.stores[type].setData({ items: [...items] });
95
95
  }
96
- setGrouping({ depth }, type = 'rgRow') {
97
- this.stores[type].setData({ groupingDepth: depth });
96
+ setGrouping({ depth, customRenderer, cellRenderer, }, type = 'rgRow') {
97
+ this.stores[type].setData({
98
+ groupingDepth: depth,
99
+ groupingCustomRenderer: customRenderer,
100
+ groupingCellRenderer: cellRenderer,
101
+ });
98
102
  }
99
103
  setTrimmed(trimmed, type = 'rgRow') {
100
104
  const store = this.stores[type];