@syncfusion/ej2-schedule 19.2.60 → 19.3.48

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 (125) hide show
  1. package/.eslintrc.json +1 -1
  2. package/CHANGELOG.md +65 -0
  3. package/dist/ej2-schedule.umd.min.js +2 -2
  4. package/dist/ej2-schedule.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js +445 -164
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +456 -172
  8. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  9. package/dist/global/ej2-schedule.min.js +2 -2
  10. package/dist/global/ej2-schedule.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +15 -15
  13. package/src/schedule/actions/action-base.js +1 -1
  14. package/src/schedule/actions/crud.js +3 -2
  15. package/src/schedule/actions/drag.d.ts +2 -0
  16. package/src/schedule/actions/drag.js +27 -17
  17. package/src/schedule/actions/keyboard.js +5 -5
  18. package/src/schedule/actions/resize.js +17 -10
  19. package/src/schedule/actions/virtual-scroll.js +2 -1
  20. package/src/schedule/base/interface.d.ts +9 -0
  21. package/src/schedule/base/resource.js +12 -3
  22. package/src/schedule/base/schedule-model.d.ts +13 -1
  23. package/src/schedule/base/schedule.d.ts +45 -2
  24. package/src/schedule/base/schedule.js +139 -14
  25. package/src/schedule/base/type.d.ts +4 -0
  26. package/src/schedule/event-renderer/event-base.d.ts +2 -1
  27. package/src/schedule/event-renderer/event-base.js +42 -28
  28. package/src/schedule/event-renderer/month.d.ts +0 -1
  29. package/src/schedule/event-renderer/month.js +32 -33
  30. package/src/schedule/event-renderer/timeline-view.d.ts +2 -0
  31. package/src/schedule/event-renderer/timeline-view.js +31 -1
  32. package/src/schedule/event-renderer/vertical-view.js +26 -19
  33. package/src/schedule/event-renderer/year.js +4 -1
  34. package/src/schedule/models/event-settings-model.d.ts +21 -1
  35. package/src/schedule/models/event-settings.d.ts +20 -0
  36. package/src/schedule/models/event-settings.js +6 -0
  37. package/src/schedule/models/views-model.d.ts +9 -0
  38. package/src/schedule/models/views.d.ts +8 -0
  39. package/src/schedule/models/views.js +3 -0
  40. package/src/schedule/popups/event-window.d.ts +3 -2
  41. package/src/schedule/popups/event-window.js +7 -3
  42. package/src/schedule/popups/form-validator.js +4 -1
  43. package/src/schedule/popups/quick-popups.d.ts +3 -2
  44. package/src/schedule/popups/quick-popups.js +32 -13
  45. package/src/schedule/renderer/agenda.d.ts +1 -0
  46. package/src/schedule/renderer/agenda.js +20 -3
  47. package/src/schedule/renderer/header-renderer.d.ts +1 -0
  48. package/src/schedule/renderer/header-renderer.js +6 -1
  49. package/src/schedule/renderer/month.d.ts +1 -0
  50. package/src/schedule/renderer/month.js +7 -7
  51. package/src/schedule/renderer/timeline-year.js +8 -2
  52. package/src/schedule/renderer/vertical-view.d.ts +2 -0
  53. package/src/schedule/renderer/vertical-view.js +19 -8
  54. package/src/schedule/renderer/view-base.d.ts +2 -1
  55. package/src/schedule/renderer/view-base.js +11 -3
  56. package/styles/bootstrap-dark.css +48 -66
  57. package/styles/bootstrap.css +28 -45
  58. package/styles/bootstrap4.css +28 -44
  59. package/styles/bootstrap5-dark.css +5172 -0
  60. package/styles/bootstrap5-dark.scss +2 -0
  61. package/styles/bootstrap5.css +5173 -0
  62. package/styles/bootstrap5.scss +2 -0
  63. package/styles/fabric-dark.css +29 -61
  64. package/styles/fabric.css +28 -45
  65. package/styles/highcontrast-light.css +28 -76
  66. package/styles/highcontrast.css +30 -49
  67. package/styles/material-dark.css +72 -79
  68. package/styles/material.css +32 -45
  69. package/styles/recurrence-editor/_bootstrap5-dark-definition.scss +1 -0
  70. package/styles/recurrence-editor/_bootstrap5-definition.scss +8 -0
  71. package/styles/recurrence-editor/_layout.scss +0 -4
  72. package/styles/recurrence-editor/_tailwind-dark-definition.scss +1 -8
  73. package/styles/recurrence-editor/_tailwind-definition.scss +8 -8
  74. package/styles/recurrence-editor/bootstrap-dark.css +0 -4
  75. package/styles/recurrence-editor/bootstrap.css +0 -4
  76. package/styles/recurrence-editor/bootstrap4.css +0 -4
  77. package/styles/recurrence-editor/bootstrap5-dark.css +479 -0
  78. package/styles/recurrence-editor/bootstrap5-dark.scss +3 -0
  79. package/styles/recurrence-editor/bootstrap5.css +479 -0
  80. package/styles/recurrence-editor/bootstrap5.scss +3 -0
  81. package/styles/recurrence-editor/fabric-dark.css +0 -4
  82. package/styles/recurrence-editor/fabric.css +0 -4
  83. package/styles/recurrence-editor/highcontrast-light.css +0 -4
  84. package/styles/recurrence-editor/highcontrast.css +0 -4
  85. package/styles/recurrence-editor/material-dark.css +0 -4
  86. package/styles/recurrence-editor/material.css +0 -4
  87. package/styles/recurrence-editor/tailwind-dark.css +0 -4
  88. package/styles/recurrence-editor/tailwind.css +0 -4
  89. package/styles/schedule/_bootstrap-dark-definition.scss +6 -6
  90. package/styles/schedule/_bootstrap-definition.scss +2 -2
  91. package/styles/schedule/_bootstrap4-definition.scss +6 -5
  92. package/styles/schedule/_bootstrap5-dark-definition.scss +1 -0
  93. package/styles/schedule/_bootstrap5-definition.scss +198 -0
  94. package/styles/schedule/_fabric-dark-definition.scss +3 -3
  95. package/styles/schedule/_fabric-definition.scss +2 -2
  96. package/styles/schedule/_highcontrast-definition.scss +3 -3
  97. package/styles/schedule/_highcontrast-light-definition.scss +2 -2
  98. package/styles/schedule/_layout.scss +97 -120
  99. package/styles/schedule/_material-dark-definition.scss +2 -2
  100. package/styles/schedule/_material-definition.scss +2 -2
  101. package/styles/schedule/_tailwind-dark-definition.scss +1 -196
  102. package/styles/schedule/_tailwind-definition.scss +195 -196
  103. package/styles/schedule/_theme.scss +33 -7
  104. package/styles/schedule/bootstrap-dark.css +48 -62
  105. package/styles/schedule/bootstrap.css +28 -41
  106. package/styles/schedule/bootstrap4.css +28 -40
  107. package/styles/schedule/bootstrap5-dark.css +4692 -0
  108. package/styles/schedule/bootstrap5-dark.scss +4 -0
  109. package/styles/schedule/bootstrap5.css +4693 -0
  110. package/styles/schedule/bootstrap5.scss +5 -0
  111. package/styles/schedule/fabric-dark.css +29 -57
  112. package/styles/schedule/fabric.css +28 -41
  113. package/styles/schedule/highcontrast-light.css +28 -72
  114. package/styles/schedule/highcontrast.css +30 -45
  115. package/styles/schedule/icons/_bootstrap5-dark.scss +1 -0
  116. package/styles/schedule/icons/_bootstrap5.scss +232 -0
  117. package/styles/schedule/icons/_tailwind-dark.scss +1 -231
  118. package/styles/schedule/icons/_tailwind.scss +231 -231
  119. package/styles/schedule/material-dark.css +72 -75
  120. package/styles/schedule/material.css +32 -41
  121. package/styles/schedule/tailwind-dark.css +53 -71
  122. package/styles/schedule/tailwind-dark.scss +0 -1
  123. package/styles/schedule/tailwind.css +53 -70
  124. package/styles/tailwind-dark.css +53 -75
  125. package/styles/tailwind.css +53 -74
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 19.2.60
3
+ * version : 19.3.48
4
4
  * Copyright Syncfusion Inc. 2001 - 2020. 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@19.2.56",
