@syncfusion/ej2-schedule 22.2.12 → 23.1.38

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 (111) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/ej2-schedule.min.js +3 -3
  3. package/dist/ej2-schedule.umd.min.js +3 -3
  4. package/dist/ej2-schedule.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js +309 -67
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +311 -67
  8. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  9. package/dist/global/ej2-schedule.min.js +3 -3
  10. package/dist/global/ej2-schedule.min.js.map +1 -1
  11. package/dist/global/index.d.ts +2 -2
  12. package/package.json +16 -16
  13. package/src/schedule/actions/crud.d.ts +1 -1
  14. package/src/schedule/actions/crud.js +13 -5
  15. package/src/schedule/actions/data.js +29 -8
  16. package/src/schedule/actions/keyboard.js +1 -2
  17. package/src/schedule/actions/virtual-scroll.d.ts +1 -0
  18. package/src/schedule/actions/virtual-scroll.js +37 -2
  19. package/src/schedule/base/constant.d.ts +6 -0
  20. package/src/schedule/base/constant.js +6 -0
  21. package/src/schedule/base/interface.d.ts +15 -0
  22. package/src/schedule/base/resource.js +1 -0
  23. package/src/schedule/base/schedule-model.d.ts +48 -35
  24. package/src/schedule/base/schedule.d.ts +60 -35
  25. package/src/schedule/base/schedule.js +74 -6
  26. package/src/schedule/event-renderer/event-base.js +17 -11
  27. package/src/schedule/models/views-model.d.ts +10 -1
  28. package/src/schedule/models/views.d.ts +9 -1
  29. package/src/schedule/models/views.js +3 -0
  30. package/src/schedule/popups/event-tooltip.js +7 -3
  31. package/src/schedule/popups/event-window.d.ts +7 -0
  32. package/src/schedule/popups/event-window.js +123 -29
  33. package/src/schedule/popups/quick-popups.js +3 -0
  34. package/styles/bootstrap-dark.css +15 -0
  35. package/styles/bootstrap.css +15 -0
  36. package/styles/bootstrap4.css +15 -0
  37. package/styles/bootstrap5-dark.css +15 -0
  38. package/styles/bootstrap5.css +15 -0
  39. package/styles/fabric-dark.css +15 -0
  40. package/styles/fabric.css +15 -0
  41. package/styles/fluent-dark.css +15 -0
  42. package/styles/fluent.css +15 -0
  43. package/styles/highcontrast-light.css +15 -0
  44. package/styles/highcontrast.css +15 -0
  45. package/styles/material-dark.css +15 -1
  46. package/styles/material.css +15 -1
  47. package/styles/material3-dark.css +16 -2
  48. package/styles/material3-dark.scss +1 -1
  49. package/styles/material3.css +16 -2
  50. package/styles/material3.scss +1 -1
  51. package/styles/recurrence-editor/bootstrap-dark.scss +1 -1
  52. package/styles/recurrence-editor/bootstrap.scss +1 -1
  53. package/styles/recurrence-editor/bootstrap4.scss +1 -1
  54. package/styles/recurrence-editor/bootstrap5-dark.scss +1 -1
  55. package/styles/recurrence-editor/bootstrap5.scss +1 -1
  56. package/styles/recurrence-editor/fabric-dark.scss +1 -1
  57. package/styles/recurrence-editor/fabric.scss +1 -1
  58. package/styles/recurrence-editor/fluent-dark.scss +1 -1
  59. package/styles/recurrence-editor/fluent.scss +1 -1
  60. package/styles/recurrence-editor/highcontrast-light.scss +1 -1
  61. package/styles/recurrence-editor/highcontrast.scss +1 -1
  62. package/styles/recurrence-editor/material-dark.css +0 -1
  63. package/styles/recurrence-editor/material-dark.scss +1 -1
  64. package/styles/recurrence-editor/material.css +0 -1
  65. package/styles/recurrence-editor/material.scss +1 -1
  66. package/styles/recurrence-editor/material3-dark.css +0 -1
  67. package/styles/recurrence-editor/material3-dark.scss +1 -1
  68. package/styles/recurrence-editor/material3.css +0 -1
  69. package/styles/recurrence-editor/material3.scss +1 -1
  70. package/styles/recurrence-editor/tailwind-dark.css +0 -1
  71. package/styles/recurrence-editor/tailwind-dark.scss +1 -1
  72. package/styles/recurrence-editor/tailwind.css +0 -1
  73. package/styles/recurrence-editor/tailwind.scss +1 -1
  74. package/styles/schedule/_layout.scss +15 -0
  75. package/styles/schedule/_material3-definition.scss +1 -1
  76. package/styles/schedule/bootstrap-dark.css +15 -0
  77. package/styles/schedule/bootstrap-dark.scss +1 -1
  78. package/styles/schedule/bootstrap.css +15 -0
  79. package/styles/schedule/bootstrap.scss +1 -1
  80. package/styles/schedule/bootstrap4.css +15 -0
  81. package/styles/schedule/bootstrap4.scss +1 -1
  82. package/styles/schedule/bootstrap5-dark.css +15 -0
  83. package/styles/schedule/bootstrap5-dark.scss +1 -1
  84. package/styles/schedule/bootstrap5.css +15 -0
  85. package/styles/schedule/bootstrap5.scss +1 -1
  86. package/styles/schedule/fabric-dark.css +15 -0
  87. package/styles/schedule/fabric-dark.scss +1 -1
  88. package/styles/schedule/fabric.css +15 -0
  89. package/styles/schedule/fabric.scss +1 -1
  90. package/styles/schedule/fluent-dark.css +15 -0
  91. package/styles/schedule/fluent-dark.scss +1 -1
  92. package/styles/schedule/fluent.css +15 -0
  93. package/styles/schedule/fluent.scss +1 -1
  94. package/styles/schedule/highcontrast-light.css +15 -0
  95. package/styles/schedule/highcontrast-light.scss +1 -1
  96. package/styles/schedule/highcontrast.css +15 -0
  97. package/styles/schedule/highcontrast.scss +1 -1
  98. package/styles/schedule/material-dark.css +15 -1
  99. package/styles/schedule/material-dark.scss +1 -1
  100. package/styles/schedule/material.css +15 -1
  101. package/styles/schedule/material.scss +1 -1
  102. package/styles/schedule/material3-dark.css +16 -2
  103. package/styles/schedule/material3-dark.scss +1 -1
  104. package/styles/schedule/material3.css +16 -2
  105. package/styles/schedule/material3.scss +1 -1
  106. package/styles/schedule/tailwind-dark.css +15 -1
  107. package/styles/schedule/tailwind-dark.scss +1 -1
  108. package/styles/schedule/tailwind.css +15 -1
  109. package/styles/schedule/tailwind.scss +1 -1
  110. package/styles/tailwind-dark.css +15 -2
  111. package/styles/tailwind.css +15 -2
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 22.2.12
4
- * Copyright Syncfusion Inc. 2001 - 2020. All rights reserved.
3
+ * version : 23.1.38
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
7
7
  * licensing@syncfusion.com. Any infringement will be prosecuted under
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@22.2.11",
3
+ "_id": "@syncfusion/ej2-schedule@23.1.36",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-f2u5jsuLDc7QiGNWzKJgamDYPya3eP8kUqK3cMWRxg6Kae0ye9vz0UeB5H9dzuGJ9HnuiFMjYAQnPlqBgIjcMQ==",
5
+ "_integrity": "sha512-Pfkfu/cQtbv+It1is53gMN9+kp9toHnCEqX2isgC+PbGk4a18dpr3x+bp4Nng9Bl6b92QLML0JWh7jBLKKMR3Q==",
6
6
  "_location": "/@syncfusion/ej2-schedule",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,10 +23,10 @@
