@@ -14,6 +14,7 @@ const DESSERT_HEADERS = [
14
14
{ title : 'Carbs (g)' , key : 'carbs' } ,
15
15
{ title : 'Protein (g)' , key : 'protein' } ,
16
16
{ title : 'Iron (%)' , key : 'iron' } ,
17
+ { title : 'Group' , key : 'group' } ,
17
18
]
18
19
19
20
const DESSERT_ITEMS = [
@@ -24,6 +25,7 @@ const DESSERT_ITEMS = [
24
25
carbs : 24 ,
25
26
protein : 4.0 ,
26
27
iron : '1%' ,
28
+ group : 1 ,
27
29
} ,
28
30
{
29
31
name : 'Ice cream sandwich' ,
@@ -32,6 +34,7 @@ const DESSERT_ITEMS = [
32
34
carbs : 37 ,
33
35
protein : 4.3 ,
34
36
iron : '1%' ,
37
+ group : 3 ,
35
38
} ,
36
39
{
37
40
name : 'Eclair' ,
@@ -40,6 +43,7 @@ const DESSERT_ITEMS = [
40
43
carbs : 23 ,
41
44
protein : 6.0 ,
42
45
iron : '7%' ,
46
+ group : 2 ,
43
47
} ,
44
48
{
45
49
name : 'Cupcake' ,
@@ -48,6 +52,7 @@ const DESSERT_ITEMS = [
48
52
carbs : 67 ,
49
53
protein : 4.3 ,
50
54
iron : '8%' ,
55
+ group : 2 ,
51
56
} ,
52
57
{
53
58
name : 'Gingerbread' ,
@@ -56,6 +61,7 @@ const DESSERT_ITEMS = [
56
61
carbs : 49 ,
57
62
protein : 3.9 ,
58
63
iron : '16%' ,
64
+ group : 3 ,
59
65
} ,
60
66
{
61
67
name : 'Jelly bean' ,
@@ -64,6 +70,7 @@ const DESSERT_ITEMS = [
64
70
carbs : 94 ,
65
71
protein : 0.0 ,
66
72
iron : '0%' ,
73
+ group : 1 ,
67
74
} ,
68
75
{
69
76
name : 'Lollipop' ,
@@ -72,6 +79,7 @@ const DESSERT_ITEMS = [
72
79
carbs : 98 ,
73
80
protein : 0 ,
74
81
iron : '2%' ,
82
+ group : 2 ,
75
83
} ,
76
84
{
77
85
name : 'Honeycomb' ,
@@ -80,6 +88,7 @@ const DESSERT_ITEMS = [
80
88
carbs : 87 ,
81
89
protein : 6.5 ,
82
90
iron : '45%' ,
91
+ group : 3 ,
83
92
} ,
84
93
{
85
94
name : 'Donut' ,
@@ -88,6 +97,7 @@ const DESSERT_ITEMS = [
88
97
carbs : 51 ,
89
98
protein : 4.9 ,
90
99
iron : '22%' ,
100
+ group : 3 ,
91
101
} ,
92
102
{
93
103
name : 'KitKat' ,
@@ -96,6 +106,7 @@ const DESSERT_ITEMS = [
96
106
carbs : 65 ,
97
107
protein : 7 ,
98
108
iron : '6%' ,
109
+ group : 1 ,
99
110
} ,
100
111
]
101
112
@@ -356,4 +367,92 @@ describe('VDataTable', () => {
356
367
cy . get ( '.v-data-table' ) . find ( 'h3' ) . should ( 'exist' )
357
368
} )
358
369
} )
370
+
371
+ describe ( 'sort' , ( ) => {
372
+ it ( 'should sort by sortBy' , ( ) => {
373
+ cy . mount ( ( ) => (
374
+ < Application >
375
+ < VDataTable
376
+ items = { DESSERT_ITEMS }
377
+ headers = { DESSERT_HEADERS }
378
+ itemsPerPage = { 10 }
379
+ sortBy = { [ { key : 'fat' , order : 'asc' } ] }
380
+ />
381
+ </ Application >
382
+ ) )
383
+ cy . get ( 'thead .v-data-table__td' ) . eq ( 2 ) . should ( 'have.class' , 'v-data-table__th--sorted' )
384
+ . get ( 'tbody td:nth-child(3)' ) . then ( rows => {
385
+ const actualFat = Array . from ( rows ) . map ( row => {
386
+ return Number ( row . textContent )
387
+ } )
388
+ const expectedFat = DESSERT_ITEMS . map ( d => d . fat ) . sort ( ( a , b ) => a - b )
389
+ expect ( actualFat ) . to . deep . equal ( expectedFat )
390
+ } )
391
+ cy . get ( 'thead .v-data-table__td' ) . eq ( 2 ) . click ( )
392
+ . get ( 'thead .v-data-table__td' ) . eq ( 2 ) . should ( 'have.class' , 'v-data-table__th--sorted' )
393
+ . get ( 'tbody td:nth-child(3)' ) . then ( rows => {
394
+ const actualFat = Array . from ( rows ) . map ( row => {
395
+ return Number ( row . textContent )
396
+ } )
397
+ const expectedFat = DESSERT_ITEMS . map ( d => d . fat ) . sort ( ( a , b ) => b - a )
398
+ expect ( actualFat ) . to . deep . equal ( expectedFat )
399
+ } )
400
+ } )
401
+
402
+ it ( 'should sort by groupBy and sortBy' , ( ) => {
403
+ cy . mount ( ( ) => (
404
+ < Application >
405
+ < VDataTable
406
+ items = { DESSERT_ITEMS }
407
+ headers = { DESSERT_HEADERS }
408
+ itemsPerPage = { 10 }
409
+ groupBy = { [ { key : 'group' , order : 'desc' } ] }
410
+ sortBy = { [ { key : 'calories' , order : 'desc' } ] }
411
+ />
412
+ </ Application >
413
+ ) ) . get ( 'tr.v-data-table-group-header-row .v-data-table__td button + span' ) . then ( rows => {
414
+ const actualGroup = Array . from ( rows ) . map ( row => {
415
+ return Number ( row . textContent )
416
+ } )
417
+ const expectedGroup = [ ...new Set ( DESSERT_ITEMS . map ( d => d . group ) ) ] . sort ( ( a , b ) => b - a )
418
+ expect ( actualGroup ) . to . deep . equal ( expectedGroup )
419
+ } ) . get ( '.v-data-table-group-header-row button' ) . eq ( 0 ) . click ( )
420
+ . get ( '.v-data-table__tr td:nth-child(3)' ) . then ( rows => {
421
+ const actualCalories = Array . from ( rows ) . map ( row => {
422
+ return Number ( row . textContent )
423
+ } )
424
+ const expectedCalories = DESSERT_ITEMS . filter ( d => d . group === 3 ) . map ( d => d . calories ) . sort ( ( a , b ) => b - a )
425
+ expect ( actualCalories ) . to . deep . equal ( expectedCalories )
426
+ } )
427
+ } )
428
+
429
+ // https://github.com/vuetifyjs/vuetify/issues/20046
430
+ it ( 'should sort by groupBy while sort is disabled' , ( ) => {
431
+ cy . mount ( ( ) => (
432
+ < Application >
433
+ < VDataTable
434
+ items = { DESSERT_ITEMS }
435
+ headers = { DESSERT_HEADERS }
436
+ itemsPerPage = { 10 }
437
+ groupBy = { [ { key : 'group' , order : 'desc' } ] }
438
+ sortBy = { [ { key : 'calories' , order : 'desc' } ] }
439
+ disableSort
440
+ />
441
+ </ Application >
442
+ ) ) . get ( 'tr.v-data-table-group-header-row .v-data-table__td button + span' ) . then ( rows => {
443
+ const actualGroup = Array . from ( rows ) . map ( row => {
444
+ return Number ( row . textContent )
445
+ } )
446
+ const expectedGroup = [ ...new Set ( DESSERT_ITEMS . map ( d => d . group ) ) ] . sort ( ( a , b ) => b - a )
447
+ expect ( actualGroup ) . to . deep . equal ( expectedGroup )
448
+ } ) . get ( '.v-data-table-group-header-row button' ) . eq ( 0 ) . click ( )
449
+ . get ( '.v-data-table__tr td:nth-child(3)' ) . then ( rows => {
450
+ const actualCalories = Array . from ( rows ) . map ( row => {
451
+ return Number ( row . textContent )
452
+ } )
453
+ const expectedCalories = DESSERT_ITEMS . filter ( d => d . group === 3 ) . map ( d => d . calories )
454
+ expect ( actualCalories ) . to . deep . equal ( expectedCalories )
455
+ } )
456
+ } )
457
+ } )
359
458
} )
0 commit comments