@@ -62,6 +62,12 @@ export class IgxGridSelectionService {
6262 */
6363 public selectedRowsChange = new Subject ( ) ;
6464
65+ /**
66+ * Toggled when a pointerdown event is triggered inside the grid body (cells).
67+ * When `false` the drag select behavior is disabled.
68+ */
69+ private pointerEventInGridBody = false ;
70+
6571 private allRowsSelected : boolean ;
6672 private _ranges : Set < string > = new Set < string > ( ) ;
6773 private _selectionRange : Range ;
@@ -265,6 +271,8 @@ export class IgxGridSelectionService {
265271 this . initKeyboardState ( ) ;
266272 this . pointerState . ctrl = ctrl ;
267273 this . pointerState . shift = shift ;
274+ this . pointerEventInGridBody = true ;
275+ document . body . addEventListener ( 'pointerup' , this . pointerOriginHandler ) ;
268276
269277 // No ctrl key pressed - no multiple selection
270278 if ( ! ctrl ) {
@@ -311,7 +319,7 @@ export class IgxGridSelectionService {
311319
312320 public pointerEnter ( node : ISelectionNode , event : PointerEvent ) : boolean {
313321 // https://www.w3.org/TR/pointerevents/#the-button-property
314- this . dragMode = event . buttons === 1 && ( event . button === - 1 || event . button === 0 ) ;
322+ this . dragMode = ( event . buttons === 1 && ( event . button === - 1 || event . button === 0 ) ) && this . pointerEventInGridBody ;
315323 if ( ! this . dragMode ) {
316324 return false ;
317325 }
@@ -351,7 +359,9 @@ export class IgxGridSelectionService {
351359 return true ;
352360 }
353361
354- this . add ( node ) ;
362+ if ( this . pointerEventInGridBody ) {
363+ this . add ( node ) ;
364+ }
355365 return false ;
356366 }
357367
@@ -727,6 +737,11 @@ export class IgxGridSelectionService {
727737 private isRowDeleted ( rowID ) : boolean {
728738 return this . grid . gridAPI . row_deleted_transaction ( rowID ) ;
729739 }
740+
741+ private pointerOriginHandler = ( ) => {
742+ this . pointerEventInGridBody = false ;
743+ document . body . removeEventListener ( 'pointerup' , this . pointerOriginHandler ) ;
744+ } ;
730745}
731746
732747export const isChromium = ( ) : boolean => ( / C h r o m | e ? i u m / g. test ( navigator . userAgent ) ||
0 commit comments