Skip to content

Commit 46a650a

Browse files
committed
fix: more robust way of telling if an event is dropped within a calendar
Fixes #637
1 parent aa7edd9 commit 46a650a

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

src/modules/common/util.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -123,15 +123,15 @@ export function isDraggedWithinPeriod(
123123
}
124124

125125
export function shouldFireDroppedEvent(
126-
dropEvent: { dropData?: { event?: CalendarEvent } },
126+
dropEvent: { dropData?: { event?: CalendarEvent; calendarId?: symbol } },
127127
date: Date,
128128
allDay: boolean,
129-
events: CalendarEvent[]
129+
calendarId: symbol
130130
) {
131131
return (
132132
dropEvent.dropData &&
133133
dropEvent.dropData.event &&
134-
(events.indexOf(dropEvent.dropData.event) === -1 ||
134+
(dropEvent.dropData.calendarId !== calendarId ||
135135
(dropEvent.dropData.event.allDay && !allDay) ||
136136
(!dropEvent.dropData.event.allDay && allDay))
137137
);

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

+9-4
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export interface DayViewEventResize {
9595
[class.cal-draggable]="!snapDraggedEvents && event.draggable"
9696
mwlDraggable
9797
dragActiveClass="cal-drag-active"
98-
[dropData]="{event: event}"
98+
[dropData]="{event: event, calendarId: calendarId}"
9999
[dragAxis]="{x: !snapDraggedEvents && event.draggable, y: !snapDraggedEvents && event.draggable}">
100100
</mwl-calendar-day-view-event>
101101
</div>
@@ -122,7 +122,7 @@ export interface DayViewEventResize {
122122
(resizeEnd)="resizeEnded(dayEvent)"
123123
mwlDraggable
124124
dragActiveClass="cal-drag-active"
125-
[dropData]="{event: dayEvent.event}"
125+
[dropData]="{event: dayEvent.event, calendarId: calendarId}"
126126
[dragAxis]="{x: !snapDraggedEvents && dayEvent.event.draggable && currentResizes.size === 0, y: dayEvent.event.draggable && currentResizes.size === 0}"
127127
[dragSnapGrid]="snapDraggedEvents ? {y: eventSnapSize || hourSegmentHeight} : {}"
128128
[validateDrag]="snapDraggedEvents ? validateDrag : false"
@@ -356,6 +356,11 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
356356
*/
357357
eventDragEnter = 0;
358358

359+
/**
360+
* @hidden
361+
*/
362+
calendarId = Symbol('angular calendar day view id');
363+
359364
/**
360365
* @hidden
361366
*/
@@ -452,11 +457,11 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
452457
}
453458

454459
eventDropped(
455-
dropEvent: { dropData?: { event?: CalendarEvent } },
460+
dropEvent: { dropData?: { event?: CalendarEvent; calendarId?: symbol } },
456461
date: Date,
457462
allDay: boolean
458463
): void {
459-
if (shouldFireDroppedEvent(dropEvent, date, allDay, this.events)) {
464+
if (shouldFireDroppedEvent(dropEvent, date, allDay, this.calendarId)) {
460465
this.eventTimesChanged.emit({
461466
type: CalendarEventTimesChangedEventType.Drop,
462467
event: dropEvent.dropData.event,

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

+9-4
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export interface CalendarWeekViewBeforeRenderEvent extends WeekView {
128128
(resizeEnd)="allDayEventResizeEnded(allDayEvent)"
129129
mwlDraggable
130130
dragActiveClass="cal-drag-active"
131-
[dropData]="{event: allDayEvent.event}"
131+
[dropData]="{event: allDayEvent.event, calendarId: calendarId}"
132132
[dragAxis]="{
133133
x: allDayEvent.event.draggable && allDayEventResizes.size === 0,
134134
y: !snapDraggedEvents && allDayEvent.event.draggable && allDayEventResizes.size === 0
@@ -212,7 +212,7 @@ export interface CalendarWeekViewBeforeRenderEvent extends WeekView {
212212
(resizeEnd)="timeEventResizeEnded(timeEvent)"
213213
mwlDraggable
214214
dragActiveClass="cal-drag-active"
215-
[dropData]="{event: timeEvent.event}"
215+
[dropData]="{event: timeEvent.event, calendarId: calendarId}"
216216
[dragAxis]="{
217217
x: timeEvent.event.draggable && timeEventResizes.size === 0,
218218
y: timeEvent.event.draggable && timeEventResizes.size === 0
@@ -528,6 +528,11 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
528528
*/
529529
dayColumnWidth: number;
530530

531+
/**
532+
* @hidden
533+
*/
534+
calendarId = Symbol('angular calendar week view id');
535+
531536
/**
532537
* @hidden
533538
*/
@@ -780,11 +785,11 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
780785
* @hidden
781786
*/
782787
eventDropped(
783-
dropEvent: DropEvent<{ event?: CalendarEvent }>,
788+
dropEvent: DropEvent<{ event?: CalendarEvent; calendarId?: symbol }>,
784789
date: Date,
785790
allDay: boolean
786791
): void {
787-
if (shouldFireDroppedEvent(dropEvent, date, allDay, this.events)) {
792+
if (shouldFireDroppedEvent(dropEvent, date, allDay, this.calendarId)) {
788793
this.eventTimesChanged.emit({
789794
type: CalendarEventTimesChangedEventType.Drop,
790795
event: dropEvent.dropData.event,

0 commit comments

Comments
 (0)