3
+ "_id": "@syncfusion/ej2-schedule@19.3.46",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-cfWUXCpsRIqVEw2gm4X7eolB8xMv/lvweTI8hGxbT0+N2juPoiJChvz139Jgy6MPCUDXYebVDiRedehogyKPWA==",
5
+ "_integrity": "sha512-x1dE8/ZswBw4vAbLAILohZWlisR8SymVBt4/qwG38WgG+4nQ+yamS89F+aD/KkXQdFZ+zFdWKZbUCyNCPUDUUQ==",
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": "http://nexus.syncfusion.com/repository/ej2-hotfix/@syncfusion/ej2-schedule/-/ej2-schedule-19.2.56.tgz",
27
- "_shasum": "1e0fa34fa7eac614da14cdbcd06a7012dbc44b89",
26
+ "_resolved": "http://nexus.syncfusion.com/repository/ej2-hotfix/@syncfusion/ej2-schedule/-/ej2-schedule-19.3.46.tgz",
27
+ "_shasum": "96b789963b4984b83da4f6a024bd5e08e6869712",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
29
  "_where": "/jenkins/workspace/automation_release_19.1.0.1-ZPMUBNQ6AUYH6YGEFBPVYMEQLRRW2SLD4XCZ6GATNZJFYJ3RIAOA/packages/included",
30
30
  "author": {
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~19.2.60",
39
- "@syncfusion/ej2-buttons": "~19.2.60",
40
- "@syncfusion/ej2-calendars": "~19.2.60",
41
- "@syncfusion/ej2-data": "~19.2.60",
42
- "@syncfusion/ej2-dropdowns": "~19.2.60",
43
- "@syncfusion/ej2-excel-export": "~19.2.60",
44
- "@syncfusion/ej2-inputs": "~19.2.60",
45
- "@syncfusion/ej2-lists": "~19.2.60",
46
- "@syncfusion/ej2-navigations": "~19.2.60",
47
- "@syncfusion/ej2-popups": "~19.2.60"
38
+ "@syncfusion/ej2-base": "~19.3.47",
39
+ "@syncfusion/ej2-buttons": "~19.3.44",
40
+ "@syncfusion/ej2-calendars": "~19.3.46",
41
+ "@syncfusion/ej2-data": "~19.3.47",
42
+ "@syncfusion/ej2-dropdowns": "~19.3.48",
43
+ "@syncfusion/ej2-excel-export": "~19.3.48",
44
+ "@syncfusion/ej2-inputs": "~19.3.48",
45
+ "@syncfusion/ej2-lists": "~19.3.48",
46
+ "@syncfusion/ej2-navigations": "~19.3.46",
47
+ "@syncfusion/ej2-popups": "~19.3.47"
48
48
  },
49
49
  "deprecated": false,
