@@ -505,15 +505,33 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
505505 startWith ( this . _gridItems ) ,
506506 switchMap ( ( gridItems : QueryList < KtdGridItemComponent > ) => {
507507 return merge (
508- ...gridItems . map ( ( gridItem ) => gridItem . dragStart . pipe ( map ( ( { event} ) => ( { event, gridItem, type : 'drag' as DragActionType } ) ) ) ) ,
508+ ...gridItems . map ( ( gridItem ) => gridItem . dragStart . pipe ( map ( ( { event} ) => ( {
509+ event,
510+ gridItem,
511+ type : 'drag' as DragActionType
512+ } ) ) ) ) ,
509513 ...gridItems . map ( ( gridItem ) => gridItem . resizeStart$ . pipe ( map ( ( event ) => ( {
510514 event,
511515 gridItem,
512516 type : 'resize' as DragActionType ,
513517 } ) ) ) ) ,
514518 ) . pipe ( exhaustMap ( ( data ) => of ( data ) ) ) ;
515519 } )
516- ) . subscribe ( ( { event, gridItem, type} ) => this . gridService . startDrag ( event , gridItem . dragRef , type , this ) ) ,
520+ ) . subscribe ( ( { event, gridItem, type} ) => {
521+ // Prevents the event from bubbling up the DOM tree, preventing any parent event handlers from being notified of the event.
522+ // Specifically, it prevents the event from being sent to any parent event handlers that may be listening for it.
523+ if ( type === 'resize' ) {
524+ event . stopPropagation ( ) ;
525+ }
526+
527+ // If the event started from an element with the native HTML drag&drop, it'll interfere
528+ // with our positioning logic since it'll start dragging the native element.
529+ if ( event . target && ( ( event . target as HTMLElement ) . draggable || true ) && event . type === 'pointerdown' ) {
530+ event . preventDefault ( ) ;
531+ }
532+
533+ return this . gridService . startDrag ( event , gridItem . dragRef , type , this ) ;
534+ } ) ,
517535
518536 connectedToItems$ . pipe (
519537 startWith ( connectedToItems$ . value ) ,
@@ -691,6 +709,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
691709 } ;
692710 }
693711
712+ // TODO: Call this only when the drag ended, when the drag is paused do nothing.
694713 public stopDragSequence ( ) : void {
695714 const dragInfo = this . gridService . drag ! ;
696715
@@ -699,7 +718,9 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
699718 this . renderer . removeClass ( dragInfo . dragRef . elementRef . nativeElement , 'no-transitions' ) ;
700719 this . renderer . removeClass ( dragInfo . dragRef . elementRef . nativeElement , 'ktd-grid-item-dragging' ) ;
701720
702- ( dragInfo . type === 'drag' ? this . dragEnded : this . resizeEnded ) . emit ( getDragResizeEventData ( dragInfo . dragRef , this . layout ) ) ;
721+ this . ngZone . run ( ( ) => {
722+ ( dragInfo . type === 'drag' ? this . dragEnded : this . resizeEnded ) . emit ( getDragResizeEventData ( dragInfo . dragRef , this . layout ) ) ;
723+ } ) ;
703724
704725 this . addGridItemAnimatingClass ( dragInfo . dragRef ) . subscribe ( ) ;
705726 // Consider destroying the placeholder after the animation has finished.
0 commit comments