@@ -77,7 +77,6 @@ export type KtdResizeEnd = KtdDragResizeEvent;
7777interface  KtdDroppedEvent < T >  { 
7878    event : PointingDeviceEvent ; 
7979    currentLayout : KtdGridLayout ; 
80-     previousLayoutItem : KtdGridLayoutItem < T >  |  null ;    // Previous layout is null only when dragging ktdDrag 
8180    currentLayoutItem : KtdGridLayoutItem < T > ; 
8281} 
8382
@@ -367,7 +366,10 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
367366    private  _gridItemsRenderData : KtdDictionary < KtdGridItemRenderData < number > > ; 
368367    private  subscriptions : Subscription [ ] ; 
369368
370-     private  drag : KtdGridDrag  |  null  =  null ; 
369+     public  get  drag ( ) : KtdGridDrag  |  null  { 
370+         return  this . _drag ; 
371+     } 
372+     private  _drag : KtdGridDrag  |  null  =  null ; 
371373
372374    private  readonly  gridElement : HTMLElement ; 
373375
@@ -551,14 +553,6 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
551553            this . dragExited . subscribe ( ( { dragInfo} )  =>  { 
552554                this . pauseDragSequence ( dragInfo ) ; 
553555            } ) , 
554-             this . gridService . pointerBeforeEnd$ . subscribe ( ( { dragInfo} )  =>  { 
555-                 if  ( this . drag  !==  null  &&  dragInfo  !==  null  &&  dragInfo . currentGrid  ===  this )  { 
556-                     console . log ( 'Grid ' ,  this . id ) ; 
557-                     this . updateLayout ( dragInfo ) ; 
558-                     this . stopDragSequence ( dragInfo ) ; 
559-                 } 
560-                 this . drag  =  null ; 
561-             } ) , 
562556        ] ; 
563557    } 
564558
@@ -568,7 +562,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
568562     * @param  dragInfo The drag info. 
569563     */ 
570564    private  startRestoreDragSequence ( event : PointingDeviceEvent ,  dragInfo : PointerEventInfo ) : void   { 
571-         if  ( this . drag  !==  null  &&   dragInfo . type  ===  'resize' )  { 
565+         if  ( this . drag  !==  null  ||   ( dragInfo . type  ===  'resize'   &&   dragInfo . fromGrid   !==   this ) )  { 
572566            return ; 
573567        } 
574568
@@ -588,7 +582,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
588582                takeUntil ( this . gridService . pointerEnd$ ) , 
589583            ) . subscribe ( ) ) ; 
590584
591-         this . drag  =  { 
585+         this . _drag  =  { 
592586            dragSubscription : this . createDragResizeLoop ( scrollableParent ,  dragInfo ) , 
593587            scrollSubscription, 
594588            startEvent : event , 
@@ -740,7 +734,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
740734        ) ; 
741735    } 
742736
743-     private  stopDragSequence ( dragInfo : PointerEventInfo ) : void   { 
737+     public  stopDragSequence ( dragInfo : PointerEventInfo ) : void   { 
744738        if  ( this . drag  ===  null )  { 
745739            return ; 
746740        } 
@@ -758,83 +752,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
758752        this . destroyPlaceholder ( ) ; 
759753        this . drag . dragSubscription ?. unsubscribe ( ) ; 
760754        this . drag . scrollSubscription ?. unsubscribe ( ) ; 
761-         this . drag  =  null ; 
762-     } 
763- 
764-     public  updateLayout ( dragInfo : PointerEventInfo ) : void   { 
765-         if  ( this . drag  !=  null  &&  this . drag . newLayout )  { 
766-             const  currentLayoutItem  =  dragInfo . fromGrid  ===  null  ? { ...dragInfo . newLayoutItem ,  id : this . getNextId ( ) }  : dragInfo . newLayoutItem ; 
767-             const  previousLayoutItem  =  this . layout . find ( item  =>  item . id  ===  dragInfo . dragRef . id ) ; 
768- 
769-             // Dragging from one grid to another 
770-             if  ( dragInfo . fromGrid  !==  dragInfo . currentGrid )  { 
771-                 // Add new item to the layout if it is being dragged from outside the grid. 
772-                 this . ngZone . run ( ( )  =>  { 
773-                     if  ( dragInfo . fromGrid  !==  null )  { 
774-                         dragInfo . fromGrid . layoutUpdated . emit ( dragInfo . fromGrid . layout . filter ( item  =>  item . id  !==  dragInfo . dragRef . id ) ) ; 
775-                     } 
776- 
777-                     // Do not emit when: 
778-                     // - Drag is a resize and bounds have not changed. 
779-                     // - Drag is a normal drag and the item is being dragged inside the same grid. 
780-                     // - We are dragging from outside the grid and the item was dragged into the grid, but then pointer was released outside the grid. 
781-                     if  ( dragInfo . type  !==  'resize'  &&  dragInfo . currentGrid  ===  this )  { 
782-                         this . dropped . emit ( { 
783-                             event : dragInfo . moveEvent , 
784-                             currentLayout : this . drag ! . newLayout ! . map ( item  =>  ( { 
785-                                 id : item . id , 
786-                                 x : item . x , 
787-                                 y : item . y , 
788-                                 w : item . w , 
789-                                 h : item . h , 
790-                                 minW : item . minW , 
791-                                 minH : item . minH , 
792-                                 maxW : item . maxW , 
793-                                 maxH : item . maxH , 
794-                                 data : item . data , 
795-                             } ) )  as  KtdGridLayout , 
796-                             previousLayoutItem : previousLayoutItem  !==  undefined  ? previousLayoutItem  : null , 
797-                             currentLayoutItem : currentLayoutItem , 
798-                         } ) ; 
799-                         return ; 
800-                     } 
801- 
802-                     // Emit when we are not dragging or resizing items already inside the grid. 
803-                     // this.layoutUpdated.emit(this.drag!.newLayout!); 
804-                 } ) ; 
805-             }  else  { 
806-                 // Add new item to the layout if it is being dragged from outside the grid. 
807-                 this . ngZone . run ( ( )  =>  { 
808-                     // Do not emit when: 
809-                     // - Drag is a resize and bounds have not changed. 
810-                     // - Drag is a normal drag and the item is being dragged inside the same grid. 
811-                     // - We are dragging from outside the grid and the item was dragged into the grid, but then pointer was released outside the grid. 
812-                     if  ( dragInfo . type  !==  'resize'  &&  dragInfo . fromGrid  ===  null  &&  dragInfo . currentGrid  ===  this )  { 
813-                         this . dropped . emit ( { 
814-                             event : dragInfo . moveEvent , 
815-                             currentLayout : this . drag ! . newLayout ! . map ( item  =>  ( { 
816-                                 id : item . id , 
817-                                 x : item . x , 
818-                                 y : item . y , 
819-                                 w : item . w , 
820-                                 h : item . h , 
821-                                 minW : item . minW , 
822-                                 minH : item . minH , 
823-                                 maxW : item . maxW , 
824-                                 maxH : item . maxH , 
825-                                 data : item . data , 
826-                             } ) )  as  KtdGridLayout , 
827-                             previousLayoutItem : previousLayoutItem  !==  undefined  ? previousLayoutItem  : null , 
828-                             currentLayoutItem : currentLayoutItem , 
829-                         } ) ; 
830-                         return ; 
831-                     } 
832- 
833-                     // Emit when we are not dragging or resizing items already inside the grid. 
834-                     this . layoutUpdated . emit ( this . drag ! . newLayout ! ) ; 
835-                 } ) ; 
836-             } 
837-         } 
755+         this . _drag  =  null ; 
838756    } 
839757
840758    public  isPointerInsideGridElement ( event : MouseEvent  |  TouchEvent ) : boolean  { 
@@ -844,7 +762,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
844762        return  gridElemClientRect . left  <  pointerX  &&  pointerX  <  gridElemClientRect . right  &&  gridElemClientRect . top  <  pointerY  &&  pointerY  <  gridElemClientRect . bottom ; 
845763    } 
846764
847-     private  getNextId ( ) : string  { 
765+     public  getNextId ( ) : string  { 
848766        return  this . _gridItems . toArray ( ) . reduce ( ( acc ,  cur )  =>  acc  >  parseInt ( cur . id )  ? acc  : parseInt ( cur . id ) ,  0 )  +  1  +  '' ; 
849767    } 
850768
@@ -854,9 +772,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
854772     * @param  dragRef that has been dragged 
855773     */ 
856774    private  addGridItemAnimatingClass ( dragRef : DragRef ) : Observable < undefined >  { 
857- 
858775        return  new  Observable ( observer  =>  { 
859- 
860776            const  duration  =  getTransformTransitionDurationInMs ( dragRef . elementRef . nativeElement ) ; 
861777
862778            if  ( duration  ===  0 )  { 
0 commit comments