@syncfusion/ej2-schedule 20.2.45 → 20.3.47

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/CHANGELOG.md +22 -0
  2. package/dist/ej2-schedule.min.js +10 -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 +603 -218
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +621 -230
  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 +16 -16
  13. package/src/recurrence-editor/recurrence-editor-model.d.ts +1 -1
  14. package/src/recurrence-editor/recurrence-editor.d.ts +1 -0
  15. package/src/recurrence-editor/recurrence-editor.js +37 -10
  16. package/src/schedule/actions/action-base.js +5 -3
  17. package/src/schedule/actions/crud.js +1 -2
  18. package/src/schedule/actions/drag.js +17 -14
  19. package/src/schedule/actions/resize.js +1 -3
  20. package/src/schedule/actions/touch.js +2 -2
  21. package/src/schedule/actions/virtual-scroll.d.ts +12 -3
  22. package/src/schedule/actions/virtual-scroll.js +206 -54
  23. package/src/schedule/base/interface.d.ts +2 -1
  24. package/src/schedule/base/schedule-model.d.ts +7 -0
  25. package/src/schedule/base/schedule.d.ts +13 -0
  26. package/src/schedule/base/schedule.js +13 -4
  27. package/src/schedule/base/util.d.ts +15 -0
  28. package/src/schedule/base/util.js +29 -3
  29. package/src/schedule/event-renderer/agenda-base.js +3 -5
  30. package/src/schedule/event-renderer/event-base.d.ts +2 -1
  31. package/src/schedule/event-renderer/event-base.js +30 -3
  32. package/src/schedule/event-renderer/month.d.ts +1 -0
  33. package/src/schedule/event-renderer/month.js +8 -6
  34. package/src/schedule/event-renderer/vertical-view.d.ts +3 -0
  35. package/src/schedule/event-renderer/vertical-view.js +32 -12
  36. package/src/schedule/event-renderer/year.js +1 -1
  37. package/src/schedule/popups/event-window.d.ts +1 -0
  38. package/src/schedule/popups/event-window.js +35 -7
  39. package/src/schedule/popups/quick-popups.js +18 -5
  40. package/src/schedule/renderer/agenda.js +1 -0
  41. package/src/schedule/renderer/header-renderer.js +3 -3
  42. package/src/schedule/renderer/month.js +25 -6
  43. package/src/schedule/renderer/renderer.js +8 -2
  44. package/src/schedule/renderer/timeline-view.js +2 -2
  45. package/src/schedule/renderer/timeline-year.d.ts +1 -0
  46. package/src/schedule/renderer/timeline-year.js +20 -12
  47. package/src/schedule/renderer/vertical-view.d.ts +1 -1
  48. package/src/schedule/renderer/vertical-view.js +48 -44
  49. package/src/schedule/renderer/view-base.d.ts +2 -0
  50. package/src/schedule/renderer/view-base.js +31 -1
  51. package/src/schedule/renderer/year.d.ts +1 -1
  52. package/src/schedule/renderer/year.js +49 -30
  53. package/styles/bootstrap-dark.css +50 -33
  54. package/styles/bootstrap.css +50 -33
  55. package/styles/bootstrap4.css +50 -33
  56. package/styles/bootstrap5-dark.css +51 -38
  57. package/styles/bootstrap5.css +51 -38
  58. package/styles/fabric-dark.css +50 -33
  59. package/styles/fabric.css +50 -33
  60. package/styles/fluent-dark.css +52 -39
  61. package/styles/fluent.css +52 -39
  62. package/styles/highcontrast-light.css +50 -33
  63. package/styles/highcontrast.css +50 -33
  64. package/styles/material-dark.css +50 -33
  65. package/styles/material.css +50 -33
  66. package/styles/recurrence-editor/_all.scss +1 -1
  67. package/styles/recurrence-editor/_bootstrap-dark-definition.scss +1 -3
  68. package/styles/recurrence-editor/_bootstrap-definition.scss +1 -3
  69. package/styles/recurrence-editor/_bootstrap4-definition.scss +1 -3
  70. package/styles/recurrence-editor/_bootstrap5-definition.scss +1 -3
  71. package/styles/recurrence-editor/_fabric-dark-definition.scss +1 -4
  72. package/styles/recurrence-editor/_fabric-definition.scss +1 -3
  73. package/styles/recurrence-editor/_fluent-definition.scss +1 -3
  74. package/styles/recurrence-editor/_fusionnew-definition.scss +1 -3
  75. package/styles/recurrence-editor/_highcontrast-definition.scss +1 -3
  76. package/styles/recurrence-editor/_highcontrast-light-definition.scss +1 -3
  77. package/styles/recurrence-editor/_layout.scss +28 -38
  78. package/styles/recurrence-editor/_material-dark-definition.scss +1 -3
  79. package/styles/recurrence-editor/_material-definition.scss +1 -3
  80. package/styles/recurrence-editor/_material3-definition.scss +1 -3
  81. package/styles/recurrence-editor/_tailwind-definition.scss +1 -3
  82. package/styles/recurrence-editor/bootstrap-dark.css +21 -27
  83. package/styles/recurrence-editor/bootstrap.css +21 -27
  84. package/styles/recurrence-editor/bootstrap4.css +21 -27
  85. package/styles/recurrence-editor/bootstrap5-dark.css +21 -27
  86. package/styles/recurrence-editor/bootstrap5.css +21 -27
  87. package/styles/recurrence-editor/fabric-dark.css +21 -27
  88. package/styles/recurrence-editor/fabric.css +21 -27
  89. package/styles/recurrence-editor/fluent-dark.css +21 -27
  90. package/styles/recurrence-editor/fluent.css +21 -27
  91. package/styles/recurrence-editor/highcontrast-light.css +21 -27
  92. package/styles/recurrence-editor/highcontrast.css +21 -27
  93. package/styles/recurrence-editor/material-dark.css +21 -27
  94. package/styles/recurrence-editor/material.css +21 -27
  95. package/styles/recurrence-editor/tailwind-dark.css +21 -27
  96. package/styles/recurrence-editor/tailwind.css +21 -27
  97. package/styles/schedule/_all.scss +1 -1
  98. package/styles/schedule/_bootstrap4-definition.scss +0 -1
  99. package/styles/schedule/_bootstrap5-definition.scss +1 -1
  100. package/styles/schedule/_fusionnew-definition.scss +1 -1
  101. package/styles/schedule/_layout.scss +57 -32
  102. package/styles/schedule/_material3-definition.scss +1 -1
  103. package/styles/schedule/_theme.scss +12 -10
  104. package/styles/schedule/bootstrap-dark.css +29 -6
  105. package/styles/schedule/bootstrap.css +29 -6
  106. package/styles/schedule/bootstrap4.css +29 -6
  107. package/styles/schedule/bootstrap5-dark.css +30 -11
  108. package/styles/schedule/bootstrap5.css +30 -11
  109. package/styles/schedule/fabric-dark.css +29 -6
  110. package/styles/schedule/fabric.css +29 -6
  111. package/styles/schedule/fluent-dark.css +31 -12
  112. package/styles/schedule/fluent.css +31 -12
  113. package/styles/schedule/highcontrast-light.css +29 -6
  114. package/styles/schedule/highcontrast.css +29 -6
  115. package/styles/schedule/icons/_bootstrap5.scss +0 -1
  116. package/styles/schedule/icons/_fluent.scss +0 -1
  117. package/styles/schedule/icons/_fusionnew.scss +0 -1
  118. package/styles/schedule/icons/_material3.scss +0 -1
  119. package/styles/schedule/icons/_tailwind.scss +0 -1
  120. package/styles/schedule/material-dark.css +29 -6
  121. package/styles/schedule/material.css +29 -6
  122. package/styles/schedule/tailwind-dark.css +29 -6
  123. package/styles/schedule/tailwind.css +29 -6
  124. package/styles/tailwind-dark.css +50 -33
  125. package/styles/tailwind.css +50 -33
