@vaadin/grid 22.0.13 → 22.0.16

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 (50) hide show
  1. package/package.json +9 -9
  2. package/src/vaadin-grid-a11y-mixin.js +5 -5
  3. package/src/vaadin-grid-active-item-mixin.d.ts +1 -1
  4. package/src/vaadin-grid-active-item-mixin.js +7 -7
  5. package/src/vaadin-grid-array-data-provider-mixin.d.ts +1 -1
  6. package/src/vaadin-grid-array-data-provider-mixin.js +4 -4
  7. package/src/vaadin-grid-column-group.js +41 -38
  8. package/src/vaadin-grid-column-reordering-mixin.d.ts +1 -1
  9. package/src/vaadin-grid-column-reordering-mixin.js +10 -10
  10. package/src/vaadin-grid-column-resizing-mixin.js +4 -4
  11. package/src/vaadin-grid-column.d.ts +2 -2
  12. package/src/vaadin-grid-column.js +19 -19
  13. package/src/vaadin-grid-data-provider-mixin.d.ts +2 -2
  14. package/src/vaadin-grid-data-provider-mixin.js +14 -14
  15. package/src/vaadin-grid-drag-and-drop-mixin.d.ts +1 -1
  16. package/src/vaadin-grid-drag-and-drop-mixin.js +9 -9
  17. package/src/vaadin-grid-dynamic-columns-mixin.js +3 -3
  18. package/src/vaadin-grid-event-context-mixin.d.ts +1 -1
  19. package/src/vaadin-grid-event-context-mixin.js +1 -1
  20. package/src/vaadin-grid-filter-column.js +1 -1
  21. package/src/vaadin-grid-filter-mixin.js +3 -3
  22. package/src/vaadin-grid-filter.d.ts +2 -2
  23. package/src/vaadin-grid-filter.js +2 -2
  24. package/src/vaadin-grid-keyboard-navigation-mixin.js +21 -16
  25. package/src/vaadin-grid-row-details-mixin.d.ts +2 -2
  26. package/src/vaadin-grid-row-details-mixin.js +4 -4
  27. package/src/vaadin-grid-scroll-mixin.js +3 -3
  28. package/src/vaadin-grid-selection-column.d.ts +2 -2
  29. package/src/vaadin-grid-selection-column.js +7 -7
  30. package/src/vaadin-grid-selection-mixin.d.ts +1 -1
  31. package/src/vaadin-grid-selection-mixin.js +21 -7
  32. package/src/vaadin-grid-sort-column.d.ts +2 -2
  33. package/src/vaadin-grid-sort-column.js +2 -2
  34. package/src/vaadin-grid-sort-mixin.js +5 -5
  35. package/src/vaadin-grid-sorter.d.ts +2 -2
  36. package/src/vaadin-grid-sorter.js +4 -4
  37. package/src/vaadin-grid-styles.js +1 -1
  38. package/src/vaadin-grid-styling-mixin.d.ts +1 -1
  39. package/src/vaadin-grid-styling-mixin.js +1 -1
  40. package/src/vaadin-grid-tree-column.js +2 -2
  41. package/src/vaadin-grid-tree-toggle.d.ts +2 -2
  42. package/src/vaadin-grid-tree-toggle.js +4 -4
  43. package/src/vaadin-grid.d.ts +5 -5
  44. package/src/vaadin-grid.js +35 -34
  45. package/theme/lumo/vaadin-grid-sorter-styles.js +1 -1
  46. package/theme/lumo/vaadin-grid-styles.js +2 -2
  47. package/theme/lumo/vaadin-grid-tree-toggle-styles.js +1 -1
  48. package/theme/material/vaadin-grid-sorter-styles.js +1 -1
  49. package/theme/material/vaadin-grid-styles.js +1 -1
  50. package/theme/material/vaadin-grid-tree-toggle-styles.js +1 -1
@@ -42,7 +42,7 @@ export const ItemCache = class ItemCache {
42
42
  Object.keys(this.pendingRequests).length ||
43
43
  Object.keys(this.itemCaches).filter((index) => {
44
44
  return this.itemCaches[index].isLoading();
45
- })[0]
45
+ })[0],
46
46
  );
47
47
  }
48
48
 
@@ -113,7 +113,7 @@ export const DataProviderMixin = (superClass) =>
113
113
  */
