@@ -32,6 +32,7 @@ interface PropTypes {
32
32
row ?: Record < string , unknown > ;
33
33
isSelected ?: boolean ;
34
34
selectedFlatRows : Record < string , unknown > [ ] ;
35
+ selectedRowIds : Record < string | number , boolean > ;
35
36
} >
36
37
) => void ;
37
38
}
@@ -290,14 +291,15 @@ describe('AnalyticalTable', () => {
290
291
filterable
291
292
columns = { columns }
292
293
onRowSelect = { ( e ) => {
293
- const { allRowsSelected, isSelected, row, selectedFlatRows } = e . detail ;
294
+ const { allRowsSelected, isSelected, row, selectedFlatRows, selectedRowIds } = e . detail ;
294
295
setRelevantPayload ( {
295
296
allRowsSelected,
296
297
isSelected,
297
298
row : row . id ,
298
299
selectedFlatRows : selectedFlatRows . map ( ( item ) => ( {
299
300
id : item ?. id
300
- } ) )
301
+ } ) ) ,
302
+ selectedRowIds
301
303
} ) ;
302
304
props . onRowSelect ( e ) ;
303
305
} }
@@ -307,6 +309,7 @@ describe('AnalyticalTable', () => {
307
309
/>
308
310
< div data-testid = "payloadHelper" >
309
311
{ JSON . stringify ( relevantPayload ?. selectedFlatRows ?. filter ( Boolean ) . length ) }
312
+ { JSON . stringify ( relevantPayload ?. selectedRowIds ) }
310
313
</ div >
311
314
</ >
312
315
) ;
@@ -329,12 +332,12 @@ describe('AnalyticalTable', () => {
329
332
cy . get ( '@onRowSelectSpy' ) . should ( 'have.been.calledWithMatch' , {
330
333
detail : { isSelected : true }
331
334
} ) ;
332
- cy . findByTestId ( 'payloadHelper' ) . should ( 'have.text' , '1' ) ;
335
+ cy . findByTestId ( 'payloadHelper' ) . should ( 'have.text' , '1{"0.2":true} ' ) ;
333
336
cy . findByText ( 'Judith Mathews' ) . click ( ) ;
334
337
cy . get ( '@onRowSelectSpy' ) . should ( 'have.been.calledWithMatch' , {
335
338
detail : { isSelected : true }
336
339
} ) ;
337
- cy . findByTestId ( 'payloadHelper' ) . should ( 'have.text' , '2' ) ;
340
+ cy . findByTestId ( 'payloadHelper' ) . should ( 'have.text' , '2{"0.2":true,"0.2.0":true} ' ) ;
338
341
339
342
// global filter + select
340
343
cy . findByTestId ( 'input' ) . typeIntoUi5Input ( 'Katy Bradshaw' ) ;
@@ -345,7 +348,7 @@ describe('AnalyticalTable', () => {
345
348
detail : { isSelected : true }
346
349
} ) ;
347
350
cy . get ( '@onRowSelectSpy' ) . should ( 'have.been.calledThrice' ) ;
348
- cy . findByTestId ( 'payloadHelper' ) . should ( 'have.text' , '3' ) ;
351
+ cy . findByTestId ( 'payloadHelper' ) . should ( 'have.text' , '3{"1":true,"0.2":true,"0.2.0":true} ' ) ;
349
352
350
353
cy . findByTestId ( 'input' ) . typeIntoUi5Input ( '{selectall}{backspace}' ) ;
351
354
@@ -360,14 +363,15 @@ describe('AnalyticalTable', () => {
360
363
detail : { isSelected : true }
361
364
} ) ;
362
365
cy . get ( '@onRowSelectSpy' ) . should ( 'have.callCount' , 4 ) ;
363
- cy . findByTestId ( 'payloadHelper' ) . should ( 'have.text' , '4' ) ;
366
+ cy . findByTestId ( 'payloadHelper' ) . should ( 'have.text' , '4{"0":true,"1":true,"0.2":true,"0.2.0":true} ' ) ;
364
367
} ) ;
365
368
366
369
it ( 'programmatic and user selection' , ( ) => {
367
370
const data = generateMoreData ( 20 ) ;
368
371
const TestComp = ( { onRowSelect } : PropTypes ) => {
369
372
const [ selectedRowIds , setSelectedRowIds ] = useState ( { } ) ;
370
373
const [ selectedFlatRows , setSelectedFlatRows ] = useState ( [ ] ) ;
374
+ const [ selectedRowIdsCb , setSelectedRowIdsCb ] = useState ( { } ) ;
371
375
return (
372
376
< >
373
377
< Button onClick = { ( ) => setSelectedRowIds ( { 2 : true , 3 : false } ) } > Set selected rows</ Button >
@@ -376,12 +380,18 @@ describe('AnalyticalTable', () => {
376
380
columns = { columns }
377
381
onRowSelect = { ( e ) => {
378
382
setSelectedFlatRows ( e . detail . selectedFlatRows . map ( ( item ) => item . id ) ) ;
383
+ setSelectedRowIdsCb ( e . detail . selectedRowIds ) ;
379
384
onRowSelect ( e ) ;
380
385
} }
381
386
selectionMode = { AnalyticalTableSelectionMode . MultiSelect }
382
387
selectedRowIds = { selectedRowIds }
383
388
/>
384
- "event.detail.selectedFlatRows:"< div data-testid = "payload" > { JSON . stringify ( selectedFlatRows ) } </ div >
389
+ < p >
390
+ "event.detail.selectedFlatRows:"< span data-testid = "payload" > { JSON . stringify ( selectedFlatRows ) } </ span >
391
+ </ p >
392
+ < p >
393
+ "e.detail.selectedRowIds:"< span data-testid = "payloadRowsById" > { JSON . stringify ( selectedRowIdsCb ) } </ span >
394
+ </ p >
385
395
</ >
386
396
) ;
387
397
} ;
@@ -393,12 +403,14 @@ describe('AnalyticalTable', () => {
393
403
cy . findByText ( 'Name-5' ) . click ( ) ;
394
404
cy . findByText ( 'Name-5' ) . click ( ) ;
395
405
cy . findByTestId ( 'payload' ) . should ( 'have.text' , '["0","1"]' ) ;
406
+ cy . findByTestId ( 'payloadRowsById' ) . should ( 'have.text' , '{"0":true,"1":true}' ) ;
396
407
cy . get ( '@onRowSelectSpy' ) . should ( 'have.callCount' , 4 ) ;
397
408
398
409
cy . findByText ( 'Set selected rows' ) . click ( ) ;
399
410
cy . get ( '@onRowSelectSpy' ) . should ( 'have.callCount' , 4 ) ;
400
411
cy . findByText ( 'Name-1' ) . click ( ) ;
401
412
cy . findByTestId ( 'payload' ) . should ( 'have.text' , '["1","2"]' ) ;
413
+ cy . findByTestId ( 'payloadRowsById' ) . should ( 'have.text' , '{"1":true,"2":true,"3":false}' ) ;
402
414
} ) ;
403
415
404
416
it ( 'row & header height' , ( ) => {
@@ -451,16 +463,6 @@ describe('AnalyticalTable', () => {
451
463
} ) ;
452
464
453
465
it ( 'GroupBy selection' , ( ) => {
454
- interface PropTypes {
455
- onRowSelect : (
456
- e ?: CustomEvent < {
457
- allRowsSelected : boolean ;
458
- row ?: Record < string , unknown > ;
459
- isSelected ?: boolean ;
460
- selectedFlatRows : Record < string , unknown > [ ] ;
461
- } >
462
- ) => void ;
463
- }
464
466
const GroupBySelectTable = ( props : PropTypes ) => {
465
467
const { onRowSelect } = props ;
466
468
const [ relevantPayload , setRelevantPayload ] = useState < Record < string , any > > ( { } ) ;
@@ -483,14 +485,15 @@ describe('AnalyticalTable', () => {
483
485
columns = { columns }
484
486
tableInstance = { tableInstance }
485
487
onRowSelect = { ( e ) => {
486
- const { allRowsSelected, isSelected, row, selectedFlatRows } = e . detail ;
488
+ const { allRowsSelected, isSelected, row, selectedFlatRows, selectedRowIds } = e . detail ;
487
489
setRelevantPayload ( {
488
490
allRowsSelected,
489
491
isSelected,
490
492
row : row . id ,
491
493
selectedFlatRows : selectedFlatRows . map ( ( item ) => ( {
492
494
id : item ?. id
493
- } ) )
495
+ } ) ) ,
496
+ selectedRowIds
494
497
} ) ;
495
498
onRowSelect ( e ) ;
496
499
} }
@@ -500,6 +503,7 @@ describe('AnalyticalTable', () => {
500
503
< div data-testid = "selectedFlatRowsLength" >
501
504
{ JSON . stringify ( relevantPayload ?. selectedFlatRows ?. filter ( Boolean ) . length ) }
502
505
</ div >
506
+ < div data-testid = "selectedRowIds" > { JSON . stringify ( relevantPayload ?. selectedRowIds ) } </ div >
503
507
< div data-testid = "isSelected" > { `${ relevantPayload . isSelected } ` } </ div >
504
508
</ >
505
509
) ;
@@ -510,6 +514,7 @@ describe('AnalyticalTable', () => {
510
514
cy . findByText ( 'QWE' ) . click ( ) ;
511
515
cy . get ( '@onRowSelectSpy' ) . should ( 'have.callCount' , 1 ) ;
512
516
cy . findByTestId ( 'selectedFlatRowsLength' ) . should ( 'have.text' , '1' ) ;
517
+ cy . findByTestId ( 'selectedRowIds' ) . should ( 'have.text' , '{"2":true}' ) ;
513
518
cy . findByTestId ( 'isSelected' ) . should ( 'have.text' , 'true' ) ;
514
519
515
520
cy . findByText ( 'Friend Name' ) . click ( ) ;
@@ -519,11 +524,13 @@ describe('AnalyticalTable', () => {
519
524
cy . findByText ( '25' ) . click ( ) ;
520
525
cy . get ( '@onRowSelectSpy' ) . should ( 'have.callCount' , 2 ) ;
521
526
cy . findByTestId ( 'selectedFlatRowsLength' ) . should ( 'have.text' , '2' ) ;
527
+ cy . findByTestId ( 'selectedRowIds' ) . should ( 'have.text' , '{"2":true,"4":true}' ) ;
522
528
cy . findByTestId ( 'isSelected' ) . should ( 'have.text' , 'true' ) ;
523
529
524
530
cy . findByText ( '25' ) . click ( ) ;
525
531
cy . get ( '@onRowSelectSpy' ) . should ( 'have.callCount' , 3 ) ;
526
532
cy . findByTestId ( 'selectedFlatRowsLength' ) . should ( 'have.text' , '1' ) ;
533
+ cy . findByTestId ( 'selectedRowIds' ) . should ( 'have.text' , '{"2":true}' ) ;
527
534
cy . findByTestId ( 'isSelected' ) . should ( 'have.text' , 'false' ) ;
528
535
} ) ;
529
536
@@ -1791,6 +1798,62 @@ describe('AnalyticalTable', () => {
1791
1798
cy . get ( '[data-column-index="2"][data-row-index="3"]' ) . children ( ) . should ( 'have.text' , 'Y' ) ;
1792
1799
} ) ;
1793
1800
1801
+ it ( 'select-all' , ( ) => {
1802
+ const select = cy . spy ( ) . as ( 'selectSpy' ) ;
1803
+ const TestComp = ( ) => {
1804
+ const [ stringifiedPl , setStringifiedPl ] = useState ( '' ) ;
1805
+ const handleSelect = ( e ) => {
1806
+ const { allRowsSelected, selectedFlatRows, selectedRowIds } = e . detail ;
1807
+ setStringifiedPl (
1808
+ JSON . stringify ( {
1809
+ selectedRowIds,
1810
+ selectedFlatRows : selectedFlatRows . map ( ( item ) => ( {
1811
+ id : item ?. id
1812
+ } ) ) ,
1813
+ allRowsSelected
1814
+ } )
1815
+ ) ;
1816
+ select ( e ) ;
1817
+ } ;
1818
+ return (
1819
+ < >
1820
+ < AnalyticalTable
1821
+ columns = { columns }
1822
+ data = { data }
1823
+ selectionMode = { AnalyticalTableSelectionMode . MultiSelect }
1824
+ onRowSelect = { handleSelect }
1825
+ />
1826
+ < span data-testid = "payload" > { stringifiedPl } </ span >
1827
+ </ >
1828
+ ) ;
1829
+ } ;
1830
+ cy . mount ( < TestComp /> ) ;
1831
+ cy . get ( '[data-visible-column-index="0"][data-visible-row-index="0"]' ) . click ( ) ;
1832
+ cy . get ( '@selectSpy' ) . should ( 'have.been.calledOnce' ) ;
1833
+ cy . findByTestId ( 'payload' ) . should (
1834
+ 'have.text' ,
1835
+ '{"selectedRowIds":{"0":true,"1":true,"2":true,"3":true},"selectedFlatRows":[{"id":"0"},{"id":"1"},{"id":"2"},{"id":"3"}],"allRowsSelected":true}'
1836
+ ) ;
1837
+ cy . findByText ( 'X' ) . click ( ) ;
1838
+ cy . get ( '@selectSpy' ) . should ( 'have.been.calledTwice' ) ;
1839
+ cy . findByTestId ( 'payload' ) . should (
1840
+ 'have.text' ,
1841
+ '{"selectedRowIds":{"0":true,"1":true,"3":true},"selectedFlatRows":[{"id":"0"},{"id":"1"},{"id":"3"}],"allRowsSelected":false}'
1842
+ ) ;
1843
+ cy . get ( '[data-visible-column-index="0"][data-visible-row-index="0"]' ) . click ( ) ;
1844
+ cy . get ( '@selectSpy' ) . should ( 'have.been.calledThrice' ) ;
1845
+ cy . findByTestId ( 'payload' ) . should (
1846
+ 'have.text' ,
1847
+ '{"selectedRowIds":{"0":true,"1":true,"2":true,"3":true},"selectedFlatRows":[{"id":"0"},{"id":"1"},{"id":"2"},{"id":"3"}],"allRowsSelected":true}'
1848
+ ) ;
1849
+ cy . get ( '[data-visible-column-index="0"][data-visible-row-index="0"]' ) . click ( ) ;
1850
+ cy . get ( '@selectSpy' ) . should ( 'have.callCount' , 4 ) ;
1851
+ cy . findByTestId ( 'payload' ) . should (
1852
+ 'have.text' ,
1853
+ '{"selectedRowIds":{},"selectedFlatRows":[],"allRowsSelected":false}'
1854
+ ) ;
1855
+ } ) ;
1856
+
1794
1857
cypressPassThroughTestsFactory ( AnalyticalTable , { data, columns } ) ;
1795
1858
} ) ;
1796
1859
0 commit comments