@@ -1,4 +1,4 @@
1
- import { append, addClass, remove, isNullOrUndefined, setStyleAttribute, createElement } from '@syncfusion/ej2-base';
1
+ import { append, addClass, remove, isNullOrUndefined, setStyleAttribute, createElement, prepend } from '@syncfusion/ej2-base';
2
2
  import * as events from '../base/constant';
3
3
  import * as cls from '../base/css-constant';
4
4
  import * as util from '../base/util';
@@ -12,7 +12,7 @@ var VirtualScroll = /** @class */ (function () {
12
12
  this.bufferCount = 3;
13
13
  this.renderedLength = 0;
14
14
  this.averageRowHeight = 0;
15
- this.isScrollHeightNull = true;
15
+ this.startIndex = 0;
16
16
  this.parent = parent;
17
17
  this.addEventListener();
18
18
  }
@@ -30,39 +30,19 @@ var VirtualScroll = /** @class */ (function () {
30
30
  };
31
31
  VirtualScroll.prototype.getRenderedCount = function () {
32
32
  this.setItemSize();
33
- return Math.ceil(this.parent.element.clientHeight / this.itemSize) + this.bufferCount;
34
- };
35
- VirtualScroll.prototype.setTranslateValue = function () {
36
- var resWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
37
- var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
38
- var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
39
- var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);
40
- this.renderVirtualTrackHeight(conWrap, resWrap);
41
- this.setTranslate(resWrap, conWrap, eventWrap, timeIndicator);
42
- };
43
- VirtualScroll.prototype.renderVirtualTrackHeight = function (contentWrap, resourceWrap) {
44
- this.parent.resourceBase.setExpandedResources();
45
- if (this.isScrollHeightNull) {
46
- var wrap = createElement('div', { className: cls.VIRTUAL_TRACK_CLASS });
47
- var resWrap = [].slice.call((resourceWrap).querySelectorAll('table td'));
48
- var startIndex_1 = parseInt(resWrap[0].getAttribute('data-group-index'), 10);
49
- var endIndex_1 = parseInt(resWrap[resWrap.length - 1].getAttribute('data-group-index'), 10);
50
- this.parent.resourceBase.renderedResources = this.parent.resourceBase.expandedResources.filter(function (resource) {
51
- return (resource.groupIndex >= startIndex_1 && resource.groupIndex <= endIndex_1);
52
- });
53
- this.setItemSize();
54
- wrap.style.height = (this.parent.resourceBase.expandedResources.length * this.itemSize) + 'px';
55
- this.isScrollHeightNull = false;
56
- var virtual = this.parent.element.querySelector('.' + cls.VIRTUAL_TRACK_CLASS);
57
- if (!isNullOrUndefined(virtual)) {
58
- remove(virtual);
59
- }
60
- contentWrap.appendChild(wrap);
61
- }
33
+ var containerSize = this.isHorizontalScroll ? this.parent.element.clientWidth : this.parent.element.clientHeight;
34
+ this.renderedLength = Math.ceil(containerSize / this.itemSize) + this.bufferCount;
35
+ return this.renderedLength;
62
36
  };
63
37
  VirtualScroll.prototype.renderVirtualTrack = function (contentWrap) {
64
38
  var wrap = createElement('div', { className: cls.VIRTUAL_TRACK_CLASS });
65
- wrap.style.height = (this.parent.resourceBase.expandedResources.length * this.itemSize) + 'px';
39
+ if (this.isHorizontalScroll) {
40
+ var colCount = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1].length;
41
+ wrap.style.width = (colCount * this.itemSize) + 'px';
42
+ }
43
+ else {
44
+ wrap.style.height = (this.parent.resourceBase.expandedResources.length * this.itemSize) + 'px';
45
+ }
66
46
  contentWrap.appendChild(wrap);
67
47
  };