114
114
  size: {
115
115
  type: Number,
116
- notify: true
116
+ notify: true,
117
117
  },
118
118
 
119
119
  /**
@@ -124,7 +124,7 @@ export const DataProviderMixin = (superClass) =>
124
124
  pageSize: {
125
125
  type: Number,
126
126
  value: 50,
127
- observer: '_pageSizeChanged'
127
+ observer: '_pageSizeChanged',
128
128
  },
129
129
 
130
130
  /**
@@ -153,7 +153,7 @@ export const DataProviderMixin = (superClass) =>
153
153
  dataProvider: {
154
154
  type: Object,
155
155
  notify: true,
156
- observer: '_dataProviderChanged'
156
+ observer: '_dataProviderChanged',
157
157
  },
158
158
 
159
159
  /**
@@ -163,7 +163,7 @@ export const DataProviderMixin = (superClass) =>
163
163
  type: Boolean,
164
164
  notify: true,
165
165
  readOnly: true,
166
- reflectToAttribute: true
166
+ reflectToAttribute: true,
167
167
  },
168
168
 
169
169
  /**
@@ -175,7 +175,7 @@ export const DataProviderMixin = (superClass) =>
175
175
  value: function () {
176
176
  const cache = new ItemCache(this);
177
177
  return cache;
178
- }
178
+ },
179
179
  },
180
180
 
181
181
  /**
@@ -183,7 +183,7 @@ export const DataProviderMixin = (superClass) =>
183
183
  */
184
184
  _hasData: {
185
185
  type: Boolean,
186
- value: false
186
+ value: false,
187
187
  },
188
188
 
189
189
  /**
@@ -192,7 +192,7 @@ export const DataProviderMixin = (superClass) =>
192
192
  */
193
193
  itemIdPath: {
194
194
  type: String,
195
- value: null
195
+ value: null,
196
196
  },
197
197
 
198
198
  /**
@@ -202,7 +202,7 @@ export const DataProviderMixin = (superClass) =>
202
202
  expandedItems: {
203
203
  type: Object,
204
204
  notify: true,
205
- value: () => []
205
+ value: () => [],
206
206
  },
207
207
 
208
208
  /**
@@ -210,8 +210,8 @@ export const DataProviderMixin = (superClass) =>
210
210
  */
211
211
  __expandedKeys: {
212
212
  type: Object,
213
- value: () => new Set()
214
- }
213
+ value: () => new Set(),
214
+ },
215
215
  };
216
216
  }
217
217
 
@@ -344,7 +344,7 @@ export const DataProviderMixin = (superClass) =>
344
344
  pageSize: this.pageSize,
345
345
  sortOrders: this._mapSorters(),
346
346
  filters: this._mapFilters(),
347
- parentItem: cache.parentItem
347
+ parentItem: cache.parentItem,
348
348
  };
349
349
 
350
350
  this.dataProvider(params, (items, size) => {
@@ -436,7 +436,7 @@ export const DataProviderMixin = (superClass) =>
436
436
  'The <vaadin-grid> needs the total number of items' +
437
437
  ' in order to display rows. Set the total number of items' +
438
438
  ' to the `size` property, or provide the total number of items' +
439
- ' in the second argument of the `dataProvider`’s `callback` call.'
439
+ ' in the second argument of the `dataProvider`’s `callback` call.',
440
440
  );
441
441
  }
442
442
  }
@@ -452,7 +452,7 @@ export const DataProviderMixin = (superClass) =>
452
452
  this._debouncerCheckSize = Debouncer.debounce(
453
453
  this._debouncerCheckSize,
454
454
  timeOut.after(2000),
455
- this._checkSize.bind(this)
455
+ this._checkSize.bind(this),
456
456
  );
457
457
  }
458
458
 
@@ -13,7 +13,7 @@ export type GridDropLocation = 'above' | 'on-top' | 'below' | 'empty';
13
13
  export type GridDropMode = 'between' | 'on-top' | 'on-top-or-between' | 'on-grid';
14
14
 
15
15
  export declare function DragAndDropMixin<TItem, T extends Constructor<HTMLElement>>(
16
- base: T
16
+ base: T,
17
17
  ): T & Constructor<DragAndDropMixinClass<TItem>>;
