@syncfusion/ej2-schedule 28.2.11 → 29.1.34

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 (155) hide show
  1. package/.gitleaksignore +4 -0
  2. package/README.md +2 -2
  3. package/dist/ej2-schedule.min.js +2 -2
  4. package/dist/ej2-schedule.umd.min.js +2 -2
  5. package/dist/ej2-schedule.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es2015.js +518 -146
  7. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  8. package/dist/es6/ej2-schedule.es5.js +570 -186
  9. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  10. package/dist/global/ej2-schedule.min.js +2 -2
  11. package/dist/global/ej2-schedule.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/package.json +24 -26
  14. package/src/recurrence-editor/recurrence-editor-model.d.ts +14 -0
  15. package/src/recurrence-editor/recurrence-editor.d.ts +12 -0
  16. package/src/recurrence-editor/recurrence-editor.js +8 -1
  17. package/src/schedule/actions/action-base.js +4 -1
  18. package/src/schedule/actions/crud.d.ts +3 -0
  19. package/src/schedule/actions/crud.js +129 -63
  20. package/src/schedule/actions/drag.js +3 -0
  21. package/src/schedule/actions/resize.js +4 -1
  22. package/src/schedule/actions/virtual-scroll.js +3 -1
  23. package/src/schedule/base/constant.d.ts +6 -0
  24. package/src/schedule/base/constant.js +6 -0
  25. package/src/schedule/base/interface.d.ts +53 -0
  26. package/src/schedule/base/schedule-model.d.ts +54 -1
  27. package/src/schedule/base/schedule.d.ts +68 -2
  28. package/src/schedule/base/schedule.js +67 -0
  29. package/src/schedule/base/type.d.ts +2 -1
  30. package/src/schedule/event-renderer/event-base.d.ts +5 -0
  31. package/src/schedule/event-renderer/event-base.js +123 -27
  32. package/src/schedule/event-renderer/inline-edit.d.ts +3 -1
  33. package/src/schedule/event-renderer/inline-edit.js +18 -6
  34. package/src/schedule/event-renderer/month.d.ts +1 -0
  35. package/src/schedule/event-renderer/month.js +25 -0
  36. package/src/schedule/event-renderer/timeline-view.d.ts +1 -1
  37. package/src/schedule/event-renderer/timeline-view.js +12 -19
  38. package/src/schedule/event-renderer/vertical-view.js +2 -2
  39. package/src/schedule/event-renderer/year.js +1 -1
  40. package/src/schedule/exports/excel-export.js +9 -2
  41. package/src/schedule/exports/print.d.ts +2 -0
  42. package/src/schedule/exports/print.js +90 -52
  43. package/src/schedule/models/views-model.d.ts +32 -0
  44. package/src/schedule/models/views.d.ts +30 -0
  45. package/src/schedule/models/views.js +6 -0
  46. package/src/schedule/popups/event-tooltip.js +18 -0
  47. package/src/schedule/popups/event-window.d.ts +1 -0
  48. package/src/schedule/popups/event-window.js +35 -4
  49. package/src/schedule/popups/quick-popups.js +11 -4
  50. package/src/schedule/renderer/month.js +3 -1
  51. package/styles/bds-lite.css +35 -6
  52. package/styles/bds.css +37 -21
  53. package/styles/bootstrap-dark-lite.css +46 -17
  54. package/styles/bootstrap-dark.css +49 -33
  55. package/styles/bootstrap-lite.css +42 -13
  56. package/styles/bootstrap.css +44 -28
  57. package/styles/bootstrap4-lite.css +55 -26
  58. package/styles/bootstrap4.css +57 -41
  59. package/styles/bootstrap5-dark-lite.css +128 -99
  60. package/styles/bootstrap5-dark.css +131 -115
  61. package/styles/bootstrap5-lite.css +50 -21
  62. package/styles/bootstrap5.3-lite.css +35 -6
  63. package/styles/bootstrap5.3.css +37 -21
  64. package/styles/bootstrap5.css +52 -36
  65. package/styles/fabric-dark-lite.css +46 -17
  66. package/styles/fabric-dark.css +49 -33
  67. package/styles/fabric-lite.css +56 -27
  68. package/styles/fabric.css +58 -42
  69. package/styles/fluent-dark-lite.css +39 -10
  70. package/styles/fluent-dark.css +40 -24
  71. package/styles/fluent-lite.css +39 -10
  72. package/styles/fluent.css +40 -24
  73. package/styles/fluent2-lite.css +35 -6
  74. package/styles/fluent2.css +38 -22
  75. package/styles/highcontrast-light-lite.css +53 -24
  76. package/styles/highcontrast-light.css +56 -40
  77. package/styles/highcontrast-lite.css +53 -24
  78. package/styles/highcontrast.css +56 -40
  79. package/styles/material-dark-lite.css +34 -5
  80. package/styles/material-dark.css +35 -19
  81. package/styles/material-lite.css +34 -5
  82. package/styles/material.css +35 -19
  83. package/styles/material3-dark-lite.css +36 -7
  84. package/styles/material3-dark.css +39 -23
  85. package/styles/material3-lite.css +36 -7
  86. package/styles/material3.css +39 -23
  87. package/styles/recurrence-editor/_layout.scss +6 -1
  88. package/styles/recurrence-editor/bds.css +5 -1
  89. package/styles/recurrence-editor/bootstrap-dark.css +5 -1
  90. package/styles/recurrence-editor/bootstrap.css +5 -1
  91. package/styles/recurrence-editor/bootstrap4.css +5 -1
  92. package/styles/recurrence-editor/bootstrap5-dark.css +5 -1
  93. package/styles/recurrence-editor/bootstrap5.3.css +5 -1
  94. package/styles/recurrence-editor/bootstrap5.css +5 -1
  95. package/styles/recurrence-editor/fabric-dark.css +5 -1
  96. package/styles/recurrence-editor/fabric.css +5 -1
  97. package/styles/recurrence-editor/fluent-dark.css +5 -1
  98. package/styles/recurrence-editor/fluent.css +5 -1
  99. package/styles/recurrence-editor/fluent2.css +5 -1
  100. package/styles/recurrence-editor/highcontrast-light.css +5 -1
  101. package/styles/recurrence-editor/highcontrast.css +5 -1
  102. package/styles/recurrence-editor/material-dark.css +5 -1
  103. package/styles/recurrence-editor/material.css +5 -1
  104. package/styles/recurrence-editor/material3-dark.css +5 -1
  105. package/styles/recurrence-editor/material3.css +5 -1
  106. package/styles/recurrence-editor/tailwind-dark.css +5 -1
  107. package/styles/recurrence-editor/tailwind.css +5 -1
  108. package/styles/recurrence-editor/tailwind3.css +5 -1
  109. package/styles/schedule/_bds-definition.scss +2 -0
  110. package/styles/schedule/_bigger.scss +2 -17
  111. package/styles/schedule/_bootstrap-dark-definition.scss +5 -1
  112. package/styles/schedule/_bootstrap-definition.scss +5 -1
  113. package/styles/schedule/_bootstrap4-definition.scss +9 -5
  114. package/styles/schedule/_bootstrap5-definition.scss +5 -1
  115. package/styles/schedule/_bootstrap5.3-definition.scss +2 -0
  116. package/styles/schedule/_fabric-dark-definition.scss +2 -0
  117. package/styles/schedule/_fabric-definition.scss +5 -1
  118. package/styles/schedule/_fluent-definition.scss +3 -1
  119. package/styles/schedule/_fluent2-definition.scss +3 -1
  120. package/styles/schedule/_fusionnew-definition.scss +2 -0
  121. package/styles/schedule/_highcontrast-definition.scss +6 -2
  122. package/styles/schedule/_highcontrast-light-definition.scss +6 -2
  123. package/styles/schedule/_layout.scss +39 -9
  124. package/styles/schedule/_material-dark-definition.scss +2 -0
  125. package/styles/schedule/_material-definition.scss +2 -0
  126. package/styles/schedule/_material3-definition.scss +4 -2
  127. package/styles/schedule/_tailwind-definition.scss +2 -0
  128. package/styles/schedule/_tailwind3-definition.scss +4 -2
  129. package/styles/schedule/bds.css +32 -20
  130. package/styles/schedule/bootstrap-dark.css +44 -32
  131. package/styles/schedule/bootstrap.css +39 -27
  132. package/styles/schedule/bootstrap4.css +52 -40
  133. package/styles/schedule/bootstrap5-dark.css +126 -114
  134. package/styles/schedule/bootstrap5.3.css +32 -20
  135. package/styles/schedule/bootstrap5.css +47 -35
  136. package/styles/schedule/fabric-dark.css +44 -32
  137. package/styles/schedule/fabric.css +53 -41
  138. package/styles/schedule/fluent-dark.css +35 -23
  139. package/styles/schedule/fluent.css +35 -23
  140. package/styles/schedule/fluent2.css +33 -21
  141. package/styles/schedule/highcontrast-light.css +51 -39
  142. package/styles/schedule/highcontrast.css +51 -39
  143. package/styles/schedule/material-dark.css +30 -18
  144. package/styles/schedule/material.css +30 -18
  145. package/styles/schedule/material3-dark.css +34 -22
  146. package/styles/schedule/material3.css +34 -22
  147. package/styles/schedule/tailwind-dark.css +49 -37
  148. package/styles/schedule/tailwind.css +32 -20
  149. package/styles/schedule/tailwind3.css +34 -22
  150. package/styles/tailwind-dark-lite.css +52 -23
  151. package/styles/tailwind-dark.css +54 -38
  152. package/styles/tailwind-lite.css +35 -6
  153. package/styles/tailwind.css +37 -21
  154. package/styles/tailwind3-lite.css +36 -7
  155. package/styles/tailwind3.css +39 -23
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 28.2.11
3
+ * version : 29.1.33
4
4
  * Copyright Syncfusion Inc. 2001 - 2024. 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,32 +1,30 @@
