@@ -28,6 +28,12 @@ import { CalendarResizeHelper } from '../../providers/calendarResizeHelper.provi
28
28
import { CalendarEventTimesChangedEvent } from '../../interfaces/calendarEventTimesChangedEvent.interface' ;
29
29
import { CalendarUtils } from '../../providers/calendarUtils.provider' ;
30
30
31
+ interface CurrentResize {
32
+ originalOffset : number ;
33
+ originalSpan : number ;
34
+ edge : string ;
35
+ }
36
+
31
37
/**
32
38
* Shows all events on a given week. Example usage:
33
39
*
@@ -68,7 +74,7 @@ import { CalendarUtils } from '../../providers/calendarUtils.provider';
68
74
[dragSnapGrid]="{x: allowDragOutside ? 0 : getDayColumnWidth(eventRowContainer)}"
69
75
[validateDrag]="validateDrag"
70
76
(dragStart)="dragStart(weekViewContainer, event)"
71
- [dragAxis]="{x: weekEvent.event.draggable && !currentResize , y: allowDragOutside}"
77
+ [dragAxis]="{x: weekEvent.event.draggable && currentResizes.size === 0 , y: allowDragOutside}"
72
78
(dragEnd)="eventDragged(weekEvent, $event.x, getDayColumnWidth(eventRowContainer))"
73
79
[dropData]="{event: weekEvent.event}">
74
80
<mwl-calendar-week-view-event
@@ -173,11 +179,7 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
173
179
/**
174
180
* @hidden
175
181
*/
176
- currentResize : {
177
- originalOffset : number ,
178
- originalSpan : number ,
179
- edge : string
180
- } ;
182
+ currentResizes : Map < WeekViewEvent , CurrentResize > = new Map ( ) ;
181
183
182
184
/**
183
185
* @hidden
@@ -236,11 +238,11 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
236
238
* @hidden
237
239
*/
238
240
resizeStarted ( weekViewContainer : HTMLElement , weekEvent : WeekViewEvent , resizeEvent : ResizeEvent ) : void {
239
- this . currentResize = {
241
+ this . currentResizes . set ( weekEvent , {
240
242
originalOffset : weekEvent . offset ,
241
243
originalSpan : weekEvent . span ,
242
244
edge : typeof resizeEvent . edges . left !== 'undefined' ? 'left' : 'right'
243
- } ;
245
+ } ) ;
244
246
const resizeHelper : CalendarResizeHelper = new CalendarResizeHelper ( weekViewContainer , this . getDayColumnWidth ( weekViewContainer ) ) ;
245
247
this . validateResize = ( { rectangle} ) => resizeHelper . validateResize ( { rectangle} ) ;
246
248
this . cdr . markForCheck ( ) ;
@@ -250,41 +252,47 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
250
252
* @hidden
251
253
*/
252
254
resizing ( weekEvent : WeekViewEvent , resizeEvent : ResizeEvent , dayWidth : number ) : void {
255
+
256
+ const currentResize : CurrentResize = this . currentResizes . get ( weekEvent ) ;
257
+
253
258
if ( resizeEvent . edges . left ) {
254
259
const diff : number = Math . round ( + resizeEvent . edges . left / dayWidth ) ;
255
- weekEvent . offset = this . currentResize . originalOffset + diff ;
256
- weekEvent . span = this . currentResize . originalSpan - diff ;
260
+ weekEvent . offset = currentResize . originalOffset + diff ;
261
+ weekEvent . span = currentResize . originalSpan - diff ;
257
262
} else if ( resizeEvent . edges . right ) {
258
263
const diff : number = Math . round ( + resizeEvent . edges . right / dayWidth ) ;
259
- weekEvent . span = this . currentResize . originalSpan + diff ;
264
+ weekEvent . span = currentResize . originalSpan + diff ;
260
265
}
266
+
261
267
}
262
268
263
269
/**
264
270
* @hidden
265
271
*/
266
272
resizeEnded ( weekEvent : WeekViewEvent ) : void {
267
273
274
+ const currentResize : CurrentResize = this . currentResizes . get ( weekEvent ) ;
275
+
268
276
let daysDiff : number ;
269
- if ( this . currentResize . edge === 'left' ) {
270
- daysDiff = weekEvent . offset - this . currentResize . originalOffset ;
277
+ if ( currentResize . edge === 'left' ) {
278
+ daysDiff = weekEvent . offset - currentResize . originalOffset ;
271
279
} else {
272
- daysDiff = weekEvent . span - this . currentResize . originalSpan ;
280
+ daysDiff = weekEvent . span - currentResize . originalSpan ;
273
281
}
274
282
275
- weekEvent . offset = this . currentResize . originalOffset ;
276
- weekEvent . span = this . currentResize . originalSpan ;
283
+ weekEvent . offset = currentResize . originalOffset ;
284
+ weekEvent . span = currentResize . originalSpan ;
277
285
278
286
let newStart : Date = weekEvent . event . start ;
279
287
let newEnd : Date = weekEvent . event . end ;
280
- if ( this . currentResize . edge === 'left' ) {
288
+ if ( currentResize . edge === 'left' ) {
281
289
newStart = addDays ( newStart , daysDiff ) ;
282
290
} else if ( newEnd ) {
283
291
newEnd = addDays ( newEnd , daysDiff ) ;
284
292
}
285
293
286
294
this . eventTimesChanged . emit ( { newStart, newEnd, event : weekEvent . event } ) ;
287
- this . currentResize = null ;
295
+ this . currentResizes . delete ( weekEvent ) ;
288
296
289
297
}
290
298
@@ -331,7 +339,7 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
331
339
dragStart ( weekViewContainer : HTMLElement , event : HTMLElement ) : void {
332
340
if ( ! this . allowDragOutside ) {
333
341
const dragHelper : CalendarDragHelper = new CalendarDragHelper ( weekViewContainer , event ) ;
334
- this . validateDrag = ( { x, y} ) => ! this . currentResize && dragHelper . validateDrag ( { x, y} ) ;
342
+ this . validateDrag = ( { x, y} ) => this . currentResizes . size === 0 && dragHelper . validateDrag ( { x, y} ) ;
335
343
this . cdr . markForCheck ( ) ;
336
344
}
337
345
}
0 commit comments