Skip to content

Commit 52e9a22

Browse files
author
Matt Lewis
committed
fix(draggable): only emit the dragEnd event once
1 parent 1412389 commit 52e9a22

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

src/draggable.directive.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'rxjs/add/operator/takeUntil';
88
import 'rxjs/add/operator/take';
99
import 'rxjs/add/operator/takeLast';
1010
import 'rxjs/add/operator/pairwise';
11+
import 'rxjs/add/operator/share';
1112
import {DraggableHelper} from './draggableHelper.provider';
1213

1314
export type Coordinates = {x: number, y: number};
@@ -118,16 +119,8 @@ export class Draggable implements OnInit, OnDestroy {
118119
return mouseMove;
119120

120121
})
121-
.filter(({x, y}) => !this.validateDrag || this.validateDrag({x, y}));
122-
123-
mouseDrag.subscribe(({x, y, currentDrag, clientX, clientY}) => {
124-
this.setCssTransform(`translate(${x}px, ${y}px)`);
125-
currentDrag.next({
126-
clientX,
127-
clientY,
128-
dropData: this.dropData
129-
});
130-
});
122+
.filter(({x, y}) => !this.validateDrag || this.validateDrag({x, y}))
123+
.share();
131124

132125
Observable
133126
.merge(
@@ -142,8 +135,14 @@ export class Draggable implements OnInit, OnDestroy {
142135
})
143136
.map(([previous, next]) => next)
144137
.filter(({x, y}) => x !== 0 || y !== 0)
145-
.subscribe(({x, y}) => {
138+
.subscribe(({x, y, currentDrag, clientX, clientY}) => {
146139
this.dragging.next({x, y});
140+
this.setCssTransform(`translate(${x}px, ${y}px)`);
141+
currentDrag.next({
142+
clientX,
143+
clientY,
144+
dropData: this.dropData
145+
});
147146
});
148147

149148
}

test/draggable.directive.spec.ts

+8
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,12 @@ describe('draggable directive', () => {
243243
expect(fixture.componentInstance.dragging).to.have.been.calledWith({x: 2, y: 2});
244244
});
245245

246+
it('should only call the dragEnd event once', () => {
247+
const draggableElement: HTMLElement = fixture.componentInstance.draggable.element.nativeElement;
248+
triggerDomEvent('mousedown', draggableElement, {clientX: 5, clientY: 10});
249+
triggerDomEvent('mousemove', draggableElement, {clientX: 7, clientY: 8});
250+
triggerDomEvent('mouseup', draggableElement, {clientX: 7, clientY: 8});
251+
expect(fixture.componentInstance.dragEnd).to.have.been.calledOnce;
252+
});
253+
246254
});

webpack.config.umd.js

+6
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ module.exports = {
9292
commonjs: 'rxjs/add/operator/take',
9393
commonjs2: 'rxjs/add/operator/take',
9494
amd: 'rxjs/add/operator/take'
95+
},
96+
'rxjs/add/operator/share': {
97+
root: ['rx', 'Observable'],
98+
commonjs: 'rxjs/add/operator/share',
99+
commonjs2: 'rxjs/add/operator/share',
100+
amd: 'rxjs/add/operator/share'
95101
}
96102
},
97103
devtool: 'source-map',

0 commit comments

Comments
 (0)