@syncfusion/ej2-schedule 26.1.39 → 26.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/ej2-schedule.min.js +2 -2
  2. package/dist/ej2-schedule.umd.min.js +2 -2
  3. package/dist/ej2-schedule.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-schedule.es2015.js +248 -112
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +250 -113
  7. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  8. package/dist/global/ej2-schedule.min.js +2 -2
  9. package/dist/global/ej2-schedule.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +12 -12
  12. package/src/schedule/actions/drag.d.ts +2 -0
  13. package/src/schedule/actions/drag.js +43 -15
  14. package/src/schedule/actions/resize.js +20 -19
  15. package/src/schedule/actions/touch.js +1 -0
  16. package/src/schedule/actions/virtual-scroll.d.ts +4 -0
  17. package/src/schedule/actions/virtual-scroll.js +78 -29
  18. package/src/schedule/base/interface.d.ts +3 -0
  19. package/src/schedule/base/schedule.d.ts +25 -0
  20. package/src/schedule/base/schedule.js +36 -1
  21. package/src/schedule/base/util.d.ts +10 -5
  22. package/src/schedule/base/util.js +15 -10
  23. package/src/schedule/event-renderer/agenda-base.js +2 -1
  24. package/src/schedule/event-renderer/inline-edit.js +4 -4
  25. package/src/schedule/event-renderer/month.js +3 -3
  26. package/src/schedule/event-renderer/timeline-view.js +4 -4
  27. package/src/schedule/event-renderer/vertical-view.js +3 -3
  28. package/src/schedule/event-renderer/year.js +5 -5
  29. package/src/schedule/popups/event-window.js +12 -5
  30. package/src/schedule/renderer/timeline-view.js +4 -4
  31. package/src/schedule/renderer/vertical-view.js +18 -8
  32. package/src/schedule/renderer/view-base.js +1 -1
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 26.1.39
3
+ * version : 26.1.41
4
4
  * Copyright Syncfusion Inc. 2001 - 2023. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@26.1.38",
3
+ "_id": "@syncfusion/ej2-schedule@26.1.40",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-6wiM9HSKXKAhDc4QcYohgHXw5aBMa9GL6V99hxG5+1qDdJRqCEsTmKThJSYDMYt8rC2CjJjgTWZt+SIveHVZvQ==",
5
+ "_integrity": "sha512-r4Jf4H5P3kGPXFq2X9L2V/9VTVF8lMu0xgl9V3gf3jb88dZmpuLb+JqpDF4zYXjL4QsU9cfILvCT6Kwj8ZC/GQ==",
6
6
  "_location": "/@syncfusion/ej2-schedule",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,8 +23,8 @@
23
23
  "/@syncfusion/ej2-react-schedule",
24
24
  "/@syncfusion/ej2-vue-schedule"
25
25
  ],
26
- "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-26.1.38.tgz",
27
- "_shasum": "43e837e3f81d03784ae9ec082ecbb0ecffb9f96c",
26
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-26.1.40.tgz",
27
+ "_shasum": "16adcad2451ceb85be6257a04b55099b6cac9945",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
29
  "_where": "/jenkins/workspace/elease-automation_release_26.1.1/packages/included",
30
30
  "author": {
@@ -36,15 +36,15 @@
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
38
  "@syncfusion/ej2-base": "~26.1.37",
39
- "@syncfusion/ej2-buttons": "~26.1.35",
40
- "@syncfusion/ej2-calendars": "~26.1.38",
41
- "@syncfusion/ej2-data": "~26.1.35",
42
- "@syncfusion/ej2-dropdowns": "~26.1.39",
39
+ "@syncfusion/ej2-buttons": "~26.1.40",
40
+ "@syncfusion/ej2-calendars": "~26.1.41",
41
+ "@syncfusion/ej2-data": "~26.1.41",
42
+ "@syncfusion/ej2-dropdowns": "~26.1.41",
43
43
  "@syncfusion/ej2-excel-export": "~26.1.35",
44
- "@syncfusion/ej2-inputs": "~26.1.39",
44
+ "@syncfusion/ej2-inputs": "~26.1.41",
45
45
  "@syncfusion/ej2-lists": "~26.1.35",
46
- "@syncfusion/ej2-navigations": "~26.1.39",
47
- "@syncfusion/ej2-popups": "~26.1.38",
46
+ "@syncfusion/ej2-navigations": "~26.1.41",
47
+ "@syncfusion/ej2-popups": "~26.1.41",
48
48
  "@types/requirejs": "^2.1.37"
49
49
  },
50
50
  "deprecated": false,
@@ -74,6 +74,6 @@
74
74
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
75
75
  },
76
76
  "typings": "index.d.ts",
77
- "version": "26.1.39",
77
+ "version": "26.1.41",
78
78
  "sideEffects": false
79
79
  }
