@vaadin/grid 24.3.0-alpha5 → 24.3.0-alpha6
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.
- package/package.json +22 -10
- package/src/vaadin-grid-a11y-mixin.js +1 -1
- package/src/vaadin-grid-active-item-mixin.js +1 -0
- package/src/vaadin-grid-array-data-provider-mixin.js +13 -16
- package/src/vaadin-grid-column-group-mixin.js +16 -21
- package/src/vaadin-grid-column-mixin.js +54 -18
- package/src/vaadin-grid-column.js +2 -0
- package/src/vaadin-grid-data-provider-mixin.js +20 -4
- package/src/vaadin-grid-drag-and-drop-mixin.js +16 -4
- package/src/vaadin-grid-dynamic-columns-mixin.js +22 -17
- package/src/vaadin-grid-filter-column-mixin.js +8 -2
- package/src/vaadin-grid-filter-element-mixin.js +10 -1
- package/src/vaadin-grid-filter-mixin.js +4 -4
- package/src/vaadin-grid-helpers.js +94 -0
- package/src/vaadin-grid-keyboard-navigation-mixin.js +8 -1
- package/src/vaadin-grid-mixin.js +25 -38
- package/src/vaadin-grid-row-details-mixin.js +7 -8
- package/src/vaadin-grid-scroll-mixin.js +1 -0
- package/src/vaadin-grid-selection-column-base-mixin.js +12 -4
- package/src/vaadin-grid-selection-mixin.js +4 -3
- package/src/vaadin-grid-sort-column-mixin.js +5 -1
- package/src/vaadin-grid-sorter-mixin.js +2 -0
- package/src/vaadin-grid-styles.js +341 -345
- package/src/vaadin-grid-styling-mixin.js +8 -2
- package/src/vaadin-grid-tree-column-mixin.js +8 -1
- package/src/vaadin-grid-tree-toggle-mixin.js +2 -0
- package/src/vaadin-grid.js +4 -2
- package/theme/lumo/vaadin-grid-sorter-styles.js +1 -1
- package/theme/lumo/vaadin-grid-styles.js +7 -5
- package/web-types.json +4 -4
- package/web-types.lit.json +4 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/grid",
|
|
3
|
-
"version": "24.3.0-
|
|
3
|
+
"version": "24.3.0-alpha6",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -25,7 +25,19 @@
|
|
|
25
25
|
"lit.d.ts",
|
|
26
26
|
"lit.js",
|
|
27
27
|
"src",
|
|
28
|
+
"!src/lit-all-imports.js",
|
|
29
|
+
"!src/vaadin-lit-grid-column-group.js",
|
|
30
|
+
"!src/vaadin-lit-grid-column.js",
|
|
31
|
+
"!src/vaadin-lit-grid-filter-column.js",
|
|
32
|
+
"!src/vaadin-lit-grid-filter.js",
|
|
33
|
+
"!src/vaadin-lit-grid-selection-column.js",
|
|
34
|
+
"!src/vaadin-lit-grid-sort-column.js",
|
|
35
|
+
"!src/vaadin-lit-grid-sorter.js",
|
|
36
|
+
"!src/vaadin-lit-grid-tree-column.js",
|
|
37
|
+
"!src/vaadin-lit-grid-tree-toggle.js",
|
|
38
|
+
"!src/vaadin-lit-grid.js",
|
|
28
39
|
"theme",
|
|
40
|
+
"!theme/lumo/lit-all-imports.js",
|
|
29
41
|
"vaadin-*.d.ts",
|
|
30
42
|
"vaadin-*.js",
|
|
31
43
|
"web-types.json",
|
|
@@ -46,14 +58,14 @@
|
|
|
46
58
|
"dependencies": {
|
|
47
59
|
"@open-wc/dedupe-mixin": "^1.3.0",
|
|
48
60
|
"@polymer/polymer": "^3.0.0",
|
|
49
|
-
"@vaadin/a11y-base": "24.3.0-
|
|
50
|
-
"@vaadin/checkbox": "24.3.0-
|
|
51
|
-
"@vaadin/component-base": "24.3.0-
|
|
52
|
-
"@vaadin/lit-renderer": "24.3.0-
|
|
53
|
-
"@vaadin/text-field": "24.3.0-
|
|
54
|
-
"@vaadin/vaadin-lumo-styles": "24.3.0-
|
|
55
|
-
"@vaadin/vaadin-material-styles": "24.3.0-
|
|
56
|
-
"@vaadin/vaadin-themable-mixin": "24.3.0-
|
|
61
|
+
"@vaadin/a11y-base": "24.3.0-alpha6",
|
|
62
|
+
"@vaadin/checkbox": "24.3.0-alpha6",
|
|
63
|
+
"@vaadin/component-base": "24.3.0-alpha6",
|
|
64
|
+
"@vaadin/lit-renderer": "24.3.0-alpha6",
|
|
65
|
+
"@vaadin/text-field": "24.3.0-alpha6",
|
|
66
|
+
"@vaadin/vaadin-lumo-styles": "24.3.0-alpha6",
|
|
67
|
+
"@vaadin/vaadin-material-styles": "24.3.0-alpha6",
|
|
68
|
+
"@vaadin/vaadin-themable-mixin": "24.3.0-alpha6"
|
|
57
69
|
},
|
|
58
70
|
"devDependencies": {
|
|
59
71
|
"@esm-bundle/chai": "^4.3.4",
|
|
@@ -65,5 +77,5 @@
|
|
|
65
77
|
"web-types.json",
|
|
66
78
|
"web-types.lit.json"
|
|
67
79
|
],
|
|
68
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "2721ab38ba3bc7d38dc1241016915354617ff659"
|
|
69
81
|
}
|
|
@@ -11,7 +11,7 @@ import { iterateChildren, iterateRowCells } from './vaadin-grid-helpers.js';
|
|
|
11
11
|
export const A11yMixin = (superClass) =>
|
|
12
12
|
class A11yMixin extends superClass {
|
|
13
13
|
static get observers() {
|
|
14
|
-
return ['_a11yUpdateGridSize(size, _columnTree
|
|
14
|
+
return ['_a11yUpdateGridSize(size, _columnTree)'];
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/** @private */
|
|
@@ -17,23 +17,24 @@ export const ArrayDataProviderMixin = (superClass) =>
|
|
|
17
17
|
*
|
|
18
18
|
* @type {Array<!GridItem> | undefined}
|
|
19
19
|
*/
|
|
20
|
-
items:
|
|
20
|
+
items: {
|
|
21
|
+
type: Array,
|
|
22
|
+
sync: true,
|
|
23
|
+
},
|
|
21
24
|
};
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
static get observers() {
|
|
25
|
-
return ['__dataProviderOrItemsChanged(dataProvider, items, isAttached,
|
|
28
|
+
return ['__dataProviderOrItemsChanged(dataProvider, items, isAttached, _filters, _sorters, items.*)'];
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
/** @private */
|
|
29
32
|
__setArrayDataProvider(items) {
|
|
30
33
|
const arrayDataProvider = createArrayDataProvider(this.items, {});
|
|
31
34
|
arrayDataProvider.__items = items;
|
|
32
|
-
this.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
dataProvider: arrayDataProvider,
|
|
36
|
-
});
|
|
35
|
+
this._arrayDataProvider = arrayDataProvider;
|
|
36
|
+
this.size = items.length;
|
|
37
|
+
this.dataProvider = arrayDataProvider;
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
/** @private */
|
|
@@ -47,17 +48,13 @@ export const ArrayDataProviderMixin = (superClass) =>
|
|
|
47
48
|
|
|
48
49
|
if (dataProvider !== this._arrayDataProvider) {
|
|
49
50
|
// A custom data provider was set externally
|
|
50
|
-
this.
|
|
51
|
-
|
|
52
|
-
items: undefined,
|
|
53
|
-
});
|
|
51
|
+
this._arrayDataProvider = undefined;
|
|
52
|
+
this.items = undefined;
|
|
54
53
|
} else if (!items) {
|
|
55
54
|
// The items array was unset
|
|
56
|
-
this.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
size: 0,
|
|
60
|
-
});
|
|
55
|
+
this._arrayDataProvider = undefined;
|
|
56
|
+
this.dataProvider = undefined;
|
|
57
|
+
this.size = 0;
|
|
61
58
|
this.clearCache();
|
|
62
59
|
} else if (this._arrayDataProvider.__items === items) {
|
|
63
60
|
// The items array was modified
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
* Copyright (c) 2016 - 2023 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
-
import { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';
|
|
7
6
|
import { animationFrame } from '@vaadin/component-base/src/async.js';
|
|
8
7
|
import { Debouncer } from '@vaadin/component-base/src/debounce.js';
|
|
9
8
|
import { ColumnBaseMixin } from './vaadin-grid-column-mixin.js';
|
|
10
|
-
import { updateColumnOrders } from './vaadin-grid-helpers.js';
|
|
9
|
+
import { ColumnObserver, updateColumnOrders } from './vaadin-grid-helpers.js';
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
12
|
* A mixin providing common vaadin-grid-column-group functionality.
|
|
@@ -33,6 +32,7 @@ export const GridColumnGroupMixin = (superClass) =>
|
|
|
33
32
|
flexGrow: {
|
|
34
33
|
type: Number,
|
|
35
34
|
readOnly: true,
|
|
35
|
+
sync: true,
|
|
36
36
|
},
|
|
37
37
|
|
|
38
38
|
/**
|
|
@@ -330,29 +330,24 @@ export const GridColumnGroupMixin = (superClass) =>
|
|
|
330
330
|
* @protected
|
|
331
331
|
*/
|
|
332
332
|
_getChildColumns(el) {
|
|
333
|
-
return
|
|
333
|
+
return ColumnObserver.getColumns(el);
|
|
334
334
|
}
|
|
335
335
|
|
|
336
336
|
/** @private */
|
|
337
337
|
_addNodeObserver() {
|
|
338
|
-
this._observer = new
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
this.
|
|
351
|
-
|
|
352
|
-
// Update the column tree
|
|
353
|
-
if (this._grid && this._grid._debounceUpdateColumnTree) {
|
|
354
|
-
this._grid._debounceUpdateColumnTree();
|
|
355
|
-
}
|
|
338
|
+
this._observer = new ColumnObserver(this, () => {
|
|
339
|
+
// Prevent synchronization of the hidden state to child columns.
|
|
340
|
+
// If the group is currently auto-hidden, and a visible column is added,
|
|
341
|
+
// we don't want the other columns to become visible as well.
|
|
342
|
+
this._preventHiddenSynchronization = true;
|
|
343
|
+
this._rootColumns = this._getChildColumns(this);
|
|
344
|
+
this._childColumns = this._rootColumns;
|
|
345
|
+
this._updateVisibleChildColumns(this._childColumns);
|
|
346
|
+
this._preventHiddenSynchronization = false;
|
|
347
|
+
|
|
348
|
+
// Update the column tree
|
|
349
|
+
if (this._grid && this._grid._debounceUpdateColumnTree) {
|
|
350
|
+
this._grid._debounceUpdateColumnTree();
|
|
356
351
|
}
|
|
357
352
|
});
|
|
358
353
|
this._observer.flush();
|
|
@@ -23,6 +23,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
23
23
|
*/
|
|
24
24
|
resizable: {
|
|
25
25
|
type: Boolean,
|
|
26
|
+
sync: true,
|
|
26
27
|
value() {
|
|
27
28
|
if (this.localName === 'vaadin-grid-column-group') {
|
|
28
29
|
return;
|
|
@@ -44,6 +45,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
44
45
|
frozen: {
|
|
45
46
|
type: Boolean,
|
|
46
47
|
value: false,
|
|
48
|
+
sync: true,
|
|
47
49
|
},
|
|
48
50
|
|
|
49
51
|
/**
|
|
@@ -59,6 +61,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
59
61
|
frozenToEnd: {
|
|
60
62
|
type: Boolean,
|
|
61
63
|
value: false,
|
|
64
|
+
sync: true,
|
|
62
65
|
},
|
|
63
66
|
|
|
64
67
|
/**
|
|
@@ -74,6 +77,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
74
77
|
rowHeader: {
|
|
75
78
|
type: Boolean,
|
|
76
79
|
value: false,
|
|
80
|
+
sync: true,
|
|
77
81
|
},
|
|
78
82
|
|
|
79
83
|
/**
|
|
@@ -82,6 +86,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
82
86
|
hidden: {
|
|
83
87
|
type: Boolean,
|
|
84
88
|
value: false,
|
|
89
|
+
sync: true,
|
|
85
90
|
},
|
|
86
91
|
|
|
87
92
|
/**
|
|
@@ -89,6 +94,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
89
94
|
*/
|
|
90
95
|
header: {
|
|
91
96
|
type: String,
|
|
97
|
+
sync: true,
|
|
92
98
|
},
|
|
93
99
|
|
|
94
100
|
/**
|
|
@@ -99,6 +105,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
99
105
|
*/
|
|
100
106
|
textAlign: {
|
|
101
107
|
type: String,
|
|
108
|
+
sync: true,
|
|
102
109
|
},
|
|
103
110
|
|
|
104
111
|
/**
|
|
@@ -108,6 +115,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
108
115
|
*/
|
|
109
116
|
headerPartName: {
|
|
110
117
|
type: String,
|
|
118
|
+
sync: true,
|
|
111
119
|
},
|
|
112
120
|
|
|
113
121
|
/**
|
|
@@ -117,6 +125,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
117
125
|
*/
|
|
118
126
|
footerPartName: {
|
|
119
127
|
type: String,
|
|
128
|
+
sync: true,
|
|
120
129
|
},
|
|
121
130
|
|
|
122
131
|
/**
|
|
@@ -126,6 +135,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
126
135
|
_lastFrozen: {
|
|
127
136
|
type: Boolean,
|
|
128
137
|
value: false,
|
|
138
|
+
sync: true,
|
|
129
139
|
},
|
|
130
140
|
|
|
131
141
|
/**
|
|
@@ -135,6 +145,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
135
145
|
_bodyContentHidden: {
|
|
136
146
|
type: Boolean,
|
|
137
147
|
value: false,
|
|
148
|
+
sync: true,
|
|
138
149
|
},
|
|
139
150
|
|
|
140
151
|
/**
|
|
@@ -144,13 +155,20 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
144
155
|
_firstFrozenToEnd: {
|
|
145
156
|
type: Boolean,
|
|
146
157
|
value: false,
|
|
158
|
+
sync: true,
|
|
147
159
|
},
|
|
148
160
|
|
|
149
161
|
/** @protected */
|
|
150
|
-
_order:
|
|
162
|
+
_order: {
|
|
163
|
+
type: Number,
|
|
164
|
+
sync: true,
|
|
165
|
+
},
|
|
151
166
|
|
|
152
167
|
/** @private */
|
|
153
|
-
_reorderStatus:
|
|
168
|
+
_reorderStatus: {
|
|
169
|
+
type: Boolean,
|
|
170
|
+
sync: true,
|
|
171
|
+
},
|
|
154
172
|
|
|
155
173
|
/**
|
|
156
174
|
* @type {Array<!HTMLElement>}
|
|
@@ -189,7 +207,10 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
189
207
|
*
|
|
190
208
|
* @type {GridHeaderFooterRenderer | null | undefined}
|
|
191
209
|
*/
|
|
192
|
-
headerRenderer:
|
|
210
|
+
headerRenderer: {
|
|
211
|
+
type: Function,
|
|
212
|
+
sync: true,
|
|
213
|
+
},
|
|
193
214
|
|
|
194
215
|
/**
|
|
195
216
|
* Represents the final header renderer computed on the set of observable arguments.
|
|
@@ -201,6 +222,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
201
222
|
_headerRenderer: {
|
|
202
223
|
type: Function,
|
|
203
224
|
computed: '_computeHeaderRenderer(headerRenderer, header, __initialized)',
|
|
225
|
+
sync: true,
|
|
204
226
|
},
|
|
205
227
|
|
|
206
228
|
/**
|
|
@@ -212,7 +234,10 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
212
234
|
*
|
|
213
235
|
* @type {GridHeaderFooterRenderer | null | undefined}
|
|
214
236
|
*/
|
|
215
|
-
footerRenderer:
|
|
237
|
+
footerRenderer: {
|
|
238
|
+
type: Function,
|
|
239
|
+
sync: true,
|
|
240
|
+
},
|
|
216
241
|
|
|
217
242
|
/**
|
|
218
243
|
* Represents the final footer renderer computed on the set of observable arguments.
|
|
@@ -224,6 +249,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
224
249
|
_footerRenderer: {
|
|
225
250
|
type: Function,
|
|
226
251
|
computed: '_computeFooterRenderer(footerRenderer, __initialized)',
|
|
252
|
+
sync: true,
|
|
227
253
|
},
|
|
228
254
|
|
|
229
255
|
/**
|
|
@@ -241,21 +267,21 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
241
267
|
|
|
242
268
|
static get observers() {
|
|
243
269
|
return [
|
|
244
|
-
'_widthChanged(width, _headerCell, _footerCell, _cells
|
|
245
|
-
'_frozenChanged(frozen, _headerCell, _footerCell, _cells
|
|
246
|
-
'_frozenToEndChanged(frozenToEnd, _headerCell, _footerCell, _cells
|
|
247
|
-
'_flexGrowChanged(flexGrow, _headerCell, _footerCell, _cells
|
|
248
|
-
'_textAlignChanged(textAlign, _cells
|
|
249
|
-
'_orderChanged(_order, _headerCell, _footerCell, _cells
|
|
270
|
+
'_widthChanged(width, _headerCell, _footerCell, _cells)',
|
|
271
|
+
'_frozenChanged(frozen, _headerCell, _footerCell, _cells)',
|
|
272
|
+
'_frozenToEndChanged(frozenToEnd, _headerCell, _footerCell, _cells)',
|
|
273
|
+
'_flexGrowChanged(flexGrow, _headerCell, _footerCell, _cells)',
|
|
274
|
+
'_textAlignChanged(textAlign, _cells, _headerCell, _footerCell)',
|
|
275
|
+
'_orderChanged(_order, _headerCell, _footerCell, _cells)',
|
|
250
276
|
'_lastFrozenChanged(_lastFrozen)',
|
|
251
277
|
'_firstFrozenToEndChanged(_firstFrozenToEnd)',
|
|
252
|
-
'_onRendererOrBindingChanged(_renderer, _cells, _bodyContentHidden,
|
|
278
|
+
'_onRendererOrBindingChanged(_renderer, _cells, _bodyContentHidden, path)',
|
|
253
279
|
'_onHeaderRendererOrBindingChanged(_headerRenderer, _headerCell, path, header)',
|
|
254
280
|
'_onFooterRendererOrBindingChanged(_footerRenderer, _footerCell)',
|
|
255
281
|
'_resizableChanged(resizable, _headerCell)',
|
|
256
|
-
'_reorderStatusChanged(_reorderStatus, _headerCell, _footerCell, _cells
|
|
257
|
-
'_hiddenChanged(hidden, _headerCell, _footerCell, _cells
|
|
258
|
-
'_rowHeaderChanged(rowHeader, _cells
|
|
282
|
+
'_reorderStatusChanged(_reorderStatus, _headerCell, _footerCell, _cells)',
|
|
283
|
+
'_hiddenChanged(hidden, _headerCell, _footerCell, _cells)',
|
|
284
|
+
'_rowHeaderChanged(rowHeader, _cells)',
|
|
259
285
|
'__headerFooterPartNameChanged(_headerCell, _footerCell, headerPartName, footerPartName)',
|
|
260
286
|
];
|
|
261
287
|
}
|
|
@@ -444,11 +470,11 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
444
470
|
|
|
445
471
|
/** @private */
|
|
446
472
|
_rowHeaderChanged(rowHeader, cells) {
|
|
447
|
-
if (!cells
|
|
473
|
+
if (!cells) {
|
|
448
474
|
return;
|
|
449
475
|
}
|
|
450
476
|
|
|
451
|
-
cells.
|
|
477
|
+
cells.forEach((cell) => {
|
|
452
478
|
cell.setAttribute('role', rowHeader ? 'rowheader' : 'gridcell');
|
|
453
479
|
});
|
|
454
480
|
}
|
|
@@ -826,6 +852,7 @@ export const GridColumnMixin = (superClass) =>
|
|
|
826
852
|
width: {
|
|
827
853
|
type: String,
|
|
828
854
|
value: '100px',
|
|
855
|
+
sync: true,
|
|
829
856
|
},
|
|
830
857
|
|
|
831
858
|
/**
|
|
@@ -836,6 +863,7 @@ export const GridColumnMixin = (superClass) =>
|
|
|
836
863
|
flexGrow: {
|
|
837
864
|
type: Number,
|
|
838
865
|
value: 1,
|
|
866
|
+
sync: true,
|
|
839
867
|
},
|
|
840
868
|
|
|
841
869
|
/**
|
|
@@ -855,7 +883,10 @@ export const GridColumnMixin = (superClass) =>
|
|
|
855
883
|
*
|
|
856
884
|
* @type {GridBodyRenderer | null | undefined}
|
|
857
885
|
*/
|
|
858
|
-
renderer:
|
|
886
|
+
renderer: {
|
|
887
|
+
type: Function,
|
|
888
|
+
sync: true,
|
|
889
|
+
},
|
|
859
890
|
|
|
860
891
|
/**
|
|
861
892
|
* Represents the final renderer computed on the set of observable arguments.
|
|
@@ -867,6 +898,7 @@ export const GridColumnMixin = (superClass) =>
|
|
|
867
898
|
_renderer: {
|
|
868
899
|
type: Function,
|
|
869
900
|
computed: '_computeRenderer(renderer, __initialized)',
|
|
901
|
+
sync: true,
|
|
870
902
|
},
|
|
871
903
|
|
|
872
904
|
/**
|
|
@@ -875,6 +907,7 @@ export const GridColumnMixin = (superClass) =>
|
|
|
875
907
|
*/
|
|
876
908
|
path: {
|
|
877
909
|
type: String,
|
|
910
|
+
sync: true,
|
|
878
911
|
},
|
|
879
912
|
|
|
880
913
|
/**
|
|
@@ -916,7 +949,10 @@ export const GridColumnMixin = (superClass) =>
|
|
|
916
949
|
* @type {Array<!HTMLElement>}
|
|
917
950
|
* @protected
|
|
918
951
|
*/
|
|
919
|
-
_cells:
|
|
952
|
+
_cells: {
|
|
953
|
+
type: Array,
|
|
954
|
+
sync: true,
|
|
955
|
+
},
|
|
920
956
|
};
|
|
921
957
|
}
|
|
922
958
|
};
|
|
@@ -24,6 +24,16 @@ export const DataProviderMixin = (superClass) =>
|
|
|
24
24
|
size: {
|
|
25
25
|
type: Number,
|
|
26
26
|
notify: true,
|
|
27
|
+
sync: true,
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @type {number}
|
|
32
|
+
* @protected
|
|
33
|
+
*/
|
|
34
|
+
_flatSize: {
|
|
35
|
+
type: Number,
|
|
36
|
+
sync: true,
|
|
27
37
|
},
|
|
28
38
|
|
|
29
39
|
/**
|
|
@@ -35,6 +45,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
35
45
|
type: Number,
|
|
36
46
|
value: 50,
|
|
37
47
|
observer: '_pageSizeChanged',
|
|
48
|
+
sync: true,
|
|
38
49
|
},
|
|
39
50
|
|
|
40
51
|
/**
|
|
@@ -64,6 +75,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
64
75
|
type: Object,
|
|
65
76
|
notify: true,
|
|
66
77
|
observer: '_dataProviderChanged',
|
|
78
|
+
sync: true,
|
|
67
79
|
},
|
|
68
80
|
|
|
69
81
|
/**
|
|
@@ -82,6 +94,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
82
94
|
_hasData: {
|
|
83
95
|
type: Boolean,
|
|
84
96
|
value: false,
|
|
97
|
+
sync: true,
|
|
85
98
|
},
|
|
86
99
|
|
|
87
100
|
/**
|
|
@@ -92,6 +105,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
92
105
|
type: String,
|
|
93
106
|
value: 'children',
|
|
94
107
|
observer: '__itemHasChildrenPathChanged',
|
|
108
|
+
sync: true,
|
|
95
109
|
},
|
|
96
110
|
|
|
97
111
|
/**
|
|
@@ -101,6 +115,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
101
115
|
itemIdPath: {
|
|
102
116
|
type: String,
|
|
103
117
|
value: null,
|
|
118
|
+
sync: true,
|
|
104
119
|
},
|
|
105
120
|
|
|
106
121
|
/**
|
|
@@ -111,6 +126,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
111
126
|
type: Object,
|
|
112
127
|
notify: true,
|
|
113
128
|
value: () => [],
|
|
129
|
+
sync: true,
|
|
114
130
|
},
|
|
115
131
|
|
|
116
132
|
/**
|
|
@@ -118,13 +134,13 @@ export const DataProviderMixin = (superClass) =>
|
|
|
118
134
|
*/
|
|
119
135
|
__expandedKeys: {
|
|
120
136
|
type: Object,
|
|
121
|
-
computed: '__computeExpandedKeys(itemIdPath, expandedItems
|
|
137
|
+
computed: '__computeExpandedKeys(itemIdPath, expandedItems)',
|
|
122
138
|
},
|
|
123
139
|
};
|
|
124
140
|
}
|
|
125
141
|
|
|
126
142
|
static get observers() {
|
|
127
|
-
return ['_sizeChanged(size)', '_expandedItemsChanged(expandedItems
|
|
143
|
+
return ['_sizeChanged(size)', '_expandedItemsChanged(expandedItems)'];
|
|
128
144
|
}
|
|
129
145
|
|
|
130
146
|
constructor() {
|
|
@@ -239,7 +255,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
239
255
|
* @protected
|
|
240
256
|
*/
|
|
241
257
|
_isExpanded(item) {
|
|
242
|
-
return this.__expandedKeys.has(this.getItemId(item));
|
|
258
|
+
return this.__expandedKeys && this.__expandedKeys.has(this.getItemId(item));
|
|
243
259
|
}
|
|
244
260
|
|
|
245
261
|
/** @private */
|
|
@@ -251,7 +267,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
251
267
|
|
|
252
268
|
/** @private */
|
|
253
269
|
__computeExpandedKeys(itemIdPath, expandedItems) {
|
|
254
|
-
const expanded = expandedItems
|
|
270
|
+
const expanded = expandedItems || [];
|
|
255
271
|
const expandedKeys = new Set();
|
|
256
272
|
expanded.forEach((item) => {
|
|
257
273
|
expandedKeys.add(this.getItemId(item));
|
|
@@ -45,13 +45,19 @@ export const DragAndDropMixin = (superClass) =>
|
|
|
45
45
|
* @attr {between|on-top|on-top-or-between|on-grid} drop-mode
|
|
46
46
|
* @type {GridDropMode | null | undefined}
|
|
47
47
|
*/
|
|
48
|
-
dropMode:
|
|
48
|
+
dropMode: {
|
|
49
|
+
type: String,
|
|
50
|
+
sync: true,
|
|
51
|
+
},
|
|
49
52
|
|
|
50
53
|
/**
|
|
51
54
|
* Marks the grid's rows to be available for dragging.
|
|
52
55
|
* @attr {boolean} rows-draggable
|
|
53
56
|
*/
|
|
54
|
-
rowsDraggable:
|
|
57
|
+
rowsDraggable: {
|
|
58
|
+
type: Boolean,
|
|
59
|
+
sync: true,
|
|
60
|
+
},
|
|
55
61
|
|
|
56
62
|
/**
|
|
57
63
|
* A function that filters dragging of specific grid rows. The return value should be false
|
|
@@ -68,7 +74,10 @@ export const DragAndDropMixin = (superClass) =>
|
|
|
68
74
|
*
|
|
69
75
|
* @type {GridDragAndDropFilter | null | undefined}
|
|
70
76
|
*/
|
|
71
|
-
dragFilter:
|
|
77
|
+
dragFilter: {
|
|
78
|
+
type: Function,
|
|
79
|
+
sync: true,
|
|
80
|
+
},
|
|
72
81
|
|
|
73
82
|
/**
|
|
74
83
|
* A function that filters dropping on specific grid rows. The return value should be false
|
|
@@ -85,7 +94,10 @@ export const DragAndDropMixin = (superClass) =>
|
|
|
85
94
|
*
|
|
86
95
|
* @type {GridDragAndDropFilter | null | undefined}
|
|
87
96
|
*/
|
|
88
|
-
dropFilter:
|
|
97
|
+
dropFilter: {
|
|
98
|
+
type: Function,
|
|
99
|
+
sync: true,
|
|
100
|
+
},
|
|
89
101
|
|
|
90
102
|
/** @private */
|
|
91
103
|
__dndAutoScrollThreshold: {
|
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
* Copyright (c) 2016 - 2023 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
-
import { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';
|
|
7
|
-
import { PolymerElement } from '@polymer/polymer/polymer-element.js';
|
|
8
6
|
import { microTask, timeOut } from '@vaadin/component-base/src/async.js';
|
|
9
7
|
import { Debouncer } from '@vaadin/component-base/src/debounce.js';
|
|
10
|
-
import { updateCellState } from './vaadin-grid-helpers.js';
|
|
8
|
+
import { ColumnObserver, updateCellState } from './vaadin-grid-helpers.js';
|
|
11
9
|
|
|
12
10
|
function arrayEquals(arr1, arr2) {
|
|
13
11
|
if (!arr1 || !arr2 || arr1.length !== arr2.length) {
|
|
@@ -59,7 +57,7 @@ export const DynamicColumnsMixin = (superClass) =>
|
|
|
59
57
|
* @protected
|
|
60
58
|
*/
|
|
61
59
|
_getChildColumns(el) {
|
|
62
|
-
return
|
|
60
|
+
return ColumnObserver.getColumns(el);
|
|
63
61
|
}
|
|
64
62
|
|
|
65
63
|
/** @private */
|
|
@@ -78,7 +76,7 @@ export const DynamicColumnsMixin = (superClass) =>
|
|
|
78
76
|
|
|
79
77
|
/** @private */
|
|
80
78
|
_getColumnTree() {
|
|
81
|
-
const rootColumns =
|
|
79
|
+
const rootColumns = ColumnObserver.getColumns(this);
|
|
82
80
|
const columnTree = [rootColumns];
|
|
83
81
|
|
|
84
82
|
let c = rootColumns;
|
|
@@ -100,24 +98,31 @@ export const DynamicColumnsMixin = (superClass) =>
|
|
|
100
98
|
/** @protected */
|
|
101
99
|
_updateColumnTree() {
|
|
102
100
|
const columnTree = this._getColumnTree();
|
|
101
|
+
|
|
103
102
|
if (!arrayEquals(columnTree, this._columnTree)) {
|
|
103
|
+
// Request a synchronoys update for each column
|
|
104
|
+
columnTree.forEach((columnArray) => {
|
|
105
|
+
columnArray.forEach((column) => {
|
|
106
|
+
if (column.performUpdate) {
|
|
107
|
+
column.performUpdate();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
104
112
|
this._columnTree = columnTree;
|
|
105
113
|
}
|
|
106
114
|
}
|
|
107
115
|
|
|
108
116
|
/** @private */
|
|
109
117
|
_addNodeObserver() {
|
|
110
|
-
this._observer = new
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
this.__removeFilters(this._filters.filter(filterNotConnected));
|
|
119
|
-
this._debounceUpdateColumnTree();
|
|
120
|
-
}
|
|
118
|
+
this._observer = new ColumnObserver(this, (_addedColumns, removedColumns) => {
|
|
119
|
+
const allRemovedCells = removedColumns.flatMap((c) => c._allCells);
|
|
120
|
+
const filterNotConnected = (element) =>
|
|
121
|
+
allRemovedCells.filter((cell) => cell && cell._content.contains(element)).length;
|
|
122
|
+
|
|
123
|
+
this.__removeSorters(this._sorters.filter(filterNotConnected));
|
|
124
|
+
this.__removeFilters(this._filters.filter(filterNotConnected));
|
|
125
|
+
this._debounceUpdateColumnTree();
|
|
121
126
|
|
|
122
127
|
this._debouncerCheckImports = Debouncer.debounce(
|
|
123
128
|
this._debouncerCheckImports,
|
|
@@ -141,7 +146,7 @@ export const DynamicColumnsMixin = (superClass) =>
|
|
|
141
146
|
'vaadin-grid-sorter',
|
|
142
147
|
].forEach((elementName) => {
|
|
143
148
|
const element = this.querySelector(elementName);
|
|
144
|
-
if (element && !(
|
|
149
|
+
if (element && !customElements.get(elementName)) {
|
|
145
150
|
console.warn(`Make sure you have imported the required module for <${elementName}> element.`);
|
|
146
151
|
}
|
|
147
152
|
});
|