18
18
 
19
19
  export declare class DragAndDropMixinClass<TItem> {
@@ -7,14 +7,14 @@ const DropMode = {
7
7
  BETWEEN: 'between',
8
8
  ON_TOP: 'on-top',
9
9
  ON_TOP_OR_BETWEEN: 'on-top-or-between',
10
- ON_GRID: 'on-grid'
10
+ ON_GRID: 'on-grid',
11
11
  };
12
12
 
13
13
  const DropLocation = {
14
14
  ON_TOP: 'on-top',
15
15
  ABOVE: 'above',
16
16
  BELOW: 'below',
17
- EMPTY: 'empty'
17
+ EMPTY: 'empty',
18
18
  };
19
19
 
20
20
  /**
@@ -79,8 +79,8 @@ export const DragAndDropMixin = (superClass) =>
79
79
 
80
80
  /** @private */
81
81
  __dndAutoScrollThreshold: {
82
- value: 50
83
- }
82
+ value: 50,
83
+ },
84
84
  };
85
85
  }
86
86
 
@@ -162,8 +162,8 @@ export const DragAndDropMixin = (superClass) =>
162
162
  detail: {
163
163
  draggedItems: rows.map((row) => row._item),
164
164
  setDragData: (type, data) => e.dataTransfer.setData(type, data),
165
- setDraggedItemsCount: (count) => row.setAttribute('dragstart', count)
166
- }
165
+ setDraggedItemsCount: (count) => row.setAttribute('dragstart', count),
166
+ },
167
167
  });
168
168
  event.originalEvent = e;
169
169
  this.dispatchEvent(event);
@@ -313,7 +313,7 @@ export const DragAndDropMixin = (superClass) =>
313
313
  Array.from(e.dataTransfer.types).map((type) => {
314
314
  return {
315
315
  type,
316
- data: e.dataTransfer.getData(type)
316
+ data: e.dataTransfer.getData(type),
317
317
  };
318
318
  });
319
319
 
@@ -325,8 +325,8 @@ export const DragAndDropMixin = (superClass) =>
325
325
  detail: {
326
326
  dropTargetItem: this._dragOverItem,
327
327
  dropLocation: this._dropLocation,
328
- dragData
329
- }
328
+ dragData,
329
+ },
330
330
  });
331
331
  event.originalEvent = e;
332
332
  this.dispatchEvent(event);
@@ -18,7 +18,7 @@ export const DynamicColumnsMixin = (superClass) =>
18
18
  /**
19
19
  * @protected
20
20
  */
21
- _columnTree: Object
21
+ _columnTree: Object,
22
22
  };
23
23
  }
24
24
 
@@ -104,7 +104,7 @@ export const DynamicColumnsMixin = (superClass) =>
104
104
  this._debouncerCheckImports = Debouncer.debounce(
105
105
  this._debouncerCheckImports,
106
106
  timeOut.after(2000),
107
- this._checkImports.bind(this)
107
+ this._checkImports.bind(this),
108
108
  );
109
109
 
110
110
  this._ensureFirstPageLoaded();
@@ -140,7 +140,7 @@ export const DynamicColumnsMixin = (superClass) =>
140
140
  'vaadin-grid-tree-toggle',
141
141
  'vaadin-grid-selection-column',
142
142
  'vaadin-grid-sort-column',
143
- 'vaadin-grid-sorter'
143
+ 'vaadin-grid-sorter',
144
144
  ].forEach((elementName) => {
145
145
  const element = this.querySelector(elementName);
146
146
  if (element && !(element instanceof PolymerElement)) {
@@ -18,7 +18,7 @@ export interface GridEventContext<TItem> {
18
18
  }
19
19
 
20
20
  export declare function EventContextMixin<TItem, T extends Constructor<HTMLElement>>(
21
- base: T
21
+ base: T,
22
22
  ): T & Constructor<EventContextMixinClass<TItem>>;
23
23
 
24
24
  export declare class EventContextMixinClass<TItem> {
@@ -41,7 +41,7 @@ export const EventContextMixin = (superClass) =>
41
41
  }
42
42
 
43
43
  context.section = ['body', 'header', 'footer', 'details'].filter(
44
- (section) => cell.getAttribute('part').indexOf(section) > -1
44
+ (section) => cell.getAttribute('part').indexOf(section) > -1,
45
45
  )[0];
46
46
 
47
47
  if (cell._column) {
@@ -34,7 +34,7 @@ class GridFilterColumn extends GridColumn {
34
34
  /**
35
35
  * Text to display as the label of the column filter text-field.
36
36
  */
37
- header: String
37
+ header: String,
38
38
  };
39
39
  }
40
40
 
@@ -16,8 +16,8 @@ export const FilterMixin = (superClass) =>
16
16
  type: Array,
17
17
  value: function () {
18
18
  return [];
19
- }
20
- }
19
+ },
20
+ },
21
21
  };
