@@ -77,7 +77,6 @@ export type KtdResizeEnd = KtdDragResizeEvent;
77
77
interface KtdDroppedEvent < T > {
78
78
event : PointingDeviceEvent ;
79
79
currentLayout : KtdGridLayout ;
80
- previousLayoutItem : KtdGridLayoutItem < T > | null ; // Previous layout is null only when dragging ktdDrag
81
80
currentLayoutItem : KtdGridLayoutItem < T > ;
82
81
}
83
82
@@ -367,7 +366,10 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
367
366
private _gridItemsRenderData : KtdDictionary < KtdGridItemRenderData < number > > ;
368
367
private subscriptions : Subscription [ ] ;
369
368
370
- private drag : KtdGridDrag | null = null ;
369
+ public get drag ( ) : KtdGridDrag | null {
370
+ return this . _drag ;
371
+ }
372
+ private _drag : KtdGridDrag | null = null ;
371
373
372
374
private readonly gridElement : HTMLElement ;
373
375
@@ -551,14 +553,6 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
551
553
this . dragExited . subscribe ( ( { dragInfo} ) => {
552
554
this . pauseDragSequence ( dragInfo ) ;
553
555
} ) ,
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
- } ) ,
562
556
] ;
563
557
}
564
558
@@ -568,10 +562,16 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
568
562
* @param dragInfo The drag info.
569
563
*/
570
564
private startRestoreDragSequence ( event : PointingDeviceEvent , dragInfo : PointerEventInfo ) : void {
565
+ // Drag sequence can be paused, but the resize sequence can't be paused.
571
566
if ( this . drag !== null && dragInfo . type === 'resize' ) {
572
567
return ;
573
568
}
574
569
570
+ // Prevents the resize from starting if the resize already started on another grid.
571
+ if ( dragInfo . type === 'resize' && this . drag === null && dragInfo . fromGrid !== this ) {
572
+ return ;
573
+ }
574
+
575
575
const scrollableParent = typeof this . scrollableParent === 'string' ? document . getElementById ( this . scrollableParent ) : this . scrollableParent ;
576
576
577
577
// TODO (enhancement): consider move this 'side effect' observable inside the main drag loop.
@@ -588,7 +588,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
588
588
takeUntil ( this . gridService . pointerEnd$ ) ,
589
589
) . subscribe ( ) ) ;
590
590
591
- this . drag = {
591
+ this . _drag = {
592
592
dragSubscription : this . createDragResizeLoop ( scrollableParent , dragInfo ) ,
593
593
scrollSubscription,
594
594
startEvent : event ,
@@ -740,7 +740,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
740
740
) ;
741
741
}
742
742
743
- private stopDragSequence ( dragInfo : PointerEventInfo ) : void {
743
+ public stopDragSequence ( dragInfo : PointerEventInfo ) : void {
744
744
if ( this . drag === null ) {
745
745
return ;
746
746
}
@@ -758,83 +758,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
758
758
this . destroyPlaceholder ( ) ;
759
759
this . drag . dragSubscription ?. unsubscribe ( ) ;
760
760
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
- }
761
+ this . _drag = null ;
838
762
}
839
763
840
764
public isPointerInsideGridElement ( event : MouseEvent | TouchEvent ) : boolean {
@@ -844,7 +768,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
844
768
return gridElemClientRect . left < pointerX && pointerX < gridElemClientRect . right && gridElemClientRect . top < pointerY && pointerY < gridElemClientRect . bottom ;
845
769
}
846
770
847
- private getNextId ( ) : string {
771
+ public getNextId ( ) : string {
848
772
return this . _gridItems . toArray ( ) . reduce ( ( acc , cur ) => acc > parseInt ( cur . id ) ? acc : parseInt ( cur . id ) , 0 ) + 1 + '' ;
849
773
}
850
774
@@ -854,9 +778,7 @@ export class KtdGridComponent implements OnChanges, AfterContentInit, AfterConte
854
778
* @param dragRef that has been dragged
855
779
*/
856
780
private addGridItemAnimatingClass ( dragRef : DragRef ) : Observable < undefined > {
857
-
858
781
return new Observable ( observer => {
859
-
860
782
const duration = getTransformTransitionDurationInMs ( dragRef . elementRef . nativeElement ) ;
861
783
862
784
if ( duration === 0 ) {
0 commit comments