1
1
  {
2
- "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@28.2.7",
2
+ "_from": "@syncfusion/ej2-schedule@29.1.33",
3
+ "_id": "@syncfusion/ej2-schedule@29.1.33",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-5WaLkqPm4JWNZyucNRIwytthOhFiA+cLC71p/3i0u2A68hSWt9yU1y9Jq8tUzjL/gu33KMil3rMdLfp7ThMHpA==",
5
+ "_integrity": "sha512-ivDkcDwdybEWPzEUSml+XZlml9wNx8X5O5UpT9sorn1bHFPeT5iJoXWMGoCtSz9eXHJ+z6ALiIwT8rj/oksOeA==",
6
6
  "_location": "/@syncfusion/ej2-schedule",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
9
- "type": "range",
9
+ "type": "version",
10
10
  "registry": true,
11
- "raw": "@syncfusion/ej2-schedule@*",
11
+ "raw": "@syncfusion/ej2-schedule@29.1.33",
12
12
  "name": "@syncfusion/ej2-schedule",
13
13
  "escapedName": "@syncfusion%2fej2-schedule",
14
14
  "scope": "@syncfusion",
15
- "rawSpec": "*",
15
+ "rawSpec": "29.1.34",
16
16
  "saveSpec": null,
17
- "fetchSpec": "*"
17
+ "fetchSpec": "29.1.34"
18
18
  },