22
22
  }
23
23
 
@@ -69,7 +69,7 @@ export const FilterMixin = (superClass) =>
69
69
  return this._filters.map((filter) => {
70
70
  return {
71
71
  path: filter.path,
72
- value: filter.value
72
+ value: filter.value,
73
73
  };
74
74
  });
75
75
  }
@@ -54,13 +54,13 @@ declare class GridFilter extends HTMLElement {
54
54
  addEventListener<K extends keyof GridFilterEventMap>(
55
55
  type: K,
56
56
  listener: (this: GridFilter, ev: GridFilterEventMap[K]) => void,
57
- options?: boolean | AddEventListenerOptions
57
+ options?: boolean | AddEventListenerOptions,
58
58
  ): void;
59
59
 
60
60
  removeEventListener<K extends keyof GridFilterEventMap>(
61
61
  type: K,
62
62
  listener: (this: GridFilter, ev: GridFilterEventMap[K]) => void,
63
- options?: boolean | EventListenerOptions
63
+ options?: boolean | EventListenerOptions,
64
64
  ): void;
65
65
  }
66
66
 
@@ -71,11 +71,11 @@ class GridFilter extends class extends PolymerElement {} {
71
71
  */
72
72
  value: {
73
73
  type: String,
74
- notify: true
74
+ notify: true,
75
75
  },
76
76
 
77
77
  /** @private */
78
- _connected: Boolean
78
+ _connected: Boolean,
79
79
  };
80
80
  }
81
81
 
@@ -14,7 +14,7 @@ export const KeyboardNavigationMixin = (superClass) =>
14
14
  /** @private */
15
15
  _headerFocusable: {
16
16
  type: Object,
17
- observer: '_focusableChanged'
17
+ observer: '_focusableChanged',
18
18
  },
19
19
 
20
20
  /**
@@ -23,13 +23,13 @@ export const KeyboardNavigationMixin = (superClass) =>
23
23
  */
24
24
  _itemsFocusable: {
25
25
  type: Object,
26
- observer: '_focusableChanged'
26
+ observer: '_focusableChanged',
27
27
  },
28
28
 
29
29
  /** @private */
30
30
  _footerFocusable: {
31
31
  type: Object,
32
- observer: '_focusableChanged'
32
+ observer: '_focusableChanged',
33
33
  },
34
34
 
35
35
  /** @private */
@@ -41,7 +41,7 @@ export const KeyboardNavigationMixin = (superClass) =>
41
41
  */
42
42
  _focusedItemIndex: {
43
43
  type: Number,
44
- value: 0
44
+ value: 0,
45
45
  },
46
46
 
47
47
  /** @private */
@@ -64,8 +64,8 @@ export const KeyboardNavigationMixin = (superClass) =>
64
64
  value: false,
65
65
  reflectToAttribute: true,
66
66
  readOnly: true,
67
- observer: '_interactingChanged'
68
- }
67
+ observer: '_interactingChanged',
68
+ },
69
69
  };
70
70
  }
71
71
 
@@ -222,7 +222,7 @@ export const KeyboardNavigationMixin = (superClass) =>
222
222
  __isRowExpandable(row) {
223
223
  const treeToggle = [...row.children].reduce(
224
224
  (value, cell) => value || cell._content.querySelector('vaadin-grid-tree-toggle'),
225
- null
225
+ null,
226
226
  );
227
227
  return treeToggle && !treeToggle.expanded && !treeToggle.leaf;
228
228
  }
@@ -468,7 +468,7 @@ export const KeyboardNavigationMixin = (superClass) =>
468
468
 
