Skip to content

Commit 028005f

Browse files
author
Matt Lewis
committed
fix(dayView): respect eventSnapSize when dragging events
1 parent c0be926 commit 028005f

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

src/components/day/calendarDayView.component.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,8 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
362362
}
363363

364364
eventDragged(dayEvent: DayViewEvent, draggedInPixels: number): void {
365-
const segments: number = draggedInPixels / this.eventSnapSize;
366-
const segmentAmountInMinutes: number = MINUTES_IN_HOUR / this.hourSegments;
367-
const minutesMoved: number = segments * segmentAmountInMinutes;
365+
const pixelAmountInMinutes: number = MINUTES_IN_HOUR / (this.hourSegments * SEGMENT_HEIGHT);
366+
const minutesMoved: number = draggedInPixels * pixelAmountInMinutes;
368367
const newStart: Date = addMinutes(dayEvent.event.start, minutesMoved);
369368
let newEnd: Date;
370369
if (dayEvent.event.end) {

test/calendarDayView.component.spec.ts

+36
Original file line numberDiff line numberDiff line change
@@ -559,4 +559,40 @@ describe('CalendarDayViewComponent component', () => {
559559
});
560560
});
561561

562+
it('should respect the event snap size when dragging and dropping', () => {
563+
const fixture: ComponentFixture<CalendarDayViewComponent> = TestBed.createComponent(CalendarDayViewComponent);
564+
fixture.componentInstance.viewDate = new Date('2016-06-27');
565+
fixture.componentInstance.events = [{
566+
title: 'foo',
567+
color: {primary: '', secondary: ''},
568+
start: moment('2016-06-27').startOf('day').add(4, 'hours').toDate(),
569+
end: moment('2016-06-27').startOf('day').add(6, 'hours').toDate(),
570+
draggable: true
571+
}];
572+
fixture.componentInstance.eventSnapSize = 1;
573+
fixture.componentInstance.ngOnChanges({viewDate: {}, events: {}});
574+
fixture.detectChanges();
575+
document.body.appendChild(fixture.nativeElement);
576+
const event: HTMLElement = fixture.nativeElement.querySelector('.cal-event');
577+
const eventPosition: ClientRect = event.getBoundingClientRect();
578+
let dragEvent: CalendarEventTimesChangedEvent;
579+
fixture.componentInstance.eventTimesChanged.subscribe(event => {
580+
dragEvent = event;
581+
});
582+
triggerDomEvent('mousedown', event, {clientY: eventPosition.top + 5, clientX: eventPosition.left + 10});
583+
fixture.detectChanges();
584+
triggerDomEvent('mousemove', document.body, {clientY: eventPosition.top + 15, clientX: eventPosition.left + 10});
585+
fixture.detectChanges();
586+
expect(event.getBoundingClientRect().top).to.equal(eventPosition.top + 10);
587+
expect(event.getBoundingClientRect().bottom).to.equal(eventPosition.bottom + 10);
588+
triggerDomEvent('mouseup', document.body, {clientY: eventPosition.top + 10, clientX: eventPosition.left + 10});
589+
fixture.detectChanges();
590+
fixture.destroy();
591+
expect(dragEvent).to.deep.equal({
592+
event: fixture.componentInstance.events[0],
593+
newStart: moment('2016-06-27').add(4, 'hours').add(10, 'minutes').toDate(),
594+
newEnd: moment('2016-06-27').add(6, 'hours').add(10, 'minutes').toDate()
595+
});
596+
});
597+
562598
});

0 commit comments

Comments
 (0)