68
48
  VirtualScroll.prototype.updateVirtualScrollHeight = function () {
@@ -100,12 +80,19 @@ var VirtualScroll = /** @class */ (function () {
100
80
  }
101
81
  };
102
82
  VirtualScroll.prototype.setItemSize = function () {
103
- this.itemSize = util.getElementHeightFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
83
+ if (this.isHorizontalScroll) {
84
+ this.itemSize = util.getElementWidthFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
85
+ }
86
+ else {
87
+ this.itemSize = util.getElementHeightFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
88
+ }
104
89
  };
105
90
  VirtualScroll.prototype.renderEvents = function () {
106
91
  this.setTabIndex();
107
92
  this.parent.refreshEvents(false);
108
- this.parent.notify(events.contentReady, {});
93
+ if (this.parent.currentView !== 'Month') {
94
+ this.parent.notify(events.contentReady, {});
95
+ }
109
96
  this.parent.hideSpinner();
110
97
  };
111
98
  VirtualScroll.prototype.virtualScrolling = function () {
@@ -114,31 +101,64 @@ var VirtualScroll = /** @class */ (function () {
114
101
  this.parent.quickPopup.quickPopupHide();
115
102
  this.parent.quickPopup.morePopup.hide();
116
103
  }
117
- var resWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
118
104
  var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
119
- var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
120
- var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);
121
- var conTable = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);
122
- this.renderedLength = resWrap.querySelector('tbody').children.length;
123
- var firstTDIndex = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);
124
- var scrollHeight = this.parent.rowAutoHeight ?
125
- (conTable.offsetHeight - conWrap.offsetHeight) : this.bufferCount * this.itemSize;
126
- addClass([conWrap], 'e-transition');
105
+ if (this.isHorizontalScroll) {
106
+ this.horizontalScrolling(conWrap);
107
+ }
108
+ else {
109
+ var resWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
110
+ var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
111
+ var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);
112
+ var conTable = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);
113
+ addClass([conWrap], 'e-transition');
114
+ this.renderedLength = resWrap.querySelector('tbody').children.length;
115
+ var firstTDIndex = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);
116
+ var scrollHeight = this.parent.rowAutoHeight ?
117
+ (conTable.offsetHeight - conWrap.offsetHeight) : this.bufferCount * this.itemSize;
118
+ var resCollection = [];
119
+ if ((conWrap.scrollTop) - this.translateY < 0) {
120
+ resCollection = this.upScroll(conWrap, firstTDIndex);
121
+ }
122
+ else if (conWrap.scrollTop - this.translateY > scrollHeight) {
123
+ resCollection = this.downScroll(conWrap, firstTDIndex);
124
+ }
125
+ if (!isNullOrUndefined(resCollection) && resCollection.length > 0) {
126
+ this.parent.showSpinner();
127
+ var selectedEle = this.parent.getSelectedElements();
128
+ this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;
129
+ this.updateContent(resWrap, conWrap, eventWrap, resCollection);
130
+ this.setTranslate(resWrap, conWrap, eventWrap, timeIndicator);
131
+ if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj.action === 'drag') {
132
+ this.parent.dragAndDropModule.navigationWrapper();
133
+ }
134
+ window.clearTimeout(this.timeValue);
135
+ this.timeValue = window.setTimeout(function () { _this.renderEvents(); }, 250);
136
+ }
137
+ }
138
+ };
139
+ VirtualScroll.prototype.horizontalScrolling = function (conWrap) {
140
+ var _this = this;
127
141
  var resCollection = [];
128
- if ((conWrap.scrollTop) - this.translateY < 0) {
129
- resCollection = this.upScroll(conWrap, firstTDIndex);
142
+ var scrollWidth = this.bufferCount * this.itemSize;
143
+ if (Math.abs(conWrap.scrollLeft) - Math.abs(this.translateY) < 0) {
144
+ resCollection = this.leftScroll(conWrap);
130
145
  }
131
- else if (conWrap.scrollTop - this.translateY > scrollHeight) {
132
- resCollection = this.downScroll(conWrap, firstTDIndex);
146
+ else if (Math.abs(conWrap.scrollLeft) - Math.abs(this.translateY) > scrollWidth) {
147
+ resCollection = this.rightScroll(conWrap);
133
148
  }
134
149
  if (!isNullOrUndefined(resCollection) && resCollection.length > 0) {
135
- this.parent.showSpinner();
136
- var selectedEle = this.parent.getSelectedElements();
137
- this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;
138
- this.updateContent(resWrap, conWrap, eventWrap, resCollection);
139
- this.setTranslate(resWrap, conWrap, eventWrap, timeIndicator);
140
- if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj.action === 'drag') {
141
- this.parent.dragAndDropModule.navigationWrapper();
150
+ if (this.parent.resourceBase.expandedResources.length !== resCollection.length ||
151
+ this.parent.resourceBase.expandedResources[0] !== resCollection[0] ||
152
+ this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1] !==
153
+ resCollection[resCollection.length - 1]) {
154
+ this.parent.showSpinner();
155
+ var colLevels = this.parent.activeView.colLevels.slice(0);
156
+ this.updateHorizontalContent(conWrap, resCollection);
157
+ setStyleAttribute(conWrap.querySelector('table'), { transform: "translateX(" + this.translateY + "px)" });
158
+ this.parent.activeView.colLevels = colLevels;
159
+ if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj.action === 'drag') {
160
+ this.parent.dragAndDropModule.navigationWrapper();
161
+ }
142
162
  }
143
163
  window.clearTimeout(this.timeValue);
144
164
  this.timeValue = window.setTimeout(function () { _this.renderEvents(); }, 250);
@@ -184,6 +204,87 @@ var VirtualScroll = /** @class */ (function () {
184
204
  this.translateY = conWrap.scrollTop;
185
205
  return nextSetCollection;
186
206
  };
207
+ VirtualScroll.prototype.leftScroll = function (conWrap) {
208
+ var index = 0;
209
+ index = (~~(Math.abs(conWrap.scrollLeft) / this.itemSize) + Math.ceil(conWrap.clientWidth / this.itemSize)) - this.renderedLength;
210
+ index = (index > 0) ? index : 0;
211
+ return this.getCollection(index, index + this.renderedLength);
212
+ };
213
+ VirtualScroll.prototype.rightScroll = function (conWrap) {
214
+ var lastLevel = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1];
215
+ var nextSetIndex = 0;
216
+ nextSetIndex = ~~(Math.abs(conWrap.scrollLeft) / this.itemSize);
217
+ var lastIndex = nextSetIndex + this.renderedLength;
218
+ lastIndex = (lastIndex > lastLevel.length - 1) ? lastLevel.length - 1 : lastIndex;
219
+ return this.getCollection(lastIndex - this.renderedLength, lastIndex);
220
+ };
221
+ VirtualScroll.prototype.getCollection = function (startIndex, endIndex) {
222
+ this.translateY = startIndex * this.itemSize;
223
+ var lastLevel = this.getResCollection(startIndex, endIndex);
224
+ if (this.parent.enableRtl) {
225
+ this.translateY = -this.translateY;
226
+ }
227
+ return lastLevel;
228
+ };
229
+ VirtualScroll.prototype.getResCollection = function (startIndex, endIndex) {
230
+ var lastLevel = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1];
231
+ var resCollection = [];
232
+ var index = { startIndex: 0, endIndex: 0 };
233
+ if (this.parent.activeViewOptions.group.byDate) {
234
+ if (lastLevel[startIndex].date.getTime() === this.parent.resourceBase.expandedResources[0].date.getTime() &&
235
+ lastLevel[endIndex].date.getTime() ===
236
+ this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].date.getTime()) {
237
+ return this.parent.resourceBase.expandedResources;
238
+ }
239
+ resCollection = this.getByDateCollection(lastLevel[startIndex], lastLevel[endIndex], index);
240
+ this.setRenderedDates(resCollection);
241
+ }
242
+ else {
243
+ if (lastLevel[startIndex].groupIndex === this.parent.resourceBase.expandedResources[0].groupIndex &&
244
+ lastLevel[endIndex].groupIndex ===
245
+ this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex) {
246
+ return this.parent.resourceBase.expandedResources;
247
+ }
248
+ resCollection = this.getByIdCollection(lastLevel[startIndex], lastLevel[endIndex], index);
249
+ }
250
+ if (this.parent.currentView !== 'Month') {
251
+ this.startIndex = index.startIndex;
252
+ resCollection = lastLevel.slice(index.startIndex, index.endIndex);
253
+ }
254
+ this.translateY = index.startIndex * this.itemSize;
255
+ return resCollection;
256
+ };
257
+ VirtualScroll.prototype.getByDateCollection = function (firstItem, lastItem, index) {
258
+ var resCollection = this.parent.activeView.colLevels[0].filter(function (data) {
259
+ return firstItem.date.getTime() <= data.date.getTime() &&
260
+ data.date.getTime() <= lastItem.date.getTime();
261
+ });
262
+ this.setStartEndIndex(this.parent.activeView.colLevels[0], resCollection[0], resCollection[resCollection.length - 1], index);
263
+ return resCollection;
264
+ };
265
+ VirtualScroll.prototype.getByIdCollection = function (firstItem, lastItem, index) {
266
+ var resCollection = this.parent.resourceBase.lastResourceLevel.filter(function (data) {
267
+ return firstItem.groupIndex <= data.groupIndex && data.groupIndex <= lastItem.groupIndex;
268
+ });
269
+ this.parent.resourceBase.renderedResources = resCollection;
270
+ this.setStartEndIndex(this.parent.resourceBase.lastResourceLevel, resCollection[0], resCollection[resCollection.length - 1], index);
271
+ return resCollection;
272
+ };
273
+ VirtualScroll.prototype.setStartEndIndex = function (data, firstItem, lastItem, colIndex) {
274
+ var index = 0;
275
+ data.filter(function (data) {
276
+ if (firstItem === data) {
277
+ colIndex.startIndex = index;
278
+ }
279
+ else if (lastItem === data) {
280
+ colIndex.endIndex = index + data.colSpan;
281
+ }
282
+ index += data.colSpan;
283
+ });
284
+ if (firstItem === lastItem) {
285
+ colIndex.endIndex = colIndex.startIndex + lastItem.colSpan;
286
+ }
287
+ };
187
288
  VirtualScroll.prototype.updateContent = function (resWrap, conWrap, eventWrap, resCollection) {
188
289
  var renderedLength = resWrap.querySelector('tbody').children.length;
189
290
  if (document.activeElement && document.activeElement.classList.contains(cls.RESOURCE_CELLS_CLASS)) {
@@ -203,6 +304,45 @@ var VirtualScroll = /** @class */ (function () {
203
304
  append(contentRows, conWrap.querySelector('tbody'));
204
305
  append(eventRows, eventWrap);
205
306
  };
307
+ VirtualScroll.prototype.updateHorizontalContent = function (conWrap, resCollection) {
308
+ this.parent.resourceBase.expandedResources = resCollection;
309
+ var selectedEle = this.parent.getSelectedElements();
310
+ this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;
311
+ var renderedLength = conWrap.querySelectorAll('tbody tr').length;
312
+ for (var i = 0; i < renderedLength; i++) {
313
+ remove(conWrap.querySelector('tbody tr'));
314
+ }
315
+ if (this.parent.currentView === 'Month') {
316
+ if (this.parent.activeViewOptions.group.byDate) {
317
+ this.parent.activeView.colLevels[0] = resCollection;
318
+ }
319
+ else {
320
+ this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 2] = resCollection;
321
+ }
322
+ var contentRows = this.parent.activeView.getContentRows();
323
+ append(contentRows, conWrap.querySelector('tbody'));
324
+ }
325
+ else {
326
+ var col = [].slice.call(conWrap.querySelector('colgroup').children);
327
+ for (var i = 0; i < col.length; i++) {
328
+ remove(col[i]);
329
+ }
330
+ this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1] = resCollection;
331
+ var contentRows = this.parent.activeView.getContentRows();
332
+ var table = conWrap.querySelector('table');
333
+ var thead = conWrap.querySelector('thead');
334
+ var colGroupEle_1 = conWrap.querySelector('colgroup');
335
+ resCollection.forEach(function () {
336
+ colGroupEle_1.appendChild(createElement('col'));
337
+ });
338
+ thead.appendChild(this.parent.eventBase.createEventWrapper('', this.startIndex > 0 ? this.startIndex : 0));
339
+ if (this.parent.activeViewOptions.timeScale.enable) {
340
+ thead.appendChild(this.parent.eventBase.createEventWrapper('timeIndicator'));
341
+ }
342
+ prepend([thead], table);
343
+ append(contentRows, conWrap.querySelector('tbody'));
344
+ }
345
+ };
206
346
  VirtualScroll.prototype.getBufferCollection = function (startIndex, endIndex) {
207
347
  return this.parent.resourceBase.expandedResources.slice(startIndex, endIndex);
208
348
  };
@@ -225,6 +365,17 @@ var VirtualScroll = /** @class */ (function () {
225
365
  this.focusedEle = null;
226
366
  }
227
367
  };
368
+ VirtualScroll.prototype.setRenderedDates = function (resCollection) {
369
+ if (this.parent.currentView !== 'Month') {
370
+ var dateCol_1 = resCollection.map(function (x) { return x.date; });
371
+ this.parent.resourceBase.renderedResources.forEach(function (x) { return x.renderDates = dateCol_1; });
372
+ }
373
+ else {
374
+ var dateCol_2 = resCollection.map(function (x) { return x.date.getDay(); });
375
+ var renderDates_1 = this.parent.activeView.renderDates.filter(function (x) { return dateCol_2.indexOf(x.getDay()) >= 0; });
376
+ this.parent.resourceBase.renderedResources.forEach(function (x) { return x.renderDates = renderDates_1; });
377
+ }
378
+ };
228
379
  VirtualScroll.prototype.setTabIndex = function () {
229
380
  var resColWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
230
381
  var resCells = [].slice.call(this.parent.element.querySelectorAll('.' + cls.RESOURCE_CELLS_CLASS));
@@ -243,6 +394,7 @@ var VirtualScroll = /** @class */ (function () {
243
394
  };
244
395
  VirtualScroll.prototype.destroy = function () {
245
396
  this.removeEventListener();
397
+ this.focusedEle = null;
246
398
  };
247
399
  return VirtualScroll;
248
400
  }());
@@ -284,7 +284,7 @@ export interface ExportOptions {
284
284
  /**
285
285
  * Defines the delimiter for csv file export.
286
286
  * By default, csv files are using comma(,) as separator. You can specify this property to change the delimiter in csv file.
287
- */
287
+ */
288
288
  separator?: string;
289
289
  }
290
290
  /** An interface that holds the field name and its header text to export to excel. */
@@ -421,6 +421,7 @@ export interface IRenderer {
421
421
  resetColWidth(): void;
422
422
  getAdjustedDate?(date: Date): Date;
423
423
  viewIndex: number;
424
+ colLevels: TdData[][];
424
425
  }
425
426
  /** @private */
426
427
  export interface EJ2Instance extends HTMLElement {
@@ -51,6 +51,13 @@ export interface ScheduleModel extends ComponentModel{
51
51
  */
52
52
  showTimeIndicator?: boolean;
53
53
 
54
+ /**
55
+ * Defines whether to enable date navigations via swipe in touch devices or not.
56
+ *
57
+ * @default true
58
+ */
59
+ allowSwiping?: boolean;
60
+
54
61
  /**
55
62
  * To set the active view on scheduler, the `currentView` property can be used and it usually accepts either of the following available
56
63
  * view options. The view option specified in this property will be initially loaded on the schedule.
@@ -174,6 +174,12 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
174
174
  * @default true
175
175
  */
176
176
  showTimeIndicator: boolean;
177
+ /**
178
+ * Defines whether to enable date navigations via swipe in touch devices or not.
179
+ *
180
+ * @default true
181
+ */
182
+ allowSwiping: boolean;
177
183
  /**
178
184
  * To set the active view on scheduler, the `currentView` property can be used and it usually accepts either of the following available
179
185
  * view options. The view option specified in this property will be initially loaded on the schedule.
@@ -1274,6 +1280,13 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1274
1280
  * @private
1275
1281
  */
1276
1282
  renderHeaderIndentTemplate(data: TdData, td: Element): void;
1283
+ /**
1284
+ * Method to check for refreshing the targeted resource row events.
1285
+ *
1286
+ * @returns {boolean} Returns the boolean value
1287
+ * @private
1288
+ */
1289
+ isSpecificResourceEvents(): boolean;
1277
1290
  private unWireEvents;
1278
1291
  /**
1279
1292
  * Core method to return the component name.
@@ -1251,6 +1251,16 @@ var Schedule = /** @class */ (function (_super) {
1251
1251
  append(indentTemplate, td);
1252
1252
  }
1253
1253
  };
1254
+ /**
1255
+ * Method to check for refreshing the targeted resource row events.
1256
+ *
1257
+ * @returns {boolean} Returns the boolean value
1258
+ * @private
1259
+ */
1260
+ Schedule.prototype.isSpecificResourceEvents = function () {
1261
+ return this.activeViewOptions.group.resources.length > 0 && !this.activeViewOptions.group.allowGroupEdit &&
1262
+ !this.rowAutoHeight && !this.virtualScrollModule && this.activeViewOptions.group.byGroupID;
1263
+ };
1254
1264
  Schedule.prototype.unWireEvents = function () {
1255
1265
  EventHandler.remove(window, 'resize', this.onScheduleResize);
1256
1266
  EventHandler.remove(window, 'orientationchange', this.onScheduleResize);
@@ -2524,10 +2534,6 @@ var Schedule = /** @class */ (function (_super) {
2524
2534
  this.hideSpinner();
2525
2535
  this.unWireEvents();
2526
2536
  this.destroyHeaderModule();
2527
- if (this.eventTooltip) {
2528
- this.eventTooltip.destroy();
2529
- this.eventTooltip = null;
2530
- }
2531
2537
  if (this.eventBase) {
2532
2538
  this.eventBase.destroy();
2533
2539
  this.eventBase = null;
@@ -2601,6 +2607,9 @@ var Schedule = /** @class */ (function (_super) {
2601
2607
  __decorate([
2602
2608
  Property(true)
2603
2609
  ], Schedule.prototype, "showTimeIndicator", void 0);
2610
+ __decorate([
2611
+ Property(true)
2612
+ ], Schedule.prototype, "allowSwiping", void 0);
2604
2613
  __decorate([
2605
2614
  Property('Week')
2606
2615
  ], Schedule.prototype, "currentView", void 0);
@@ -13,6 +13,14 @@ export declare const MS_PER_MINUTE: number;
13
13
  * @returns {number} Returns the height of the element
14
14
  */
15
15
  export declare function getElementHeightFromClass(container: Element, elementClass: string): number;
16
+ /**
17
+ * Method to get width from element
18
+ *
19
+ * @param {Element} container Accepts the DOM element
20
+ * @param {string} elementClass Accepts the element class
21
+ * @returns {number} Returns the width of the element
22
+ */
23
+ export declare function getElementWidthFromClass(container: Element, elementClass: string): number;
16
24
  /**
17
25
  * Method to get translateY value
18
26
  *
@@ -20,6 +28,13 @@ export declare function getElementHeightFromClass(container: Element, elementCla
20
28
  * @returns {number} Returns the translateY value of given element
21
29
  */
22
30
  export declare function getTranslateY(element: HTMLElement | Element): number;
31
+ /**
32
+ * Method to get translateX value
33
+ *
34
+ * @param {HTMLElement | Element} element Accepts the DOM element
35
+ * @returns {number} Returns the translateX value of given element
36
+ */
37
+ export declare function getTranslateX(element: HTMLElement | Element): number;
23
38
  /**
24
39
  * Method to get week first date
25
40
  *
@@ -24,6 +24,23 @@ export function getElementHeightFromClass(container, elementClass) {
24
24
  remove(el);
25
25
  return height;
26
26
  }
27
+ /**
28
+ * Method to get width from element
29
+ *
30
+ * @param {Element} container Accepts the DOM element
31
+ * @param {string} elementClass Accepts the element class
32
+ * @returns {number} Returns the width of the element
33
+ */
34
+ export function getElementWidthFromClass(container, elementClass) {
35
+ var width = 0;
36
+ var el = createElement('div', { className: elementClass }).cloneNode();
37
+ el.style.visibility = 'hidden';
38
+ el.style.position = 'absolute';
39
+ container.appendChild(el);
40
+ width = el.getBoundingClientRect().width;
41
+ remove(el);
42
+ return width;
43
+ }
27
44
  /**
28
45
  * Method to get translateY value
29
46
  *
@@ -35,6 +52,17 @@ export function getTranslateY(element) {
35
52
  return window.WebKitCSSMatrix ?
36
53
  new WebKitCSSMatrix(style.webkitTransform).m42 : 0;
37
54
  }
55
+ /**
56
+ * Method to get translateX value
57
+ *
58
+ * @param {HTMLElement | Element} element Accepts the DOM element
59
+ * @returns {number} Returns the translateX value of given element
60
+ */
61
+ export function getTranslateX(element) {
62
+ var style = getComputedStyle(element);
63
+ return window.WebKitCSSMatrix ?
64
+ new WebKitCSSMatrix(style.webkitTransform).m41 : 0;
65
+ }
38
66
  /**
39
67
  * Method to get week first date
40
68
  *
@@ -312,9 +340,7 @@ export function removeChildren(element) {
312
340
  var elementChildren = [].slice.call(element.children);
313
341
  for (var _i = 0, elementChildren_1 = elementChildren; _i < elementChildren_1.length; _i++) {
314
342
  var elementChild = elementChildren_1[_i];
315
- if (!elementChild.classList.contains('blazor-template')) {
316
- element.removeChild(elementChild);
317
- }
343
+ element.removeChild(elementChild);
318
344
  }
319
345
  }
320
346
  /**
@@ -56,7 +56,6 @@ var AgendaBase = /** @class */ (function (_super) {
56
56
  'tabindex': '0',
57
57
  'aria-disabled': _this.parent.eventBase.getReadonlyAttribute(listData[li]),
58
58
  'aria-pressed': 'false',
59
- 'aria-grabbed': 'true',
60
59
  'aria-label': _this.parent.getAnnouncementString(listData[li])
61
60
  }
62
61
  });
@@ -263,9 +262,9 @@ var AgendaBase = /** @class */ (function (_super) {
263
262
  }
264
263
  };
265
264
  AgendaBase.prototype.createResourceTableRow = function (tContent, tBody) {
266
- var tr = createElement('tr', { attrs: { role: 'row' } });
265
+ var tr = createElement('tr');
267
266
  var ntr;
268
- var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });
267
+ var td = createElement('td', { attrs: { 'aria-selected': 'false' } });
269
268
  var tempData;
270
269
  var rowSpan = 0;
271
270
  var level;
@@ -360,11 +359,10 @@ var AgendaBase = /** @class */ (function (_super) {
360
359
  };
361
360
  AgendaBase.prototype.createTableRowElement = function (date, type) {
362
361
  var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), date.getTime());
363
- var tr = createElement('tr', { attrs: { 'role': 'row', 'data-row-index': daysCount.toString() } });
362
+ var tr = createElement('tr', { attrs: { 'data-row-index': daysCount.toString() } });
364
363
  var td = createElement('td', {
365
364
  attrs: {
366
365
  'class': (type === 'monthHeader') ? cls.MONTH_HEADER_CLASS : cls.AGENDA_CELLS_CLASS,
367
- 'role': 'gridcell',
368
366
  'aria-selected': 'false',
369
367
  'data-column-index': daysCount.toString(),
370
368
  'data-date': date.getTime().toString()
@@ -71,7 +71,7 @@ export declare class EventBase {
71
71
  getOccurrencesByRange(startTime: Date, endTime: Date): Record<string, any>[];
72
72
  getDeletedOccurrences(recurrenceData: string | number | Record<string, any>): Record<string, any>[];
73
73
  applyResourceColor(element: HTMLElement, data: Record<string, any>, type: string, index?: string[], alpha?: string): void;
74
- createBlockAppointmentElement(record: Record<string, any>, resIndex: number): HTMLElement;
74
+ createBlockAppointmentElement(record: Record<string, any>, resIndex: number, isResourceEventTemplate: boolean): HTMLElement;
75
75
  setWrapperAttributes(appointmentWrapper: HTMLElement, resIndex: number): void;
76
76
  getReadonlyAttribute(event: Record<string, any>): string;
77
77
  isBlockRange(eventData: Record<string, any> | Record<string, any>[]): boolean;
@@ -84,6 +84,7 @@ export declare class EventBase {
84
84
  }): boolean;
85
85
  allDayExpandScroll(dateHeader: HTMLElement): void;
86
86
  updateEventMinimumDuration(startEndHours: Record<string, Date>, startTime: Date, endTime: Date): Record<string, Date>;
87
+ createEventWrapper(type?: string, index?: number): HTMLElement;
87
88
  private unWireEvents;
88
89
  destroy(): void;
89
90
  }
@@ -875,7 +875,8 @@ var EventBase = /** @class */ (function () {
875
875
  var startDate = event[this.parent.eventFields.startTime];
876
876
  var endDate = event[this.parent.eventFields.endTime];
877
877
  var eventRule = event[this.parent.eventFields.recurrenceRule];
878
- var duration = endDate.getTime() - startDate.getTime();
878
+ var timeZoneDiff = endDate.getTimezoneOffset() - startDate.getTimezoneOffset();
879
+ var duration = (endDate.getTime() - startDate.getTime()) - (timeZoneDiff * 60000);
879
880
  viewDate = new Date((viewDate || this.parent.activeView.startDate()).getTime() - duration);
880
881
  var exception = event[this.parent.eventFields.recurrenceException];
881
882
  var maxCount;
@@ -1089,7 +1090,7 @@ var EventBase = /** @class */ (function () {
1089
1090
  element.style[type] = !isNullOrUndefined(alpha) ? alphaColor(color, alpha) : color;
1090
1091
  }
1091
1092
  };
1092
- EventBase.prototype.createBlockAppointmentElement = function (record, resIndex) {
1093
+ EventBase.prototype.createBlockAppointmentElement = function (record, resIndex, isResourceEventTemplate) {
1093
1094
  var eventSubject = (record[this.parent.eventFields.subject] || this.parent.eventSettings.fields.subject.default);
1094
1095
  var appointmentWrapper = createElement('div', {
1095
1096
  className: cls.BLOCK_APPOINTMENT_CLASS,
@@ -1103,7 +1104,7 @@ var EventBase = /** @class */ (function () {
1103
1104
  var scheduleId = this.parent.element.id + '_';
1104
1105
  var viewName = this.parent.activeViewOptions.eventTemplateName;
1105
1106
  var templateId = scheduleId + viewName + 'eventTemplate';
1106
- var templateName = 'eventTemplate' + (this.parent.activeViewOptions.group.resources.length > 0 &&
1107
+ var templateName = 'eventTemplate' + (isResourceEventTemplate &&
1107
1108
  this.parent.currentView.indexOf('Year') === -1 ? '_' + resIndex : '');
1108
1109
  templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false);
1109
1110
  }
@@ -1259,6 +1260,32 @@ var EventBase = /** @class */ (function () {
1259
1260
  }
1260
1261
  return { startDate: startTime, endDate: endTime };
1261
1262
  };
1263
+ EventBase.prototype.createEventWrapper = function (type, index) {
1264
+ if (type === void 0) { type = ''; }
1265
+ if (index === void 0) { index = 0; }
1266
+ var tr = createElement('tr');
1267
+ var levels = this.parent.activeView.colLevels.slice(-1)[0];
1268
+ for (var i = 0, len = levels.length; i < len; i++) {
1269
+ var col = levels[i];
1270
+ var appointmentWrap = createElement('td', {
1271
+ className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : (type === 'timeIndicator') ?
1272
+ cls.TIMELINE_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS, attrs: { 'data-date': col.date.getTime().toString() }
1273
+ });
1274
+ if (!isNullOrUndefined(col.groupIndex)) {
1275
+ appointmentWrap.setAttribute('data-group-index', col.groupIndex.toString());
1276
+ }
1277
+ if (type === '') {
1278
+ var innerWrapper = createElement('div', {
1279
+ id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + index.toString(),
1280
+ className: cls.APPOINTMENT_WRAPPER_CLASS
1281
+ });
1282
+ appointmentWrap.appendChild(innerWrapper);
1283
+ }
1284
+ tr.appendChild(appointmentWrap);
1285
+ index = index + 1;
1286
+ }
1287
+ return tr;
1288
+ };
1262
1289
  EventBase.prototype.unWireEvents = function () {
1263
1290
  var appElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));
1264
1291
  for (var _i = 0, appElements_1 = appElements; _i < appElements_1.length; _i++) {
@@ -20,6 +20,7 @@ export declare class MonthEvent extends EventBase {
20
20
  withIndicator: boolean;
21
21
  maxOrIndicator: boolean;
22
22
  inlineValue: boolean;
23
+ private isResourceEventTemplate;
23
24
  constructor(parent: Schedule);
24
25
  private removeEventWrapper;
25
26
  renderAppointments(): void;