23
23
  "/@syncfusion/ej2-react-schedule",
24
24
  "/@syncfusion/ej2-vue-schedule"
25
25
  ],
26
- "_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-22.2.11.tgz",
27
- "_shasum": "c9ed2e7b2272b7c886b7dfd771a7bb7fd0e910e1",
26
+ "_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-23.1.36.tgz",
27
+ "_shasum": "d7fbd363b2094ca6e05e1e01c213f84d24d2dee5",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
- "_where": "/jenkins/workspace/elease-automation_release_21.1.1/packages/included",
29
+ "_where": "/jenkins/workspace/elease-automation_release_23.1.1/packages/included",
30
30
  "author": {
31
31
  "name": "Syncfusion Inc."
32
32
  },
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~22.2.12",
39
- "@syncfusion/ej2-buttons": "~22.2.9",
40
- "@syncfusion/ej2-calendars": "~22.2.12",
41
- "@syncfusion/ej2-data": "~22.2.5",
42
- "@syncfusion/ej2-dropdowns": "~22.2.12",
43
- "@syncfusion/ej2-excel-export": "~22.2.5",
44
- "@syncfusion/ej2-inputs": "~22.2.12",
45
- "@syncfusion/ej2-lists": "~22.2.11",
46
- "@syncfusion/ej2-navigations": "~22.2.11",
47
- "@syncfusion/ej2-popups": "~22.2.11"
38
+ "@syncfusion/ej2-base": "~23.1.38",
39
+ "@syncfusion/ej2-buttons": "~23.1.36",
40
+ "@syncfusion/ej2-calendars": "~23.1.38",
41
+ "@syncfusion/ej2-data": "~23.1.36",
42
+ "@syncfusion/ej2-dropdowns": "~23.1.38",
43
+ "@syncfusion/ej2-excel-export": "~23.1.36",
44
+ "@syncfusion/ej2-inputs": "~23.1.38",
45
+ "@syncfusion/ej2-lists": "~23.1.36",
46
+ "@syncfusion/ej2-navigations": "~23.1.36",
47
+ "@syncfusion/ej2-popups": "~23.1.38"
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.",
@@ -73,6 +73,6 @@
73
73
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
74
74
  },