@@ -24,6 +24,8 @@ export declare class DragAndDrop extends ActionBase {
24
24
  private targetTd;
25
25
  private isCursorAhead;
26
26
  private dragArea;
27
+ private enableCurrentViewDrag;
28
+ private isPreventMultiDrag;
27
29
  wireDragEvent(element: HTMLElement): void;
28
30
  setDragArea(): void;
29
31
  private dragHelper;
@@ -49,6 +49,8 @@ var DragAndDrop = /** @class */ (function (_super) {
49
49
  _this.isAllDayTarget = false;
50
50
  _this.targetTd = null;
51
51
  _this.isCursorAhead = false;
52
+ _this.enableCurrentViewDrag = false;
53
+ _this.isPreventMultiDrag = false;
52
54
  return _this;
53
55
  }
54
56
  DragAndDrop.prototype.wireDragEvent = function (element) {
@@ -164,6 +166,9 @@ var DragAndDrop = /** @class */ (function (_super) {
164
166
  if (cloneBottom > scrollHeight) {
165
167
  topValue = (parseInt(topValue, 10) - (cloneBottom - scrollHeight)) + 'px';
166
168
  }
169
+ if (this.isPreventMultiDrag) {
170
+ topValue = formatUnit(this.actionObj.clone.offsetTop);
171
+ }
167
172
  }
168
173
  return { left: leftValue, top: topValue };
169
174
  };
@@ -215,6 +220,7 @@ var DragAndDrop = /** @class */ (function (_super) {
215
220
  _this.actionObj.interval = dragEventArgs.interval;
216
221
  _this.actionObj.navigation = dragEventArgs.navigation;
217
222
  _this.actionObj.scroll = dragEventArgs.scroll;
223
+ _this.enableCurrentViewDrag = dragArgs.dragWithinRange && !dragArgs.navigation.enable && _this.parent.allowMultiDrag;
218
224
  _this.actionObj.excludeSelectors = dragEventArgs.excludeSelectors;
219
225
  var viewElement = _this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
220
226
  _this.scrollArgs = { element: viewElement, width: viewElement.scrollWidth, height: viewElement.scrollHeight };
@@ -375,6 +381,7 @@ var DragAndDrop = /** @class */ (function (_super) {
375
381
  DragAndDrop.prototype.dragStop = function (e) {
376
382
  var _this = this;
377
383
  this.isCursorAhead = false;
384
+ this.isPreventMultiDrag = false;
378
385
  this.removeCloneElementClasses();
379
386
  this.removeCloneElement();
380
387
  clearInterval(this.actionObj.navigationInterval);
@@ -443,7 +450,7 @@ var DragAndDrop = /** @class */ (function (_super) {
443
450
  this.timelineEventModule.cellWidth = this.actionObj.cellWidth;
444
451
  this.timelineEventModule.getSlotDates();
445
452
  this.actionObj.cellWidth = this.isHeaderRows ? this.timelineEventModule.cellWidth :
446
- util.getElementWidth(this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS));
453
+ this.parent.getElementWidth(this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS));
447
454
  this.calculateTimelineTime(e);
448
455
  }
449
456
  else {
@@ -620,7 +627,9 @@ var DragAndDrop = /** @class */ (function (_super) {
620
627
  var dragStart;
621
628
  var dragEnd;
622
629
  if (this.parent.activeViewOptions.timeScale.enable && !this.isAllDayDrag) {
623
- this.appendCloneElement(this.getEventWrapper(colIndex));
630
+ if (!this.enableCurrentViewDrag || this.multiData.length === 0) {
631
+ this.appendCloneElement(this.getEventWrapper(colIndex));
632
+ }
624
633
  dragStart = this.parent.getDateFromElement(td);
625
634
  dragStart.setMinutes(dragStart.getMinutes() + (diffInMinutes / heightPerMinute));
626
635
  dragEnd = new Date(dragStart.getTime());
@@ -677,18 +686,34 @@ var DragAndDrop = /** @class */ (function (_super) {
677
686
  this.startTime = eventObj_1[this.parent.eventFields.startTime].getTime();
678
687
  }
679
688
  var startTimeDiff = event[this.parent.eventFields.startTime].getTime() - this.startTime;
680
- for (var index_2 = 0; index_2 < this.multiData.length; index_2++) {
681
- this.updatedData[parseInt(index_2.toString(), 10)] =
682
- this.updateMultipleData(this.multiData[parseInt(index_2.toString(), 10)], startTimeDiff);
683
- var dayIndex = this.getDayIndex(this.updatedData[parseInt(index_2.toString(), 10)]);
684
- if (dayIndex >= 0) {
685
- var wrapper = this.getEventWrapper(dayIndex, this.updatedData[parseInt(index_2.toString(), 10)][this.parent.eventFields.isAllDay]);
686
- this.appendCloneElement(wrapper, this.actionObj.cloneElement[parseInt(index_2.toString(), 10)]);
687
- this.updateEventHeight(this.updatedData[parseInt(index_2.toString(), 10)], index_2, dayIndex);
689
+ if (this.enableCurrentViewDrag) {
690
+ var renderDates = this.getRenderedDates();
691
+ for (var i = 0; i < this.multiData.length; i++) {
692
+ var eventObj_2 = extend({}, this.multiData[parseInt(i.toString(), 10)], null, true);
693
+ var startTime = new Date(eventObj_2[this.parent.eventFields.startTime].getTime() + startTimeDiff);
694
+ var dayIndex = this.parent.getIndexOfDate(renderDates, util.resetTime(startTime));
695
+ if (dayIndex < 0) {
696
+ this.isPreventMultiDrag = true;
697
+ break;
698
+ }
699
+ this.isPreventMultiDrag = false;
688
700
  }
689
- else {
690
- if (!isNullOrUndefined(this.actionObj.cloneElement[parseInt(index_2.toString(), 10)].parentNode)) {
691
- remove(this.actionObj.cloneElement[parseInt(index_2.toString(), 10)]);
701
+ }
702
+ if (!this.isPreventMultiDrag) {
703
+ for (var index_2 = 0; index_2 < this.multiData.length; index_2++) {
704
+ this.updatedData[parseInt(index_2.toString(), 10)] =
705
+ this.updateMultipleData(this.multiData[parseInt(index_2.toString(), 10)], startTimeDiff);
706
+ var dayIndex = this.getDayIndex(this.updatedData[parseInt(index_2.toString(), 10)]);
707
+ if (dayIndex >= 0) {
708
+ var isAllDay = this.updatedData[parseInt(index_2.toString(), 10)][this.parent.eventFields.isAllDay];
709
+ var wrapper = this.getEventWrapper(dayIndex, isAllDay);
710
+ this.appendCloneElement(wrapper, this.actionObj.cloneElement[parseInt(index_2.toString(), 10)]);
711
+ this.updateEventHeight(this.updatedData[parseInt(index_2.toString(), 10)], index_2, dayIndex);
712
+ }
713
+ else {
714
+ if (!isNullOrUndefined(this.actionObj.cloneElement[parseInt(index_2.toString(), 10)].parentNode)) {
715
+ remove(this.actionObj.cloneElement[parseInt(index_2.toString(), 10)]);
716
+ }
692
717
  }
693
718
  }
694
719
  }
@@ -906,6 +931,9 @@ var DragAndDrop = /** @class */ (function (_super) {
906
931
  };
907
932
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
908
933
  DragAndDrop.prototype.swapDragging = function (e) {
934
+ if (this.isPreventMultiDrag) {
935
+ return;
936
+ }
909
937
  var colIndex = !isNullOrUndefined(closest(this.actionObj.target, 'td')) && closest(this.actionObj.target, 'td').cellIndex;
910
938
  if (closest(this.actionObj.target, '.' + cls.DATE_HEADER_WRAP_CLASS) &&
911
939
  !closest(this.actionObj.clone, '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS)) {
@@ -1262,7 +1290,7 @@ var DragAndDrop = /** @class */ (function (_super) {
1262
1290
  ~~(dragArea.querySelector('table').offsetHeight / trCollection.length) : this.actionObj.cellHeight;
1263
1291
  var rowIndex = Math.floor(Math.floor((this.actionObj.Y +
1264
1292
  (dragArea.scrollTop - translateY - (window.scrollY || window.pageYOffset))) -
1265
- util.getElementTop(dragArea)) / rowHeight);
1293
+ util.getElementTop(dragArea, this.parent.uiStateValues.isTransformed)) / rowHeight);
1266
1294
  rowIndex = (rowIndex < 0) ? 0 : (rowIndex > trCollection.length - 1) ? trCollection.length - 1 : rowIndex;
1267
1295
  this.actionObj.index = rowIndex;
1268
1296
  var eventContainer = this.parent.element.querySelectorAll('.e-appointment-container:not(.e-hidden)').item(rowIndex);
@@ -1278,7 +1306,7 @@ var DragAndDrop = /** @class */ (function (_super) {
1278
1306
  if (!isNullOrUndefined(this.parent.eventDragArea)) {
1279
1307
  return;
1280
1308
  }
1281
- var top = util.getElementHeight(trCollection[parseInt(rowIndex.toString(), 10)]) * rowIndex;
1309
+ var top = this.parent.getElementHeight(trCollection[parseInt(rowIndex.toString(), 10)]) * rowIndex;
1282
1310
  if (this.parent.rowAutoHeight) {
1283
1311
  var cursorElement = this.getCursorElement(e);
1284
1312
  if (cursorElement) {
@@ -86,8 +86,8 @@ var Resize = /** @class */ (function (_super) {
86
86
  };
87
87
  _this.actionObj.groupIndex = _this.parent.uiStateValues.isGroupAdaptive ? _this.parent.uiStateValues.groupIndex : 0;
88
88
  var workCell = _this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);
89
- _this.actionObj.cellWidth = util.getElementWidth(workCell);
90
- _this.actionObj.cellHeight = util.getElementHeight(workCell);
89
+ _this.actionObj.cellWidth = _this.parent.getElementWidth(workCell);
90
+ _this.actionObj.cellHeight = _this.parent.getElementHeight(workCell);
91
91
  var hRows = _this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });
92
92
  if (_this.parent.activeView.isTimelineView() && hRows.length > 0 && ['Date', 'Hour'].indexOf(hRows.slice(-1)[0]) < 0) {
93
93
  var tr = _this.parent.getContentTable().querySelector('tr');
@@ -397,9 +397,10 @@ var Resize = /** @class */ (function (_super) {
397
397
  parseInt(this.actionObj.clone.style.left, 10);
398
398
  offsetValue = Math.round(offsetValue / this.actionObj.cellWidth) * this.actionObj.cellWidth;
399
399
  if (!isLeft) {
400
- offsetValue += (util.getElementWidth(this.actionObj.clone) - this.actionObj.cellWidth);
400
+ offsetValue += (this.parent.getElementWidth(this.actionObj.clone) - this.actionObj.cellWidth);
401
401
  }
402
- cellIndex = Math.floor(offsetValue / Math.floor(util.getElementWidth(tr) / noOfDays));
402
+ cellIndex = !isTimelineMonth ? Math.round(offsetValue / (this.parent.getElementWidth(tr) / noOfDays)) :
403
+ Math.floor(offsetValue / Math.floor(this.parent.getElementWidth(tr) / noOfDays));
403
404
  isDateHeader = isTimeViews && headerName === 'Date';
404
405
  cellIndex = isLeft ? cellIndex : isTimelineMonth ? cellIndex + 1 : cellIndex;
405
406
  isLastCell = cellIndex === tdCollections.length;
@@ -408,7 +409,7 @@ var Resize = /** @class */ (function (_super) {
408
409
  else {
409
410
  var cellWidth = this.actionObj.cellWidth;
410
411
  cellIndex = isLeft ? Math.floor(offset / this.actionObj.cellWidth) :
411
- Math.ceil((offset + (util.getElementWidth(this.actionObj.clone) - cellWidth)) / this.actionObj.cellWidth);
412
+ Math.ceil((offset + (this.parent.getElementWidth(this.actionObj.clone) - cellWidth)) / this.actionObj.cellWidth);
412
413
  if (this.parent.enableRtl) {
413
414
  var cellOffsetWidth = 0;
414
415
  if (headerName === 'TimelineMonth' || (!this.parent.activeViewOptions.timeScale.enable &&
@@ -416,7 +417,7 @@ var Resize = /** @class */ (function (_super) {
416
417
  cellOffsetWidth = this.actionObj.cellWidth;
417
418
  }
418
419
  var offsetWidth = (Math.floor(offset / this.actionObj.cellWidth) *
419
- this.actionObj.cellWidth) + (isLeft ? 0 : util.getElementWidth(this.actionObj.clone) - cellOffsetWidth);
420
+ this.actionObj.cellWidth) + (isLeft ? 0 : this.parent.getElementWidth(this.actionObj.clone) - cellOffsetWidth);
420
421
  cellIndex = Math.floor(offsetWidth / this.actionObj.cellWidth);
421
422
  }
422
423
  isLastCell = cellIndex === tdCollections.length;
@@ -435,7 +436,7 @@ var Resize = /** @class */ (function (_super) {
435
436
  }
436
437
  else {
437
438
  if (!isLeft) {
438
- offset += util.getElementWidth(this.actionObj.clone);
439
+ offset += this.parent.getElementWidth(this.actionObj.clone);
439
440
  }
440
441
  var spanMinutes = Math.ceil((this.actionObj.slotInterval / this.actionObj.cellWidth) *
441
442
  (offset - Math.floor(offset / this.actionObj.cellWidth) * this.actionObj.cellWidth));
@@ -447,9 +448,9 @@ var Resize = /** @class */ (function (_super) {
447
448
  }
448
449
  else {
449
450
  var cloneIndex = closest(this.actionObj.clone, 'td').cellIndex;
450
- var originalWidth = Math.ceil((isLeft ? util.getElementWidth(this.actionObj.element) : 0) /
451
+ var originalWidth = Math.ceil((isLeft ? this.parent.getElementWidth(this.actionObj.element) : 0) /
451
452
  this.actionObj.cellWidth) * this.actionObj.cellWidth;
452
- var noOfDays = Math.ceil((util.getElementWidth(this.actionObj.clone) - originalWidth) /
453
+ var noOfDays = Math.ceil((this.parent.getElementWidth(this.actionObj.clone) - originalWidth) /
453
454
  this.actionObj.cellWidth);
454
455
  var tr = closest(this.actionObj.clone, 'tr');
455
456
  var dayIndex = isLeft ? cloneIndex - noOfDays : cloneIndex + noOfDays - 1;
@@ -512,9 +513,9 @@ var Resize = /** @class */ (function (_super) {
512
513
  var slotInterval = (this.actionObj.cellWidth / this.actionObj.slotInterval) * this.actionObj.interval;
513
514
  var pageWidth = isLeft ? (this.actionObj.X - this.actionObj.pageX) : (this.actionObj.pageX - this.actionObj.X);
514
515
  var targetWidth = isTimelineView ?
515
- (util.getElementWidth(this.actionObj.element) / this.actionObj.cellWidth) * this.actionObj.cellWidth :
516
- this.parent.currentView === 'Month' ? util.getElementWidth(this.actionObj.element) :
517
- Math.ceil(util.getElementWidth(this.actionObj.element) / this.actionObj.cellWidth) * this.actionObj.cellWidth;
516
+ (this.parent.getElementWidth(this.actionObj.element) / this.actionObj.cellWidth) * this.actionObj.cellWidth :
517
+ this.parent.currentView === 'Month' ? this.parent.getElementWidth(this.actionObj.element) :
518
+ Math.ceil(this.parent.getElementWidth(this.actionObj.element) / this.actionObj.cellWidth) * this.actionObj.cellWidth;
518
519
  var offsetWidth = targetWidth + (Math.ceil(pageWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth);
519
520
  var left = (this.parent.enableRtl) ? parseInt(this.actionObj.element.style.right, 10) : this.actionObj.clone.offsetLeft;
520
521
  if (isTimeViews) {
@@ -529,7 +530,7 @@ var Resize = /** @class */ (function (_super) {
529
530
  this.actionObj.event[this.parent.eventFields.isAllDay] = false;
530
531
  }
531
532
  var width = !isLeft && ((offsetWidth + this.actionObj.clone.offsetLeft > this.scrollArgs.width)) ?
532
- util.getElementWidth(this.actionObj.clone) : (offsetWidth < this.actionObj.cellWidth) ? offsetWidth : offsetWidth;
533
+ this.parent.getElementWidth(this.actionObj.clone) : (offsetWidth < this.actionObj.cellWidth) ? offsetWidth : offsetWidth;
533
534
  if (this.parent.enableRtl) {
534
535
  var rightValue = isTimelineView ? parseInt(this.actionObj.element.style.right, 10) :
535
536
  -(offsetWidth - this.actionObj.cellWidth);
@@ -543,7 +544,7 @@ var Resize = /** @class */ (function (_super) {
543
544
  }
544
545
  rightValue = rightValue >= this.scrollArgs.width ? this.scrollArgs.width - this.actionObj.cellWidth : rightValue;
545
546
  styles.right = formatUnit(rightValue);
546
- width = width + rightValue > this.scrollArgs.width ? util.getElementWidth(this.actionObj.clone) : width;
547
+ width = width + rightValue > this.scrollArgs.width ? this.parent.getElementWidth(this.actionObj.clone) : width;
547
548
  }
548
549
  else {
549
550
  var offsetLeft = isLeft ? this.actionObj.element.offsetLeft - (this.actionObj.X - this.actionObj.pageX) :
@@ -551,12 +552,12 @@ var Resize = /** @class */ (function (_super) {
551
552
  if (isTimelineView) {
552
553
  offsetLeft = isLeft ? offsetLeft : parseInt(this.actionObj.clone.style.left, 10);
553
554
  if (this.parent.enableRtl) {
554
- offsetLeft = !isLeft ? (this.actionObj.pageX < this.actionObj.X - util.getElementWidth(this.actionObj.clone))
555
+ offsetLeft = !isLeft ? (this.actionObj.pageX < this.actionObj.X - this.parent.getElementWidth(this.actionObj.clone))
555
556
  ? parseInt(this.actionObj.clone.style.right, 10) : offsetLeft : offsetLeft;
556
557
  }
557
558
  else {
558
- offsetLeft = isLeft ? (this.actionObj.pageX > this.actionObj.X + util.getElementWidth(this.actionObj.clone) &&
559
- util.getElementWidth(this.actionObj.clone) === this.actionObj.cellWidth) ?
559
+ offsetLeft = isLeft ? (this.actionObj.pageX > this.actionObj.X + this.parent.getElementWidth(this.actionObj.clone) &&
560
+ this.parent.getElementWidth(this.actionObj.clone) === this.actionObj.cellWidth) ?
560
561
  parseInt(this.actionObj.clone.style.left, 10) : offsetLeft : offsetLeft;
561
562
  }
562
563
  }
@@ -572,10 +573,10 @@ var Resize = /** @class */ (function (_super) {
572
573
  }
573
574
  else {
574
575
  offsetLeft = 0;
575
- width = util.getElementWidth(this.actionObj.clone);
576
+ width = this.parent.getElementWidth(this.actionObj.clone);
576
577
  }
577
578
  }
578
- var cloneWidth = Math.ceil(util.getElementWidth(this.actionObj.clone) / this.actionObj.cellWidth) *
579
+ var cloneWidth = Math.ceil(this.parent.getElementWidth(this.actionObj.clone) / this.actionObj.cellWidth) *
579
580
  this.actionObj.cellWidth;
580
581
  if (isLeft) {
581
582
  styles.left = formatUnit(isTimelineView ? offsetLeft : isLeft ? leftValue < 0 ? -offsetLeft :
@@ -125,6 +125,7 @@ var ScheduleTouch = /** @class */ (function () {
125
125
  this.parent.selectedElements = [];
126
126
  this.parent.eventBase.getSelectedEventElements(target);
127
127
  if (this.parent.resizeModule && closest(e.originalEvent.target, '.' + cls.EVENT_RESIZE_CLASS)) {
128
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
129
  this.parent.resizeModule.resizeStart(e.originalEvent);
129
130
  }
130
131
  }
@@ -16,6 +16,7 @@ export declare class VirtualScroll {
16
16
  isHorizontalScroll: boolean;
17
17
  isRemoteRefresh: boolean;
18
18
  private startIndex;
19
+ existingDataCollection: TdData[];
19
20
  constructor(parent: Schedule);
20
21
  private addEventListener;
21
22
  private removeEventListener;
@@ -40,6 +41,9 @@ export declare class VirtualScroll {
40
41
  private setStartEndIndex;
41
42
  updateContent(resWrap: HTMLElement, conWrap: HTMLElement, eventWrap: HTMLElement, resCollection: TdData[]): void;
42
43
  private updateHorizontalContent;
44
+ private updateMonthViewContent;
45
+ private updateOtherViewContent;
46
+ private mergeNewTdData;
43
47
  private getBufferCollection;
44
48
  private setTranslate;
45
49
  updateFocusedWorkCell(): void;
@@ -14,6 +14,7 @@ var VirtualScroll = /** @class */ (function () {
14
14
  this.renderedLength = 0;
15
15
  this.averageRowHeight = 0;
16
16
  this.startIndex = 0;
17
+ this.existingDataCollection = [];
17
18
  this.parent = parent;
18
19
  this.addEventListener();
19
20
  }
@@ -86,10 +87,10 @@ var VirtualScroll = /** @class */ (function () {
86
87
  };
87
88
  VirtualScroll.prototype.setItemSize = function () {
88
89
  if (this.isHorizontalScroll) {
89
- this.itemSize = util.getElementWidthFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
90
+ this.itemSize = util.getElementWidthFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS, this.parent.uiStateValues.isTransformed) || this.itemSize;
90
91
  }
91
92
  else {
92
- this.itemSize = util.getElementHeightFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
93
+ this.itemSize = this.parent.getElementHeightFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
93
94
  }
94
95
  };
95
96
  VirtualScroll.prototype.refreshLayout = function () {
@@ -373,43 +374,91 @@ var VirtualScroll = /** @class */ (function () {
373
374
  append(eventRows, eventWrap);
374
375
  };
375
376
  VirtualScroll.prototype.updateHorizontalContent = function (conWrap, resCollection) {
377
+ this.existingDataCollection = this.parent.resourceBase.expandedResources;
376
378
  this.parent.resourceBase.expandedResources = resCollection;
377
379
  var selectedEle = this.parent.getSelectedCells();
378
380
  this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;
379
- var renderedLength = conWrap.querySelectorAll('tbody tr').length;
381
+ var tbody = conWrap.querySelector('tbody');
382
+ var renderedRows = Array.from(tbody.querySelectorAll('tr'));
383
+ if (this.parent.currentView === 'Month') {
384
+ this.updateMonthViewContent(conWrap, resCollection);
385
+ }
386
+ else {
387
+ this.updateOtherViewContent(conWrap, resCollection, renderedRows);
388
+ }
389
+ };
390
+ VirtualScroll.prototype.updateMonthViewContent = function (conWrap, resCollection) {
391
+ var renderedLength = conWrap.querySelectorAll(' tr').length;
380
392
  for (var i = 0; i < renderedLength; i++) {
381
393
  remove(conWrap.querySelector('tbody tr'));
382
394
  }
383
- if (this.parent.currentView === 'Month') {
384
- if (this.parent.activeViewOptions.group.byDate) {
385
- this.parent.activeView.colLevels[0] = resCollection;
386
- }
387
- else {
388
- this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 2] = resCollection;
389
- }
390
- var contentRows = this.parent.activeView.getContentRows();
391
- append(contentRows, conWrap.querySelector('tbody'));
395
+ if (this.parent.activeViewOptions.group.byDate) {
396
+ this.parent.activeView.colLevels[0] = resCollection;
392
397
  }
393
398
  else {
394
- var col = [].slice.call(conWrap.querySelector('colgroup').children);
395
- for (var i = 0; i < col.length; i++) {
396
- remove(col[parseInt(i.toString(), 10)]);
397
- }
398
- this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1] = resCollection;
399
- var contentRows = this.parent.activeView.getContentRows();
400
- var table = conWrap.querySelector('table');
401
- var thead = conWrap.querySelector('thead');
402
- var colGroupEle_1 = conWrap.querySelector('colgroup');
403
- resCollection.forEach(function () {
404
- colGroupEle_1.appendChild(createElement('col'));
399
+ this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 2] = resCollection;
400
+ }
401
+ var contentRows = this.parent.activeView.getContentRows();
402
+ append(contentRows, conWrap.querySelector('tbody'));
403
+ };
404
+ VirtualScroll.prototype.updateOtherViewContent = function (conWrap, resCollection, renderedRows) {
405
+ var tbody = conWrap.querySelector('tbody');
406
+ var colGroup = conWrap.querySelector('colgroup');
407
+ var thead = conWrap.querySelector('thead');
408
+ var table = conWrap.querySelector('table');
409
+ this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1] = resCollection;
410
+ var newGroupIndices = new Set(resCollection.map(function (data) { return data.groupIndex; }));
411
+ renderedRows.forEach(function (row) {
412
+ var tdElements = row.querySelectorAll('td');
413
+ tdElements.forEach(function (td) {
414
+ var groupIndex = parseInt(td.getAttribute('data-group-index'), 10);
415
+ if (!newGroupIndices.has(groupIndex)) {
416
+ td.remove();
417
+ }
405
418
  });
406
- thead.appendChild(this.parent.eventBase.createEventWrapper('', this.startIndex > 0 ? this.startIndex : 0));
407
- if (this.parent.activeViewOptions.timeScale.enable) {
408
- thead.appendChild(this.parent.eventBase.createEventWrapper('timeIndicator'));
409
- }
410
- prepend([thead], table);
411
- append(contentRows, conWrap.querySelector('tbody'));
419
+ });
420
+ var col = [].slice.call(conWrap.querySelector('colgroup').children);
421
+ for (var i = 0; i < col.length; i++) {
422
+ remove(col[parseInt(i.toString(), 10)]);
423
+ }
424
+ resCollection.forEach(function () { return colGroup.appendChild(createElement('col')); });
425
+ var tHead = [].slice.call(conWrap.querySelector('thead').children);
426
+ for (var i = 0; i < tHead.length; i++) {
427
+ remove(tHead[parseInt(i.toString(), 10)]);
412
428
  }
429
+ thead.appendChild(this.parent.eventBase.createEventWrapper('', this.startIndex > 0 ? this.startIndex : 0));
430
+ if (this.parent.activeViewOptions.timeScale.enable) {
431
+ thead.appendChild(this.parent.eventBase.createEventWrapper('timeIndicator'));
432
+ }
433
+ prepend([thead], table);
434
+ var contentRows = this.parent.activeView.getContentRows();
435
+ this.mergeNewTdData(tbody, contentRows);
436
+ };
437
+ VirtualScroll.prototype.mergeNewTdData = function (tbody, contentRows) {
438
+ var existingRows = Array.from(tbody.querySelectorAll('tr'));
439
+ existingRows.forEach(function (existingRow, rowIndex) {
440
+ if (rowIndex < contentRows.length) {
441
+ var newRow = contentRows[parseInt(rowIndex.toString(), 10)];
442
+ var existingTds_1 = Array.from(existingRow.querySelectorAll('td'));
443
+ var newTds = Array.from(newRow.querySelectorAll('td'));
444
+ newTds.forEach(function (newTd) {
445
+ var newGroupIndex = parseInt(newTd.getAttribute('data-group-index').toString(), 10);
446
+ var inserted = false;
447
+ for (var _i = 0, existingTds_2 = existingTds_1; _i < existingTds_2.length; _i++) {
448
+ var existingTd = existingTds_2[_i];
449
+ var existingGroupIndex = parseInt(existingTd.getAttribute('data-group-index').toString(), 10);
450
+ if (newGroupIndex < existingGroupIndex) {
451
+ existingRow.insertBefore(newTd, existingTd);
452
+ inserted = true;
453
+ break;
454
+ }
455
+ }
456
+ if (!inserted) {
457
+ existingRow.appendChild(newTd);
458
+ }
459
+ });
460
+ }
461
+ });
413
462
  };
414
463
  VirtualScroll.prototype.getBufferCollection = function (startIndex, endIndex) {
415
464
  return this.parent.resourceBase.expandedResources.slice(startIndex, endIndex);
@@ -247,6 +247,8 @@ export interface DragEventArgs extends BaseEventArgs {
247
247
  scroll?: ScrollOptions;
248
248
  /** Defines the date range navigation action while dragging. */
249
249
  navigation?: NavigateOptions;
250
+ /** Allows to drag the events outside the currently rendered date range */
251
+ dragWithinRange?: boolean;
250
252
  }
251
253
  /** An interface that holds options of virtual scroll action. */
252
254
  export interface ScrollEventArgs extends BaseEventArgs {
@@ -525,6 +527,7 @@ export interface UIStateArgs {
525
527
  scheduleHeight?: number;
526
528
  isTapHold?: boolean;
527
529
  isTouchScroll?: boolean;
530
+ isTransformed?: boolean;
528
531
  }
529
532
  /**
530
533
  * @private
@@ -918,6 +918,31 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
918
918
  render(): void;
919
919
  private renderTableContainer;
920
920
  getEventTemplateName(resIndex: number): string;
921
+ /**
922
+ * Method to get element width
923
+ *
924
+ * @param {HTMLElement} element Accepts the DOM element
925
+ * @returns {number} Returns the width of the given element
926
+ * @private
927
+ */
928
+ getElementWidth(element: HTMLElement): number;
929
+ /**
930
+ * Method to get element height
931
+ *
932
+ * @param {HTMLElement} element Accepts the DOM element
933
+ * @returns {number} Returns the Height of the given element
934
+ * @private
935
+ */
936
+ getElementHeight(element: HTMLElement): number;
937
+ /**
938
+ * Method to get height from element
939
+ *
940
+ * @param {Element} element Accepts the DOM element
941
+ * @param {string} elementClass Accepts the element class
942
+ * @returns {number} Returns the height of the element
943
+ * @private
944
+ */
945
+ getElementHeightFromClass(element: Element, elementClass: string): number;
921
946
  /**
922
947
  * Method to render react templates
923
948
  *
@@ -148,6 +148,37 @@ var Schedule = /** @class */ (function (_super) {
148
148
  }
149
149
  return templateName;
150
150
  };
151
+ /**
152
+ * Method to get element width
153
+ *
154
+ * @param {HTMLElement} element Accepts the DOM element
155
+ * @returns {number} Returns the width of the given element
156
+ * @private
157
+ */
158
+ Schedule.prototype.getElementWidth = function (element) {
159
+ return util.getElementWidth(element, this.uiStateValues.isTransformed);
160
+ };
161
+ /**
162
+ * Method to get element height
163
+ *
164
+ * @param {HTMLElement} element Accepts the DOM element
165
+ * @returns {number} Returns the Height of the given element
166
+ * @private
167
+ */
168
+ Schedule.prototype.getElementHeight = function (element) {
169
+ return util.getElementHeight(element, this.uiStateValues.isTransformed);
170
+ };
171
+ /**
172
+ * Method to get height from element
173
+ *
174
+ * @param {Element} element Accepts the DOM element
175
+ * @param {string} elementClass Accepts the element class
176
+ * @returns {number} Returns the height of the element
177
+ * @private
178
+ */
179
+ Schedule.prototype.getElementHeightFromClass = function (element, elementClass) {
180
+ return util.getElementHeightFromClass(element, elementClass, this.uiStateValues.isTransformed);
181
+ };
151
182
  /**
152
183
  * Method to render react templates
153
184
  *
@@ -228,6 +259,7 @@ var Schedule = /** @class */ (function (_super) {
228
259
  this.headerModule = new HeaderRenderer(this);
229
260
  }
230
261
  this.renderTableContainer();
262
+ this.uiStateValues.isTransformed = Math.round(this.element.getBoundingClientRect().width) !== this.element.offsetWidth;
231
263
  if (Browser.isDevice || Browser.isTouch) {
232
264
  this.scheduleTouchModule = new ScheduleTouch(this);
233
265
  }
@@ -731,7 +763,7 @@ var Schedule = /** @class */ (function (_super) {
731
763
  this.uiStateValues = {
732
764
  expand: false, isInitial: true, left: 0, top: 0, isGroupAdaptive: false,
733
765
  isIgnoreOccurrence: false, groupIndex: this.adaptiveGroupIndex, action: false,
734
- isBlock: false, isCustomMonth: true, isPreventTimezone: false
766
+ isBlock: false, isCustomMonth: true, isPreventTimezone: false, isTransformed: false
735
767
  };
736
768
  }
737
769
  this.currentTimezoneDate = this.getCurrentTime();
@@ -2124,6 +2156,9 @@ var Schedule = /** @class */ (function (_super) {
2124
2156
  * @returns {void}
2125
2157
  */
2126
2158
  Schedule.prototype.scrollTo = function (hour, scrollDate) {
2159
+ if (this.currentView.indexOf('Agenda') < 0 && isNullOrUndefined(this.element.querySelector('.e-work-cells'))) {
2160
+ return;
2161
+ }
2127
2162
  if (this.activeView.scrollToDate && isNullOrUndefined(hour) && scrollDate) {
2128
2163
  this.activeView.scrollToDate(scrollDate);
2129
2164
  }