@@ -19,6 +19,7 @@ import { DisplayDensity } from '../core/density';
1919import { AbsoluteScrollStrategy , ConnectedPositioningStrategy } from '../services/public_api' ;
2020import { IgxSelectionAPIService } from '../core/selection' ;
2121import { IgxIconService } from '../icon/public_api' ;
22+ import { IBaseCancelableBrowserEventArgs } from '../core/utils' ;
2223
2324const CSS_CLASS_COMBO = 'igx-combo' ;
2425const CSS_CLASS_COMBO_DROPDOWN = 'igx-combo__drop-down' ;
@@ -282,6 +283,45 @@ describe('igxCombo', () => {
282283 combo . selectItems ( [ ] , true ) ;
283284 expect ( combo . selectedItems ( ) ) . toEqual ( [ ] ) ;
284285 } ) ;
286+ it ( 'should emit owner on `onOpening` and `onClosing`' , ( ) => {
287+ combo = new IgxComboComponent ( elementRef , mockCdr , mockSelection as any , mockComboService ,
288+ mockIconService , null , null , mockInjector ) ;
289+ spyOn ( mockIconService , 'addSvgIconFromText' ) . and . returnValue ( null ) ;
290+ combo . ngOnInit ( ) ;
291+ spyOn ( combo . onOpening , 'emit' ) . and . callThrough ( ) ;
292+ spyOn ( combo . onClosing , 'emit' ) . and . callThrough ( ) ;
293+ const mockObj = { } ;
294+ const inputEvent : IBaseCancelableBrowserEventArgs = {
295+ cancel : false ,
296+ owner : mockObj ,
297+ } ;
298+ combo . comboInput = < any > {
299+ nativeElement : {
300+ focus : ( ) => { }
301+ }
302+ } ;
303+ combo . handleOpening ( inputEvent ) ;
304+ const expectedCall : IBaseCancelableBrowserEventArgs = Object . assign ( { } , inputEvent , { owner : combo } ) ;
305+ expect ( combo . onOpening . emit ) . toHaveBeenCalledWith ( expectedCall ) ;
306+ expect ( inputEvent . owner ) . toEqual ( mockObj ) ;
307+ combo . handleClosing ( inputEvent ) ;
308+ expect ( combo . onClosing . emit ) . toHaveBeenCalledWith ( expectedCall ) ;
309+ expect ( inputEvent . owner ) . toEqual ( mockObj ) ;
310+ let sub = combo . onOpening . subscribe ( ( e : IBaseCancelableBrowserEventArgs ) => {
311+ e . cancel = true ;
312+ } ) ;
313+ combo . handleOpening ( inputEvent ) ;
314+ expect ( inputEvent . cancel ) . toEqual ( true ) ;
315+ sub . unsubscribe ( ) ;
316+ inputEvent . cancel = false ;
317+
318+ sub = combo . onClosing . subscribe ( ( e : IBaseCancelableBrowserEventArgs ) => {
319+ e . cancel = true ;
320+ } ) ;
321+ combo . handleClosing ( inputEvent ) ;
322+ expect ( inputEvent . cancel ) . toEqual ( true ) ;
323+ sub . unsubscribe ( ) ;
324+ } ) ;
285325 it ( 'should fire onSelectionChange event on item selection' , ( ) => {
286326 const selectionService = new IgxSelectionAPIService ( ) ;
287327 combo = new IgxComboComponent ( elementRef , mockCdr , selectionService , mockComboService ,
@@ -299,12 +339,13 @@ describe('igxCombo', () => {
299339
300340 combo . selectItems ( newSelection ) ;
301341 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 1 ) ;
302- expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
342+ expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( < IComboSelectionChangeEventArgs > {
303343 oldSelection : oldSelection ,
304344 newSelection : newSelection ,
305345 added : newSelection ,
306346 removed : [ ] ,
307347 event : undefined ,
348+ owner : combo ,
308349 displayText : `${ newSelection . join ( ', ' ) } ` ,
309350 cancel : false
310351 } ) ;
@@ -314,12 +355,13 @@ describe('igxCombo', () => {
314355 oldSelection = [ ...newSelection ] ;
315356 newSelection . push ( newItem ) ;
316357 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 2 ) ;
317- expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
358+ expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( < IComboSelectionChangeEventArgs > {
318359 oldSelection : oldSelection ,
319360 newSelection : newSelection ,
320361 removed : [ ] ,
321362 added : [ combo . data [ 3 ] ] ,
322363 event : undefined ,
364+ owner : combo ,
323365 displayText : `${ newSelection . join ( ', ' ) } ` ,
324366 cancel : false
325367 } ) ;
@@ -328,12 +370,13 @@ describe('igxCombo', () => {
328370 newSelection = [ combo . data [ 0 ] ] ;
329371 combo . selectItems ( newSelection , true ) ;
330372 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 3 ) ;
331- expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
373+ expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( < IComboSelectionChangeEventArgs > {
332374 oldSelection : oldSelection ,
333375 newSelection : newSelection ,
334376 removed : oldSelection ,
335377 added : newSelection ,
336378 event : undefined ,
379+ owner : combo ,
337380 displayText : `${ newSelection . join ( ', ' ) } ` ,
338381 cancel : false
339382 } ) ;
@@ -344,12 +387,13 @@ describe('igxCombo', () => {
344387 combo . deselectItems ( [ newItem ] ) ;
345388 expect ( combo . selectedItems ( ) . length ) . toEqual ( 0 ) ;
346389 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 4 ) ;
347- expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
390+ expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( < IComboSelectionChangeEventArgs > {
348391 oldSelection : oldSelection ,
349392 newSelection : newSelection ,
350393 removed : [ combo . data [ 0 ] ] ,
351394 added : [ ] ,
352395 event : undefined ,
396+ owner : combo ,
353397 displayText : `${ newSelection . join ( ', ' ) } ` ,
354398 cancel : false
355399 } ) ;
@@ -372,6 +416,7 @@ describe('igxCombo', () => {
372416 added : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
373417 removed : [ ] ,
374418 event : undefined ,
419+ owner : combo ,
375420 displayText : `${ combo . data [ 0 ] [ combo . displayKey ] } ` ,
376421 cancel : false
377422 } ;
@@ -408,6 +453,7 @@ describe('igxCombo', () => {
408453 added : newSelection . map ( e => e [ combo . valueKey ] ) ,
409454 removed : [ ] ,
410455 event : undefined ,
456+ owner : combo ,
411457 displayText : `${ newSelection . map ( entry => entry [ combo . displayKey ] ) . join ( ', ' ) } ` ,
412458 cancel : false
413459 } ;
@@ -472,11 +518,12 @@ describe('igxCombo', () => {
472518 combo . selectAllItems ( true ) ;
473519 expect ( combo . selectedItems ( ) ) . toEqual ( data ) ;
474520 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 1 ) ;
475- expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
521+ expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( < IComboSelectionChangeEventArgs > {
476522 oldSelection : [ ] ,
477523 newSelection : data ,
478524 added : data ,
479525 removed : [ ] ,
526+ owner : combo ,
480527 event : undefined ,
481528 displayText : `${ combo . data . join ( ', ' ) } ` ,
482529 cancel : false
@@ -485,11 +532,12 @@ describe('igxCombo', () => {
485532 combo . deselectAllItems ( true ) ;
486533 expect ( combo . selectedItems ( ) ) . toEqual ( [ ] ) ;
487534 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 2 ) ;
488- expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
535+ expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( < IComboSelectionChangeEventArgs > {
489536 oldSelection : data ,
490537 newSelection : [ ] ,
491538 added : [ ] ,
492539 removed : data ,
540+ owner : combo ,
493541 event : undefined ,
494542 displayText : '' ,
495543 cancel : false
@@ -1879,12 +1927,13 @@ describe('igxCombo', () => {
18791927 expect ( selectedItem_1 . element . nativeElement . classList . contains ( CSS_CLASS_SELECTED ) ) . toBeTruthy ( ) ;
18801928 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 1 ) ;
18811929 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith (
1882- {
1930+ < IComboSelectionChangeEventArgs > {
18831931 newSelection : [ selectedItem_1 . value [ combo . valueKey ] ] ,
18841932 oldSelection : [ ] ,
18851933 added : [ selectedItem_1 . value [ combo . valueKey ] ] ,
18861934 removed : [ ] ,
18871935 event : UIInteractions . getMouseEvent ( 'click' ) ,
1936+ owner : combo ,
18881937 displayText : selectedItem_1 . value [ combo . valueKey ] ,
18891938 cancel : false
18901939 } ) ;
@@ -1896,12 +1945,13 @@ describe('igxCombo', () => {
18961945 expect ( selectedItem_2 . element . nativeElement . classList . contains ( CSS_CLASS_SELECTED ) ) . toBeTruthy ( ) ;
18971946 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 2 ) ;
18981947 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith (
1899- {
1948+ < IComboSelectionChangeEventArgs > {
19001949 newSelection : [ selectedItem_1 . value [ combo . valueKey ] , selectedItem_2 . value [ combo . valueKey ] ] ,
19011950 oldSelection : [ selectedItem_1 . value [ combo . valueKey ] ] ,
19021951 added : [ selectedItem_2 . value [ combo . valueKey ] ] ,
19031952 removed : [ ] ,
19041953 event : UIInteractions . getMouseEvent ( 'click' ) ,
1954+ owner : combo ,
19051955 displayText : selectedItem_1 . value [ combo . valueKey ] + ', ' + selectedItem_2 . value [ combo . valueKey ] ,
19061956 cancel : false
19071957 } ) ;
@@ -1914,12 +1964,13 @@ describe('igxCombo', () => {
19141964 expect ( unselectedItem . element . nativeElement . classList . contains ( CSS_CLASS_SELECTED ) ) . toBeFalsy ( ) ;
19151965 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 3 ) ;
19161966 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith (
1917- {
1967+ < IComboSelectionChangeEventArgs > {
19181968 newSelection : [ selectedItem_2 . value [ combo . valueKey ] ] ,
19191969 oldSelection : [ selectedItem_1 . value [ combo . valueKey ] , selectedItem_2 . value [ combo . valueKey ] ] ,
19201970 added : [ ] ,
19211971 removed : [ unselectedItem . value [ combo . valueKey ] ] ,
19221972 event : UIInteractions . getMouseEvent ( 'click' ) ,
1973+ owner : combo ,
19231974 displayText : selectedItem_2 . value [ combo . valueKey ] ,
19241975 cancel : false
19251976 } ) ;
0 commit comments