Skip to content

Commit c4d6abc

Browse files
author
Matt Lewis
committed
fix: allow event actions to work on draggable events
Fixes #373
1 parent 76c857c commit c4d6abc

4 files changed

+115
-11
lines changed

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -429,12 +429,15 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
429429
const pixelAmountInMinutes: number =
430430
MINUTES_IN_HOUR / (this.hourSegments * this.hourSegmentHeight);
431431
const minutesMoved: number = draggedInPixels * pixelAmountInMinutes;
432-
const newStart: Date = addMinutes(dayEvent.event.start, minutesMoved);
433-
let newEnd: Date;
434-
if (dayEvent.event.end) {
435-
newEnd = addMinutes(dayEvent.event.end, minutesMoved);
432+
// TODO - remove this check once https://github.com/mattlewis92/angular-draggable-droppable/issues/21 is fixed
433+
if (minutesMoved !== 0) {
434+
const newStart: Date = addMinutes(dayEvent.event.start, minutesMoved);
435+
let newEnd: Date;
436+
if (dayEvent.event.end) {
437+
newEnd = addMinutes(dayEvent.event.end, minutesMoved);
438+
}
439+
this.eventTimesChanged.emit({ newStart, newEnd, event: dayEvent.event });
436440
}
437-
this.eventTimesChanged.emit({ newStart, newEnd, event: dayEvent.event });
438441
}
439442

440443
private refreshHourGrid(): void {

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

+9-6
Original file line numberDiff line numberDiff line change
@@ -364,13 +364,16 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
364364
dayWidth: number
365365
): void {
366366
const daysDragged: number = draggedByPx / dayWidth;
367-
const newStart: Date = addDays(weekEvent.event.start, daysDragged);
368-
let newEnd: Date;
369-
if (weekEvent.event.end) {
370-
newEnd = addDays(weekEvent.event.end, daysDragged);
367+
// TODO - remove this check once https://github.com/mattlewis92/angular-draggable-droppable/issues/21 is fixed
368+
if (daysDragged !== 0) {
369+
const newStart: Date = addDays(weekEvent.event.start, daysDragged);
370+
let newEnd: Date;
371+
if (weekEvent.event.end) {
372+
newEnd = addDays(weekEvent.event.end, daysDragged);
373+
}
374+
375+
this.eventTimesChanged.emit({ newStart, newEnd, event: weekEvent.event });
371376
}
372-
373-
this.eventTimesChanged.emit({ newStart, newEnd, event: weekEvent.event });
374377
}
375378

376379
/**

test/calendar-day-view.component.spec.ts

+50
Original file line numberDiff line numberDiff line change
@@ -1012,4 +1012,54 @@ describe('CalendarDayViewComponent component', () => {
10121012
fixture.nativeElement.querySelector('.cal-hour-segment').style.height
10131013
).to.equal('45px');
10141014
});
1015+
1016+
it('should not called the event times changed callback when the event was not dragged', () => {
1017+
const fixture: ComponentFixture<
1018+
CalendarDayViewComponent
1019+
> = TestBed.createComponent(CalendarDayViewComponent);
1020+
fixture.componentInstance.viewDate = new Date('2016-06-27');
1021+
fixture.componentInstance.events = [
1022+
{
1023+
title: 'foo',
1024+
color: { primary: '', secondary: '' },
1025+
start: moment('2016-06-27')
1026+
.startOf('day')
1027+
.add(4, 'hours')
1028+
.toDate(),
1029+
end: moment('2016-06-27')
1030+
.startOf('day')
1031+
.add(6, 'hours')
1032+
.toDate(),
1033+
draggable: true
1034+
}
1035+
];
1036+
fixture.componentInstance.ngOnChanges({ viewDate: {}, events: {} });
1037+
fixture.detectChanges();
1038+
document.body.appendChild(fixture.nativeElement);
1039+
const event: HTMLElement = fixture.nativeElement.querySelector(
1040+
'.cal-event'
1041+
);
1042+
const eventPosition: ClientRect = event.getBoundingClientRect();
1043+
const eventTimesChanged = sinon.spy();
1044+
fixture.componentInstance.eventTimesChanged.subscribe(() =>
1045+
eventTimesChanged()
1046+
);
1047+
triggerDomEvent('mousedown', event, {
1048+
clientY: eventPosition.top + 5,
1049+
clientX: eventPosition.left + 10
1050+
});
1051+
fixture.detectChanges();
1052+
triggerDomEvent('mousemove', document.body, {
1053+
clientY: eventPosition.top + 5,
1054+
clientX: eventPosition.left + 10
1055+
});
1056+
fixture.detectChanges();
1057+
triggerDomEvent('mouseup', document.body, {
1058+
clientY: eventPosition.top + 5,
1059+
clientX: eventPosition.left + 10
1060+
});
1061+
fixture.detectChanges();
1062+
fixture.destroy();
1063+
expect(eventTimesChanged.callCount).to.equal(0);
1064+
});
10151065
});

test/calendar-week-view.component.spec.ts

+48
Original file line numberDiff line numberDiff line change
@@ -837,4 +837,52 @@ describe('calendarWeekView component', () => {
837837
stub.restore();
838838
expect(stub).to.have.been.calledOnce; // tslint:disable-line
839839
});
840+
841+
it('should not called the event times changed callback when the event was not dragged', () => {
842+
const fixture: ComponentFixture<
843+
CalendarWeekViewComponent
844+
> = TestBed.createComponent(CalendarWeekViewComponent);
845+
fixture.componentInstance.viewDate = new Date('2016-12-08');
846+
fixture.componentInstance.events = [
847+
{
848+
title: 'foo',
849+
color: { primary: '', secondary: '' },
850+
start: moment('2016-12-08')
851+
.add(4, 'hours')
852+
.toDate(),
853+
end: moment('2016-12-08')
854+
.add(6, 'hours')
855+
.toDate(),
856+
draggable: true
857+
}
858+
];
859+
fixture.componentInstance.ngOnChanges({ viewDate: {}, events: {} });
860+
fixture.detectChanges();
861+
document.body.appendChild(fixture.nativeElement);
862+
const event: HTMLElement = fixture.nativeElement.querySelector(
863+
'.cal-event-container'
864+
);
865+
const eventPosition: ClientRect = event.getBoundingClientRect();
866+
const eventTimesChanged = sinon.spy();
867+
fixture.componentInstance.eventTimesChanged.subscribe(() =>
868+
eventTimesChanged()
869+
);
870+
triggerDomEvent('mousedown', event, {
871+
clientX: eventPosition.left,
872+
clientY: eventPosition.top
873+
});
874+
fixture.detectChanges();
875+
triggerDomEvent('mousemove', document.body, {
876+
clientX: eventPosition.left,
877+
clientY: eventPosition.top
878+
});
879+
fixture.detectChanges();
880+
triggerDomEvent('mouseup', document.body, {
881+
clientX: eventPosition.left,
882+
clientY: eventPosition.top
883+
});
884+
fixture.detectChanges();
885+
fixture.destroy();
886+
expect(eventTimesChanged.callCount).to.equal(0);
887+
});
840888
});

0 commit comments

Comments
 (0)