19
19
  "_requiredBy": [
20
- "/",
21
- "/@syncfusion/ej2",
22
20
  "/@syncfusion/ej2-angular-schedule",
23
21
  "/@syncfusion/ej2-react-schedule",
24
22
  "/@syncfusion/ej2-vue-schedule"
25
23
  ],
26
- "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-28.2.7.tgz",
27
- "_shasum": "144639c8bea88f3c609a0f885c12fda193cf0593",
28
- "_spec": "@syncfusion/ej2-schedule@*",
29
- "_where": "/jenkins/workspace/elease-automation_release_28.1.1/packages/included",
24
+ "_resolved": "https://registry.npmjs.org/@syncfusion/ej2-schedule/-/ej2-schedule-29.1.33.tgz",
25
+ "_shasum": "ea34b90c0855afef8524f880e9f2e5cbd47c1865",
26
+ "_spec": "@syncfusion/ej2-schedule@29.1.33",
27
+ "_where": "E:\\march2025\\memory-leaks\\node_modules\\@syncfusion\\ej2-angular-schedule",
30
28
  "author": {
31
29
  "name": "Syncfusion Inc."
32
30
  },
@@ -35,16 +33,16 @@
35
33
  },
36
34
  "bundleDependencies": false,
37
35
  "dependencies": {
38
- "@syncfusion/ej2-base": "~28.2.9",
39
- "@syncfusion/ej2-buttons": "~28.2.7",
40
- "@syncfusion/ej2-calendars": "~28.2.11",
41
- "@syncfusion/ej2-data": "~28.2.11",
42
- "@syncfusion/ej2-dropdowns": "~28.2.11",
43
- "@syncfusion/ej2-excel-export": "~28.2.3",
44
- "@syncfusion/ej2-inputs": "~28.2.11",
45
- "@syncfusion/ej2-lists": "~28.2.3",
46
- "@syncfusion/ej2-navigations": "~28.2.11",
47
- "@syncfusion/ej2-popups": "~28.2.9"
36
+ "@syncfusion/ej2-base": "~29.1.33",
37
+ "@syncfusion/ej2-buttons": "~29.1.33",
38
+ "@syncfusion/ej2-calendars": "~29.1.33",
39
+ "@syncfusion/ej2-data": "~29.1.33",
40
+ "@syncfusion/ej2-dropdowns": "~29.1.33",
41
+ "@syncfusion/ej2-excel-export": "~29.1.33",
42
+ "@syncfusion/ej2-inputs": "~29.1.33",
43
+ "@syncfusion/ej2-lists": "~29.1.33",
44
+ "@syncfusion/ej2-navigations": "~29.1.33",
45
+ "@syncfusion/ej2-popups": "~29.1.33"
48
46
  },
49
47
  "deprecated": false,
50
48
  "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.",
@@ -72,7 +70,7 @@
72
70
  "type": "git",
73
71
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
74
72
  },
73
+ "sideEffects": false,
75
74
  "typings": "index.d.ts",
76
- "version": "28.2.11",
77
- "sideEffects": false
78
- }
75
+ "version": "29.1.34"
76
+ }
@@ -95,4 +95,18 @@ export interface RecurrenceEditorModel extends ComponentModel{
95
95
  */
96
96
  change?: EmitType<RecurrenceEditorChangeEventArgs>;
97
97
 
98
+ /**
99
+ * Triggers when the component is created.
100
+ *
101
+ * @event 'created'
102
+ */
103
+ created?: EmitType<Object>;
104
+
105
+ /**
106
+ * Triggers when the component is destroyed.
107
+ *
108
+ * @event 'destroyed'
109
+ */
110
+ destroyed?: EmitType<Object>;
111
+
98
112
  }
@@ -91,6 +91,18 @@ export declare class RecurrenceEditor extends Component<HTMLElement> implements
91
91
  * @event 'change'
92
92
  */
93
93
  change: EmitType<RecurrenceEditorChangeEventArgs>;