469
469
  return {
470
470
  dstRow: [...activeRowGroup.children].find((el) => !el.hidden && el.index === dstRowIndex),
471
- dstIsRowDetails
471
+ dstIsRowDetails,
472
472
  };
473
473
  }
474
474
  }
@@ -519,7 +519,7 @@ export const KeyboardNavigationMixin = (superClass) =>
519
519
  const orderedColumnIndex = dstSortedColumnOrders.indexOf(
520
520
  dstSortedColumnOrders
521
521
  .slice(0)
522
- .sort((b, a) => Math.abs(b - this._focusedColumnOrder) - Math.abs(a - this._focusedColumnOrder))[0]
522
+ .sort((b, a) => Math.abs(b - this._focusedColumnOrder) - Math.abs(a - this._focusedColumnOrder))[0],
523
523
  );
524
524
 
525
525
  // Index of the destination column order
@@ -594,7 +594,7 @@ export const KeyboardNavigationMixin = (superClass) =>
594
594
  this._headerFocusable,
595
595
  this._itemsFocusable,
596
596
  this._footerFocusable,
597
- this.$.focusexit
597
+ this.$.focusexit,
598
598
  ];
599
599
 
600
600
  let index = tabOrder.indexOf(srcElement);
@@ -620,6 +620,11 @@ export const KeyboardNavigationMixin = (superClass) =>
620
620
  _onTabKeyDown(e) {
621
621
  const focusTarget = this._predictFocusStepTarget(e.composedPath()[0], e.shiftKey ? -1 : 1);
622
622
 
623
+ // Can be undefined if grid has tabindex
624
+ if (!focusTarget) {
625
+ return;
626
+ }
627
+
623
628
  // Prevent focus-trap logic from intercepting the event.
624
629
  e.stopPropagation();
625
630
 
@@ -639,7 +644,7 @@ export const KeyboardNavigationMixin = (superClass) =>
639
644
  // scrolling. Focus the row for the stored focused item index instead.
640
645
  const columnIndex = Array.from(targetRow.children).indexOf(this._itemsFocusable);
641
646
  const focusedItemRow = Array.from(this.$.items.children).find(
642
- (row) => !row.hidden && row.index === this._focusedItemIndex
647
+ (row) => !row.hidden && row.index === this._focusedItemIndex,
643
648
  );
644
649
  if (focusedItemRow) {
645
650
  itemsFocusTarget = focusedItemRow.children[columnIndex];
@@ -665,9 +670,9 @@ export const KeyboardNavigationMixin = (superClass) =>
665
670
  this.dispatchEvent(
666
671
  new CustomEvent(isRow ? 'row-activate' : 'cell-activate', {
667
672
  detail: {
668
- model: this.__getRowModel(isRow ? element : element.parentElement)
669
- }
670
- })
673
+ model: this.__getRowModel(isRow ? element : element.parentElement),
674
+ },
675
+ }),
671
676
  );
672
677
  }
673
678
  }
@@ -738,7 +743,7 @@ export const KeyboardNavigationMixin = (superClass) =>
738
743
  // Fire a public event for cell.
739
744
  const context = this.getEventContext(e);
740
745
  cell.dispatchEvent(
741
- new CustomEvent('cell-focus', { bubbles: true, composed: true, detail: { context: context } })
746
+ new CustomEvent('cell-focus', { bubbles: true, composed: true, detail: { context: context } }),
742
747
  );
743
748
  }
744
749
  }
@@ -920,7 +925,7 @@ export const KeyboardNavigationMixin = (superClass) =>
920
925
  return {
921
926
  section,
922
927
  row,
923
- cell
928
+ cell,
924
929
  };
925
930
  }
926
931
 
@@ -9,11 +9,11 @@ import { Grid, GridItemModel } from './vaadin-grid.js';
9
9
  export type GridRowDetailsRenderer<TItem> = (
10
10
  root: HTMLElement,
11
11
  grid?: Grid<TItem>,
12
- model?: GridItemModel<TItem>
12
+ model?: GridItemModel<TItem>,
13
13
  ) => void;
14
14
 
15
15
  export declare function RowDetailsMixin<TItem, T extends Constructor<HTMLElement>>(
16
- base: T
16
+ base: T,
17
17
  ): T & Constructor<RowDetailsMixinClass<TItem>>;
18
18
 
