Skip to content

Commit 4a58c61

Browse files
author
Matt Lewis
committed
feat(dragPointerDown): add a new output to repliate the old dragStart behaviour
1 parent 57dd436 commit 4a58c61

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/draggable.directive.ts

+7
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ export class DraggableDirective implements OnInit, OnChanges, OnDestroy {
6565

6666
@Input() dragCursor = MOVE_CURSOR;
6767

68+
@Output()
69+
dragPointerDown: EventEmitter<Coordinates> = new EventEmitter<Coordinates>();
70+
6871
@Output()
6972
dragStart: EventEmitter<Coordinates> = new EventEmitter<Coordinates>();
7073

@@ -120,6 +123,10 @@ export class DraggableDirective implements OnInit, OnChanges, OnDestroy {
120123
mergeMap((pointerDownEvent: PointerEvent) => {
121124
const currentDrag: Subject<any> = new Subject();
122125

126+
this.zone.run(() => {
127+
this.dragPointerDown.next({ x: 0, y: 0 });
128+
});
129+
123130
const pointerMove: Observable<Coordinates> = this.pointerMove
124131
.pipe(
125132
map((pointerMoveEvent: PointerEvent) => {

test/draggable.directive.spec.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ describe('draggable directive', () => {
1616
[ghostDragEnabled]="ghostDragEnabled"
1717
[validateDrag]="validateDrag"
1818
[dragCursor]="dragCursor"
19+
(dragPointerDown)="dragPointerDown($event)"
1920
(dragStart)="dragStart($event)"
2021
(dragging)="dragging($event)"
2122
(dragEnd)="dragEnd($event)">
@@ -24,9 +25,10 @@ describe('draggable directive', () => {
2425
})
2526
class TestComponent {
2627
@ViewChild(DraggableDirective) draggable: DraggableDirective;
27-
dragStart: sinon.SinonSpy = sinon.spy();
28-
dragging: sinon.SinonSpy = sinon.spy();
29-
dragEnd: sinon.SinonSpy = sinon.spy();
28+
dragPointerDown = sinon.spy();
29+
dragStart = sinon.spy();
30+
dragging = sinon.spy();
31+
dragEnd = sinon.spy();
3032
dragAxis: any = { x: true, y: true };
3133
dragSnapGrid: any = {};
3234
ghostDragEnabled: boolean = true;
@@ -58,6 +60,10 @@ describe('draggable directive', () => {
5860
const draggableElement: HTMLElement =
5961
fixture.componentInstance.draggable.element.nativeElement;
6062
triggerDomEvent('mousedown', draggableElement, { clientX: 5, clientY: 10 });
63+
expect(fixture.componentInstance.dragPointerDown).to.have.been.calledWith({
64+
x: 0,
65+
y: 0
66+
});
6167
triggerDomEvent('mousemove', draggableElement, { clientX: 7, clientY: 10 });
6268
expect(fixture.componentInstance.dragStart).to.have.been.calledWith({
6369
x: 0,
@@ -537,6 +543,7 @@ describe('draggable directive', () => {
537543
const draggableElement: HTMLElement =
538544
fixture.componentInstance.draggable.element.nativeElement;
539545
triggerDomEvent('mousedown', draggableElement, { clientX: 5, clientY: 10 });
546+
expect(fixture.componentInstance.dragPointerDown).to.have.been.calledOnce;
540547
expect(fixture.componentInstance.dragStart).not.to.have.been.called;
541548
expect(fixture.componentInstance.dragging).not.to.have.been.called;
542549
triggerDomEvent('mouseup', draggableElement, { clientX: 5, clientY: 10 });
@@ -551,6 +558,7 @@ describe('draggable directive', () => {
551558
triggerDomEvent('mousemove', draggableElement, { clientX: 7, clientY: 10 });
552559
triggerDomEvent('mouseup', draggableElement, { clientX: 7, clientY: 8 });
553560
sinon.assert.callOrder(
561+
fixture.componentInstance.dragPointerDown,
554562
fixture.componentInstance.dragStart,
555563
fixture.componentInstance.dragging,
556564
fixture.componentInstance.dragEnd

0 commit comments

Comments
 (0)