@vaadin/grid 23.0.7 → 23.0.10

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 +15 -15
  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 +20 -15
  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 +2 -2
  40. package/src/vaadin-grid-tree-column.js +3 -3
  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 +36 -35
  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
  itemHasChildrenPath: {
194
194
  type: String,
195
- value: 'children'
195
+ value: 'children',
196
196
  },
197
197
 
198
198
  /**
@@ -201,7 +201,7 @@ export const DataProviderMixin = (superClass) =>
201
201
  */
202
202
  itemIdPath: {
203
203
  type: String,
204
- value: null
204
+ value: null,
205
205
  },
206
206
 
207
207
  /**
@@ -211,7 +211,7 @@ export const DataProviderMixin = (superClass) =>
211
211
  expandedItems: {
212
212
  type: Object,
213
213
  notify: true,
214
- value: () => []
214
+ value: () => [],
215
215
  },
216
216
 
217
217
  /**
@@ -219,8 +219,8 @@ export const DataProviderMixin = (superClass) =>
219
219
  */
220
220
  __expandedKeys: {
221
221
  type: Object,
222
- value: () => new Set()
223
- }
222
+ value: () => new Set(),
223
+ },
224
224
  };
225
225
  }
226
226
 
@@ -353,7 +353,7 @@ export const DataProviderMixin = (superClass) =>
353
353
  pageSize: this.pageSize,
354
354
  sortOrders: this._mapSorters(),
355
355
  filters: this._mapFilters(),
356
- parentItem: cache.parentItem
356
+ parentItem: cache.parentItem,
357
357
  };
358
358
 
359
359
  this.dataProvider(params, (items, size) => {
@@ -443,7 +443,7 @@ export const DataProviderMixin = (superClass) =>
443
443
  'The <vaadin-grid> needs the total number of items' +
444
444
  ' in order to display rows. Set the total number of items' +
445
445
  ' to the `size` property, or provide the total number of items' +
446
- ' in the second argument of the `dataProvider`’s `callback` call.'
446
+ ' in the second argument of the `dataProvider`’s `callback` call.',
447
447
  );
448
448
  }
449
449
  }
@@ -459,7 +459,7 @@ export const DataProviderMixin = (superClass) =>
459
459
  this._debouncerCheckSize = Debouncer.debounce(
460
460
  this._debouncerCheckSize,
461
461
  timeOut.after(2000),
462
- this._checkSize.bind(this)
462
+ this._checkSize.bind(this),
463
463
  );
464
464
  }
465
465
 
@@ -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
 
@@ -101,7 +101,7 @@ export const DynamicColumnsMixin = (superClass) =>
101
101
  this._debouncerCheckImports = Debouncer.debounce(
102
102
  this._debouncerCheckImports,
103
103
  timeOut.after(2000),
104
- this._checkImports.bind(this)
104
+ this._checkImports.bind(this),
105
105
  );
106
106
 
107
107
  this._ensureFirstPageLoaded();
@@ -137,7 +137,7 @@ export const DynamicColumnsMixin = (superClass) =>
137
137
  'vaadin-grid-tree-toggle',
138
138
  'vaadin-grid-selection-column',
139
139
  'vaadin-grid-sort-column',
140
- 'vaadin-grid-sorter'
140
+ 'vaadin-grid-sorter',
141
141
  ].forEach((elementName) => {
142
142
  const element = this.querySelector(elementName);
143
143
  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
 
@@ -461,7 +461,7 @@ export const KeyboardNavigationMixin = (superClass) =>
461
461
 
462
462
  return {
463
463
  dstRow: [...activeRowGroup.children].find((el) => !el.hidden && el.index === dstRowIndex),
464
- dstIsRowDetails
464
+ dstIsRowDetails,
465
465
  };
466
466
  }
467
467
 
@@ -511,7 +511,7 @@ export const KeyboardNavigationMixin = (superClass) =>
511
511
  const orderedColumnIndex = dstSortedColumnOrders.indexOf(
512
512
  dstSortedColumnOrders
513
513
  .slice(0)
514
- .sort((b, a) => Math.abs(b - this._focusedColumnOrder) - Math.abs(a - this._focusedColumnOrder))[0]
514
+ .sort((b, a) => Math.abs(b - this._focusedColumnOrder) - Math.abs(a - this._focusedColumnOrder))[0],
515
515
  );
516
516
 
517
517
  // Index of the destination column order
@@ -591,7 +591,7 @@ export const KeyboardNavigationMixin = (superClass) =>
591
591
  this._headerFocusable,
592
592
  this._itemsFocusable,
593
593
  this._footerFocusable,
594
- this.$.focusexit
594
+ this.$.focusexit,
595
595
  ];
596
596
 
597
597
  let index = tabOrder.indexOf(srcElement);
@@ -617,6 +617,11 @@ export const KeyboardNavigationMixin = (superClass) =>
617
617
  _onTabKeyDown(e) {
618
618
  const focusTarget = this._predictFocusStepTarget(e.composedPath()[0], e.shiftKey ? -1 : 1);
619
619
 
620
+ // Can be undefined if grid has tabindex
621
+ if (!focusTarget) {
622
+ return;
623
+ }
624
+
620
625
  // Prevent focus-trap logic from intercepting the event.
621
626
  e.stopPropagation();
622
627
 
@@ -636,7 +641,7 @@ export const KeyboardNavigationMixin = (superClass) =>
636
641
  // scrolling. Focus the row for the stored focused item index instead.
637
642
  const columnIndex = Array.from(targetRow.children).indexOf(this._itemsFocusable);
638
643
  const focusedItemRow = Array.from(this.$.items.children).find(
639
- (row) => !row.hidden && row.index === this._focusedItemIndex
644
+ (row) => !row.hidden && row.index === this._focusedItemIndex,
640
645
  );
641
646
  if (focusedItemRow) {
642
647
  itemsFocusTarget = focusedItemRow.children[columnIndex];
@@ -662,9 +667,9 @@ export const KeyboardNavigationMixin = (superClass) =>
662
667
  this.dispatchEvent(
663
668
  new CustomEvent(isRow ? 'row-activate' : 'cell-activate', {
664
669
  detail: {
665
- model: this.__getRowModel(isRow ? element : element.parentElement)
666
- }
667
- })
670
+ model: this.__getRowModel(isRow ? element : element.parentElement),
671
+ },
672
+ }),
668
673
  );
669
674
  }
670
675
  }
@@ -735,7 +740,7 @@ export const KeyboardNavigationMixin = (superClass) =>
735
740
  // Fire a public event for cell.
736
741
  const context = this.getEventContext(e);
737
742
  cell.dispatchEvent(
738
- new CustomEvent('cell-focus', { bubbles: true, composed: true, detail: { context: context } })
743
+ new CustomEvent('cell-focus', { bubbles: true, composed: true, detail: { context: context } }),
739
744
  );
740
745
  }
741
746
  }
@@ -919,7 +924,7 @@ export const KeyboardNavigationMixin = (superClass) =>
919
924
  return {
920
925
  section,
921
926
  row,
922
- cell
927
+ cell,
923
928
  };
924
929
  }
925
930
 
@@ -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