19
19
  export declare class RowDetailsMixinClass<TItem> {
@@ -19,7 +19,7 @@ export const RowDetailsMixin = (superClass) =>
19
19
  type: Array,
20
20
  value: function () {
21
21
  return [];
22
- }
22
+ },
23
23
  },
24
24
 
25
25
  /**
@@ -45,15 +45,15 @@ export const RowDetailsMixin = (superClass) =>
45
45
  * @protected
46
46
  */
47
47
  _detailsCells: {
48
- type: Array
49
- }
48
+ type: Array,
49
+ },
50
50
  };
51
51
  }
52
52
 
53
53
  static get observers() {
54
54
  return [
55
55
  '_detailsOpenedItemsChanged(detailsOpenedItems.*, rowDetailsRenderer)',
56
- '_rowDetailsRendererChanged(rowDetailsRenderer)'
56
+ '_rowDetailsRendererChanged(rowDetailsRenderer)',
57
57
  ];
58
58
  }
59
59
 
@@ -7,7 +7,7 @@ import { animationFrame, microTask, timeOut } from '@vaadin/component-base/src/a
7
7
  import { Debouncer } from '@vaadin/component-base/src/debounce.js';
8
8
 
9
9
  const timeouts = {
10
- SCROLLING: 500
10
+ SCROLLING: 500,
11
11
  };
12
12
 
13
13
  /**
@@ -23,11 +23,11 @@ export const ScrollMixin = (superClass) =>
23
23
  */
24
24
  _frozenCells: {
25
25
  type: Array,
26
- value: () => []
26
+ value: () => [],
27
27
  },
28
28
 
29
29
  /** @private */
30
- _rowWithFocusedElement: Element
30
+ _rowWithFocusedElement: Element,
31
31
  };
32
32
  }
33
33
 
@@ -57,13 +57,13 @@ declare class GridSelectionColumn<TItem = GridDefaultItem> extends GridColumn<TI
57
57
  addEventListener<K extends keyof GridSelectionColumnEventMap>(
58
58
  type: K,
59
59
  listener: (this: GridSelectionColumn<TItem>, ev: GridSelectionColumnEventMap[K]) => void,
60
- options?: boolean | AddEventListenerOptions
60
+ options?: boolean | AddEventListenerOptions,
61
61
  ): void;
62
62
 
63
63
  removeEventListener<K extends keyof GridSelectionColumnEventMap>(
64
64
  type: K,
65
65
  listener: (this: GridSelectionColumn<TItem>, ev: GridSelectionColumnEventMap[K]) => void,
66
- options?: boolean | EventListenerOptions
66
+ options?: boolean | EventListenerOptions,
67
67
  ): void;
68
68
  }
69
69
 
@@ -42,7 +42,7 @@ class GridSelectionColumn extends GridColumn {
42
42
  */
43
43
  width: {
44
44
  type: String,
45
- value: '58px'
45
+ value: '58px',
46
46
  },
47
47
 
48
48
  /**
@@ -52,7 +52,7 @@ class GridSelectionColumn extends GridColumn {
52
52
  */
53
53
  flexGrow: {
54
54
  type: Number,
55
- value: 0
55
+ value: 0,
56
56
  },
57
57
 
58
58
  /**
@@ -63,7 +63,7 @@ class GridSelectionColumn extends GridColumn {
63
63
  selectAll: {
64
64
  type: Boolean,
65
65
  value: false,
66
- notify: true
66
+ notify: true,
67
67
  },
68
68
 
69
69
  /**
@@ -73,7 +73,7 @@ class GridSelectionColumn extends GridColumn {
73
73
  */
74
74
  autoSelect: {
75
75
  type: Boolean,
76
- value: false
76
+ value: false,
77
77
  },
78
78
 
79
79
  /** @private */
@@ -87,14 +87,14 @@ class GridSelectionColumn extends GridColumn {
87
87
  __previousActiveItem: Object,
88
88
 
89
89
  /** @private */
90
- __selectAllHidden: Boolean
90
+ __selectAllHidden: Boolean,
91
91
  };
92
92
  }
93
93
 