50
50
  "description": "Flexible scheduling library with more built-in features and enhanced customization options similar to outlook and google calendar, allowing the users to plan and manage their appointments with efficient data-binding support.",
@@ -81,6 +81,6 @@
81
81
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
82
82
  },
83
83
  "typings": "index.d.ts",
84
- "version": "19.2.60",
84
+ "version": "19.3.48",
85
85
  "sideEffects": false
86
86
  }
@@ -94,7 +94,7 @@ var ActionBase = /** @class */ (function () {
94
94
  var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
95
95
  var trElement = [].slice.call(viewElement.querySelector('tr').children);
96
96
  if (!this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.group.resources.length > 0 &&
97
- !this.parent.isAdaptive) {
97
+ !this.parent.isAdaptive && !this.parent.enableAdaptiveUI) {
98
98
  trElement = this.getResourceElements(trElement);
99
99
  }
100
100
  var leftOffset = trElement[0].getBoundingClientRect();
@@ -43,8 +43,7 @@ var Crud = /** @class */ (function () {
43
43
  var resultData = extend([], args.result, null, true);
44
44
  _this.parent.eventsData = resultData.filter(function (data) { return !data[_this.parent.eventFields.isBlock]; });
45
45
  _this.parent.blockData = resultData.filter(function (data) { return data[_this.parent.eventFields.isBlock]; });
46
- var processed = _this.parent.eventBase.processData(resultData);
47
- _this.parent.notify(events.dataReady, { processedData: processed });
46
+ _this.parent.refreshEvents(false);
48
47
  if (_this.parent.dragAndDropModule && _this.parent.dragAndDropModule.actionObj.action === 'drag') {
49
48
  _this.parent.dragAndDropModule.navigationWrapper();
50
49
  }
@@ -146,6 +145,7 @@ var Crud = /** @class */ (function () {
146
145
  if (addArgs.addedRecords instanceof Array) {
147
146
  for (var _i = 0, _a = addArgs.addedRecords; _i < _a.length; _i++) {
148
147
  var event_1 = _a[_i];
148
+ event_1 = _this.parent.eventBase.updateEventDateTime(event_1);
149
149
  var eventData_1 = extend({}, _this.parent.eventBase.processTimezone(event_1, true), null, true);
150
150
  editParams.addedRecords.push(eventData_1);
151
151
  }
@@ -203,6 +203,7 @@ var Crud = /** @class */ (function () {
203
203
  if (saveArgs.changedRecords instanceof Array) {
204
204
  for (var _i = 0, _a = saveArgs.changedRecords; _i < _a.length; _i++) {
205
205
  var event_3 = _a[_i];
206
+ event_3 = _this.parent.eventBase.updateEventDateTime(event_3);
206
207
  var eventData_2 = extend({}, _this.parent.eventBase.processTimezone(event_3, true), null, true);
207
208
  editParams.changedRecords.push(eventData_2);
208
209
  }
@@ -23,7 +23,9 @@ export declare class DragAndDrop extends ActionBase {
23
23
  private isAllDayTarget;
24
24
  private targetTd;
25
25
  private isCursorAhead;
26
+ private dragArea;
26
27
  wireDragEvent(element: HTMLElement): void;
28
+ setDragArea(): void;
27
29
  private dragHelper;
28
30
  private dragPosition;
29
31
  private setDragActionDefaultValues;
@@ -52,7 +52,6 @@ var DragAndDrop = /** @class */ (function (_super) {
52
52
  return _this;
53
53
  }
54
54
  DragAndDrop.prototype.wireDragEvent = function (element) {
55
- var dragElement = document.querySelector(this.parent.eventDragArea);
56
55
  new Draggable(element, {
57
56
  abort: '.' + cls.EVENT_RESIZE_CLASS,
58
57
  clone: true,
@@ -60,8 +59,7 @@ var DragAndDrop = /** @class */ (function (_super) {
60
59
  enableTapHold: this.parent.isAdaptive,
61
60
  enableTailMode: (this.parent.eventDragArea) ? true : false,
62
61
  cursorAt: (this.parent.eventDragArea) ? { left: -20, top: -20 } : { left: 0, top: 0 },
63
- dragArea: (this.parent.eventDragArea && dragElement) ?
64
- dragElement : this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS),
62
+ dragArea: this.dragArea,
65
63
  dragStart: this.dragStart.bind(this),
66
64
  drag: this.drag.bind(this),
67
65
  dragStop: this.dragStop.bind(this),
@@ -70,6 +68,11 @@ var DragAndDrop = /** @class */ (function (_super) {
70
68
  queryPositionInfo: this.dragPosition.bind(this)
71
69
  });
72
70
  };
71
+ DragAndDrop.prototype.setDragArea = function () {
72
+ var dragElement = document.querySelector(this.parent.eventDragArea);
73
+ this.dragArea = this.parent.eventDragArea && dragElement ? dragElement :
74
+ this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);
75
+ };
73
76
  DragAndDrop.prototype.dragHelper = function (e) {
74
77
  var _this = this;
75
78
  this.setDragActionDefaultValues();
@@ -683,18 +686,20 @@ var DragAndDrop = /** @class */ (function (_super) {
683
686
  var eventData = [];
684
687
  var startTime = event[eventFields.startTime];
685
688
  var endTime = event[eventFields.endTime];
686
- var isDifferentDate = util.resetTime(new Date(startTime.getTime())) < util.resetTime(new Date(endTime.getTime()));
687
- if (isDifferentDate) {
688
- var scheduleStartHour = this.parent.activeView.getStartHour();
689
- var scheduleEndHour = this.parent.activeView.getEndHour();
690
- var startDate = util.getStartEndHours(util.resetTime(startTime), scheduleStartHour, scheduleEndHour);
691
- var endDate = util.getStartEndHours(util.resetTime(endTime), scheduleStartHour, scheduleEndHour);
692
- var firstEventObj = extend({}, event, null, true);
693
- firstEventObj[eventFields.endTime] = startDate.endHour;
694
- eventData.push(firstEventObj);
695
- var secondEventObj = extend({}, event, null, true);
696
- secondEventObj[eventFields.startTime] = endDate.startHour;
697
- eventData.push(secondEventObj);
689
+ if (util.resetTime(new Date(startTime.getTime())) < util.resetTime(new Date(endTime.getTime()))) {
690
+ var startReferenceDate = util.resetTime(new Date(startTime.getTime()));
691
+ var endReferenceDate = new Date(startReferenceDate.getTime());
692
+ for (var i = 0; startReferenceDate < new Date(endTime.getTime()); i++) {
693
+ endReferenceDate = new Date(endReferenceDate.setDate(startReferenceDate.getDate() + 1));
694
+ var eventObj = extend({}, event, null, true);
695
+ eventObj[eventFields.startTime] = new Date(startReferenceDate);
696
+ eventObj[eventFields.endTime] = new Date(endReferenceDate);
697
+ startReferenceDate = new Date(startReferenceDate.setDate(startReferenceDate.getDate() + 1));
698
+ eventData.push(eventObj);
699
+ }
700
+ var index = eventData.length - 1;
701
+ eventData[0][eventFields.startTime] = startTime;
702
+ eventData[index][eventFields.endTime] = endTime;
698
703
  }
699
704
  else {
700
705
  eventData.push(event);
@@ -765,8 +770,7 @@ var DragAndDrop = /** @class */ (function (_super) {
765
770
  // eslint-disable-next-line max-len
766
771
  this.parent.getDateFromElement(isNullOrUndefined(index) ? this.actionObj.target : this.targetTd)));
767
772
  var splitEvents = this.splitEvent(event);
768
- var events_1 = event[this.parent.eventFields.isAllDay] ||
769
- this.parent.eventBase.isAllDayAppointment(event) || splitEvents.length > 2 ? [event] : splitEvents;
773
+ var events_1 = this.parent.eventBase.isAllDayAppointment(event) || splitEvents.length > 2 || !(this.parent.eventSettings.spannedEventPlacement == 'TimeSlot') ? [event] : splitEvents;
770
774
  for (var i = 0; i < events_1.length; i++) {
771
775
  if (i > 0) {
772
776
  var filterQuery = ".e-day-wrapper[data-date=\"" + util.resetTime(events_1[i][this.parent.eventFields.startTime]).getTime() + "\"]";
@@ -1061,6 +1065,12 @@ var DragAndDrop = /** @class */ (function (_super) {
1061
1065
  var eventSrt = eventObj[this.parent.eventFields.startTime];
1062
1066
  eventStart.setHours(eventSrt.getHours(), eventSrt.getMinutes(), eventSrt.getSeconds());
1063
1067
  }
1068
+ if (this.parent.eventDragArea) {
1069
+ var targetDate = this.parent.getDateFromElement(e.target);
1070
+ if (!isNullOrUndefined(targetDate)) {
1071
+ eventStart = targetDate;
1072
+ }
1073
+ }
1064
1074
  var eventEnd = new Date(eventStart.getTime());
1065
1075
  eventEnd.setMilliseconds(eventDuration);
1066
1076
  var eventsData = [this.getUpdatedEvent(eventStart, eventEnd, this.actionObj.event)];
@@ -113,7 +113,7 @@ var KeyboardInteraction = /** @class */ (function () {
113
113
  this.processCtrlShiftNavigationArrows(e);
114
114
  break;
115
115
  case 'escape':
116
- this.processEscape();
116
+ this.processEscape(e);
117
117
  }
118
118
  };
119
119
  KeyboardInteraction.prototype.addEventListener = function () {
@@ -258,7 +258,7 @@ var KeyboardInteraction = /** @class */ (function () {
258
258
  if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS)) {
259
259
  this.parent.setProperties({ selectedDate: this.parent.getDateFromElement(target) }, true);
260
260
  this.parent.changeView(this.parent.getNavigateView(), e);
261
- this.processEscape();
261
+ this.processEscape(e);
262
262
  return;
263
263
  }
264
264
  };
@@ -837,7 +837,7 @@ var KeyboardInteraction = /** @class */ (function () {
837
837
  !this.parent.eventSettings.allowDeleting) {
838
838
  return;
839
839
  }
840
- this.parent.quickPopup.deleteClick();
840
+ this.parent.quickPopup.deleteClick(e);
841
841
  }
842
842
  };
843
843
  KeyboardInteraction.prototype.processCtrlShiftNavigationArrows = function (e) {
@@ -872,8 +872,8 @@ var KeyboardInteraction = /** @class */ (function () {
872
872
  }
873
873
  }
874
874
  };
875
- KeyboardInteraction.prototype.processEscape = function () {
876
- this.parent.quickPopup.onClosePopup();
875
+ KeyboardInteraction.prototype.processEscape = function (event) {
876
+ this.parent.quickPopup.onClosePopup(event);
877
877
  this.parent.quickPopup.morePopup.hide();
878
878
  if (this.parent.headerModule) {
879
879
  this.parent.headerModule.hideHeaderPopup();
@@ -209,6 +209,9 @@ var Resize = /** @class */ (function (_super) {
209
209
  };
210
210
  Resize.prototype.monthResizing = function () {
211
211
  this.removeCloneElement();
212
+ if (isNullOrUndefined(this.actionObj.pageX) || isNullOrUndefined(this.actionObj.pageY)) {
213
+ return;
214
+ }
212
215
  var td = document.elementFromPoint(this.actionObj.pageX, this.actionObj.pageY);
213
216
  if (isNullOrUndefined(td)) {
214
217
  return;
@@ -342,13 +345,16 @@ var Resize = /** @class */ (function (_super) {
342
345
  var eventEnd = new Date(this.actionObj.event[this.parent.eventFields.endTime].getTime());
343
346
  var resizeTime;
344
347
  var isDateHeader = false;
348
+ var isTimeViews = ['TimelineDay', 'TimelineWeek', 'TimelineWorkWeek'].indexOf(this.parent.currentView) > -1;
349
+ var isTimelineMonth = this.parent.currentView === 'TimelineMonth';
350
+ var isWithoutScale = isTimelineMonth || isTimeViews && !this.parent.activeViewOptions.timeScale.enable;
345
351
  if (this.parent.activeView.isTimelineView()) {
346
352
  var tr = this.parent.getContentTable().querySelector('tr');
347
353
  var headerName = this.parent.currentView;
348
354
  if (this.parent.activeViewOptions.headerRows.length > 0) {
349
355
  var rows = this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });
350
356
  headerName = rows.slice(-1)[0];
351
- if (this.parent.currentView === 'TimelineMonth' && headerName === 'Hour') {
357
+ if (isTimelineMonth && headerName === 'Hour') {
352
358
  headerName = rows.slice(-2)[0] || 'Month';
353
359
  }
354
360
  }
@@ -368,9 +374,8 @@ var Resize = /** @class */ (function (_super) {
368
374
  offsetValue += (this.actionObj.clone.offsetWidth - this.actionObj.cellWidth);
369
375
  }
370
376
  cellIndex = Math.floor(offsetValue / Math.floor(tr.offsetWidth / noOfDays));
371
- isDateHeader =
372
- ['TimelineDay', 'TimelineWeek', 'TimelineWorkWeek'].indexOf(this.parent.currentView) > -1 && headerName === 'Date';
373
- cellIndex = isLeft ? cellIndex : (this.parent.currentView === 'TimelineMonth' || isDateHeader) ? cellIndex + 1 : cellIndex;
377
+ isDateHeader = isTimeViews && headerName === 'Date';
378
+ cellIndex = isLeft ? cellIndex : (isTimelineMonth || isDateHeader) ? cellIndex + 1 : cellIndex;
374
379
  isLastCell = cellIndex === tdCollections.length;
375
380
  cellIndex = (cellIndex < 0) ? 0 : (cellIndex >= noOfDays) ? noOfDays - 1 : cellIndex;
376
381
  }
@@ -382,7 +387,7 @@ var Resize = /** @class */ (function (_super) {
382
387
  if (this.parent.enableRtl) {
383
388
  var cellOffsetWidth = 0;
384
389
  if (headerName === 'TimelineMonth' || (!this.parent.activeViewOptions.timeScale.enable &&
385
- this.parent.currentView !== 'TimelineMonth')) {
390
+ !isTimelineMonth)) {
386
391
  cellOffsetWidth = this.actionObj.cellWidth;
387
392
  }
388
393
  var offsetWidth = (Math.floor(parseInt(this.actionObj.clone.style.right, 10) / this.actionObj.cellWidth) *
@@ -434,16 +439,18 @@ var Resize = /** @class */ (function (_super) {
434
439
  }
435
440
  }
436
441
  if (isLeft) {
437
- if ((this.actionObj.event[this.parent.eventFields.endTime].getTime() - resizeTime.getTime()) <= 0) {
438
- resizeTime = new Date(this.actionObj.event[this.parent.eventFields.startTime].getTime());
442
+ if ((eventEnd.getTime() - resizeTime.getTime()) <= 0) {
443
+ resizeTime = isWithoutScale ? util.resetTime(eventEnd) : eventStart;
439
444
  }
440
445
  this.actionObj.start = this.parent.activeViewOptions.timeScale.enable ? this.calculateIntervalTime(resizeTime) : resizeTime;
441
446
  }
442
447
  else {
443
- var isTimeViews = ['TimelineDay', 'TimelineWeek', 'TimelineWorkWeek'].indexOf(this.parent.currentView) > -1 &&
444
- this.parent.activeViewOptions.timeScale.enable;
445
- var resizeEnd = ((!isTimeViews || isDateHeader) && resizeTime.getHours() === 0 && resizeTime.getMinutes() === 0) ?
448
+ var isTimeScaleViews = isTimeViews && this.parent.activeViewOptions.timeScale.enable;
449
+ var resizeEnd = ((!isTimeScaleViews || isDateHeader) && resizeTime.getHours() === 0 && resizeTime.getMinutes() === 0) ?
446
450
  util.addDays(resizeTime, 1) : resizeTime;
451
+ if (isWithoutScale && (resizeEnd.getTime() - eventStart.getTime()) <= 0) {
452
+ resizeEnd = util.addDays(util.resetTime(eventStart), 1);
453
+ }
447
454
  this.actionObj.end = this.parent.activeViewOptions.timeScale.enable && this.parent.currentView !== 'Month' ?
448
455
  this.calculateIntervalTime(resizeEnd) : resizeEnd;
449
456
  }
@@ -104,7 +104,7 @@ var VirtualScroll = /** @class */ (function () {
104
104
  };
105
105
  VirtualScroll.prototype.renderEvents = function () {
106
106
  this.setTabIndex();
107
- this.parent.notify(events.dataReady, {});
107
+ this.parent.refreshEvents(false);
108
108
  this.parent.notify(events.contentReady, {});
109
109
  this.parent.hideSpinner();
110
110
  };
@@ -158,6 +158,7 @@ var VirtualScroll = /** @class */ (function () {
158
158
  }
159
159
  else {
160
160
  var height = (this.parent.rowAutoHeight) ? this.averageRowHeight : this.itemSize;
161
+ height = (height > 0) ? height : this.itemSize;
161
162
  this.translateY = (conWrap.scrollTop - (this.bufferCount * height) > 0) ?
162
163
  conWrap.scrollTop - (this.bufferCount * height) : 0;
163
164
  }
@@ -145,6 +145,8 @@ export interface PopupOpenEventArgs extends BaseEventArgs {
145
145
  }
146
146
  /** An interface that holds options to control the popup close action. */
147
147
  export interface PopupCloseEventArgs extends BaseEventArgs {
148
+ /** Return the current interaction event. */
149
+ event?: Event;
148
150
  /**
149
151
  * Returns the type of the popup which is currently being opted to open.
150
152
  * The available type values are as follows,
@@ -380,6 +382,8 @@ export interface IRenderer {
380
382
  getEventRows(trCount: number): Element[];
381
383
  getDateSlots(renderDates: Date[], workDays: number[]): TdData[];
382
384
  getNextPreviousDate(type: string): Date;
385
+ refreshHeader(): void;
386
+ refreshResourceHeader(): void;
383
387
  renderLayout(type: string): void;
384
388
  renderResourceMobileLayout(): void;
385
389
  setPanel(panel: HTMLElement): void;
@@ -526,6 +530,7 @@ export interface ViewsData extends ViewsModel {
526
530
  dateHeaderTemplateName?: string;
527
531
  cellTemplateName?: string;
528
532
  resourceHeaderTemplateName?: string;
533
+ headerIndentTemplateName?: string;
529
534
  eventTemplateName?: string;
530
535
  dayHeaderTemplateName?: string;
531
536
  monthHeaderTemplateName?: string;
@@ -540,3 +545,7 @@ export interface CrudAction {
540
545
  export interface CallbackFunction extends Function {
541
546
  bind<T, A0, A1, A2, A3, A extends any[], R>(this: (this: T, args0: A0, args1: A1, args2: A2, args3: A3, ...args: A[]) => R, thisArgs: T, args0: A0, args1: A1, args2: A2, args3: A3): (...args: A[]) => R;
542
547
  }
548
+ /** @private */
549
+ export interface SortComparerFunction {
550
+ (param: Record<string, any>[]): Record<string, any>[];
551
+ }
@@ -17,7 +17,13 @@ var ResourceBase = /** @class */ (function () {
17
17
  ResourceBase.prototype.renderResourceHeaderIndent = function (tr) {
18
18
  var resColTd = createElement('td', { className: cls.RESOURCE_LEFT_TD_CLASS });
19
19
  var resColDiv = createElement('div', { className: cls.RESOURCE_TEXT_CLASS });
20
- resColTd.appendChild(resColDiv);
20
+ if (this.parent.activeViewOptions.headerIndentTemplate) {
21
+ var data = { className: [resColTd.className], type: 'emptyCells' };
22
+ this.parent.renderHeaderIndentTemplate(data, resColTd);
23
+ }
24
+ else {
25
+ resColTd.appendChild(resColDiv);
26
+ }
21
27
  var args = { elementType: 'emptyCells', element: resColTd };
22
28
  this.parent.trigger(events.renderCell, args);
23
29
  tr.appendChild(resColTd);
@@ -206,7 +212,7 @@ var ResourceBase = /** @class */ (function () {
206
212
  cancel: false, event: e, groupIndex: index,
207
213
  requestType: target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpanded' : 'resourceCollapsed'
208
214
  };
209
- _this.parent.notify(events.dataReady, {});
215
+ _this.parent.refreshEvents(false);
210
216
  _this.parent.trigger(events.actionComplete, args);
211
217
  }
212
218
  });
@@ -668,8 +674,11 @@ var ResourceBase = /** @class */ (function () {
668
674
  var currentLevelChilds = _a[_i];
669
675
  for (var _b = 0, currentLevelChilds_1 = currentLevelChilds; _b < currentLevelChilds_1.length; _b++) {
670
676
  var currentLevelChild = currentLevelChilds_1[_b];
671
- if (resTreeGroup[i + 1]) {
677
+ if (resTreeGroup[i + 1] && resTreeGroup[i + 1].length > 0) {
672
678
  var nextLevelChilds = resTreeGroup[i + 1][temp];
679
+ if (!nextLevelChilds) {
680
+ continue;
681
+ }
673
682
  var colSpan = 0;
674
683
  for (var _c = 0, nextLevelChilds_1 = nextLevelChilds; _c < nextLevelChilds_1.length; _c++) {
675
684
  var nextLevelChild = nextLevelChilds_1[_c];
@@ -1,4 +1,4 @@
1
- import { Component, ModuleDeclaration, Property, Event, Animation, Collection } from '@syncfusion/ej2-base';import { EventHandler, EmitType, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';import { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, INotifyPropertyChanged, Complex } from '@syncfusion/ej2-base';import { getElement, removeClass, addClass, classList, remove } from '@syncfusion/ej2-base';import { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';import { HeaderRenderer } from '../renderer/header-renderer';import { Scroll } from '../actions/scroll';import { ScheduleTouch } from '../actions/touch';import { KeyboardInteraction } from '../actions/keyboard';import { Data } from '../actions/data';import { View, CurrentAction, ReturnType, WeekRule } from '../base/type';import { EventBase } from '../event-renderer/event-base';import { InlineEdit } from '../event-renderer/inline-edit';import { QuickPopups } from '../popups/quick-popups';import { EventTooltip } from '../popups/event-tooltip';import { EventWindow } from '../popups/event-window';import { Render } from '../renderer/renderer';import { Day } from '../renderer/day';import { Week } from '../renderer/week';import { WorkWeek } from '../renderer/work-week';import { Month } from '../renderer/month';import { Year } from '../renderer/year';import { Agenda } from '../renderer/agenda';import { MonthAgenda } from '../renderer/month-agenda';import { TimelineViews } from '../renderer/timeline-view';import { TimelineMonth } from '../renderer/timeline-month';import { TimelineYear } from '../renderer/timeline-year';import { WorkHours } from '../models/work-hours';import { TimeScale } from '../models/time-scale';import { QuickInfoTemplates } from '../models/quick-info-templates';import { HeaderRows } from '../models/header-rows';import { Crud } from '../actions/crud';import { Resize } from '../actions/resize';import { DragAndDrop } from '../actions/drag';import { VirtualScroll } from '../actions/virtual-scroll';import { WorkCellInteraction } from '../actions/work-cells';import { WorkHoursModel, ViewsModel, EventSettingsModel, GroupModel, ResourcesModel, TimeScaleModel } from '../models/models';import { QuickInfoTemplatesModel, HeaderRowsModel } from '../models/models';import { EventSettings } from '../models/event-settings';import { Group } from '../models/group';import { Resources } from '../models/resources';import { ICalendarExport } from '../exports/calendar-export';import { ICalendarImport } from '../exports/calendar-import';import { ExcelExport } from '../exports/excel-export';import { Print } from '../exports/print';import { IRenderer, ActionEventArgs, NavigatingEventArgs, CellClickEventArgs, RenderCellEventArgs, ScrollCss } from '../base/interface';import { EventClickArgs, EventRenderedArgs, PopupOpenEventArgs, UIStateArgs, DragEventArgs, ResizeEventArgs } from '../base/interface';import { EventFieldsMapping, TdData, ResourceDetails, ResizeEdges, StateArgs, ExportOptions, SelectEventArgs } from '../base/interface';import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, CallbackFunction } from '../base/interface';import { CalendarUtil, Gregorian, Islamic, CalendarType } from '../../common/calendar-util';import { ResourceBase } from '../base/resource';import { Timezone } from '../timezone/timezone';import { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';import * as events from '../base/constant';import * as cls from '../base/css-constant';import * as util from '../base/util';
1
+ import { Component, ModuleDeclaration, Property, Event, Animation, Collection, append } from '@syncfusion/ej2-base';import { EventHandler, EmitType, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';import { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, INotifyPropertyChanged, Complex } from '@syncfusion/ej2-base';import { getElement, removeClass, addClass, classList, remove } from '@syncfusion/ej2-base';import { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';import { HeaderRenderer } from '../renderer/header-renderer';import { Scroll } from '../actions/scroll';import { ScheduleTouch } from '../actions/touch';import { KeyboardInteraction } from '../actions/keyboard';import { Data } from '../actions/data';import { View, CurrentAction, ReturnType, WeekRule } from '../base/type';import { EventBase } from '../event-renderer/event-base';import { InlineEdit } from '../event-renderer/inline-edit';import { QuickPopups } from '../popups/quick-popups';import { EventTooltip } from '../popups/event-tooltip';import { EventWindow } from '../popups/event-window';import { Render } from '../renderer/renderer';import { Day } from '../renderer/day';import { Week } from '../renderer/week';import { WorkWeek } from '../renderer/work-week';import { Month } from '../renderer/month';import { Year } from '../renderer/year';import { Agenda } from '../renderer/agenda';import { MonthAgenda } from '../renderer/month-agenda';import { TimelineViews } from '../renderer/timeline-view';import { TimelineMonth } from '../renderer/timeline-month';import { TimelineYear } from '../renderer/timeline-year';import { WorkHours } from '../models/work-hours';import { TimeScale } from '../models/time-scale';import { QuickInfoTemplates } from '../models/quick-info-templates';import { HeaderRows } from '../models/header-rows';import { Crud } from '../actions/crud';import { Resize } from '../actions/resize';import { DragAndDrop } from '../actions/drag';import { VirtualScroll } from '../actions/virtual-scroll';import { WorkCellInteraction } from '../actions/work-cells';import { WorkHoursModel, ViewsModel, EventSettingsModel, GroupModel, ResourcesModel, TimeScaleModel } from '../models/models';import { QuickInfoTemplatesModel, HeaderRowsModel } from '../models/models';import { EventSettings } from '../models/event-settings';import { Group } from '../models/group';import { Resources } from '../models/resources';import { ICalendarExport } from '../exports/calendar-export';import { ICalendarImport } from '../exports/calendar-import';import { ExcelExport } from '../exports/excel-export';import { Print } from '../exports/print';import { IRenderer, ActionEventArgs, NavigatingEventArgs, CellClickEventArgs, RenderCellEventArgs, ScrollCss } from '../base/interface';import { EventClickArgs, EventRenderedArgs, PopupOpenEventArgs, UIStateArgs, DragEventArgs, ResizeEventArgs } from '../base/interface';import { EventFieldsMapping, TdData, ResourceDetails, ResizeEdges, StateArgs, ExportOptions, SelectEventArgs } from '../base/interface';import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, CallbackFunction } from '../base/interface';import { CalendarUtil, Gregorian, Islamic, CalendarType } from '../../common/calendar-util';import { ResourceBase } from '../base/resource';import { Timezone } from '../timezone/timezone';import { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';import * as events from '../base/constant';import * as cls from '../base/css-constant';import * as util from '../base/util';
2
2
  import {ComponentModel} from '@syncfusion/ej2-base';
3
3
 
4
4
  /**
@@ -492,6 +492,18 @@ export interface ScheduleModel extends ComponentModel{
492
492
  */
493
493
  resourceHeaderTemplate?: string;
494
494
 
495
+ /**
496
+ * Template option to customize the header indent bar. Here, the template accepts either
497
+ * the string or HTMLElement as template design and then the parsed design is displayed onto the header indent cell.
498
+ *
499
+ * Refer to the below code snippet.
500
+ *
501
+ * {% codeBlock src='schedule/headerIndentTemplate/index.md' %}{% endcodeBlock %}
502
+ *
503
+ * @default null
504
+ */
505
+ headerIndentTemplate?: string;
506
+
495
507
  /**
496
508
  * Allows defining the group related settings of multiple resources. When this property is non-empty, it means
497
509
  * that the resources will be grouped on the schedule layout based on the provided resource names.
@@ -37,7 +37,7 @@ import { ExcelExport } from '../exports/excel-export';
37
37
  import { Print } from '../exports/print';
38
38
  import { IRenderer, ActionEventArgs, NavigatingEventArgs, CellClickEventArgs, RenderCellEventArgs, ScrollCss } from '../base/interface';
39
39
  import { EventClickArgs, EventRenderedArgs, PopupOpenEventArgs, UIStateArgs, DragEventArgs, ResizeEventArgs } from '../base/interface';
40
- import { EventFieldsMapping, ResourceDetails, ResizeEdges, ExportOptions, SelectEventArgs } from '../base/interface';
40
+ import { EventFieldsMapping, TdData, ResourceDetails, ResizeEdges, ExportOptions, SelectEventArgs } from '../base/interface';
41
41
  import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, CallbackFunction } from '../base/interface';
42
42
  import { CalendarUtil, CalendarType } from '../../common/calendar-util';
43
43
  import { ResourceBase } from '../base/resource';
@@ -95,6 +95,7 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
95
95
  private quickInfoTemplatesContentFn;
96
96
  private quickInfoTemplatesFooterFn;
97
97
  private resourceHeaderTemplateFn;
98
+ private headerIndentTemplateFn;
98
99
  private defaultLocale;
99
100
  dayModule: Day;
100
101
  weekModule: Week;
@@ -569,6 +570,17 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
569
570
  * @default null
570
571
  */
571
572
  resourceHeaderTemplate: string;
573
+ /**
574
+ * Template option to customize the header indent bar. Here, the template accepts either
575
+ * the string or HTMLElement as template design and then the parsed design is displayed onto the header indent cell.
576
+ *
577
+ * Refer to the below code snippet.
578
+ *
579
+ * {% codeBlock src='schedule/headerIndentTemplate/index.md' %}{% endcodeBlock %}
580
+ *
581
+ * @default null
582
+ */
583
+ headerIndentTemplate: string;
572
584
  /**
573
585
  * Allows defining the group related settings of multiple resources. When this property is non-empty, it means
574
586
  * that the resources will be grouped on the schedule layout based on the provided resource names.
@@ -1112,6 +1124,13 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1112
1124
  * @private
1113
1125
  */
1114
1126
  getResourceHeaderTemplate(): CallbackFunction;
1127
+ /**
1128
+ * Method to process indent template
1129
+ *
1130
+ * @returns {CallbackFunction} Returns the callback function
1131
+ * @private
1132
+ */
1133
+ getHeaderIndentTemplate(): CallbackFunction;
1115
1134
  /**
1116
1135
  * Method to get dynamic CSS properties
1117
1136
  *
@@ -1170,6 +1189,15 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1170
1189
  * @private
1171
1190
  */
1172
1191
  getWeekNumberContent(dates: Date[]): string;
1192
+ /**
1193
+ * Method to render the header indent template.
1194
+ *
1195
+ * @param {TdData} data Accepts the td data
1196
+ * @param {Element} td Accepts the td element
1197
+ * @returns {void}
1198
+ * @private
1199
+ */
1200
+ renderHeaderIndentTemplate(data: TdData, td: Element): void;
1173
1201
  private unWireEvents;
1174
1202
  /**
1175
1203
  * Core method to return the component name.
@@ -1480,9 +1508,24 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1480
1508
  * Refreshes the event dataSource. This method may be useful when the events alone in the schedule needs to be re-rendered.
1481
1509
  *
1482
1510
  * @function refreshEvents
1511
+ * @param {boolean} isRemoteRefresh Accepts the boolean to refresh data from remote or local
1512
+ * @returns {void}
1513
+ */
1514
+ refreshEvents(isRemoteRefresh?: boolean): void;
1515
+ /**
1516
+ * Method to refresh the given Schedule templates
1517
+ *
1518
+ * @param {string} templateName Accepts the template name
1519
+ * @returns {void}
1520
+ */
1521
+ refreshTemplates(templateName?: string): void;
1522
+ /**
1523
+ * Refreshes the Schedule layout without re-render.
1524
+ *
1525
+ * @function refreshLayout
1483
1526
  * @returns {void}
1484
1527
  */
1485
- refreshEvents(): void;
1528
+ refreshLayout(): void;
1486
1529
  /**
1487
1530
  * To retrieve the appointment object from element.
1488
1531
  *