@@ -1020,6 +1020,7 @@ describe('igxCombo', () => {
1020
1020
newSelection : [ targetItem . itemID ] ,
1021
1021
added : [ targetItem . itemID ] ,
1022
1022
removed : [ ] ,
1023
+ displayText : `${ targetItem . value [ combo . displayKey ] } ` ,
1023
1024
event : undefined ,
1024
1025
cancel : false
1025
1026
} ) ;
@@ -1034,6 +1035,7 @@ describe('igxCombo', () => {
1034
1035
newSelection : [ ] ,
1035
1036
added : [ ] ,
1036
1037
removed : [ targetItem . itemID ] ,
1038
+ displayText : '' ,
1037
1039
event : undefined ,
1038
1040
cancel : false
1039
1041
} ) ;
@@ -1044,58 +1046,66 @@ describe('igxCombo', () => {
1044
1046
const combo = fix . componentInstance . combo ;
1045
1047
spyOn ( combo . onSelectionChange , 'emit' ) ;
1046
1048
let oldSelection = [ ] ;
1049
+ /**
1050
+ * The test component has a defined `valueKey` property.
1051
+ * `selectItems` method should be called with the items' corresponding valueKeys
1052
+ */
1047
1053
let newSelection = [ combo . data [ 1 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ;
1054
+ let newSelectionKeys = newSelection . map ( entry => entry [ combo . valueKey ] ) ;
1048
1055
1049
1056
combo . toggle ( ) ;
1050
1057
tick ( ) ;
1051
1058
fix . detectChanges ( ) ;
1052
- combo . selectItems ( newSelection ) ;
1059
+ combo . selectItems ( newSelectionKeys ) ;
1053
1060
fix . detectChanges ( ) ;
1054
1061
expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelection . length ) ;
1055
1062
expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 1 ) ;
1056
1063
expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
1057
1064
oldSelection : oldSelection ,
1058
- newSelection : newSelection ,
1059
- added : [ combo . data [ 1 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ,
1065
+ newSelection : newSelectionKeys ,
1066
+ added : newSelectionKeys ,
1060
1067
removed : [ ] ,
1068
+ displayText : newSelection . map ( entry => entry [ combo . valueKey ] ) . join ( ', ' ) ,
1061
1069
event : undefined ,
1062
1070
cancel : false
1063
1071
} ) ;
1064
1072
1065
1073
let newItem = combo . data [ 3 ] ;
1066
- combo . selectItems ( [ newItem ] ) ;
1067
- oldSelection = [ ...newSelection ] ;
1068
- newSelection . push ( newItem ) ;
1074
+ combo . selectItems ( [ newItem [ combo . valueKey ] ] ) ;
1075
+ oldSelection = [ ...newSelectionKeys ] ;
1076
+ newSelectionKeys . push ( newItem [ combo . valueKey ] ) ;
1069
1077
fix . detectChanges ( ) ;
1070
- expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelection . length ) ;
1078
+ expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelectionKeys . length ) ;
1071
1079
expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 2 ) ;
1072
1080
expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
1073
1081
oldSelection : oldSelection ,
1074
- newSelection : newSelection ,
1082
+ newSelection : newSelectionKeys ,
1075
1083
removed : [ ] ,
1076
- added : [ combo . data [ 3 ] ] ,
1084
+ added : [ newItem [ combo . valueKey ] ] ,
1085
+ displayText : newSelectionKeys . join ( ', ' ) ,
1077
1086
event : undefined ,
1078
1087
cancel : false
1079
1088
} ) ;
1080
1089
1081
- oldSelection = [ ...newSelection ] ;
1082
- newSelection = [ combo . data [ 0 ] ] ;
1083
- combo . selectItems ( newSelection , true ) ;
1090
+ oldSelection = [ ...newSelectionKeys ] ;
1091
+ newSelectionKeys = [ combo . data [ 0 ] [ combo . valueKey ] ] ;
1092
+ combo . selectItems ( newSelectionKeys , true ) ;
1084
1093
fix . detectChanges ( ) ;
1085
- expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelection . length ) ;
1094
+ expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelectionKeys . length ) ;
1086
1095
expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 3 ) ;
1087
1096
expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
1088
1097
oldSelection : oldSelection ,
1089
- newSelection : newSelection ,
1098
+ newSelection : newSelectionKeys ,
1090
1099
removed : oldSelection ,
1091
- added : [ combo . data [ 0 ] ] ,
1100
+ added : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
1101
+ displayText : combo . data [ 0 ] [ combo . valueKey ] ,
1092
1102
event : undefined ,
1093
1103
cancel : false
1094
1104
} ) ;
1095
1105
1096
- oldSelection = [ ...newSelection ] ;
1106
+ oldSelection = [ ...newSelectionKeys ] ;
1097
1107
newSelection = [ ] ;
1098
- newItem = combo . data [ 0 ] ;
1108
+ newItem = combo . data [ 0 ] [ combo . valueKey ] ;
1099
1109
combo . deselectItems ( [ newItem ] ) ;
1100
1110
fix . detectChanges ( ) ;
1101
1111
expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelection . length ) ;
@@ -1104,7 +1114,8 @@ describe('igxCombo', () => {
1104
1114
expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
1105
1115
oldSelection : oldSelection ,
1106
1116
newSelection : newSelection ,
1107
- removed : [ combo . data [ 0 ] ] ,
1117
+ removed : [ newItem ] ,
1118
+ displayText : `` ,
1108
1119
added : [ ] ,
1109
1120
event : undefined ,
1110
1121
cancel : false
@@ -1422,11 +1433,12 @@ describe('igxCombo', () => {
1422
1433
const dropdown = combo . dropdown ;
1423
1434
let timesFired = 1 ;
1424
1435
const mockEvent = new MouseEvent ( 'click' ) ;
1425
- const eventParams = {
1436
+ const eventParams : IComboSelectionChangeEventArgs = {
1426
1437
oldSelection : [ ] ,
1427
1438
newSelection : [ ] ,
1428
1439
added : [ ] ,
1429
1440
removed : [ ] ,
1441
+ displayText : '' ,
1430
1442
event : mockEvent ,
1431
1443
cancel : false
1432
1444
} ;
@@ -1446,12 +1458,14 @@ describe('igxCombo', () => {
1446
1458
1447
1459
eventParams . newSelection = [ dropdown . items [ 3 ] . value ] ;
1448
1460
eventParams . added = [ dropdown . items [ 3 ] . value ] ;
1461
+ eventParams . displayText = dropdown . items [ 3 ] . value ;
1449
1462
verifyOnSelectionChangeEventIsFired ( 3 ) ;
1450
1463
timesFired ++ ;
1451
1464
1452
1465
eventParams . oldSelection = [ dropdown . items [ 3 ] . value ] ;
1453
1466
eventParams . newSelection = [ dropdown . items [ 3 ] . value , dropdown . items [ 7 ] . value ] ;
1454
1467
eventParams . added = [ dropdown . items [ 7 ] . value ] ;
1468
+ eventParams . displayText = `${ dropdown . items [ 3 ] . value } , ${ dropdown . items [ 7 ] . value } ` ;
1455
1469
verifyOnSelectionChangeEventIsFired ( 7 ) ;
1456
1470
timesFired ++ ;
1457
1471
@@ -1460,6 +1474,7 @@ describe('igxCombo', () => {
1460
1474
eventParams . newSelection = [ dropdown . items [ 3 ] . value ] ;
1461
1475
eventParams . added = [ ] ;
1462
1476
eventParams . removed = [ dropdown . items [ 7 ] . value ] ;
1477
+ eventParams . displayText = dropdown . items [ 3 ] . value ;
1463
1478
verifyOnSelectionChangeEventIsFired ( 7 ) ;
1464
1479
} ) ) ;
1465
1480
it ( 'Should be able to select item when in grouped state' , fakeAsync ( ( ) => {
@@ -1593,56 +1608,67 @@ describe('igxCombo', () => {
1593
1608
fixture . detectChanges ( ) ;
1594
1609
const combo = fixture . componentInstance . combo ;
1595
1610
const selectionSpy = spyOn ( fixture . componentInstance , 'onSelectionChange' ) ;
1596
- const expectedResults = {
1597
- newSelection : [ combo . data [ 0 ] ] ,
1611
+ const expectedResults : IComboSelectionChangeEventArgs = {
1612
+ newSelection : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
1598
1613
oldSelection : [ ] ,
1599
- added : [ combo . data [ 0 ] ] ,
1614
+ added : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
1600
1615
removed : [ ] ,
1601
1616
event : undefined ,
1617
+ displayText : `${ combo . data [ 0 ] [ combo . displayKey ] } ` ,
1602
1618
cancel : false
1603
1619
} ;
1604
- combo . selectItems ( [ combo . data [ 0 ] ] ) ;
1620
+ combo . selectItems ( [ combo . data [ 0 ] [ combo . valueKey ] ] ) ;
1605
1621
expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
1606
1622
Object . assign ( expectedResults , {
1607
1623
newSelection : [ ] ,
1608
- oldSelection : [ combo . data [ 0 ] ] ,
1624
+ oldSelection : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
1609
1625
added : [ ] ,
1610
- removed : [ combo . data [ 0 ] ]
1626
+ displayText : '' ,
1627
+ removed : [ combo . data [ 0 ] [ combo . valueKey ] ]
1611
1628
} ) ;
1612
- combo . deselectItems ( [ combo . data [ 0 ] ] ) ;
1629
+ combo . deselectItems ( [ combo . data [ 0 ] [ combo . valueKey ] ] ) ;
1613
1630
expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
1614
1631
} ) ;
1615
1632
1616
1633
it ( 'Should properly emit added and removed values in change event - multiple values' , ( ) => {
1617
1634
const fixture = TestBed . createComponent ( IgxComboSampleComponent ) ;
1618
1635
fixture . detectChanges ( ) ;
1619
1636
const combo = fixture . componentInstance . combo ;
1637
+ let oldSelection = [ ] ;
1638
+ let newSelection = [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ;
1620
1639
const selectionSpy = spyOn ( fixture . componentInstance , 'onSelectionChange' ) ;
1621
- const expectedResults = {
1622
- newSelection : [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ,
1623
- oldSelection : [ ] ,
1624
- added : [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ,
1640
+ const expectedResults : IComboSelectionChangeEventArgs = {
1641
+ newSelection : newSelection . map ( e => e [ combo . valueKey ] ) ,
1642
+ oldSelection,
1643
+ added : newSelection . map ( e => e [ combo . valueKey ] ) ,
1625
1644
removed : [ ] ,
1626
1645
event : undefined ,
1646
+ displayText : `${ newSelection . map ( entry => entry [ combo . displayKey ] ) . join ( ', ' ) } ` ,
1627
1647
cancel : false
1628
1648
} ;
1629
- combo . selectItems ( [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ) ;
1649
+ combo . selectItems ( newSelection . map ( e => e [ combo . valueKey ] ) ) ;
1630
1650
expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
1631
- combo . deselectItems ( [ combo . data [ 0 ] ] ) ;
1651
+ oldSelection = [ ...newSelection ] . map ( e => e [ combo . valueKey ] ) ;
1652
+ newSelection = [ combo . data [ 1 ] , combo . data [ 2 ] ] ;
1653
+ combo . deselectItems ( [ combo . data [ 0 ] [ combo . valueKey ] ] ) ;
1632
1654
Object . assign ( expectedResults , {
1633
- newSelection : [ combo . data [ 1 ] , combo . data [ 2 ] ] ,
1634
- oldSelection : [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ,
1655
+ newSelection : newSelection . map ( e => e [ combo . valueKey ] ) ,
1656
+ oldSelection,
1635
1657
added : [ ] ,
1636
- removed : [ combo . data [ 0 ] ]
1658
+ displayText : newSelection . map ( e => e [ combo . displayKey ] ) . join ( ', ' ) ,
1659
+ removed : [ combo . data [ 0 ] [ combo . valueKey ] ]
1637
1660
} ) ;
1661
+ oldSelection = [ ...newSelection ] . map ( e => e [ combo . valueKey ] ) ;
1662
+ newSelection = [ combo . data [ 4 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ;
1638
1663
expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
1639
1664
Object . assign ( expectedResults , {
1640
- newSelection : [ combo . data [ 4 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ,
1641
- oldSelection : [ combo . data [ 1 ] , combo . data [ 2 ] ] ,
1642
- added : [ combo . data [ 4 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ,
1643
- removed : [ combo . data [ 1 ] , combo . data [ 2 ] ]
1665
+ newSelection : newSelection . map ( e => e [ combo . valueKey ] ) ,
1666
+ oldSelection,
1667
+ added : newSelection . map ( e => e [ combo . valueKey ] ) ,
1668
+ displayText : newSelection . map ( e => e [ combo . displayKey ] ) . join ( ', ' ) ,
1669
+ removed : oldSelection
1644
1670
} ) ;
1645
- combo . selectItems ( [ combo . data [ 4 ] , combo . data [ 5 ] , combo . data [ 6 ] ] , true ) ;
1671
+ combo . selectItems ( newSelection . map ( e => e [ combo . valueKey ] ) , true ) ;
1646
1672
expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
1647
1673
} ) ;
1648
1674
} ) ;
@@ -3432,7 +3458,12 @@ class IgxComboScrollTestComponent {
3432
3458
`
3433
3459
} )
3434
3460
class IgxComboSampleComponent {
3435
-
3461
+ /**
3462
+ * TODO
3463
+ * Test that use this component should properly call `selectItems` method
3464
+ * IF a `valueKey` is defined, calls should be w/ the items' valueKey property value
3465
+ * IF no `valueKey` is defined, calls should be w/ object references to the items
3466
+ */
3436
3467
@ViewChild ( 'combo' , { read : IgxComboComponent , static : true } )
3437
3468
public combo : IgxComboComponent ;
3438
3469
0 commit comments