@spectrum-web-components/table 0.0.2-table.2609 → 0.0.2-table.2625
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/README.md +151 -63
- package/custom-elements.json +86 -59
- package/package.json +2 -9
- package/src/Table.d.ts +24 -0
- package/src/Table.js +68 -65
- package/src/Table.js.map +1 -1
- package/src/TableBody.js +1 -1
- package/src/TableBody.js.map +1 -1
- package/src/TableCell.d.ts +0 -1
- package/src/TableCell.js +0 -4
- package/src/TableCell.js.map +1 -1
- package/src/TableCheckboxCell.d.ts +1 -1
- package/src/TableCheckboxCell.js +8 -11
- package/src/TableCheckboxCell.js.map +1 -1
- package/src/TableHead.d.ts +1 -0
- package/src/TableHead.js +1 -1
- package/src/TableHead.js.map +1 -1
- package/src/TableHeadCell.d.ts +2 -1
- package/src/TableHeadCell.js +2 -4
- package/src/TableHeadCell.js.map +1 -1
- package/src/TableRow.d.ts +2 -0
- package/src/TableRow.js +2 -0
- package/src/TableRow.js.map +1 -1
- package/src/spectrum-config.js +10 -7
- package/src/spectrum-table-head-cell.css.js +1 -1
- package/src/spectrum-table-head-cell.css.js.map +1 -1
- package/src/spectrum-table.css.js +83 -103
- package/src/spectrum-table.css.js.map +1 -1
- package/src/table-checkbox-cell.css.js +1 -1
- package/src/table-checkbox-cell.css.js.map +1 -1
- package/src/table-head-cell.css.js +1 -1
- package/src/table-head-cell.css.js.map +1 -1
- package/src/table.css.js +83 -103
- package/src/table.css.js.map +1 -1
- package/stories/index.js +0 -12
- package/stories/index.js.map +1 -1
- package/stories/table-elements.stories.js +46 -21
- package/stories/table-elements.stories.js.map +1 -1
- package/stories/table-virtualized.stories.js +38 -25
- package/stories/table-virtualized.stories.js.map +1 -1
- package/test/benchmark/basic-test.js +39 -1
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/table.test.js +75 -649
- package/test/table.test.js.map +1 -1
- package/test/virtualized-table.test.js +494 -0
- package/test/virtualized-table.test.js.map +1 -0
package/test/table.test.js
CHANGED
|
@@ -9,17 +9,14 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA
|
|
|
9
9
|
OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
10
|
governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
|
-
import { elementUpdated, expect, fixture, html, nextFrame,
|
|
12
|
+
import { elementUpdated, expect, fixture, html, nextFrame, } from '@open-wc/testing';
|
|
13
13
|
import '../sp-table.js';
|
|
14
14
|
import '../sp-table-head.js';
|
|
15
15
|
import '../sp-table-head-cell.js';
|
|
16
16
|
import '../sp-table-body.js';
|
|
17
17
|
import '../sp-table-row.js';
|
|
18
18
|
import '../sp-table-cell.js';
|
|
19
|
-
import { elements, selectsMultiple, selectsSingle, } from '../stories/table-elements.stories.js';
|
|
20
|
-
import { virtualized, virtualizedCustomValue, virtualizedMultiple, virtualizedSingle, } from '../stories/table-virtualized.stories.js';
|
|
21
|
-
import { makeItemsTwo } from '../stories/index.js';
|
|
22
|
-
import { sendKeys } from '@web/test-runner-commands';
|
|
19
|
+
import { elements, noSelectsSpecified, selectsMultiple, selectsSingle, } from '../stories/table-elements.stories.js';
|
|
23
20
|
import { spy } from 'sinon';
|
|
24
21
|
let globalErrorHandler = undefined;
|
|
25
22
|
before(function () {
|
|
@@ -39,112 +36,11 @@ before(function () {
|
|
|
39
36
|
after(function () {
|
|
40
37
|
window.onerror = globalErrorHandler;
|
|
41
38
|
});
|
|
42
|
-
const renderItem = (item, index) => {
|
|
43
|
-
return html `
|
|
44
|
-
<sp-table-cell>Rowsa Item Alpha ${item.name}</sp-table-cell>
|
|
45
|
-
<sp-table-cell>Row Item Alpha ${item.date}</sp-table-cell>
|
|
46
|
-
<sp-table-cell>Row Item Alpha ${index}</sp-table-cell>
|
|
47
|
-
`;
|
|
48
|
-
};
|
|
49
39
|
describe('Table', () => {
|
|
50
40
|
it('loads default table accessibly', async () => {
|
|
51
41
|
const el = await fixture(elements());
|
|
52
42
|
await expect(el).to.be.accessible();
|
|
53
43
|
});
|
|
54
|
-
it('loads virtualized table accessibly', async () => {
|
|
55
|
-
const el = await fixture(virtualized());
|
|
56
|
-
await expect(el).to.be.accessible();
|
|
57
|
-
});
|
|
58
|
-
it('creates tab stops for `<sp-table-head-cell sortable>`', async () => {
|
|
59
|
-
var _a, _b, _c;
|
|
60
|
-
const input = document.createElement('input');
|
|
61
|
-
const test = await fixture(virtualized());
|
|
62
|
-
const el = (_a = test.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sp-table');
|
|
63
|
-
test.insertAdjacentElement('beforebegin', input);
|
|
64
|
-
input.focus();
|
|
65
|
-
expect(input === document.activeElement).to.be.true;
|
|
66
|
-
const firstSortable = el.querySelector('[sortable]:nth-of-type(1)');
|
|
67
|
-
const secondSortable = el.querySelector('[sortable]:nth-of-type(2)');
|
|
68
|
-
await sendKeys({
|
|
69
|
-
press: 'Tab',
|
|
70
|
-
});
|
|
71
|
-
expect(firstSortable === ((_b = test.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)).to.be.true;
|
|
72
|
-
await sendKeys({
|
|
73
|
-
press: 'Tab',
|
|
74
|
-
});
|
|
75
|
-
expect(secondSortable === ((_c = test.shadowRoot) === null || _c === void 0 ? void 0 : _c.activeElement)).to.be.true;
|
|
76
|
-
});
|
|
77
|
-
it('does not tab stop on non-sortable `<sp-table-head-cell>`s', async () => {
|
|
78
|
-
var _a, _b, _c, _d;
|
|
79
|
-
const input = document.createElement('input');
|
|
80
|
-
const test = await fixture(virtualized());
|
|
81
|
-
const el = (_a = test.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sp-table');
|
|
82
|
-
test.insertAdjacentElement('beforebegin', input);
|
|
83
|
-
input.focus();
|
|
84
|
-
expect(input === document.activeElement).to.be.true;
|
|
85
|
-
const firstHeadCell = el.querySelector('sp-table-head-cell:nth-of-type(1)');
|
|
86
|
-
const secondHeadCell = el.querySelector('sp-table-head-cell:nth-of-type(2)');
|
|
87
|
-
const thirdHeadCell = el.querySelector('sp-table-head-cell:nth-of-type(3)');
|
|
88
|
-
await sendKeys({
|
|
89
|
-
press: 'Tab',
|
|
90
|
-
});
|
|
91
|
-
expect(firstHeadCell === ((_b = test.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)).to.be.true;
|
|
92
|
-
await sendKeys({
|
|
93
|
-
press: 'Tab',
|
|
94
|
-
});
|
|
95
|
-
expect(secondHeadCell === ((_c = test.shadowRoot) === null || _c === void 0 ? void 0 : _c.activeElement)).to.be.true;
|
|
96
|
-
await sendKeys({
|
|
97
|
-
press: 'Tab',
|
|
98
|
-
});
|
|
99
|
-
expect(thirdHeadCell === ((_d = test.shadowRoot) === null || _d === void 0 ? void 0 : _d.activeElement)).to.be.false;
|
|
100
|
-
// Passes on firefox only, not sure why... Scrollable content should
|
|
101
|
-
// recieve tabstop. TableBody should be scrollable.
|
|
102
|
-
// expect(tableBody === test.shadowRoot?.activeElement).to.be.true;
|
|
103
|
-
});
|
|
104
|
-
it('can be focus()ed from the `<sp-table>`', async () => {
|
|
105
|
-
var _a, _b;
|
|
106
|
-
const input = document.createElement('input');
|
|
107
|
-
const test = await fixture(virtualized());
|
|
108
|
-
const el = (_a = test.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sp-table');
|
|
109
|
-
test.insertAdjacentElement('beforebegin', input);
|
|
110
|
-
// we should be able to do el.focus()
|
|
111
|
-
el.focus();
|
|
112
|
-
// should focus the first sortable descendant
|
|
113
|
-
const firstSortable = el.querySelector('[sortable]:nth-of-type(1)');
|
|
114
|
-
expect(firstSortable === ((_b = test.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)).to.be.true;
|
|
115
|
-
});
|
|
116
|
-
it('dispatches `sorted` events', async () => {
|
|
117
|
-
const el = await fixture(html `
|
|
118
|
-
<sp-table size="m">
|
|
119
|
-
<sp-table-head>
|
|
120
|
-
<sp-table-head-cell sortable sorted="desc">
|
|
121
|
-
Column Title
|
|
122
|
-
</sp-table-head-cell>
|
|
123
|
-
<sp-table-head-cell sortable>
|
|
124
|
-
Column Title
|
|
125
|
-
</sp-table-head-cell>
|
|
126
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
127
|
-
</sp-table-head>
|
|
128
|
-
</sp-table>
|
|
129
|
-
`);
|
|
130
|
-
const tableHeadCell1 = el.querySelector('[sortable][sorted]');
|
|
131
|
-
const tableHeadCell2 = el.querySelector('[sortable]:not([sorted])');
|
|
132
|
-
tableHeadCell2.click();
|
|
133
|
-
await nextFrame();
|
|
134
|
-
expect(tableHeadCell1.hasAttribute('sorted')).to.be.false;
|
|
135
|
-
expect(tableHeadCell2.hasAttribute('sorted')).to.be.true;
|
|
136
|
-
expect(tableHeadCell2.getAttribute('sorted')).to.equal('asc');
|
|
137
|
-
tableHeadCell2.click();
|
|
138
|
-
await nextFrame();
|
|
139
|
-
expect(tableHeadCell1.hasAttribute('sorted')).to.be.false;
|
|
140
|
-
expect(tableHeadCell2.hasAttribute('sorted')).to.be.true;
|
|
141
|
-
expect(tableHeadCell2.getAttribute('sorted')).to.equal('desc');
|
|
142
|
-
tableHeadCell1.click();
|
|
143
|
-
await nextFrame();
|
|
144
|
-
expect(tableHeadCell2.hasAttribute('sorted')).to.be.false;
|
|
145
|
-
expect(tableHeadCell1.hasAttribute('sorted')).to.be.true;
|
|
146
|
-
expect(tableHeadCell1.getAttribute('sorted')).to.equal('asc');
|
|
147
|
-
});
|
|
148
44
|
it('dispatches `change` events', async () => {
|
|
149
45
|
const changeSpy = spy();
|
|
150
46
|
const el = await fixture(html `
|
|
@@ -157,12 +53,8 @@ describe('Table', () => {
|
|
|
157
53
|
}}
|
|
158
54
|
>
|
|
159
55
|
<sp-table-head>
|
|
160
|
-
<sp-table-head-cell
|
|
161
|
-
|
|
162
|
-
</sp-table-head-cell>
|
|
163
|
-
<sp-table-head-cell sortable>
|
|
164
|
-
Column Title
|
|
165
|
-
</sp-table-head-cell>
|
|
56
|
+
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
57
|
+
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
166
58
|
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
167
59
|
</sp-table-head>
|
|
168
60
|
<sp-table-body style="height: 120px">
|
|
@@ -193,7 +85,6 @@ describe('Table', () => {
|
|
|
193
85
|
</sp-table-row>
|
|
194
86
|
</sp-table-body>
|
|
195
87
|
</sp-table>
|
|
196
|
-
<div>Selected:</div>
|
|
197
88
|
`);
|
|
198
89
|
const rowThreeCheckboxCell = el.querySelector('[value="row3"] sp-table-checkbox-cell');
|
|
199
90
|
const tableHeadCheckboxCell = el.querySelector('sp-table-head sp-table-checkbox-cell');
|
|
@@ -202,6 +93,7 @@ describe('Table', () => {
|
|
|
202
93
|
expect(el.selected).to.deep.equal(['row1', 'row2', 'row3']);
|
|
203
94
|
expect(changeSpy.calledOnce).to.be.true;
|
|
204
95
|
expect(changeSpy.calledWithExactly(el)).to.be.true;
|
|
96
|
+
changeSpy.resetHistory();
|
|
205
97
|
tableHeadCheckboxCell.checkbox.click();
|
|
206
98
|
expect(el.selected).to.deep.equal([
|
|
207
99
|
'row1',
|
|
@@ -210,10 +102,10 @@ describe('Table', () => {
|
|
|
210
102
|
'row4',
|
|
211
103
|
'row5',
|
|
212
104
|
]);
|
|
213
|
-
expect(changeSpy.
|
|
105
|
+
expect(changeSpy.calledOnce).to.to.true;
|
|
214
106
|
expect(changeSpy.calledWithExactly(el)).to.be.true;
|
|
215
107
|
});
|
|
216
|
-
it('accepts change events
|
|
108
|
+
it('accepts change events dispatched from TableHead `<sp-table-checkbox-cell>`', async () => {
|
|
217
109
|
const changeSpy = spy();
|
|
218
110
|
const el = await fixture(html `
|
|
219
111
|
<sp-table
|
|
@@ -225,12 +117,8 @@ describe('Table', () => {
|
|
|
225
117
|
}}
|
|
226
118
|
>
|
|
227
119
|
<sp-table-head>
|
|
228
|
-
<sp-table-head-cell
|
|
229
|
-
|
|
230
|
-
</sp-table-head-cell>
|
|
231
|
-
<sp-table-head-cell sortable>
|
|
232
|
-
Column Title
|
|
233
|
-
</sp-table-head-cell>
|
|
120
|
+
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
121
|
+
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
234
122
|
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
235
123
|
</sp-table-head>
|
|
236
124
|
<sp-table-body style="height: 120px">
|
|
@@ -261,13 +149,17 @@ describe('Table', () => {
|
|
|
261
149
|
</sp-table-row>
|
|
262
150
|
</sp-table-body>
|
|
263
151
|
</sp-table>
|
|
264
|
-
<div>Selected:</div>
|
|
265
152
|
`);
|
|
266
153
|
const tableHeadCheckboxCell = el.querySelector('sp-table-head sp-table-checkbox-cell');
|
|
267
154
|
expect(el.selected).to.deep.equal(['row1', 'row2']);
|
|
155
|
+
expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.true;
|
|
156
|
+
expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;
|
|
268
157
|
tableHeadCheckboxCell.checkbox.click();
|
|
158
|
+
await elementUpdated(el);
|
|
269
159
|
expect(changeSpy.calledOnce).to.be.true;
|
|
270
160
|
expect(changeSpy.calledWithExactly(el)).to.be.true;
|
|
161
|
+
expect(tableHeadCheckboxCell.checkbox.checked).to.be.true;
|
|
162
|
+
expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.false;
|
|
271
163
|
expect(el.selected).to.deep.equal([
|
|
272
164
|
'row1',
|
|
273
165
|
'row2',
|
|
@@ -275,416 +167,78 @@ describe('Table', () => {
|
|
|
275
167
|
'row4',
|
|
276
168
|
'row5',
|
|
277
169
|
]);
|
|
278
|
-
});
|
|
279
|
-
xit('dispatches `rangeChanged` events on Virtualized Table', async () => {
|
|
280
|
-
// console.log('This test');
|
|
281
|
-
const virtualItems = makeItemsTwo(50);
|
|
282
|
-
const el = await fixture(html `
|
|
283
|
-
<sp-table
|
|
284
|
-
selects="multiple"
|
|
285
|
-
.selected=${['1', '47']}
|
|
286
|
-
style="height: 120px"
|
|
287
|
-
.items=${virtualItems}
|
|
288
|
-
.renderItem=${renderItem}
|
|
289
|
-
scroller?="true"
|
|
290
|
-
>
|
|
291
|
-
<sp-table-head>
|
|
292
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
293
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
294
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
295
|
-
</sp-table-head>
|
|
296
|
-
</sp-table>
|
|
297
|
-
`);
|
|
298
|
-
// console.log(1);
|
|
299
|
-
await nextFrame();
|
|
300
|
-
// console.log(2);
|
|
301
|
-
await nextFrame();
|
|
302
|
-
// console.log(3);
|
|
303
|
-
await nextFrame();
|
|
304
|
-
// debugger;
|
|
305
|
-
expect(el.selected).to.deep.equal(['1', '47']);
|
|
306
|
-
// console.log('4a');
|
|
307
|
-
const rangeChanged = oneEvent(el, 'rangeChanged');
|
|
308
|
-
// console.log(4);
|
|
309
|
-
let tableRow = el.querySelector('sp-table-row');
|
|
310
|
-
const initialValue = tableRow.value;
|
|
311
|
-
el.scrollToIndex(47);
|
|
312
|
-
// (el as unknown as { tableBody: TableBody }).tableBody.scrollTop = (el as unknown as { tableBody: TableBody }).tableBody.scrollHeight;
|
|
313
|
-
// console.log('we await after this...');
|
|
314
|
-
await nextFrame();
|
|
315
|
-
await nextFrame();
|
|
316
|
-
// debugger;
|
|
317
|
-
await rangeChanged;
|
|
318
|
-
tableRow = el.querySelector('sp-table-row');
|
|
319
|
-
const newValue = tableRow.value;
|
|
320
|
-
expect(newValue).to.not.equal(initialValue);
|
|
321
|
-
});
|
|
322
|
-
it('dispatches `visibilityChanged` events on Virtualized Table', async () => {
|
|
323
|
-
// console.log('NOT this test');
|
|
324
|
-
const visibilityChangedSpy = spy();
|
|
325
|
-
const virtualItems = makeItemsTwo(50);
|
|
326
|
-
const el = await fixture(html `
|
|
327
|
-
<sp-table
|
|
328
|
-
selects="multiple"
|
|
329
|
-
.selected=${['1', '47']}
|
|
330
|
-
style="height: 120px"
|
|
331
|
-
.items=${virtualItems}
|
|
332
|
-
.renderItem=${renderItem}
|
|
333
|
-
scroller?="true"
|
|
334
|
-
@visibilityChanged=${({ target, }) => {
|
|
335
|
-
visibilityChangedSpy(target);
|
|
336
|
-
}}
|
|
337
|
-
>
|
|
338
|
-
<sp-table-head>
|
|
339
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
340
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
341
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
342
|
-
</sp-table-head>
|
|
343
|
-
</sp-table>
|
|
344
|
-
`);
|
|
345
|
-
await nextFrame();
|
|
346
|
-
await nextFrame();
|
|
347
|
-
await nextFrame();
|
|
348
|
-
expect(el.selected).to.deep.equal(['1', '47']);
|
|
349
|
-
el.scrollToIndex(47);
|
|
350
|
-
await nextFrame();
|
|
351
|
-
await nextFrame();
|
|
352
|
-
await elementUpdated(el);
|
|
353
|
-
expect(visibilityChangedSpy.called).to.be.true;
|
|
354
|
-
});
|
|
355
|
-
it('selects all checkboxes in Virtualized Table when clicking the TableHeadCheckboxCell', async () => {
|
|
356
|
-
const virtualItems = makeItemsTwo(50);
|
|
357
|
-
const el = await fixture(html `
|
|
358
|
-
<sp-table
|
|
359
|
-
selects="multiple"
|
|
360
|
-
.selected=${['1', '47']}
|
|
361
|
-
style="height: 120px"
|
|
362
|
-
.items=${virtualItems}
|
|
363
|
-
.renderItem=${renderItem}
|
|
364
|
-
scroller?="true"
|
|
365
|
-
>
|
|
366
|
-
<sp-table-head>
|
|
367
|
-
<sp-table-head-cell sortable sortby="name" sorted="desc">
|
|
368
|
-
Column Title
|
|
369
|
-
</sp-table-head-cell>
|
|
370
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
371
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
372
|
-
</sp-table-head>
|
|
373
|
-
</sp-table>
|
|
374
|
-
`);
|
|
375
|
-
await elementUpdated(el);
|
|
376
|
-
expect(el.selected).to.deep.equal(['1', '47']);
|
|
377
|
-
const tableHeadCheckboxCell = el.querySelector('sp-table-head sp-table-checkbox-cell');
|
|
378
170
|
tableHeadCheckboxCell.checkbox.click();
|
|
379
171
|
await elementUpdated(el);
|
|
172
|
+
expect(el.selected).to.deep.equal([]);
|
|
173
|
+
expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;
|
|
174
|
+
expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.false;
|
|
380
175
|
});
|
|
381
|
-
it('
|
|
382
|
-
const el = await fixture(
|
|
383
|
-
|
|
176
|
+
it('selects items not initially visible in the <sp-table-body>', async () => {
|
|
177
|
+
const el = await fixture(elements());
|
|
178
|
+
el.selects = 'single';
|
|
179
|
+
el.selected = ['row5'];
|
|
180
|
+
await elementUpdated(el);
|
|
181
|
+
const rowFive = el.querySelector('.row5');
|
|
182
|
+
const rowFiveCheckbox = rowFive.querySelector('sp-table-checkbox-cell');
|
|
183
|
+
const checkboxes = el.querySelectorAll('sp-table-checkbox-cell:nth-child(n+1):nth-child(n+4)');
|
|
184
|
+
checkboxes.forEach((checkbox) => {
|
|
185
|
+
expect(checkbox.checkbox.checked).to.be.false;
|
|
186
|
+
});
|
|
187
|
+
el.scrollTop = el.scrollHeight;
|
|
188
|
+
await nextFrame();
|
|
189
|
+
expect(rowFiveCheckbox.checkbox.checked).to.be.true;
|
|
384
190
|
});
|
|
385
191
|
it('surfaces [selects="single"] selection', async () => {
|
|
386
192
|
const el = await fixture(selectsSingle());
|
|
387
193
|
expect(el.selected, "'Row 1 selected").to.deep.equal(['row1']);
|
|
388
194
|
});
|
|
389
|
-
it('surfaces [selects="single"] selection on Virtualized Table', async () => {
|
|
390
|
-
// TODO fix the args
|
|
391
|
-
const el = await fixture(virtualizedSingle(Object.assign(Object.assign({}, virtualizedSingle.args), { onChange: () => {
|
|
392
|
-
return;
|
|
393
|
-
} })));
|
|
394
|
-
expect(el.selected, "'Row 1 selected").to.deep.equal(['0']);
|
|
395
|
-
});
|
|
396
|
-
it('surfaces [selects="multiple"] selection', async () => {
|
|
397
|
-
const el = await fixture(selectsMultiple());
|
|
398
|
-
expect(el.selected, 'Rows 1 and 2 selected').to.deep.equal([
|
|
399
|
-
'row1',
|
|
400
|
-
'row2',
|
|
401
|
-
]);
|
|
402
|
-
});
|
|
403
|
-
it('surfaces [selects="multiple"] selection on Virtualized Table', async () => {
|
|
404
|
-
const el = await fixture(virtualizedMultiple(virtualizedMultiple.args));
|
|
405
|
-
expect(el.selected, 'Rows 1 and 2 selected').to.deep.equal(['0', '48']);
|
|
406
|
-
});
|
|
407
|
-
it('selects a user-passed value for .selected array with no [selects="single"] specified, but does not allow interaction afterwards', async () => {
|
|
408
|
-
const el = await fixture(html `
|
|
409
|
-
<sp-table size="m" .selected=${['row3']}>
|
|
410
|
-
<sp-table-head>
|
|
411
|
-
<sp-table-head-cell sortable sorted="desc">
|
|
412
|
-
Column Title
|
|
413
|
-
</sp-table-head-cell>
|
|
414
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
415
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
416
|
-
</sp-table-head>
|
|
417
|
-
<sp-table-body style="height: 120px">
|
|
418
|
-
<sp-table-row value="row1" class="row1">
|
|
419
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
420
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
421
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
422
|
-
</sp-table-row>
|
|
423
|
-
<sp-table-row value="row2" class="row2">
|
|
424
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
425
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
426
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
427
|
-
</sp-table-row>
|
|
428
|
-
<sp-table-row value="row3" class="row3">
|
|
429
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
430
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
431
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
432
|
-
</sp-table-row>
|
|
433
|
-
</sp-table-body>
|
|
434
|
-
</sp-table>
|
|
435
|
-
`);
|
|
436
|
-
await elementUpdated(el);
|
|
437
|
-
expect(el.selected.length).to.equal(1);
|
|
438
|
-
const rowThree = el.querySelector('.row3');
|
|
439
|
-
const rowTwo = el.querySelector('.row2');
|
|
440
|
-
const rowTwoCheckbox = rowTwo.querySelector('sp-table-checkbox-cell');
|
|
441
|
-
expect(rowThree.selected, 'third row selected').to.be.true;
|
|
442
|
-
expect(rowTwo.selected, 'second row selected').to.be.false;
|
|
443
|
-
expect(rowTwoCheckbox).to.be.null;
|
|
444
|
-
});
|
|
445
|
-
it('selects a user-passed value for .selected array with no [selects="single"] specified on Virtualized `<sp-table>`, but does not allow interaction afterwards', async () => {
|
|
446
|
-
const virtualItems = makeItemsTwo(50);
|
|
447
|
-
const el = await fixture(html `
|
|
448
|
-
<sp-table
|
|
449
|
-
.selected=${['0']}
|
|
450
|
-
style="height: 120px"
|
|
451
|
-
.items=${virtualItems}
|
|
452
|
-
.renderItem=${renderItem}
|
|
453
|
-
scroller?="true"
|
|
454
|
-
>
|
|
455
|
-
<sp-table-head>
|
|
456
|
-
<sp-table-head-cell sortable sortby="name" sorted="desc">
|
|
457
|
-
Column Title
|
|
458
|
-
</sp-table-head-cell>
|
|
459
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
460
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
461
|
-
</sp-table-head>
|
|
462
|
-
</sp-table>
|
|
463
|
-
`);
|
|
464
|
-
expect(el.selected.length).to.equal(1);
|
|
465
|
-
await oneEvent(el, 'rangeChanged');
|
|
466
|
-
await elementUpdated(el);
|
|
467
|
-
const rowOneItem = el.querySelector('[value="0"]');
|
|
468
|
-
expect(rowOneItem.value).to.equal('0');
|
|
469
|
-
});
|
|
470
|
-
it('selects user-passed values for .selected array with no [selects="multiple"] specified, but does not allow interaction afterwards', async () => {
|
|
471
|
-
const el = await fixture(html `
|
|
472
|
-
<sp-table size="m" .selected=${['row2', 'row3']}>
|
|
473
|
-
<sp-table-head>
|
|
474
|
-
<sp-table-head-cell sortable sorted="desc">
|
|
475
|
-
Column Title
|
|
476
|
-
</sp-table-head-cell>
|
|
477
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
478
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
479
|
-
</sp-table-head>
|
|
480
|
-
<sp-table-body style="height: 120px">
|
|
481
|
-
<sp-table-row value="row1" class="row1">
|
|
482
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
483
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
484
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
485
|
-
</sp-table-row>
|
|
486
|
-
<sp-table-row value="row2" class="row2">
|
|
487
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
488
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
489
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
490
|
-
</sp-table-row>
|
|
491
|
-
<sp-table-row value="row3" class="row3">
|
|
492
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
493
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
494
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
495
|
-
</sp-table-row>
|
|
496
|
-
</sp-table-body>
|
|
497
|
-
</sp-table>
|
|
498
|
-
`);
|
|
499
|
-
await elementUpdated(el);
|
|
500
|
-
expect(el.selected.length).to.equal(2);
|
|
501
|
-
const rowThree = el.querySelector('.row3');
|
|
502
|
-
const rowTwo = el.querySelector('.row2');
|
|
503
|
-
const rowOne = el.querySelector('.row1');
|
|
504
|
-
const rowOneCheckbox = rowOne.querySelector('sp-table-checkbox-cell');
|
|
505
|
-
expect(rowThree.selected, 'third row selected').to.be.true;
|
|
506
|
-
expect(rowTwo.selected, 'second row selected').to.be.true;
|
|
507
|
-
expect(rowOne.selected, 'first row selected').to.be.false;
|
|
508
|
-
expect(rowOneCheckbox).to.be.null;
|
|
509
|
-
});
|
|
510
|
-
it('selects user-passed values for .selected array with no [selects="multiple"] specified on Virtualized `<sp-table>`, but does not allow interaction afterwards', async () => {
|
|
511
|
-
const virtualItems = makeItemsTwo(5);
|
|
512
|
-
const el = await fixture(html `
|
|
513
|
-
<sp-table
|
|
514
|
-
.selected=${['0', '4']}
|
|
515
|
-
style="height: 120px"
|
|
516
|
-
.items=${virtualItems}
|
|
517
|
-
.renderItem=${renderItem}
|
|
518
|
-
scroller?="true"
|
|
519
|
-
>
|
|
520
|
-
<sp-table-head>
|
|
521
|
-
<sp-table-head-cell sortable sortby="name" sorted="desc">
|
|
522
|
-
Column Title
|
|
523
|
-
</sp-table-head-cell>
|
|
524
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
525
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
526
|
-
</sp-table-head>
|
|
527
|
-
</sp-table>
|
|
528
|
-
`);
|
|
529
|
-
await oneEvent(el, 'rangeChanged');
|
|
530
|
-
await elementUpdated(el);
|
|
531
|
-
expect(el.selected.length).to.equal(2);
|
|
532
|
-
const rowOneItem = el.querySelector('[value="0"]');
|
|
533
|
-
const rowFiveItem = el.querySelector('[value="4"]');
|
|
534
|
-
expect(rowOneItem.value).to.equal('0');
|
|
535
|
-
expect(rowFiveItem.value).to.equal('4');
|
|
536
|
-
});
|
|
537
195
|
it('selects via `click` while [selects="single"]', async () => {
|
|
538
|
-
const el = await fixture(
|
|
539
|
-
<sp-table size="m" selects="single">
|
|
540
|
-
<sp-table-head>
|
|
541
|
-
<sp-table-head-cell sortable sorted="desc">
|
|
542
|
-
Column Title
|
|
543
|
-
</sp-table-head-cell>
|
|
544
|
-
<sp-table-head-cell sortable>
|
|
545
|
-
Column Title
|
|
546
|
-
</sp-table-head-cell>
|
|
547
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
548
|
-
</sp-table-head>
|
|
549
|
-
<sp-table-body style="height: 120px">
|
|
550
|
-
<sp-table-row value="row1">
|
|
551
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
552
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
553
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
554
|
-
</sp-table-row>
|
|
555
|
-
<sp-table-row value="row2" class="row2">
|
|
556
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
557
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
558
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
559
|
-
</sp-table-row>
|
|
560
|
-
<sp-table-row value="row3" class="row3">
|
|
561
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
562
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
563
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
564
|
-
</sp-table-row>
|
|
565
|
-
<sp-table-row value="row4">
|
|
566
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
567
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
568
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
569
|
-
</sp-table-row>
|
|
570
|
-
<sp-table-row value="row5">
|
|
571
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
572
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
573
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
574
|
-
</sp-table-row>
|
|
575
|
-
</sp-table-body>
|
|
576
|
-
</sp-table>
|
|
577
|
-
`);
|
|
196
|
+
const el = await fixture(selectsSingle());
|
|
578
197
|
const rowTwo = el.querySelector('.row2');
|
|
579
198
|
const rowTwoCheckbox = rowTwo.querySelector('sp-table-checkbox-cell');
|
|
580
|
-
|
|
581
|
-
|
|
199
|
+
const rowThree = el.querySelector('.row3');
|
|
200
|
+
const rowThreeCheckbox = rowThree.querySelector('sp-table-checkbox-cell');
|
|
582
201
|
rowTwoCheckbox.checkbox.click();
|
|
583
202
|
await elementUpdated(el);
|
|
584
203
|
expect(rowTwoCheckbox.checked).to.be.true;
|
|
585
204
|
expect(el.selected).to.deep.equal(['row2']);
|
|
205
|
+
rowThreeCheckbox.checkbox.click();
|
|
206
|
+
await elementUpdated(el);
|
|
207
|
+
await elementUpdated(rowTwoCheckbox); // webkit needs this
|
|
208
|
+
expect(rowThreeCheckbox.checkbox.checked).to.be.true;
|
|
209
|
+
expect(rowTwoCheckbox.checkbox.checked).to.be.false;
|
|
210
|
+
expect(el.selected.length).to.equal(1);
|
|
586
211
|
});
|
|
587
|
-
it('
|
|
588
|
-
const el = await fixture(
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
598
|
-
</sp-table-head>
|
|
599
|
-
<sp-table-body style="height: 120px">
|
|
600
|
-
<sp-table-row value="row1">
|
|
601
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
602
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
603
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
604
|
-
</sp-table-row>
|
|
605
|
-
<sp-table-row value="row2" class="row2">
|
|
606
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
607
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
608
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
609
|
-
</sp-table-row>
|
|
610
|
-
<sp-table-row value="row3" class="row3">
|
|
611
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
612
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
613
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
614
|
-
</sp-table-row>
|
|
615
|
-
<sp-table-row value="row4">
|
|
616
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
617
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
618
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
619
|
-
</sp-table-row>
|
|
620
|
-
<sp-table-row value="row5">
|
|
621
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
622
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
623
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
624
|
-
</sp-table-row>
|
|
625
|
-
</sp-table-body>
|
|
626
|
-
</sp-table>
|
|
627
|
-
`);
|
|
628
|
-
const rowTwo = el.querySelector('.row2');
|
|
212
|
+
it('surfaces [selects="multiple"] selection', async () => {
|
|
213
|
+
const el = await fixture(selectsMultiple());
|
|
214
|
+
expect(el.selected, 'Rows 1 and 2 selected').to.deep.equal([
|
|
215
|
+
'row1',
|
|
216
|
+
'row2',
|
|
217
|
+
]);
|
|
218
|
+
});
|
|
219
|
+
it('selects via `click` while [selects="multiple"] selection', async () => {
|
|
220
|
+
const el = await fixture(selectsMultiple());
|
|
221
|
+
const rowFour = el.querySelector('.row4');
|
|
629
222
|
const tableHeadCheckboxCell = el.querySelector('sp-table-head sp-table-checkbox-cell');
|
|
630
|
-
const
|
|
223
|
+
const rowFourCheckbox = rowFour.querySelector('sp-table-checkbox-cell');
|
|
631
224
|
await elementUpdated(el);
|
|
632
|
-
expect(el.selected.length).to.equal(
|
|
633
|
-
|
|
225
|
+
expect(el.selected.length).to.equal(2);
|
|
226
|
+
rowFourCheckbox.checkbox.click();
|
|
634
227
|
await elementUpdated(el);
|
|
635
|
-
expect(
|
|
636
|
-
expect(el.selected).to.deep.equal(['row2']);
|
|
228
|
+
expect(rowFourCheckbox.checked).to.be.true;
|
|
229
|
+
expect(el.selected).to.deep.equal(['row1', 'row2', 'row4']);
|
|
637
230
|
tableHeadCheckboxCell.checkbox.click();
|
|
638
231
|
await elementUpdated(el);
|
|
639
232
|
expect(el.selected).to.deep.equal([
|
|
640
|
-
'row2',
|
|
641
233
|
'row1',
|
|
642
|
-
'
|
|
234
|
+
'row2',
|
|
643
235
|
'row4',
|
|
236
|
+
'row3',
|
|
644
237
|
'row5',
|
|
645
238
|
]);
|
|
646
239
|
});
|
|
647
240
|
it('allows [selects] to be changed by the application', async () => {
|
|
648
|
-
const el = await fixture(
|
|
649
|
-
<sp-table size="m">
|
|
650
|
-
<sp-table-head>
|
|
651
|
-
<sp-table-head-cell sortable sorted="desc">
|
|
652
|
-
Column Title
|
|
653
|
-
</sp-table-head-cell>
|
|
654
|
-
<sp-table-head-cell sortable>
|
|
655
|
-
Column Title
|
|
656
|
-
</sp-table-head-cell>
|
|
657
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
658
|
-
</sp-table-head>
|
|
659
|
-
<sp-table-body style="height: 120px">
|
|
660
|
-
<sp-table-row value="row1" class="row1">
|
|
661
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
662
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
663
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
664
|
-
</sp-table-row>
|
|
665
|
-
<sp-table-row value="row2" class="row2">
|
|
666
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
667
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
668
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
669
|
-
</sp-table-row>
|
|
670
|
-
<sp-table-row value="row3">
|
|
671
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
672
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
673
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
674
|
-
</sp-table-row>
|
|
675
|
-
<sp-table-row value="row4">
|
|
676
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
677
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
678
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
679
|
-
</sp-table-row>
|
|
680
|
-
<sp-table-row value="row5">
|
|
681
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
682
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
683
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
684
|
-
</sp-table-row>
|
|
685
|
-
</sp-table-body>
|
|
686
|
-
</sp-table>
|
|
687
|
-
`);
|
|
241
|
+
const el = await fixture(elements());
|
|
688
242
|
expect(el.selects).to.be.undefined;
|
|
689
243
|
el.selects = 'single';
|
|
690
244
|
await elementUpdated(el);
|
|
@@ -713,158 +267,30 @@ describe('Table', () => {
|
|
|
713
267
|
expect(rowTwoCheckboxCell.checkbox.checked).to.be.true;
|
|
714
268
|
expect(tableHeadCheckboxCell.indeterminate).to.be.true;
|
|
715
269
|
});
|
|
270
|
+
it('selects a user-passed value for .selected array with no [selects] specified, but does not allow interaction afterwards', async () => {
|
|
271
|
+
const el = await fixture(noSelectsSpecified());
|
|
272
|
+
await elementUpdated(el);
|
|
273
|
+
expect(el.selected.length).to.equal(2);
|
|
274
|
+
const rows = el.querySelectorAll('sp-table-row');
|
|
275
|
+
rows.forEach((row) => {
|
|
276
|
+
const checkbox = row.querySelector('sp-table-checkbox-cell');
|
|
277
|
+
expect(checkbox).to.be.null;
|
|
278
|
+
});
|
|
279
|
+
});
|
|
716
280
|
it('allows .selected values to be changed by the application when [selects="multiple"]', async () => {
|
|
717
|
-
const el = await fixture(
|
|
718
|
-
<sp-table size="m" selects="multiple" .selected=${['row1']}>
|
|
719
|
-
<sp-table-head>
|
|
720
|
-
<sp-table-head-cell sortable sorted="desc">
|
|
721
|
-
Column Title
|
|
722
|
-
</sp-table-head-cell>
|
|
723
|
-
<sp-table-head-cell sortable>
|
|
724
|
-
Column Title
|
|
725
|
-
</sp-table-head-cell>
|
|
726
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
727
|
-
</sp-table-head>
|
|
728
|
-
<sp-table-body style="height: 120px">
|
|
729
|
-
<sp-table-row value="row1" class="row1">
|
|
730
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
731
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
732
|
-
<sp-table-cell>Row Item Alpha</sp-table-cell>
|
|
733
|
-
</sp-table-row>
|
|
734
|
-
<sp-table-row value="row2" class="row2">
|
|
735
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
736
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
737
|
-
<sp-table-cell>Row Item Bravo</sp-table-cell>
|
|
738
|
-
</sp-table-row>
|
|
739
|
-
<sp-table-row value="row3">
|
|
740
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
741
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
742
|
-
<sp-table-cell>Row Item Charlie</sp-table-cell>
|
|
743
|
-
</sp-table-row>
|
|
744
|
-
<sp-table-row value="row4">
|
|
745
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
746
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
747
|
-
<sp-table-cell>Row Item Delta</sp-table-cell>
|
|
748
|
-
</sp-table-row>
|
|
749
|
-
<sp-table-row value="row5">
|
|
750
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
751
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
752
|
-
<sp-table-cell>Row Item Echo</sp-table-cell>
|
|
753
|
-
</sp-table-row>
|
|
754
|
-
</sp-table-body>
|
|
755
|
-
</sp-table>
|
|
756
|
-
`);
|
|
281
|
+
const el = await fixture(selectsMultiple());
|
|
757
282
|
await elementUpdated(el);
|
|
758
|
-
const
|
|
283
|
+
const rowThreeCheckboxCell = el.querySelector('.row3 sp-table-checkbox-cell');
|
|
759
284
|
const rowOneCheckboxCell = el.querySelector('.row1 sp-table-checkbox-cell');
|
|
760
|
-
expect(el.selected).to.deep.equal(['row1']);
|
|
761
|
-
expect(rowOneCheckboxCell.checkbox.checked).to.be.true;
|
|
762
|
-
expect(rowTwoCheckboxCell.checkbox.checked).to.be.false;
|
|
763
|
-
el.selected = ['row1', 'row2'];
|
|
764
|
-
await elementUpdated(el);
|
|
765
|
-
await elementUpdated(rowTwoCheckboxCell);
|
|
766
285
|
expect(el.selected).to.deep.equal(['row1', 'row2']);
|
|
767
286
|
expect(rowOneCheckboxCell.checkbox.checked).to.be.true;
|
|
768
|
-
expect(
|
|
769
|
-
|
|
770
|
-
it('ensures that virtualized elements with values in .selected are visually selected when brought into view using scrollTop', async () => {
|
|
771
|
-
const virtualItems = makeItemsTwo(50);
|
|
772
|
-
const el = await fixture(html `
|
|
773
|
-
<sp-table
|
|
774
|
-
selects="multiple"
|
|
775
|
-
.selected=${['1', '47']}
|
|
776
|
-
style="height: 120px"
|
|
777
|
-
.items=${virtualItems}
|
|
778
|
-
.renderItem=${renderItem}
|
|
779
|
-
scroller?="true"
|
|
780
|
-
>
|
|
781
|
-
<sp-table-head>
|
|
782
|
-
<sp-table-head-cell sortable sortby="name" sorted="desc">
|
|
783
|
-
Column Title
|
|
784
|
-
</sp-table-head-cell>
|
|
785
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
786
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
787
|
-
</sp-table-head>
|
|
788
|
-
</sp-table>
|
|
789
|
-
`);
|
|
790
|
-
await oneEvent(el, 'rangeChanged');
|
|
791
|
-
await elementUpdated(el);
|
|
792
|
-
const rowOne = el.querySelector('[value="1"]');
|
|
793
|
-
const rowOneCheckboxCell = rowOne.querySelector('sp-table-checkbox-cell');
|
|
794
|
-
expect(el.selected).to.deep.equal(['1', '47']);
|
|
795
|
-
expect(rowOne.selected).to.be.true;
|
|
796
|
-
expect(rowOneCheckboxCell.checkbox.checked).to.be.true;
|
|
797
|
-
el.scrollTop = el.scrollHeight;
|
|
798
|
-
await nextFrame();
|
|
799
|
-
await nextFrame();
|
|
287
|
+
expect(rowThreeCheckboxCell.checkbox.checked).to.be.false;
|
|
288
|
+
el.selected = ['row1', 'row3'];
|
|
800
289
|
await elementUpdated(el);
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
expect(unseenRow.selected).to.be.true;
|
|
804
|
-
expect(unseenRowCheckboxCell.checkbox.checked).to.be.true;
|
|
805
|
-
});
|
|
806
|
-
it('ensures that virtualized elements with values in .selected are visually selected when brought into view using scrollToIndex', async () => {
|
|
807
|
-
const virtualItems = makeItemsTwo(50);
|
|
808
|
-
const el = await fixture(html `
|
|
809
|
-
<sp-table
|
|
810
|
-
selects="multiple"
|
|
811
|
-
.selected=${['1', '47']}
|
|
812
|
-
style="height: 120px"
|
|
813
|
-
.items=${virtualItems}
|
|
814
|
-
.renderItem=${renderItem}
|
|
815
|
-
scroller?="true"
|
|
816
|
-
>
|
|
817
|
-
<sp-table-head>
|
|
818
|
-
<sp-table-head-cell sortable sortby="name" sorted="desc">
|
|
819
|
-
Column Title
|
|
820
|
-
</sp-table-head-cell>
|
|
821
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
822
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
823
|
-
</sp-table-head>
|
|
824
|
-
</sp-table>
|
|
825
|
-
`);
|
|
826
|
-
await elementUpdated(el);
|
|
827
|
-
await oneEvent(el, 'rangeChanged');
|
|
828
|
-
await elementUpdated(el);
|
|
829
|
-
const rowOne = el.querySelector('[value="1"]');
|
|
830
|
-
const rowOneCheckboxCell = rowOne.querySelector('sp-table-checkbox-cell');
|
|
831
|
-
expect(el.selected).to.deep.equal(['1', '47']);
|
|
832
|
-
expect(rowOne.selected).to.be.true;
|
|
290
|
+
await elementUpdated(rowThreeCheckboxCell);
|
|
291
|
+
expect(el.selected).to.deep.equal(['row1', 'row3']);
|
|
833
292
|
expect(rowOneCheckboxCell.checkbox.checked).to.be.true;
|
|
834
|
-
|
|
835
|
-
await nextFrame();
|
|
836
|
-
await nextFrame();
|
|
837
|
-
await elementUpdated(el);
|
|
838
|
-
const unseenRow = el.querySelector('[value="47"]');
|
|
839
|
-
const unseenRowCheckboxCell = unseenRow.querySelector('sp-table-checkbox-cell');
|
|
840
|
-
expect(unseenRow.selected).to.be.true;
|
|
841
|
-
expect(unseenRowCheckboxCell.checkbox.checked).to.be.true;
|
|
842
|
-
});
|
|
843
|
-
it('does not set `allSelected` to true by default on Virtualised `<sp-table>`', async () => {
|
|
844
|
-
const virtualItems = makeItemsTwo(50);
|
|
845
|
-
const el = await fixture(html `
|
|
846
|
-
<sp-table
|
|
847
|
-
selects="multiple"
|
|
848
|
-
style="height: 120px"
|
|
849
|
-
.selected=${['1', '47']}
|
|
850
|
-
.items=${virtualItems}
|
|
851
|
-
.renderItem=${renderItem}
|
|
852
|
-
scroller?="true"
|
|
853
|
-
>
|
|
854
|
-
<sp-table-head>
|
|
855
|
-
<sp-table-head-cell sortable sortby="name" sorted="desc">
|
|
856
|
-
Column Title
|
|
857
|
-
</sp-table-head-cell>
|
|
858
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
859
|
-
<sp-table-head-cell>Column Title</sp-table-head-cell>
|
|
860
|
-
</sp-table-head>
|
|
861
|
-
</sp-table>
|
|
862
|
-
`);
|
|
863
|
-
await elementUpdated(el);
|
|
864
|
-
const tableHeadCheckboxCell = el.querySelector('sp-table-head sp-table-checkbox-cell');
|
|
865
|
-
expect(el.selected).to.deep.equal(['1', '47']);
|
|
866
|
-
expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;
|
|
867
|
-
expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.true;
|
|
293
|
+
expect(rowThreeCheckboxCell.checkbox.checked).to.be.true;
|
|
868
294
|
});
|
|
869
295
|
});
|
|
870
296
|
//# sourceMappingURL=table.test.js.map
|