75
75
  "typings": "index.d.ts",
76
- "version": "22.2.12",
76
+ "version": "23.1.38",
77
77
  "sideEffects": false
78
78
  }
@@ -13,7 +13,7 @@ export declare class Crud {
13
13
  refreshDataManager(): void;
14
14
  private dataManagerSuccess;
15
15
  dataManagerFailure(e: ReturnType): void;
16
- refreshProcessedData(isVirtualScrollAction?: boolean): void;
16
+ refreshProcessedData(isVirtualScrollAction?: boolean, dynamicEvents?: Record<string, any>[]): void;
17
17
  private refreshData;
18
18
  addEvent(eventData: Record<string, any> | Record<string, any>[]): void;
19
19
  saveEvent(eventData: Record<string, any> | Record<string, any>[], action: CurrentAction): void;
@@ -62,7 +62,7 @@ var Crud = /** @class */ (function () {
62
62
  }
63
63
  this.parent.trigger(events.actionFailure, { error: e }, function () { return _this.parent.hideSpinner(); });
64
64
  };
65
- Crud.prototype.refreshProcessedData = function (isVirtualScrollAction) {
65
+ Crud.prototype.refreshProcessedData = function (isVirtualScrollAction, dynamicEvents) {
66
66
  if (isVirtualScrollAction === void 0) { isVirtualScrollAction = false; }
67
67
  if (this.parent.dragAndDropModule) {
68
68
  this.parent.dragAndDropModule.actionObj.action = '';
@@ -86,7 +86,7 @@ var Crud = /** @class */ (function () {
86
86
  }
87
87
  }
88
88
  if (isVirtualScrollAction) {
89
- this.parent.notify(events.dataReady, { processedData: this.parent.eventsProcessed });
89
+ this.parent.notify(events.dataReady, { processedData: dynamicEvents ? this.parent.eventBase.processData(dynamicEvents) : this.parent.eventsProcessed });
90
90
  return;
91
91
  }
92
92
  var eventsData = this.parent.eventsData || [];
@@ -252,6 +252,8 @@ var Crud = /** @class */ (function () {
252
252
  editParams.changedRecords.push(event_4);
253
253
  promise = _this.parent.dataModule.dataManager.update(fields.id, event_4, _this.getTable(), _this.getQuery());
254
254
  }
255
+ var cloneEvent = extend({}, saveArgs.changedRecords[saveArgs.changedRecords.length - 1], null, true);
256
+ _this.parent.eventBase.selectWorkCellByTime([_this.parent.eventBase.processTimezone(cloneEvent)]);
255
257
  var crudArgs = {
256
258
  requestType: 'eventChanged', cancel: false,
257
259
  data: saveArgs.changedRecords, promise: promise, editParams: editParams
@@ -387,7 +389,8 @@ var Crud = /** @class */ (function () {
387
389
  _loop_2(a, count);
388
390
  }
389
391
  var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());
390
- _this.parent.eventBase.selectWorkCellByTime(occurrenceArgs.changedRecords);
392
+ var cloneEvent = extend({}, occurrenceArgs.changedRecords[occurrenceArgs.changedRecords.length - 1], null, true);
393
+ _this.parent.eventBase.selectWorkCellByTime(action === 'EditOccurrence' ? [_this.parent.eventBase.processTimezone(cloneEvent)] : [cloneEvent]);
391
394
  var crudArgs = {
392
395
  requestType: action === 'EditOccurrence' ? 'eventChanged' : 'eventRemoved',
393
396
  cancel: false, data: isDeletedRecords ? occurrenceArgs.deletedRecords : occurrenceArgs.changedRecords,
@@ -464,7 +467,8 @@ var Crud = /** @class */ (function () {
464
467
  _loop_3(a, count);
465
468
  }
466
469
  var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields_1.id, _this.getTable(), _this.getQuery());
467
- _this.parent.eventBase.selectWorkCellByTime(followArgs.changedRecords);
470
+ var cloneEvent = extend({}, followArgs.changedRecords[followArgs.changedRecords.length - 1], null, true);
471
+ _this.parent.eventBase.selectWorkCellByTime(action === 'EditFollowingEvents' ? [_this.parent.eventBase.processTimezone(cloneEvent)] : [cloneEvent]);
468
472
  var crudArgs = {
469
473
  requestType: action === 'EditFollowingEvents' ? 'eventChanged' : 'eventRemoved',
470
474
  cancel: false, data: followArgs.changedRecords, promise: promise, editParams: editParams
@@ -532,7 +536,8 @@ var Crud = /** @class */ (function () {
532
536
  _loop_4(a, count);
533
537
  }
534
538
  var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields_2.id, _this.getTable(), _this.getQuery());
535
- _this.parent.eventBase.selectWorkCellByTime(seriesArgs.changedRecords);
539
+ var cloneEvent = extend({}, seriesArgs.changedRecords[seriesArgs.changedRecords.length - 1], null, true);
540
+ _this.parent.eventBase.selectWorkCellByTime(action === 'EditSeries' ? [_this.parent.eventBase.processTimezone(cloneEvent)] : [cloneEvent]);
536
541
  var crudArgs = {
537
542
  requestType: action === 'EditSeries' ? 'eventChanged' : 'eventRemoved',
538
543
  cancel: false, data: isDeletedRecords ? seriesArgs.deletedRecords : seriesArgs.changedRecords,
@@ -593,6 +598,7 @@ var Crud = /** @class */ (function () {
593
598
  _loop_5(a, count);
594
599
  }
595
600
  var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields_3.id, _this.getTable(), _this.getQuery());
601
+ _this.parent.eventBase.selectWorkCellByTime(deleteArgs.deletedRecords);
596
602
  var crudArgs = {
597
603
  requestType: 'eventRemoved', cancel: false, data: deleteArgs.deletedRecords, promise: promise, editParams: editParams
598
604
  };
@@ -636,6 +642,8 @@ var Crud = /** @class */ (function () {
636
642
  }
637
643
  }
638
644
  var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());
645
+ var cloneEvent = extend({}, editArgs.changedRecords[editArgs.changedRecords.length - 1], null, true);
646
+ _this.parent.eventBase.selectWorkCellByTime([_this.parent.eventBase.processTimezone(cloneEvent)]);
639
647
  var crudArgs = { requestType: 'eventChanged', cancel: false, data: editArgs.changedRecords, promise: promise, editParams: editParams };
640
648
  _this.refreshData(crudArgs);
641
649
  }
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { Query, DataManager, Predicate } from '@syncfusion/ej2-data';
3
+ import { isNullOrUndefined } from '@syncfusion/ej2-base';
3
4
  /**
4
5
  * data module is used to generate query and data source.
5
6
  *
@@ -40,15 +41,35 @@ var Data = /** @class */ (function () {
40
41
  */
41
42
  Data.prototype.generateQuery = function (startDate, endDate) {
42
43
  var query = this.query.clone();
43
- if (this.parent && this.parent.eventSettings.includeFiltersInQuery && startDate && endDate) {
44
- var dateQuery = this.getStartEndQuery(startDate, endDate);
45
- var recurrenceQuery = new Predicate(this.parent.eventFields.recurrenceRule, 'notequal', null).and(new Predicate(this.parent.eventFields.recurrenceRule, 'notequal', ''));
46
- return query.where(dateQuery.or(recurrenceQuery));
47
- }
48
- if (startDate) {
44
+ if (this.parent && startDate && endDate) {
45
+ if (this.parent.activeViewOptions && this.parent.activeViewOptions.enableLazyLoading &&
46
+ !isNullOrUndefined(this.parent.activeViewOptions.group.resources) &&
47
+ this.parent.activeViewOptions.group.resources.length > 0 && this.parent.resourceBase &&
48
+ this.parent.resourceBase.resourceCollection.length > 0 && this.parent.resourceBase.renderedResources.length > 0) {
49
+ var resIdCollection_1 = [];
50
+ this.parent.resourceBase.resourceCollection.forEach(function () { return resIdCollection_1.push([]); });
51
+ this.parent.resourceBase.renderedResources.forEach(function (resource) {
52
+ resIdCollection_1.forEach(function (resId, index) {
53
+ var groupId = resource.groupOrder[parseInt(index.toString(), 10)];
54
+ if (groupId && resId.indexOf(groupId) < 0) {
55
+ resId.push(groupId);
56
+ }
57
+ });
58
+ });
59
+ this.parent.resourceBase.resourceCollection.forEach(function (resource, index) {
60
+ query.addParams(resource.field, resIdCollection_1[parseInt(index.toString(), 10)].toString());
61
+ });
62
+ }
63
+ if (this.parent.timezone) {
64
+ startDate = this.parent.tzModule.remove(new Date(+startDate.getTime()), this.parent.timezone);
65
+ endDate = this.parent.tzModule.remove(new Date(+endDate.getTime()), this.parent.timezone);
66
+ }
67
+ if (this.parent.eventSettings.includeFiltersInQuery) {
68
+ var dateQuery = this.getStartEndQuery(startDate, endDate);
69
+ var recurrenceQuery = new Predicate(this.parent.eventFields.recurrenceRule, 'notequal', null).and(new Predicate(this.parent.eventFields.recurrenceRule, 'notequal', ''));
70
+ return query.where(dateQuery.or(recurrenceQuery));
71
+ }
49
72
  query.addParams('StartDate', startDate.toISOString());
50
- }
51
- if (endDate) {
52
73
  query.addParams('EndDate', endDate.toISOString());
53
74
  }
54
75
  return query;
@@ -212,8 +212,7 @@ var KeyboardInteraction = /** @class */ (function () {
212
212
  var queryStr = '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' + cls.HEADER_CELLS_CLASS;
213
213
  var target = closest(e.target, queryStr);
214
214
  var selectedCells = this.parent.getSelectedCells();
215
- if (this.parent.activeViewOptions.group.resources.length > 0 && selectedCells.length > 0 &&
216
- selectedCells[0].getAttribute('data-group-index') !== target.getAttribute('data-group-index')) {
215
+ if (selectedCells.length > 0 && selectedCells.indexOf(target) === -1) {
217
216
  target = selectedCells[selectedCells.length - 1];
218
217
  }
219
218
  if (this.parent.currentView === 'TimelineYear' && target.classList.contains(cls.OTHERMONTH_CLASS)) {
@@ -26,6 +26,7 @@ export declare class VirtualScroll {
26
26
  private renderEvents;
27
27
  virtualScrolling(): void;
28
28
  private horizontalScrolling;
29
+ private triggerScrollEvent;
29
30
  private upScroll;
30
31
  private downScroll;
31
32
  private leftScroll;
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { append, addClass, remove, isNullOrUndefined, setStyleAttribute, createElement, prepend } from '@syncfusion/ej2-base';
2
3
  import * as events from '../base/constant';
3
4
  import * as cls from '../base/css-constant';
@@ -89,6 +90,16 @@ var VirtualScroll = /** @class */ (function () {
89
90
  };
90
91
  VirtualScroll.prototype.renderEvents = function () {
91
92
  this.setTabIndex();
93
+ var dynamicData = this.triggerScrollEvent(events.virtualScrollStop);
94
+ if (this.parent.activeViewOptions && this.parent.activeViewOptions.enableLazyLoading && this.parent.crudModule) {
95
+ if (dynamicData.length > 0) {
96
+ this.parent.crudModule.refreshProcessedData(true, dynamicData);
97
+ this.parent.hideSpinner();
98
+ return;
99
+ }
100
+ this.parent.crudModule.refreshDataManager();
101
+ return;
102
+ }
92
103
  if (this.parent.crudModule) {
93
104
  this.parent.crudModule.refreshProcessedData(true);
94
105
  }
@@ -125,7 +136,7 @@ var VirtualScroll = /** @class */ (function () {
125
136
  resCollection = this.downScroll(conWrap, firstTDIndex);
126
137
  }
127
138
  if (!isNullOrUndefined(resCollection) && resCollection.length > 0) {
128
- this.parent.showSpinner();
139
+ this.triggerScrollEvent(events.virtualScrollStart);
129
140
  var selectedEle = this.parent.getSelectedCells();
130
141
  this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;
131
142
  this.updateContent(resWrap, conWrap, eventWrap, resCollection);
@@ -153,7 +164,7 @@ var VirtualScroll = /** @class */ (function () {
153
164
  this.parent.resourceBase.expandedResources[0] !== resCollection[0] ||
154
165
  this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1] !==
155
166
  resCollection[resCollection.length - 1]) {
156
- this.parent.showSpinner();
167
+ this.triggerScrollEvent(events.virtualScrollStart);
157
168
  var colLevels = this.parent.activeView.colLevels.slice(0);
158
169
  this.updateHorizontalContent(conWrap, resCollection);
159
170
  setStyleAttribute(conWrap.querySelector('table'), { transform: "translateX(" + this.translateY + "px)" });
@@ -166,6 +177,30 @@ var VirtualScroll = /** @class */ (function () {
166
177
  this.timeValue = window.setTimeout(function () { _this.renderEvents(); }, 250);
167
178
  }
168
179
  };
180
+ VirtualScroll.prototype.triggerScrollEvent = function (action) {
181
+ var _this = this;
182
+ var dynamicData = [];
183
+ if (!this.parent.activeView) {
184
+ return dynamicData;
185
+ }
186
+ var eventArgs = {
187
+ startDate: this.parent.activeView.startDate(),
188
+ endDate: this.parent.activeView.endDate(),
189
+ startIndex: this.parent.resourceBase.renderedResources[0].groupIndex,
190
+ endIndex: this.parent.resourceBase.renderedResources[this.parent.resourceBase.renderedResources.length - 1].groupIndex,
191
+ resourceData: this.parent.resourceBase.renderedResources.map(function (x) { return x.resourceData; }),
192
+ name: action
193
+ };
194
+ this.parent.trigger(action, eventArgs, function (args) {
195
+ if (action === events.virtualScrollStart) {
196
+ _this.parent.showSpinner();
197
+ }
198
+ else if (action === events.virtualScrollStop && !isNullOrUndefined(args.eventData) && args.eventData.length > 0) {
199
+ dynamicData = args.eventData;
200
+ }
201
+ });
202
+ return dynamicData;
203
+ };
169
204
  VirtualScroll.prototype.upScroll = function (conWrap, firstTDIndex) {
170
205
  var index = 0;
171
206
  index = (~~(conWrap.scrollTop / this.itemSize) + Math.ceil(conWrap.clientHeight / this.itemSize)) - this.renderedLength;
@@ -24,6 +24,8 @@ export declare const renderCell: string;
24
24
  /** @private */
25
25
  export declare const eventClick: string;
26
26
  /** @private */
27
+ export declare const eventDoubleClick: string;
28
+ /** @private */
27
29
  export declare const eventRendered: string;
28
30
  /** @private */
29
31
  export declare const dataBinding: string;
@@ -49,6 +51,10 @@ export declare const resizeStop: string;
49
51
  export declare const inlineClick: string;
50
52
  /** @private */
51
53
  export declare const cellSelect: string;
54
+ /** @private */
55
+ export declare const virtualScrollStart: string;
56
+ /** @private */
57
+ export declare const virtualScrollStop: string;
52
58
  /**
53
59
  * Specifies schedule internal events
54
60
  */
@@ -24,6 +24,8 @@ export var renderCell = 'renderCell';
24
24
  /** @private */
25
25
  export var eventClick = 'eventClick';
26
26
  /** @private */
27
+ export var eventDoubleClick = 'eventDoubleClick';
28
+ /** @private */
27
29
  export var eventRendered = 'eventRendered';
28
30
  /** @private */
29
31
  export var dataBinding = 'dataBinding';
@@ -49,6 +51,10 @@ export var resizeStop = 'resizeStop';
49
51
  export var inlineClick = 'inlineClick';
50
52
  /** @private */
51
53
  export var cellSelect = 'cellSelect';
54
+ /** @private */
55
+ export var virtualScrollStart = 'virtualScrollStart';
56
+ /** @private */
57
+ export var virtualScrollStop = 'virtualScrollStop';
52
58
  /**
53
59
  * Specifies schedule internal events
54
60
  */
@@ -248,6 +248,21 @@ export interface DragEventArgs extends BaseEventArgs {
248
248
  /** Defines the date range navigation action while dragging. */
249
249
  navigation?: NavigateOptions;
250
250
  }
251
+ /** An interface that holds options of virtual scroll action. */
252
+ export interface ScrollEventArgs extends BaseEventArgs {
253
+ /** Returns the group index of last resource which is currently being rendered. */
254
+ endIndex: number;
255
+ /** Returns the end date from the active view of scheduler. */
256
+ endDate: Date;
257
+ /** Returns the group index of first resource which is currently being rendered. */
258
+ startIndex: number;
259
+ /** Returns the start date from the active view of scheduler. */
260
+ startDate: Date;
261
+ /** Returns the resource data collection which is currently rendered. */
262
+ resourceData: Record<string, any>[];
263
+ /** Allows to define the event data collection that needs to be rendered on every virtual scroll action only when enableLazyLoading property is enabled. */
264
+ eventData?: Record<string, any>[];
265
+ }
251
266
  /** An interface that holds options to control the navigation, while performing drag action on appointments. */
252
267
  export interface NavigateOptions {
253
268
  /** Allows to enable or disable the auto navigation while performing drag action on appointments. */
@@ -337,6 +337,7 @@ var ResourceBase = /** @class */ (function () {
337
337
  nodeClicked: this.resourceClick.bind(this),
338
338
  created: this.resourceTreeCreated.bind(this)
339
339
  });
340
+ this.treeViewObj.root = this.parent.root ? this.parent.root : this.parent;
340
341
  this.treeViewObj.appendTo(resourceTree);
341
342
  this.treeViewObj.expandAll();
342
343
  this.treePopup = new Popup(treeWrapper, {
@@ -1,4 +1,4 @@
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, SanitizeHtmlHelper } 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, TimezoneFields } 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, timezoneData } 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, SanitizeHtmlHelper } 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, TimezoneFields } 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, ScrollEventArgs, CallbackFunction } from '../base/interface';import { CalendarUtil, Gregorian, Islamic, CalendarType } from '../../common/calendar-util';import { ResourceBase } from '../base/resource';import { Timezone, timezoneData } 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
  /**
@@ -477,6 +477,30 @@ export interface ScheduleModel extends ComponentModel{
477
477
  */
478
478
  editorTemplate?: string | Function;
479
479
 
480
+ /**
481
+ * The template option to render the customized header of the editor window.
482
+ *
483
+ *
484
+ * @default null
485
+ * @angularType string | object
486
+ * @reactType string | function | JSX.Element
487
+ * @vueType string | function
488
+ * @aspType string
489
+ */
490
+ editorHeaderTemplate?: string | Function;
491
+
492
+ /**
493
+ * The template option to render the customized footer of the editor window.
494
+ *
495
+ *
496
+ * @default null
497
+ * @angularType string | object
498
+ * @reactType string | function | JSX.Element
499
+ * @vueType string | function
500
+ * @aspType string
501
+ */
502
+ editorFooterTemplate?: string | Function;
503
+
480
504
  /**
481
505
  * The template option to customize the quick window. The three sections of the quick popup whereas the header, content,
482
506
  * and footer can be easily customized with individual template option.
@@ -681,8 +705,6 @@ export interface ScheduleModel extends ComponentModel{
681
705
  /**
682
706
  * Triggers on beginning of every scheduler action.
683
707
  *
684
- * {% codeBlock src='schedule/actionBegin/index.md' %}{% endcodeBlock %}
685
- *
686
708
  * @event 'actionBegin'
687
709
  */
688
710
  actionBegin?: EmitType<ActionEventArgs>;
@@ -690,8 +712,6 @@ export interface ScheduleModel extends ComponentModel{
690
712
  /**
691
713
  * Triggers on successful completion of the scheduler actions.
692
714
  *
693
- * {% codeBlock src='schedule/actionComplete/index.md' %}{% endcodeBlock %}
694
- *
695
715
  * @event 'actionComplete'
696
716
  */
697
717
  actionComplete?: EmitType<ActionEventArgs>;
@@ -699,8 +719,6 @@ export interface ScheduleModel extends ComponentModel{
699
719
  /**
700
720
  * Triggers when a scheduler action gets failed or interrupted and an error information will be returned.
701
721
  *
702
- * {% codeBlock src='schedule/actionFailure/index.md' %}{% endcodeBlock %}
703
- *
704
722
  * @event 'actionFailure'
705
723
  */
706
724
  actionFailure?: EmitType<ActionEventArgs>;
@@ -708,8 +726,6 @@ export interface ScheduleModel extends ComponentModel{
708
726
  /**
709
727
  * Triggers before the date or view navigation takes place on scheduler.
710
728
  *
711
- * {% codeBlock src='schedule/navigating/index.md' %}{% endcodeBlock %}
712
- *
713
729
  * @event 'navigating'
714
730
  */
715
731
  navigating?: EmitType<NavigatingEventArgs>;
@@ -717,8 +733,6 @@ export interface ScheduleModel extends ComponentModel{
717
733
  /**
718
734
  * Triggers before each element of the schedule rendering on the page.
719
735
  *
720
- * {% codeBlock src='schedule/renderCell/index.md' %}{% endcodeBlock %}
721
- *
722
736
  * @event 'renderCell'
723
737
  */
724
738
  renderCell?: EmitType<RenderCellEventArgs>;
@@ -726,16 +740,19 @@ export interface ScheduleModel extends ComponentModel{
726
740
  /**
727
741
  * Triggers when the events are single clicked or on single tapping the events on the mobile devices.
728
742
  *
729
- * {% codeBlock src='schedule/eventClick/index.md' %}{% endcodeBlock %}
730
- *
731
743
  * @event 'eventClick'
732
744
  */
733
745
  eventClick?: EmitType<EventClickArgs>;
734
746
 
735
747
  /**
736
- * Triggers before each of the event getting rendered on the scheduler user interface.
748
+ * Triggers when the events are double clicked or on double tapping the events on the desktop devices.
737
749
  *
738
- * {% codeBlock src='schedule/eventRendered/index.md' %}{% endcodeBlock %}
750
+ * @event 'eventDoubleClick'
751
+ */
752
+ eventDoubleClick?: EmitType<EventClickArgs>;
753
+
754
+ /**
755
+ * Triggers before each of the event getting rendered on the scheduler user interface.
739
756
  *
740
757
  * @event 'eventRendered'
741
758
  */
@@ -744,8 +761,6 @@ export interface ScheduleModel extends ComponentModel{
744
761
  /**
745
762
  * Triggers before the data binds to the scheduler.
746
763
  *
747
- * {% codeBlock src='schedule/dataBinding/index.md' %}{% endcodeBlock %}
748
- *
749
764
  * @event 'dataBinding'
750
765
  */
751
766
  dataBinding?: EmitType<ReturnType>;
@@ -753,8 +768,6 @@ export interface ScheduleModel extends ComponentModel{
753
768
  /**
754
769
  * Triggers before any of the scheduler popups opens on the page.
755
770
  *
756
- * {% codeBlock src='schedule/popupOpen/index.md' %}{% endcodeBlock %}
757
- *
758
771
  * @event 'popupOpen'
759
772
  */
760
773
  popupOpen?: EmitType<PopupOpenEventArgs>;
@@ -762,8 +775,6 @@ export interface ScheduleModel extends ComponentModel{
762
775
  /**
763
776
  * Triggers before any of the scheduler popups close on the page.
764
777
  *
765
- * {% codeBlock src='schedule/popupClose/index.md' %}{% endcodeBlock %}
766
- *
767
778
  * @event 'popupClose'
768
779
  */
769
780
  popupClose?: EmitType<PopupCloseEventArgs>;
@@ -771,8 +782,6 @@ export interface ScheduleModel extends ComponentModel{
771
782
  /**
772
783
  * Triggers when an appointment is started to drag.
773
784
  *
774
- * {% codeBlock src='schedule/dragStart/index.md' %}{% endcodeBlock %}
775
- *
776
785
  * @event 'dragStart'
777
786
  */
778
787
  dragStart?: EmitType<DragEventArgs>;
@@ -780,8 +789,6 @@ export interface ScheduleModel extends ComponentModel{
780
789
  /**
781
790
  * Triggers when an appointment is being in a dragged state.
782
791
  *
783
- * {% codeBlock src='schedule/drag/index.md' %}{% endcodeBlock %}
784
- *
785
792
  * @event 'drag'
786
793
  */
787
794
  drag?: EmitType<DragEventArgs>;
@@ -789,8 +796,6 @@ export interface ScheduleModel extends ComponentModel{
789
796
  /**
790
797
  * Triggers when the dragging of appointment is stopped.
791
798
  *
792
- * {% codeBlock src='schedule/dragStop/index.md' %}{% endcodeBlock %}
793
- *
794
799
  * @event 'dragStop'
795
800
  */
796
801
  dragStop?: EmitType<DragEventArgs>;
@@ -798,8 +803,6 @@ export interface ScheduleModel extends ComponentModel{
798
803
  /**
799
804
  * Triggers when an appointment is started to resize.
800
805
  *
801
- * {% codeBlock src='schedule/resizeStart/index.md' %}{% endcodeBlock %}
802
- *
803
806
  * @event 'resizeStart'
804
807
  */
805
808
  resizeStart?: EmitType<ResizeEventArgs>;
@@ -807,8 +810,6 @@ export interface ScheduleModel extends ComponentModel{
807
810
  /**
808
811
  * Triggers when an appointment is being in a resizing action.
809
812
  *
810
- * {% codeBlock src='schedule/resizing/index.md' %}{% endcodeBlock %}
811
- *
812
813
  * @event 'resizing'
813
814
  */
814
815
  resizing?: EmitType<ResizeEventArgs>;
@@ -816,16 +817,28 @@ export interface ScheduleModel extends ComponentModel{
816
817
  /**
817
818
  * Triggers when the resizing of appointment is stopped.
818
819
  *
819
- * {% codeBlock src='schedule/resizeStop/index.md' %}{% endcodeBlock %}
820
- *
821
820
  * @event 'resizeStop'
822
821
  */
823
822
  resizeStop?: EmitType<ResizeEventArgs>;
824
823
 
825
824
  /**
826
- * Triggers once the event data is bound to the scheduler.
825
+ * Triggers when the scroll action is started.
826
+ * This event triggers only when `allowVirtualScrolling` or `enableLazyLoading` properties are enabled along with resource grouping.
827
+ *
828
+ * @event 'virtualScrollStart'
829
+ */
830
+ virtualScrollStart?: EmitType<ScrollEventArgs>;
831
+
832
+ /**
833
+ * Triggers when the scroll action is stopped.
834
+ * This event triggers only when `allowVirtualScrolling` or `enableLazyLoading` properties are enabled along with resource grouping.
827
835
  *
828
- * {% codeBlock src='schedule/dataBound/index.md' %}{% endcodeBlock %}
836
+ * @event 'virtualScrollStop'
837
+ */
838
+ virtualScrollStop?: EmitType<ScrollEventArgs>;
839
+
840
+ /**
841
+ * Triggers once the event data is bound to the scheduler.
829
842
  *
830
843
  * @event 'dataBound'
831
844
  */