Skip to content

Commit 99c7aa3

Browse files
committed
fix(draggable): support scrolling when dragging events
Fixes #838 Fixes #909
1 parent 8571528 commit 99c7aa3

File tree

7 files changed

+96
-20
lines changed

7 files changed

+96
-20
lines changed

package-lock.json

+69-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133
"@angular/core": ">=6.0.0 <9.0.0"
134134
},
135135
"dependencies": {
136-
"angular-draggable-droppable": "^4.2.0",
136+
"angular-draggable-droppable": "^4.3.0",
137137
"angular-resizable-element": "^3.2.4",
138138
"calendar-utils": "^0.3.1",
139139
"positioning": "^1.4.0"

projects/angular-calendar/src/modules/common/calendar-drag-helper.provider.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { isInside } from './util';
2+
import { ValidateDragParams } from 'angular-draggable-droppable';
23

34
const DRAG_THRESHOLD = 1;
45

@@ -16,22 +17,24 @@ export class CalendarDragHelper {
1617
x,
1718
y,
1819
snapDraggedEvents,
19-
dragAlreadyMoved
20+
dragAlreadyMoved,
21+
transform
2022
}: {
2123
x: number;
2224
y: number;
2325
snapDraggedEvents: boolean;
2426
dragAlreadyMoved: boolean;
27+
transform: ValidateDragParams['transform'];
2528
}): boolean {
2629
const isWithinThreshold =
2730
Math.abs(x) > DRAG_THRESHOLD || Math.abs(y) > DRAG_THRESHOLD;
2831

2932
if (snapDraggedEvents) {
3033
const newRect: ClientRect = Object.assign({}, this.startPosition, {
31-
left: this.startPosition.left + x,
32-
right: this.startPosition.right + x,
33-
top: this.startPosition.top + y,
34-
bottom: this.startPosition.bottom + y
34+
left: this.startPosition.left + transform.x,
35+
right: this.startPosition.right + transform.x,
36+
top: this.startPosition.top + transform.y,
37+
bottom: this.startPosition.bottom + transform.y
3538
});
3639

3740
return (

projects/angular-calendar/src/modules/day/calendar-day-view.component.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
shouldFireDroppedEvent
4343
} from '../common/util';
4444
import { DateAdapter } from '../../date-adapters/date-adapter';
45-
import { DragEndEvent } from 'angular-draggable-droppable';
45+
import { DragEndEvent, ValidateDrag } from 'angular-draggable-droppable';
4646
import { PlacementArray } from 'positioning';
4747

4848
export interface CalendarDayViewBeforeRenderEvent {
@@ -389,7 +389,7 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
389389
/**
390390
* @hidden
391391
*/
392-
validateDrag: (args: any) => boolean;
392+
validateDrag: ValidateDrag;
393393

394394
/**
395395
* @hidden
@@ -577,13 +577,14 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
577577
dayEventsContainer,
578578
event
579579
);
580-
this.validateDrag = ({ x, y }) =>
580+
this.validateDrag = ({ x, y, transform }) =>
581581
this.currentResizes.size === 0 &&
582582
dragHelper.validateDrag({
583583
x,
584584
y,
585585
snapDraggedEvents: this.snapDraggedEvents,
586-
dragAlreadyMoved: this.dragAlreadyMoved
586+
dragAlreadyMoved: this.dragAlreadyMoved,
587+
transform
587588
});
588589
this.eventDragEnter = 0;
589590
this.dragAlreadyMoved = false;

projects/angular-calendar/src/modules/week/calendar-week-view.component.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ import { DateAdapter } from '../../date-adapters/date-adapter';
5151
import {
5252
DragEndEvent,
5353
DropEvent,
54-
DragMoveEvent
54+
DragMoveEvent,
55+
ValidateDrag
5556
} from 'angular-draggable-droppable';
5657
import { PlacementArray } from 'positioning';
5758

@@ -576,7 +577,7 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
576577
/**
577578
* @hidden
578579
*/
579-
validateDrag: (args: any) => boolean;
580+
validateDrag: ValidateDrag;
580581

581582
/**
582583
* @hidden
@@ -893,14 +894,15 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
893894
eventsContainer,
894895
event
895896
);
896-
this.validateDrag = ({ x, y }) =>
897+
this.validateDrag = ({ x, y, transform }) =>
897898
this.allDayEventResizes.size === 0 &&
898899
this.timeEventResizes.size === 0 &&
899900
dragHelper.validateDrag({
900901
x,
901902
y,
902903
snapDraggedEvents: this.snapDraggedEvents,
903-
dragAlreadyMoved: this.dragAlreadyMoved
904+
dragAlreadyMoved: this.dragAlreadyMoved,
905+
transform
904906
});
905907
this.dragActive = true;
906908
this.dragAlreadyMoved = false;

projects/demos/app/demo-app.html

+5-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,11 @@
125125

126126
<div class="container-fluid">
127127
<div class="row fill-height">
128-
<div class="col-md-9 col-xl-10 fill-height scroll-y" perfectScrollbar>
128+
<div
129+
class="col-md-9 col-xl-10 fill-height scroll-y"
130+
perfectScrollbar
131+
mwlDraggableScrollContainer
132+
>
129133
<div class="card" *ngIf="firstDemoLoaded; else loading">
130134
<div class="card-header">
131135
<div class="row">

projects/demos/app/demo-app.module.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
88
import { NgbTabsetModule, NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap';
99
import { Angulartics2Module } from 'angulartics2';
1010
import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';
11+
import { DragAndDropModule } from 'angular-draggable-droppable';
1112
import { DemoAppComponent } from './demo-app.component';
1213
import { DemoComponent as DefaultDemoComponent } from './demo-modules/kitchen-sink/component';
1314
import { DemoModule as DefaultDemoModule } from './demo-modules/kitchen-sink/module';
@@ -23,6 +24,7 @@ import { FormsModule } from '@angular/forms';
2324
FormsModule,
2425
NgbTabsetModule,
2526
NgbCollapseModule,
27+
DragAndDropModule,
2628
DefaultDemoModule,
2729
RouterModule.forRoot(
2830
[

0 commit comments

Comments
 (0)