94
+ /**
95
+ * Triggers when the component is created.
96
+ *
97
+ * @event 'created'
98
+ */
99
+ created: EmitType<Object>;
100
+ /**
101
+ * Triggers when the component is destroyed.
102
+ *
103
+ * @event 'destroyed'
104
+ */
105
+ destroyed: EmitType<Object>;
94
106
  /**
95
107
  * Constructor for creating the widget
96
108
  *
@@ -42,6 +42,7 @@ var MONETHEXPANDERWRAPPER = 'e-month-expander';
42
42
  var MONETHEXPANDWRAPPER = 'e-month-expand-wrapper';
43
43
  var MONTHEXPANDERELEMENT = 'e-month-expander-element';
44
44
  var MONTHEXPANDERCHECKBOXWRAPPER = 'e-month-expander-checkbox-wrapper';
45
+ var REPEATONWEEKSELECTOR = 'e-repeat-on-week-selector';
45
46
  var FORMLEFT = 'e-form-left';
46
47
  var FORMRIGHT = 'e-form-right';
47
48
  var MONTHDAYWRAPPER = 'e-month-day';
@@ -749,7 +750,7 @@ var RecurrenceEditor = /** @class */ (function (_super) {
749
750
  this.localeObj.getConstant('on') + '" />' +
750
751
  '</div></td></tr>' +
751
752
  '<tr><td>' +
752
- '<div class="' + INPUTWARAPPER + ' ' + MONTHEXPANDERCHECKBOXWRAPPER + '" style="min-width: 30px;margin-bottom:18px;">' +
753
+ '<div class="' + INPUTWARAPPER + ' ' + MONTHEXPANDERCHECKBOXWRAPPER + ' ' + REPEATONWEEKSELECTOR + '">' +
753
754
  '<input class="' + MONTHEXPANNDERELEM + '"title="' + this.localeObj.getConstant('monthExpander') + '" type="radio">' +
754
755
  '</div></td>' +
755
756
  '<td><div class="' + INPUTWARAPPER + ' ' + WEEKPOSITION + '" >' +
@@ -1151,6 +1152,12 @@ var RecurrenceEditor = /** @class */ (function (_super) {
1151
1152
  __decorate([
1152
1153
  Event()
1153
1154
  ], RecurrenceEditor.prototype, "change", void 0);
1155
+ __decorate([
1156
+ Event()
1157
+ ], RecurrenceEditor.prototype, "created", void 0);
1158
+ __decorate([
1159
+ Event()
1160
+ ], RecurrenceEditor.prototype, "destroyed", void 0);
1154
1161
  RecurrenceEditor = __decorate([
1155
1162
  NotifyPropertyChanges
1156
1163
  ], RecurrenceEditor);
@@ -88,7 +88,9 @@ var ActionBase = /** @class */ (function () {
88
88
  };
89
89
  ActionBase.prototype.calculateIntervalTime = function (date) {
90
90
  var dateInMS = util.resetTime(date).getTime();
91
+ var startHour = this.parent.activeView.getStartHour();
91
92
  var intervalInMS = util.MS_PER_MINUTE * this.actionObj.interval;
93
+ dateInMS += (startHour.getHours() * 60 + startHour.getMinutes()) * util.MS_PER_MINUTE + startHour.getSeconds() * 1000;
92
94
  dateInMS = dateInMS + Math.floor((date.getTime() - dateInMS) / intervalInMS) * intervalInMS;
93
95
  return new Date(dateInMS);
94
96
  };
@@ -199,7 +201,8 @@ var ActionBase = /** @class */ (function () {
199
201
  return originalElement;
200
202
  };
201
203
  ActionBase.prototype.createCloneElement = function (element) {
202
- var cloneWrapper = createElement('div', { innerHTML: element.outerHTML });
204
+ var cloneWrapper = document.createElement('div');
205
+ cloneWrapper.appendChild(element.cloneNode(true));
203
206
  var cloneElement = cloneWrapper.children[0];
204
207
  var cloneClassLists = [cls.CLONE_ELEMENT_CLASS];
205
208
  cloneClassLists.push((this.actionObj.action === 'drag') ? cls.DRAG_CLONE_CLASS : cls.RESIZE_CLONE_CLASS);
@@ -15,6 +15,9 @@ export declare class Crud {
15
15
  dataManagerFailure(e: ReturnType): void;
16
16
  refreshProcessedData(isVirtualScrollAction?: boolean, dynamicEvents?: Record<string, any>[]): void;
17
17
  private refreshData;
18
+ private processAddEvent;
19
+ private processSaveEvent;
20
+ private processDeleteEvent;
18
21
  addEvent(eventData: Record<string, any> | Record<string, any>[]): void;
19
22
  saveEvent(eventData: Record<string, any> | Record<string, any>[], action: CurrentAction): void;
20
23
  deleteEvent(eventData: string | number | Record<string, any> | Record<string, any>[], action: CurrentAction): void;
@@ -167,6 +167,74 @@ var Crud = /** @class */ (function () {
167
167
  });
168
168
  }
169
169
  };
170
+ Crud.prototype.processAddEvent = function (addArgs) {
171
+ var fields = this.parent.eventFields;
172
+ var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
173
+ var promise;
174
+ if (addArgs.addedRecords instanceof Array) {
175
+ for (var _i = 0, _a = addArgs.addedRecords; _i < _a.length; _i++) {
176
+ var event_1 = _a[_i];
177
+ event_1 = this.parent.eventBase.updateEventDateTime(event_1);
178
+ var eventData = extend({}, this.parent.eventBase.processTimezone(event_1, true), null, true);
179
+ editParams.addedRecords.push(eventData);
180
+ }
181
+ promise = this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, this.getTable(), this.getQuery());
182
+ }
183
+ else {
184
+ var event_2 = this.parent.eventBase.processTimezone(addArgs.addedRecords, true);
185
+ editParams.addedRecords.push(event_2);
186
+ promise = this.parent.dataModule.dataManager.insert(event_2, this.getTable(), this.getQuery());
187
+ }
188
+ var crudArgs = {
189
+ requestType: 'eventCreated', cancel: false, data: addArgs.addedRecords, promise: promise, editParams: editParams
190
+ };
191
+ this.refreshData(crudArgs);
192
+ };
193
+ Crud.prototype.processSaveEvent = function (saveArgs) {
194
+ var promise;
195
+ var fields = this.parent.eventFields;
196
+ var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
197
+ if (saveArgs.changedRecords instanceof Array) {
198
+ for (var _i = 0, _a = saveArgs.changedRecords; _i < _a.length; _i++) {
199
+ var event_3 = _a[_i];
200
+ event_3 = this.parent.eventBase.updateEventDateTime(event_3);
201
+ var eventData = extend({}, this.parent.eventBase.processTimezone(event_3, true), null, true);
202
+ editParams.changedRecords.push(eventData);
203
+ }
204
+ promise = this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, this.getTable(), this.getQuery());
205
+ }
206
+ else {
207
+ var event_4 = this.parent.eventBase.processTimezone(saveArgs.changedRecords, true);
208
+ editParams.changedRecords.push(event_4);
209
+ promise = this.parent.dataModule.dataManager.update(fields.id, event_4, this.getTable(), this.getQuery());
210
+ }
211
+ var cloneEvent = extend({}, saveArgs.changedRecords[saveArgs.changedRecords.length - 1], null, true);
212
+ this.parent.eventBase.selectWorkCellByTime([this.parent.eventBase.processTimezone(cloneEvent)]);
213
+ var crudArgs = {
214
+ requestType: 'eventChanged', cancel: false,
215
+ data: saveArgs.changedRecords, promise: promise, editParams: editParams
216
+ };
217
+ this.refreshData(crudArgs);
218
+ };
219
+ Crud.prototype.processDeleteEvent = function (deleteArgs) {
220
+ var promise;
221
+ var fields = this.parent.eventFields;
222
+ var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
223
+ if (deleteArgs.deletedRecords.length > 1) {
224
+ editParams.deletedRecords = editParams.deletedRecords.concat(deleteArgs.deletedRecords);
225
+ promise = this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, this.getTable(), this.getQuery());
226
+ }
227
+ else {
228
+ editParams.deletedRecords.push(deleteArgs.deletedRecords[0]);
229
+ promise = this.parent.dataModule.dataManager.remove(fields.id, deleteArgs.deletedRecords[0], this.getTable(), this.getQuery());
230
+ }
231
+ this.parent.eventBase.selectWorkCellByTime(deleteArgs.deletedRecords);
232
+ var crudArgs = {
233
+ requestType: 'eventRemoved', cancel: false,
234
+ data: deleteArgs.deletedRecords, promise: promise, editParams: editParams
235
+ };
236
+ this.refreshData(crudArgs);
237
+ };
170
238
  Crud.prototype.addEvent = function (eventData) {
171
239
  var _this = this;
172
240
  if (this.parent.eventSettings.allowAdding && !this.parent.activeViewOptions.readonly) {
@@ -174,6 +242,9 @@ var Crud = /** @class */ (function () {
174
242
  this.parent.quickPopup.openValidationError('blockAlert', eventData);
175
243
  return;
176
244
  }
245
+ if (this.parent.eventBase.checkOverlap(eventData)) {
246
+ return;
247
+ }
177
248
  var addEvents = (eventData instanceof Array) ? eventData : [eventData];
178
249
  if (addEvents.length === 0) {
179
250
  return;
@@ -184,27 +255,24 @@ var Crud = /** @class */ (function () {
184
255
  };
185
256
  this.parent.trigger(events.actionBegin, args, function (addArgs) {
186
257
  if (!addArgs.cancel) {
187
- var fields = _this.parent.eventFields;
188
- var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
189
- var promise = void 0;
190
- if (addArgs.addedRecords instanceof Array) {
191
- for (var _i = 0, _a = addArgs.addedRecords; _i < _a.length; _i++) {
192
- var event_1 = _a[_i];
193
- event_1 = _this.parent.eventBase.updateEventDateTime(event_1);
194
- var eventData_1 = extend({}, _this.parent.eventBase.processTimezone(event_1, true), null, true);
195
- editParams.addedRecords.push(eventData_1);
196
- }
197
- promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());
258
+ if (addArgs.promise) {
259
+ addArgs.promise.then(function (hasContinue) {
260
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
261
+ return;
262
+ }
263
+ if (hasContinue) {
264
+ _this.processAddEvent(addArgs);
265
+ }
266
+ }).catch(function (e) {
267
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
268
+ return;
269
+ }
270
+ _this.parent.trigger(events.actionFailure, { error: e });
271
+ });
198
272
  }
199
273
  else {
200
- var event_2 = _this.parent.eventBase.processTimezone(addArgs.addedRecords, true);
201
- editParams.addedRecords.push(event_2);
202
- promise = _this.parent.dataModule.dataManager.insert(event_2, _this.getTable(), _this.getQuery());
274
+ _this.processAddEvent(addArgs);
203
275
  }
204
- var crudArgs = {
205
- requestType: 'eventCreated', cancel: false, data: addArgs.addedRecords, promise: promise, editParams: editParams
206
- };
207
- _this.refreshData(crudArgs);
208
276
  }
209
277
  });
210
278
  }
@@ -240,36 +308,33 @@ var Crud = /** @class */ (function () {
240
308
  }
241
309
  }
242
310
  else {
311
+ if (this.parent.eventBase.checkOverlap(eventData)) {
312
+ return;
313
+ }
243
314
  var args = {
244
315
  requestType: 'eventChange', cancel: false, data: eventData,
245
316
  addedRecords: [], changedRecords: updateEvents, deletedRecords: []
246
317
  };
247
318
  this.parent.trigger(events.actionBegin, args, function (saveArgs) {
248
319
  if (!saveArgs.cancel) {
249
- var promise = void 0;
250
- var fields = _this.parent.eventFields;
251
- var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
252
- if (saveArgs.changedRecords instanceof Array) {
253
- for (var _i = 0, _a = saveArgs.changedRecords; _i < _a.length; _i++) {
254
- var event_3 = _a[_i];
255
- event_3 = _this.parent.eventBase.updateEventDateTime(event_3);
256
- var eventData_2 = extend({}, _this.parent.eventBase.processTimezone(event_3, true), null, true);
257
- editParams.changedRecords.push(eventData_2);
258
- }
259
- promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());
320
+ if (saveArgs.promise) {
321
+ saveArgs.promise.then(function (hasContinue) {
322
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
323
+ return;
324
+ }
325
+ if (hasContinue) {
326
+ _this.processSaveEvent(saveArgs);
327
+ }
328
+ }).catch(function (e) {
329
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
330
+ return;
331
+ }
332
+ _this.parent.trigger(events.actionFailure, { error: e });
333
+ });
260
334
  }
261
335
  else {
262
- var event_4 = _this.parent.eventBase.processTimezone(saveArgs.changedRecords, true);
263
- editParams.changedRecords.push(event_4);
264
- promise = _this.parent.dataModule.dataManager.update(fields.id, event_4, _this.getTable(), _this.getQuery());
336
+ _this.processSaveEvent(saveArgs);
265
337
  }
266
- var cloneEvent = extend({}, saveArgs.changedRecords[saveArgs.changedRecords.length - 1], null, true);
267
- _this.parent.eventBase.selectWorkCellByTime([_this.parent.eventBase.processTimezone(cloneEvent)]);
268
- var crudArgs = {
269
- requestType: 'eventChanged', cancel: false,
270
- data: saveArgs.changedRecords, promise: promise, editParams: editParams
271
- };
272
- _this.refreshData(crudArgs);
273
338
  }
274
339
  });
275
340
  }
@@ -314,23 +379,24 @@ var Crud = /** @class */ (function () {
314
379
  };
315
380
  this.parent.trigger(events.actionBegin, args, function (deleteArgs) {
316
381
  if (!deleteArgs.cancel) {
317
- var promise = void 0;
318
- var fields = _this.parent.eventFields;
319
- var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
320
- if (deleteArgs.deletedRecords.length > 1) {
321
- editParams.deletedRecords = editParams.deletedRecords.concat(deleteArgs.deletedRecords);
322
- promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());
382
+ if (deleteArgs.promise) {
383
+ deleteArgs.promise.then(function (hasContinue) {
384
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
385
+ return;
386
+ }
387
+ if (hasContinue) {
388
+ _this.processDeleteEvent(deleteArgs);
389
+ }
390
+ }).catch(function (e) {
391
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
392
+ return;
393
+ }
394
+ _this.parent.trigger(events.actionFailure, { error: e });
395
+ });
323
396
  }
324
397
  else {
325
- editParams.deletedRecords.push(deleteArgs.deletedRecords[0]);
326
- promise = _this.parent.dataModule.dataManager.remove(fields.id, deleteArgs.deletedRecords[0], _this.getTable(), _this.getQuery());
398
+ _this.processDeleteEvent(deleteArgs);
327
399
  }
328
- _this.parent.eventBase.selectWorkCellByTime(deleteArgs.deletedRecords);
329
- var crudArgs = {
330
- requestType: 'eventRemoved', cancel: false,
331
- data: deleteArgs.deletedRecords, promise: promise, editParams: editParams
332
- };
333
- _this.refreshData(crudArgs);
334
400
  }
335
401
  });
336
402
  }
@@ -341,8 +407,8 @@ var Crud = /** @class */ (function () {
341
407
  var occurrenceData = [];
342
408
  var isDeletedRecords = false;
343
409
  if (eventData instanceof Array) {
344
- for (var _i = 0, eventData_3 = eventData; _i < eventData_3.length; _i++) {
345
- var event_5 = eventData_3[_i];
410
+ for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {
411
+ var event_5 = eventData_1[_i];
346
412
  occurrenceData.push({ occurrence: event_5, parent: this.getParentEvent(event_5) });
347
413
  }
348
414
  }
@@ -415,8 +481,8 @@ var Crud = /** @class */ (function () {
415
481
  var _this = this;
416
482
  var followData = [];
417
483
  if (eventData instanceof Array) {
418
- for (var _i = 0, eventData_4 = eventData; _i < eventData_4.length; _i++) {
419
- var event_6 = eventData_4[_i];
484
+ for (var _i = 0, eventData_2 = eventData; _i < eventData_2.length; _i++) {
485
+ var event_6 = eventData_2[_i];
420
486
  followData.push({ occurrence: event_6, parent: this.getParentEvent(event_6) });
421
487
  }
422
488
  }
@@ -493,8 +559,8 @@ var Crud = /** @class */ (function () {
493
559
  var seriesData = [];
494
560
  var isDeletedRecords = false;
495
561
  if (eventData instanceof Array) {
496
- for (var _i = 0, eventData_5 = eventData; _i < eventData_5.length; _i++) {
497
- var event_7 = eventData_5[_i];
562
+ for (var _i = 0, eventData_3 = eventData; _i < eventData_3.length; _i++) {
563
+ var event_7 = eventData_3[_i];
498
564
  seriesData.push(this.getParentEvent(event_7, true));
499
565
  }
500
566
  }
@@ -577,8 +643,8 @@ var Crud = /** @class */ (function () {
577
643
  Crud.prototype.processDelete = function (eventData) {
578
644
  var _this = this;
579
645
  var deleteData = [];
580
- for (var _i = 0, eventData_6 = eventData; _i < eventData_6.length; _i++) {
581
- var eventObj = eventData_6[_i];
646
+ for (var _i = 0, eventData_4 = eventData; _i < eventData_4.length; _i++) {
647
+ var eventObj = eventData_4[_i];
582
648
  if (eventObj[this.parent.eventFields.recurrenceRule]) {
583
649
  deleteData.push({ occurrence: eventObj, parent: this.getParentEvent(eventObj) });
584
650
  }
@@ -644,8 +710,8 @@ var Crud = /** @class */ (function () {
644
710
  var _this = this;
645
711
  var eventData = (data instanceof Array) ? data : [data];
646
712
  var editData = [];
647
- for (var _i = 0, eventData_7 = eventData; _i < eventData_7.length; _i++) {
648
- var eventObj = eventData_7[_i];
713
+ for (var _i = 0, eventData_5 = eventData; _i < eventData_5.length; _i++) {
714
+ var eventObj = eventData_5[_i];
649
715
  if (eventObj[this.parent.eventFields.recurrenceRule]) {
650
716
  editData.push({ occurrence: eventObj, parent: this.getParentEvent(eventObj) });
651
717
  }
@@ -426,6 +426,9 @@ var DragAndDrop = /** @class */ (function (_super) {
426
426
  if (dragEventArgs.cancel) {
427
427
  return;
428
428
  }
429
+ if (_this.parent.eventBase.checkOverlap(dragEventArgs.data)) {
430
+ return;
431
+ }
429
432
  if (_this.parent.isSpecificResourceEvents()) {
430
433
  _this.parent.crudModule.crudObj.isCrudAction = true;
431
434
  _this.parent.crudModule.crudObj.sourceEvent =
@@ -332,6 +332,9 @@ var Resize = /** @class */ (function (_super) {
332
332
  if (resizeEventArgs.cancel) {
333
333
  return;
334
334
  }
335
+ if (_this.parent.eventBase.checkOverlap(resizeEventArgs.data)) {
336
+ return;
337
+ }
335
338
  if (_this.parent.isSpecificResourceEvents()) {
336
339
  _this.parent.crudModule.crudObj.sourceEvent =
337
340
  [_this.parent.resourceBase.lastResourceLevel[parseInt(resizeEventArgs.element.getAttribute('data-group-index'), 10)]];
@@ -457,7 +460,7 @@ var Resize = /** @class */ (function (_super) {
457
460
  resizeTime.setHours(eventEnd.getHours(), eventEnd.getMinutes(), eventEnd.getSeconds());
458
461
  }
459
462
  }
460
- var isNotHourSlot = ['TimelineMonth', 'Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1 ||
463
+ var isNotHourSlot = ['TimelineMonth', 'Year', 'Month', 'Week', 'WorkWeek', 'Date', 'Day'].indexOf(headerName) !== -1 ||
461
464
  !this.parent.activeViewOptions.timeScale.enable;
462
465
  if (isLeft) {
463
466
  if ((eventEnd.getTime() - resizeTime.getTime()) <= 0) {
@@ -10,13 +10,13 @@ var VirtualScroll = /** @class */ (function () {
10
10
  function VirtualScroll(parent) {
11
11
  this.translateY = 0;
12
12
  this.itemSize = 60;
13
- this.bufferCount = 3;
14
13
  this.renderedLength = 0;
15
14
  this.averageRowHeight = 0;
16
15
  this.startIndex = 0;
17
16
  this.existingDataCollection = [];
18
17
  this.enableTransition = true;
19
18
  this.parent = parent;
19
+ this.bufferCount = parent.activeViewOptions.overscanCount < 3 ? 3 : parent.activeViewOptions.overscanCount;
20
20
  this.addEventListener();
21
21
  }
22
22
  VirtualScroll.prototype.addEventListener = function () {
@@ -293,6 +293,7 @@ var VirtualScroll = /** @class */ (function () {
293
293
  };
294
294
  VirtualScroll.prototype.getCollection = function (startIndex, endIndex) {
295
295
  this.translateY = startIndex * this.itemSize;
296
+ startIndex = (startIndex < 0) ? 0 : startIndex;
296
297
  var lastLevel = this.getResCollection(startIndex, endIndex);
297
298
  if (this.parent.enableRtl) {
298
299
  this.translateY = -this.translateY;
@@ -301,6 +302,7 @@ var VirtualScroll = /** @class */ (function () {
301
302
  };
302
303
  VirtualScroll.prototype.getResCollection = function (startIndex, endIndex) {
303
304
  var lastLevel = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1];
305
+ endIndex = endIndex > lastLevel.length ? lastLevel.length - 1 : endIndex;
304
306
  var resCollection = [];
305
307
  var index = { startIndex: 0, endIndex: 0 };
306
308
  if (this.parent.activeViewOptions.group.byDate) {
@@ -65,6 +65,12 @@ export declare const resourceHeader: string;
65
65
  export declare const dateHeader: string;
66
66
  /** @private */
67
67
  export declare const beforePaste: string;
68
+ /** @private */
69
+ export declare const beforePrint: string;
70
+ /** @private */
71
+ export declare const excelExport: string;
72
+ /** @private */
73
+ export declare const tooltipOpen: string;
68
74
  /**
69
75
  * Specifies schedule internal events
70
76
  */
@@ -65,6 +65,12 @@ export var resourceHeader = 'resourceHeader';
65
65
  export var dateHeader = 'dateHeader';
66
66
  /** @private */
67
67
  export var beforePaste = 'beforePaste';
68
+ /** @private */
69
+ export var beforePrint = 'beforePrint';
70
+ /** @private */
71
+ export var excelExport = 'excelExport';
72
+ /** @private */
73
+ export var tooltipOpen = 'tooltipOpen';
68
74
  /**
69
75
  * Specifies schedule internal events
70
76
  */
@@ -2,6 +2,7 @@ import { BaseEventArgs } from '@syncfusion/ej2-base';
2
2
  import { ItemModel } from '@syncfusion/ej2-navigations';
3
3
  import { PopupType, ExcelFormat, View, NavigationDirection } from './type';
4
4
  import { ResourcesModel, ViewsModel } from '../models/models';
5
+ import { Worksheets } from '@syncfusion/ej2-excel-export';
5
6
  /**
6
7
  * Interface
7
8
  */
@@ -23,6 +24,13 @@ export interface ActionEventArgs extends ToolbarActionArgs {
23
24
  changedRecords?: Record<string, any>[];
24
25
  /** Returns the appropriate deleted data based on the action. */
25
26
  deletedRecords?: Record<string, any>[];
27
+ /**
28
+ * A Promise that, when provided, checks for overlapping events on the server.
29
+ * If the promise resolves with overlapping events, the action (add/update) will be
30
+ * canceled, and an alert will be displayed to the user.
31
+ * If no overlapping events are found, the scheduler proceeds with the action.
32
+ */
33
+ promise?: Promise<boolean>;
26
34
  }
27
35
  /** */
28
36
  export interface ToolbarActionArgs extends BaseEventArgs {
@@ -122,6 +130,7 @@ export interface PopupOpenEventArgs extends BaseEventArgs {
122
130
  * * `EditEventInfo`: Denotes the quick popup on the events in responsive mode.
123
131
  * * `Editor`: Denotes the detailed editor window.
124
132
  * * `EventContainer`: Denotes the more indicator popup.
133
+ * * `OverlapAlert`: Denotes the popup showing overlap events.
125
134
  * * `QuickInfo`: Denotes the quick popup.
126
135
  * * `RecurrenceAlert`: Denotes the popup showing recurrence alerts.
127
136
  * * `RecurrenceValidationAlert`: Denotes the popup showing recurrence validation alerts.
@@ -142,6 +151,11 @@ export interface PopupOpenEventArgs extends BaseEventArgs {
142
151
  * will be processed based on the `interval` value within the `timeScale` property.
143
152
  */
144
153
  duration?: number;
154
+ /**
155
+ * Returns the collection of appointment data that overlaps with the active time range in the Scheduler.
156
+ * The `overlapEvents` array includes only the appointments that conflict with the time range of the appointment being created or updated.
157
+ */
158
+ overlapEvents?: Record<string, any>[];
145
159
  }
146
160
  /** An interface that holds options to control the popup close action. */
147
161
  export interface PopupCloseEventArgs extends BaseEventArgs {
@@ -281,6 +295,26 @@ export interface ScrollOptions {
281
295
  /** Allows to define the time delay value while scrolling. */
282
296
  timeDelay: number;
283
297
  }
298
+ /** An interface that holds the properties for the before Excel expoprt event. */
299
+ export interface ExcelExportEventArgs {
300
+ /** Specifies the Worksheets that will be exported. */
301
+ worksheets: Worksheets;
302
+ /** Specifies whether to cancel the export operation. */
303
+ cancel: boolean;
304
+ }
305
+ /** An interface that holds options for the before print event. */
306
+ export interface BeforePrintEventArgs {
307
+ /**
308
+ * The HTML element that will be printed.
309
+ * This element can be modified to customize the print output.
310
+ */
311
+ printElement?: HTMLElement;
312
+ /**
313
+ * Indicates whether to cancel the print operation.
314
+ * Set to `true` to prevent the schedule from being printed.
315
+ */
316
+ cancel?: boolean;
317
+ }
284
318
  /** An interface that holds export options. */
285
319
  export interface ExportOptions {
286
320
  /** The fileName denotes the name to be given for the exported file. */
@@ -304,6 +338,25 @@ export interface ExportOptions {
304
338
  */
305
339
  separator?: string;
306
340
  }
341
+ /** An interface that holds the options for the tooltip event in the Schedule component. */
342
+ export interface TooltipOpenEventArgs {
343
+ /**
344
+ * Determines whether the tooltip should be canceled or not.
345
+ */
346
+ cancel?: boolean;
347
+ /**
348
+ * The data associated with the tooltip.
349
+ */
350
+ data?: Record<string, any>;
351
+ /**
352
+ * The target element that triggered the tooltip.
353
+ */
354
+ target?: HTMLElement;
355
+ /**
356
+ * The content to be displayed in the tooltip. Can be an HTMLElement.
357
+ */
358
+ content?: HTMLElement;
359
+ }
307
360
  /** An interface that holds the field name and its header text to export to excel. */
308
361
  export interface ExportFieldInfo {
309
362
  /** Defines the header display text. */