94
94
  static get observers() {
95
95
  return [
96
96
  '__onSelectAllChanged(selectAll)',
97
- '_onHeaderRendererOrBindingChanged(_headerRenderer, _headerCell, path, header, selectAll, __indeterminate, __selectAllHidden)'
97
+ '_onHeaderRendererOrBindingChanged(_headerRenderer, _headerCell, path, header, selectAll, __indeterminate, __selectAllHidden)',
98
98
  ];
99
99
  }
100
100
 
@@ -290,7 +290,7 @@ class GridSelectionColumn extends GridColumn {
290
290
  page: 0,
291
291
  pageSize: Infinity,
292
292
  sortOrders: [],
293
- filters: this._grid._mapFilters()
293
+ filters: this._grid._mapFilters(),
294
294
  };
295
295
  this._grid.dataProvider(params, (items) => callback(items));
296
296
  }
@@ -6,7 +6,7 @@
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
7
7
 
8
8
  export declare function SelectionMixin<TItem, T extends Constructor<HTMLElement>>(
9
- base: T
9
+ base: T,
10
10
  ): T & Constructor<SelectionMixinClass<TItem>>;
11
11
 
12
12
  export declare class SelectionMixinClass<TItem> {
@@ -18,13 +18,22 @@ export const SelectionMixin = (superClass) =>
18
18
  selectedItems: {
19
19
  type: Object,
20
20
  notify: true,
21
- value: () => []
22
- }
21
+ value: () => [],
22
+ },
23
+
24
+ /**
25
+ * Set of selected item ids
26
+ * @private
27
+ */
28
+ __selectedKeys: {
29
+ type: Object,
30
+ value: () => new Set(),
31
+ },
23
32
  };
24
33
  }
25
34
 
26
35
  static get observers() {
27
- return ['_selectedItemsChanged(selectedItems.*)'];
36
+ return ['_updateSelectedKeys(itemIdPath, selectedItems.*)'];
28
37
  }
29
38
 
30
39
  /**
@@ -33,7 +42,7 @@ export const SelectionMixin = (superClass) =>
33
42
  * @protected
34
43
  */
35
44
  _isSelected(item) {
36
- return this.selectedItems && this._getItemIndexInArray(item, this.selectedItems) > -1;
45
+ return this.__selectedKeys.has(this.getItemId(item));
37
46
  }
38
47
 
39
48
  /**
@@ -68,8 +77,7 @@ export const SelectionMixin = (superClass) =>
68
77
  * @protected
69
78
  */
70
79
  _toggleItem(item) {
71
- const index = this._getItemIndexInArray(item, this.selectedItems);
72
- if (index === -1) {
80
+ if (!this._isSelected(item)) {
73
81
  this.selectItem(item);
74
82
  } else {
75
83
  this.deselectItem(item);
@@ -77,7 +85,13 @@ export const SelectionMixin = (superClass) =>
77
85
  }
78
86
 
79
87
  /** @private */
80
- _selectedItemsChanged() {
88
+ _updateSelectedKeys() {
89
+ const selectedItems = this.selectedItems || [];
90
+ this.__selectedKeys = new Set();
91
+ selectedItems.forEach((item) => {
92
+ this.__selectedKeys.add(this.getItemId(item));
93
+ });
94
+
81
95
  this.requestContentUpdate();
82
96
  }
83
97
 
@@ -49,13 +49,13 @@ declare class GridSortColumn<TItem = GridDefaultItem> extends GridColumn<TItem>
49
49
  addEventListener<K extends keyof GridSortColumnEventMap>(
50
50
  type: K,
51
51
  listener: (this: GridSortColumn<TItem>, ev: GridSortColumnEventMap[K]) => void,
52
- options?: boolean | AddEventListenerOptions
52
+ options?: boolean | AddEventListenerOptions,
53
53
  ): void;
54
54
 
55
55
  removeEventListener<K extends keyof GridSortColumnEventMap>(
56
56
  type: K,
57
57
  listener: (this: GridSortColumn<TItem>, ev: GridSortColumnEventMap[K]) => void,
58
- options?: boolean | EventListenerOptions
58
+ options?: boolean | EventListenerOptions,
59
59
  ): void;
60
60
  }
61
61
 
@@ -41,8 +41,8 @@ class GridSortColumn extends GridColumn {
41
41
  */
42
42
  direction: {
43
43
  type: String,
44
- notify: true
45
- }
44
+ notify: true,
45
+ },
46
46
  };
47
47
  }
48
48