Skip to content

Commit 3c5c5b9

Browse files
committed
feat: expose css transform on validate drag function
1 parent 78bdeb5 commit 3c5c5b9

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

projects/angular-draggable-droppable/src/lib/draggable.directive.spec.ts

+27
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ describe('draggable directive', () => {
6666
#draggableElement
6767
mwlDraggable
6868
[dragAxis]="{x: true, y: true}"
69+
[validateDrag]="validateDrag"
6970
(dragPointerDown)="dragPointerDown($event)"
7071
(dragStart)="dragStart($event)"
7172
(ghostElementCreated)="ghostElementCreated($event)"
@@ -961,4 +962,30 @@ describe('draggable directive', () => {
961962
changedTouches: [{ clientX: 10, clientY: 18 }]
962963
});
963964
});
965+
966+
it('should expose the css transform on the validate drag function', () => {
967+
const scrollFixture = TestBed.createComponent(ScrollTestComponent);
968+
scrollFixture.componentInstance.validateDrag = sinon.stub().returns(true);
969+
scrollFixture.detectChanges();
970+
document.body.appendChild(scrollFixture.nativeElement);
971+
const draggableElement =
972+
scrollFixture.componentInstance.draggableElement.nativeElement;
973+
triggerDomEvent('mousedown', draggableElement, { clientX: 5, clientY: 10 });
974+
triggerDomEvent('mousemove', draggableElement, { clientX: 5, clientY: 12 });
975+
scrollFixture.componentInstance.scrollContainer.elementRef.nativeElement.scrollTop = 5;
976+
scrollFixture.debugElement
977+
.query(By.directive(DraggableScrollContainerDirective))
978+
.triggerEventHandler('scroll', {});
979+
triggerDomEvent('mousemove', draggableElement, { clientX: 5, clientY: 14 });
980+
expect(
981+
scrollFixture.componentInstance.validateDrag
982+
).to.have.been.calledWith({
983+
x: 0,
984+
y: 9,
985+
transform: {
986+
x: 0,
987+
y: 4
988+
}
989+
});
990+
});
964991
});

projects/angular-draggable-droppable/src/lib/draggable.directive.ts

+15-2
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,14 @@ export interface DragEndEvent extends Coordinates {
6060
dragCancelled: boolean;
6161
}
6262

63-
export type ValidateDrag = (coordinates: Coordinates) => boolean;
63+
export interface ValidateDragParams extends Coordinates {
64+
transform: {
65+
x: number;
66+
y: number;
67+
};
68+
}
69+
70+
export type ValidateDrag = (params: ValidateDragParams) => boolean;
6471

6572
export interface PointerEvent {
6673
clientX: number;
@@ -332,7 +339,13 @@ export class DraggableDirective implements OnInit, OnChanges, OnDestroy {
332339
};
333340
}),
334341
filter(
335-
({ x, y }) => !this.validateDrag || this.validateDrag({ x, y })
342+
({ x, y, transformX, transformY }) =>
343+
!this.validateDrag ||
344+
this.validateDrag({
345+
x,
346+
y,
347+
transform: { x: transformX, y: transformY }
348+
})
336349
),
337350
takeUntil(dragComplete$),
338351
share()

projects/angular-draggable-droppable/src/public_api.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ export {
99
DragStartEvent,
1010
DragMoveEvent,
1111
DragEndEvent,
12-
GhostElementCreatedEvent
12+
GhostElementCreatedEvent,
13+
ValidateDragParams
1314
} from './lib/draggable.directive';

0 commit comments

Comments
 (0)