@syncfusion/ej2-schedule 20.1.52 → 20.1.55

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 (72) hide show
  1. package/CHANGELOG.md +46 -11
  2. package/dist/ej2-schedule.umd.min.js +2 -2
  3. package/dist/ej2-schedule.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-schedule.es2015.js +133 -46
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +133 -46
  7. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  8. package/dist/global/ej2-schedule.min.js +2 -2
  9. package/dist/global/ej2-schedule.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +15 -15
  12. package/src/recurrence-editor/date-generator.js +11 -1
  13. package/src/schedule/base/schedule.js +4 -0
  14. package/src/schedule/event-renderer/agenda-base.js +1 -1
  15. package/src/schedule/event-renderer/event-base.js +3 -0
  16. package/src/schedule/event-renderer/month.d.ts +1 -0
  17. package/src/schedule/event-renderer/month.js +38 -29
  18. package/src/schedule/event-renderer/vertical-view.js +3 -0
  19. package/src/schedule/event-renderer/year.js +3 -1
  20. package/src/schedule/exports/calendar-export.js +1 -1
  21. package/src/schedule/popups/event-window.js +4 -2
  22. package/src/schedule/renderer/month.js +8 -5
  23. package/src/schedule/renderer/renderer.js +2 -1
  24. package/src/schedule/renderer/timeline-year.d.ts +2 -1
  25. package/src/schedule/renderer/timeline-year.js +49 -4
  26. package/src/schedule/renderer/vertical-view.js +2 -1
  27. package/src/schedule/renderer/year.js +4 -0
  28. package/styles/bootstrap-dark.css +83 -968
  29. package/styles/bootstrap.css +83 -967
  30. package/styles/bootstrap4.css +83 -990
  31. package/styles/bootstrap5-dark.css +83 -988
  32. package/styles/bootstrap5.css +83 -988
  33. package/styles/fabric-dark.css +83 -968
  34. package/styles/fabric.css +83 -970
  35. package/styles/fluent-dark.css +83 -968
  36. package/styles/fluent.css +83 -968
  37. package/styles/highcontrast-light.css +83 -967
  38. package/styles/highcontrast.css +83 -972
  39. package/styles/material-dark.css +83 -967
  40. package/styles/material.css +83 -967
  41. package/styles/recurrence-editor/bootstrap-dark.css +6 -94
  42. package/styles/recurrence-editor/bootstrap.css +6 -94
  43. package/styles/recurrence-editor/bootstrap4.css +6 -94
  44. package/styles/recurrence-editor/bootstrap5-dark.css +6 -94
  45. package/styles/recurrence-editor/bootstrap5.css +6 -94
  46. package/styles/recurrence-editor/fabric-dark.css +6 -94
  47. package/styles/recurrence-editor/fabric.css +6 -94
  48. package/styles/recurrence-editor/fluent-dark.css +6 -94
  49. package/styles/recurrence-editor/fluent.css +6 -94
  50. package/styles/recurrence-editor/highcontrast-light.css +6 -94
  51. package/styles/recurrence-editor/highcontrast.css +6 -94
  52. package/styles/recurrence-editor/material-dark.css +6 -94
  53. package/styles/recurrence-editor/material.css +6 -94
  54. package/styles/recurrence-editor/tailwind-dark.css +6 -94
  55. package/styles/recurrence-editor/tailwind.css +6 -94
  56. package/styles/schedule/bootstrap-dark.css +78 -875
  57. package/styles/schedule/bootstrap.css +78 -874
  58. package/styles/schedule/bootstrap4.css +78 -897
  59. package/styles/schedule/bootstrap5-dark.css +78 -895
  60. package/styles/schedule/bootstrap5.css +78 -895
  61. package/styles/schedule/fabric-dark.css +78 -875
  62. package/styles/schedule/fabric.css +78 -877
  63. package/styles/schedule/fluent-dark.css +78 -875
  64. package/styles/schedule/fluent.css +78 -875
  65. package/styles/schedule/highcontrast-light.css +78 -874
  66. package/styles/schedule/highcontrast.css +78 -879
  67. package/styles/schedule/material-dark.css +78 -874
  68. package/styles/schedule/material.css +78 -874
  69. package/styles/schedule/tailwind-dark.css +78 -895
  70. package/styles/schedule/tailwind.css +78 -895
  71. package/styles/tailwind-dark.css +83 -988
  72. package/styles/tailwind.css +83 -988
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 20.1.52
3
+ * version : 20.1.55
4
4
  * Copyright Syncfusion Inc. 2001 - 2020. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@19.4.55",
3
+ "_id": "@syncfusion/ej2-schedule@20.1.52",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-HWYQpMcZNz/5Y9uM/wwSmC/6yhOXJGqd8wFQ2ewAdUlPOBKGCC8FHZgPABmn/qhuSu2xn2qRh6jjNGoLQ0QY6A==",
5
+ "_integrity": "sha512-qtFM7akIbheekvc1bALoRXscem+S6iYvN7WNF5oJbZEsoEePiXdWtSosjCutVqWUSjZFmZm04+if9DqS5rGI3w==",
6
6
  "_location": "/@syncfusion/ej2-schedule",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,8 +23,8 @@
23
23
  "/@syncfusion/ej2-react-schedule",
24
24
  "/@syncfusion/ej2-vue-schedule"
25
25
  ],
26
- "_resolved": "http://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-19.4.55.tgz",
27
- "_shasum": "5a4ee8cabee27e82436391695885009226b059b5",
26
+ "_resolved": "http://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-20.1.52.tgz",
27
+ "_shasum": "3b89c078a1653001bf46f6af13fa7fef95b90fb1",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
29
  "_where": "/jenkins/workspace/automation_release_19.1.0.1-ZPMUBNQ6AUYH6YGEFBPVYMEQLRRW2SLD4XCZ6GATNZJFYJ3RIAOA/packages/included",
30
30
  "author": {
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~20.1.50",
39
- "@syncfusion/ej2-buttons": "~20.1.52",
40
- "@syncfusion/ej2-calendars": "~20.1.52",
41
- "@syncfusion/ej2-data": "~20.1.47",
42
- "@syncfusion/ej2-dropdowns": "~20.1.52",
43
- "@syncfusion/ej2-excel-export": "~20.1.48",
44
- "@syncfusion/ej2-inputs": "~20.1.48",
45
- "@syncfusion/ej2-lists": "~20.1.47",
46
- "@syncfusion/ej2-navigations": "~20.1.51",
47
- "@syncfusion/ej2-popups": "~20.1.47"
38
+ "@syncfusion/ej2-base": "~20.1.55",
39
+ "@syncfusion/ej2-buttons": "~20.1.55",
40
+ "@syncfusion/ej2-calendars": "~20.1.55",
41
+ "@syncfusion/ej2-data": "~20.1.55",
42
+ "@syncfusion/ej2-dropdowns": "~20.1.55",
43
+ "@syncfusion/ej2-excel-export": "~20.1.55",
44
+ "@syncfusion/ej2-inputs": "~20.1.55",
45
+ "@syncfusion/ej2-lists": "~20.1.55",
46
+ "@syncfusion/ej2-navigations": "~20.1.55",
47
+ "@syncfusion/ej2-popups": "~20.1.55"
48
48
  },
49
49
  "deprecated": false,
50
50
  "description": "Flexible scheduling library with more built-in features and enhanced customization options similar to outlook and google calendar, allowing the users to plan and manage their appointments with efficient data-binding support.",
@@ -81,6 +81,6 @@
81
81
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
82
82
  },
83
83
  "typings": "index.d.ts",
84
- "version": "20.1.52",
84
+ "version": "20.1.55",
85
85
  "sideEffects": false
86
86
  }
@@ -145,6 +145,10 @@ export function generate(startDate, rule, excludeDate, startDayOfWeek, maximumCo
145
145
  }
146
146
  maxOccurrence = maximumCount;
147
147
  setFirstDayOfWeek(DAYINDEX[startDayOfWeek]);
148
+ if (ruleObject.until) {
149
+ var end = resetTime(ruleObject.until);
150
+ ruleObject.until = new Date(end.getFullYear(), end.getMonth(), end.getDate(), 23, 59, 59);
151
+ }
148
152
  switch (ruleObject.freq) {
149
153
  case 'DAILY':
150
154
  dailyType(modifiedDate, ruleObject.until, data, ruleObject);
@@ -241,6 +245,9 @@ function dailyType(startDate, endDate, data, ruleObject) {
241
245
  }
242
246
  }
243
247
  tempDate.setDate(tempDate.getDate() + interval);
248
+ if (tempDate.getHours() !== startDate.getHours()) {
249
+ tempDate.setHours(startDate.getHours());
250
+ }
244
251
  }
245
252
  }
246
253
  /**
@@ -285,6 +292,9 @@ function weeklyType(startDate, endDate, data, ruleObject) {
285
292
  break;
286
293
  }
287
294
  tempDate.setDate(tempDate.getDate() + 1);
295
+ if (tempDate.getHours() !== startDate.getHours()) {
296
+ tempDate.setHours(startDate.getHours());
297
+ }
288
298
  compareTempDate = new Date(tempDate.getTime());
289
299
  compareTempDate = resetTime(compareTempDate);
290
300
  }
@@ -1167,7 +1177,7 @@ function insertDateCollection(state, startDate, endDate, data, ruleObject, dayDa
1167
1177
  function weekCount(year, startDayOfWeek, monthCollection, week, ruleObject) {
1168
1178
  var firstDayOfWeek = startDayOfWeek || 0;
1169
1179
  var firstOfMonth = new Date(year, ruleObject.month[0] - 1, 1);
1170
- var lastOfMonth = new Date(year, ruleObject.month[0] - 1, 0);
1180
+ var lastOfMonth = new Date(year, ruleObject.month[0], 0);
1171
1181
  var numberOfDaysInMonth = lastOfMonth.getDate();
1172
1182
  var firstWeekDay = (firstOfMonth.getDay() - firstDayOfWeek + 7) % 7;
1173
1183
  var used = firstWeekDay + numberOfDaysInMonth;
@@ -517,6 +517,7 @@ var Schedule = /** @class */ (function (_super) {
517
517
  };
518
518
  _this.trigger(events.navigating, navArgs, function (navigationArgs) {
519
519
  if (!navigationArgs.cancel) {
520
+ _this.uiStateValues.isInitial = view.indexOf('Timeline') > -1 || _this.currentView.indexOf('Timeline') > -1 ? true : _this.uiStateValues.isInitial;
520
521
  _this.viewIndex = navigationArgs.viewIndex;
521
522
  _this.setProperties({ currentView: view }, true);
522
523
  if (_this.headerModule) {
@@ -1141,6 +1142,9 @@ var Schedule = /** @class */ (function (_super) {
1141
1142
  if (document.querySelectorAll(template).length) {
1142
1143
  return compile(document.querySelector(template).innerHTML.trim());
1143
1144
  }
1145
+ else {
1146
+ return compile(template);
1147
+ }
1144
1148
  }
1145
1149
  catch (error) {
1146
1150
  return compile(template);
@@ -34,7 +34,7 @@ var AgendaBase = /** @class */ (function (_super) {
34
34
  moduleName: 'agenda',
35
35
  listClass: this.parent.activeView.viewClass,
36
36
  itemClass: this.parent.activeView.viewClass,
37
- template: '<div class=' + cls.AGENDA_NO_EVENT_CLASS + '>${subject}</div>'
37
+ template: "<div class=\"" + cls.AGENDA_NO_EVENT_CLASS + "\">" + this.parent.localeObj.getConstant('noEvents') + "</div>"
38
38
  });
39
39
  }
40
40
  else {
@@ -538,6 +538,9 @@ var EventBase = /** @class */ (function () {
538
538
  this.parent.removeSelectedClass();
539
539
  }
540
540
  addClass(cells, cls.APPOINTMENT_BORDER);
541
+ if (cells.length > 0) {
542
+ cells[cells.length - 1].focus();
543
+ }
541
544
  };
542
545
  EventBase.prototype.getSelectedAppointments = function () {
543
546
  return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER + ',.' + cls.APPOINTMENT_CLASS + ':focus'));
@@ -50,6 +50,7 @@ export declare class MonthEvent extends EventBase {
50
50
  getEventData(event: Record<string, any>): Record<string, any>;
51
51
  renderElement(cellTd: HTMLElement | Element, element: HTMLElement, isAppointment?: boolean): void;
52
52
  getMoreIndicatorElement(count: number, startDate: Date, endDate: Date): HTMLElement;
53
+ private getMoreIndicatorText;
53
54
  removeHeightProperty(selector: string): void;
54
55
  setMaxEventHeight(event: HTMLElement, cell: HTMLElement): void;
55
56
  destroy(): void;
@@ -47,7 +47,7 @@ var MonthEvent = /** @class */ (function (_super) {
47
47
  appElement = (this.parent.currentView === 'Month') ? appElement : [appElement[0]];
48
48
  for (var _i = 0, appElement_1 = appElement; _i < appElement_1.length; _i++) {
49
49
  var wrap = appElement_1[_i];
50
- if (!wrap.classList.contains('e-more-indicator') && wrap.parentElement && wrap.parentElement.parentNode) {
50
+ if (wrap.parentElement && wrap.parentElement.parentNode) {
51
51
  remove(wrap.parentElement);
52
52
  }
53
53
  }
@@ -178,12 +178,19 @@ var MonthEvent = /** @class */ (function (_super) {
178
178
  var filteredDates = this.getRenderedDates(dateRender);
179
179
  this.getSlotDates(workDays || this.parent.activeViewOptions.workDays);
180
180
  this.processBlockEvents(blockList, resIndex, resData);
181
+ var events = [];
181
182
  for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {
182
183
  var event_1 = eventsList_1[_i];
183
184
  if (this.parent.resourceBase && !resData) {
184
185
  this.cssClass = this.parent.resourceBase.getCssClass(event_1);
185
186
  }
186
- var spannedEvents = this.splitEvent(event_1, filteredDates || this.dateRender);
187
+ events = events.concat(this.splitEvent(event_1, filteredDates || this.dateRender));
188
+ }
189
+ for (var level = 0; level < this.slots.length; level++) {
190
+ this.renderedEvents = [];
191
+ var slot = this.slots[level];
192
+ var endDate = util.addDays(new Date(slot[slot.length - 1]), 1);
193
+ var spannedEvents = this.filterEvents(new Date(slot[0]), endDate, events);
187
194
  for (var _a = 0, spannedEvents_1 = spannedEvents; _a < spannedEvents_1.length; _a++) {
188
195
  var event_2 = spannedEvents_1[_a];
189
196
  if (this.maxHeight) {
@@ -485,24 +492,20 @@ var MonthEvent = /** @class */ (function (_super) {
485
492
  var startTime = event[this.fields.startTime];
486
493
  var endTime = event[this.fields.endTime];
487
494
  var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(startTime));
488
- if (day < 0) {
489
- return;
490
- }
491
- if ((startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {
495
+ if ((day < 0) || (startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {
492
496
  return;
493
497
  }
494
498
  var overlapCount = this.getIndex(startTime);
495
499
  event.Index = overlapCount;
496
- var appHeight = this.eventHeight;
497
- this.renderedEvents.push(extend({}, event, null, true));
498
500
  var diffInDays = event.data.count;
499
501
  if (startTime.getTime() <= endTime.getTime()) {
500
502
  var appWidth = (diffInDays * this.cellWidth) - 5;
501
503
  var cellTd = this.workCells[day];
502
- var appTop = (overlapCount * (appHeight + EVENT_GAP));
503
- var height = this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight;
504
+ var appTop = (overlapCount * (this.eventHeight + EVENT_GAP));
505
+ var height = this.monthHeaderHeight + ((overlapCount + 1) * (this.eventHeight + EVENT_GAP)) + this.moreIndicatorHeight;
504
506
  var enableAppRender = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;
505
507
  if (this.parent.rowAutoHeight || enableAppRender) {
508
+ this.renderedEvents.push(extend({}, event, null, true));
506
509
  var appointmentElement = void 0;
507
510
  if (this.inlineValue) {
508
511
  appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();
@@ -521,24 +524,26 @@ var MonthEvent = /** @class */ (function (_super) {
521
524
  }
522
525
  else {
523
526
  for (var i = 0; i < diffInDays; i++) {
524
- var cellTd_1 = this.workCells[day + i];
525
- if (cellTd_1 && isNullOrUndefined(cellTd_1.querySelector('.' + cls.MORE_INDICATOR_CLASS))) {
526
- var startDate = new Date(this.dateRender[day + i].getTime());
527
- var endDate = util.addDays(this.dateRender[day + i], 1);
528
- var groupIndex = cellTd_1.getAttribute('data-group-index');
529
- var filterEvents = this.getFilteredEvents(startDate, endDate, groupIndex);
530
- var appArea = this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight;
531
- appHeight = this.withIndicator ? appArea : appHeight;
532
- var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));
533
- var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);
534
- var moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);
535
- if (!isNullOrUndefined(groupIndex)) {
536
- moreIndicatorElement.setAttribute('data-group-index', groupIndex);
527
+ if (this.workCells[day + i]) {
528
+ var indicator = this.workCells[day + i].querySelector('.' + cls.MORE_INDICATOR_CLASS);
529
+ if (indicator) {
530
+ var count = parseInt(indicator.getAttribute('data-count'), 10) + 1;
531
+ indicator.setAttribute('data-count', count.toString());
532
+ indicator.innerHTML = this.getMoreIndicatorText(count);
533
+ }
534
+ else {
535
+ var startDate = new Date(this.dateRender[day + i].getTime());
536
+ var endDate = util.addDays(this.dateRender[day + i], 1);
537
+ var groupIndex = this.workCells[day + i].getAttribute('data-group-index');
538
+ var moreIndicatorElement = this.getMoreIndicatorElement(1, startDate, endDate);
539
+ if (!isNullOrUndefined(groupIndex)) {
540
+ moreIndicatorElement.setAttribute('data-group-index', groupIndex);
541
+ }
542
+ moreIndicatorElement.style.top = (this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight) + 'px';
543
+ moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';
544
+ this.renderElement(this.workCells[day + i], moreIndicatorElement);
545
+ EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);
537
546
  }
538
- moreIndicatorElement.style.top = appArea + 'px';
539
- moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';
540
- this.renderElement(cellTd_1, moreIndicatorElement);
541
- EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);
542
547
  }
543
548
  }
544
549
  }
@@ -575,9 +580,9 @@ var MonthEvent = /** @class */ (function (_super) {
575
580
  };
576
581
  MonthEvent.prototype.getOverlapEvents = function (date, appointments) {
577
582
  var appointmentsList = [];
583
+ var dateTime = util.resetTime(date).getTime();
578
584
  for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {
579
585
  var app = appointments_1[_i];
580
- var dateTime = util.resetTime(date).getTime();
581
586
  if ((util.resetTime(app[this.fields.startTime]).getTime() <= dateTime) &&
582
587
  (util.resetTime(app[this.fields.endTime]).getTime() >= dateTime)) {
583
588
  appointmentsList.push(app);
@@ -661,9 +666,10 @@ var MonthEvent = /** @class */ (function (_super) {
661
666
  MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {
662
667
  var moreIndicatorElement = createElement('div', {
663
668
  className: cls.MORE_INDICATOR_CLASS,
664
- innerHTML: '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),
669
+ innerHTML: this.getMoreIndicatorText(count),
665
670
  attrs: {
666
671
  'tabindex': '0',
672
+ 'data-count': count.toString(),
667
673
  'data-start-date': startDate.getTime().toString(),
668
674
  'data-end-date': endDate.getTime().toString(),
669
675
  'role': 'list'
@@ -671,6 +677,9 @@ var MonthEvent = /** @class */ (function (_super) {
671
677
  });
672
678
  return moreIndicatorElement;
673
679
  };
680
+ MonthEvent.prototype.getMoreIndicatorText = function (count) {
681
+ return '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));
682
+ };
674
683
  MonthEvent.prototype.removeHeightProperty = function (selector) {
675
684
  var rows = [].slice.call(this.element.querySelectorAll('.' + selector + ' tbody tr'));
676
685
  for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {
@@ -531,6 +531,9 @@ var VerticalEvent = /** @class */ (function (_super) {
531
531
  var currentDate = util.resetTime(new Date(this.dateRender[resource][dayIndex].getTime()));
532
532
  var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);
533
533
  var isValidEvent = this.isValidEvent(eventObj, eStart, eEnd, schedule);
534
+ if ((eStart.getTime() < this.parent.minDate.getTime()) || (eEnd.getTime() > this.parent.maxDate.getTime())) {
535
+ return;
536
+ }
534
537
  if (eStart <= eEnd && isValidEvent) {
535
538
  var appHeight_1 = this.getHeight(eStart, eEnd);
536
539
  if (eStart.getTime() > schedule.startHour.getTime()) {
@@ -224,7 +224,9 @@ var YearEvent = /** @class */ (function (_super) {
224
224
  this.eventHeight = util.getElementHeightFromClass(eventTable, cls.APPOINTMENT_CLASS);
225
225
  var wrapperCollection = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));
226
226
  var resources = this.parent.uiStateValues.isGroupAdaptive ?
227
- [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] : this.parent.resourceBase.lastResourceLevel;
227
+ [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :
228
+ this.parent.activeViewOptions.allowVirtualScrolling ? this.parent.resourceBase.renderedResources :
229
+ this.parent.resourceBase.lastResourceLevel;
228
230
  var months = this.getMonths();
229
231
  if (this.parent.activeViewOptions.orientation === 'Horizontal') {
230
232
  for (var month = 0; month < months.length; month++) {
@@ -23,7 +23,7 @@ var ICalendarExport = /** @class */ (function () {
23
23
  var editedExDate = [];
24
24
  if (eventObj[fields.recurrenceID]) {
25
25
  var filter = _this.filterEvents(filterCollection, fields.id, eventObj[fields.recurrenceID]);
26
- uId = filter[0].UID;
26
+ uId = filter.length > 0 ? filter[0].UID : uId;
27
27
  }
28
28
  if (!eventObj[fields.recurrenceID] && eventObj[fields.recurrenceRule] && eventObj[fields.recurrenceException]) {
29
29
  var exDate = (eventObj[fields.recurrenceException]).split(',');
@@ -656,7 +656,8 @@ var EventWindow = /** @class */ (function () {
656
656
  return labelText;
657
657
  };
658
658
  EventWindow.prototype.onChange = function (args) {
659
- var target = args.event.currentTarget.querySelector('input');
659
+ var targetSelector = "." + cls.EVENT_WINDOW_ALL_DAY_CLASS + ",." + cls.TIME_ZONE_CLASS + ",." + cls.EVENT_WINDOW_REPEAT_CLASS;
660
+ var target = closest(args.event.target, targetSelector);
660
661
  if (target.classList.contains(cls.EVENT_WINDOW_ALL_DAY_CLASS)) {
661
662
  this.onAllDayChange(args.checked);
662
663
  }
@@ -822,7 +823,8 @@ var EventWindow = /** @class */ (function () {
822
823
  };
823
824
  EventWindow.prototype.showDetails = function (eventData) {
824
825
  var eventObj = extend({}, eventData, null, true);
825
- if (eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
826
+ if ((!this.cellClickAction || this.cellClickAction && !isNullOrUndefined(this.parent.editorTemplate)) &&
827
+ eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
826
828
  this.trimAllDay(eventObj);
827
829
  }
828
830
  this.eventData = eventObj;
@@ -92,16 +92,16 @@ var Month = /** @class */ (function (_super) {
92
92
  }
93
93
  this.setColWidth(content);
94
94
  if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') {
95
+ var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
96
+ if (leftPanel) {
97
+ leftPanel.scrollTop = top_1;
98
+ }
99
+ content.scrollTop = top_1;
95
100
  if (this.parent.uiStateValues.isInitial) {
96
101
  this.scrollToSelectedDate();
97
102
  this.parent.uiStateValues.isInitial = false;
98
103
  }
99
104
  else {
100
- var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
101
- if (leftPanel) {
102
- leftPanel.scrollTop = top_1;
103
- }
104
- content.scrollTop = top_1;
105
105
  content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left :
106
106
  args.scrollPosition.left;
107
107
  }
@@ -122,6 +122,9 @@ var Month = /** @class */ (function (_super) {
122
122
  else {
123
123
  content.scrollLeft = 0;
124
124
  }
125
+ if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) {
126
+ this.parent.uiStateValues.left = 0;
127
+ }
125
128
  };
126
129
  Month.prototype.setContentHeight = function (content, leftPanelElement, height) {
127
130
  content.style.height = 'auto';
@@ -91,7 +91,8 @@ var Render = /** @class */ (function () {
91
91
  this.parent.virtualScrollModule.destroy();
92
92
  this.parent.virtualScrollModule = null;
93
93
  }
94
- if (this.parent.currentView.indexOf('Timeline') !== -1 && this.parent.currentView.indexOf('Year') === -1
94
+ if (this.parent.currentView.indexOf('Timeline') !== -1 && (this.parent.currentView.indexOf('Year') === -1 ||
95
+ (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.orientation === 'Vertical'))
95
96
  && this.parent.activeViewOptions.allowVirtualScrolling
96
97
  && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
97
98
  this.parent.virtualScrollModule = new VirtualScroll(this.parent);
@@ -12,7 +12,8 @@ export declare class TimelineYear extends Year {
12
12
  private renderResourceHeader;
13
13
  renderContent(contentWrapper: HTMLElement): void;
14
14
  private renderDefaultContent;
15
- private renderResourceContent;
15
+ getContentRows(): Element[];
16
+ renderResourceContent(wrapper: HTMLElement, monthBody: HTMLTableSectionElement, contentBody: HTMLTableSectionElement): void;
16
17
  private renderDayMonthHeaderTemplate;
17
18
  private renderCellTemplate;
18
19
  scrollToDate(scrollDate: Date): void;
@@ -149,7 +149,7 @@ var TimelineYear = /** @class */ (function (_super) {
149
149
  !this.parent.uiStateValues.isGroupAdaptive) {
150
150
  tdCollection.push(firstTd);
151
151
  firstTd.appendChild(this.parent.resourceBase.createResourceColumn());
152
- this.rowCount = this.parent.resourceBase.lastResourceLevel.length;
152
+ this.rowCount = this.parent.resourceBase.renderedResources.length;
153
153
  }
154
154
  else {
155
155
  tdCollection.push(firstTd);
@@ -166,6 +166,9 @@ var TimelineYear = /** @class */ (function (_super) {
166
166
  content.appendChild(contentTable);
167
167
  var eventWrapper = createElement('div', { className: cls.EVENT_TABLE_CLASS });
168
168
  content.appendChild(eventWrapper);
169
+ if (this.parent.virtualScrollModule) {
170
+ this.parent.virtualScrollModule.renderVirtualTrack(content);
171
+ }
169
172
  var contentTBody = contentTable.querySelector('tbody');
170
173
  if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
171
174
  if (this.parent.rowAutoHeight) {
@@ -283,6 +286,47 @@ var TimelineYear = /** @class */ (function (_super) {
283
286
  }
284
287
  }
285
288
  };
289
+ TimelineYear.prototype.getContentRows = function () {
290
+ var tRow = [];
291
+ var monthCells = this.getMonths();
292
+ for (var row = 0; row < this.parent.resourceBase.renderedResources.length; row++) {
293
+ var tr = createElement('tr', { attrs: { 'role': 'row' } });
294
+ tRow.push(tr);
295
+ var resData = void 0;
296
+ if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
297
+ resData = this.parent.resourceBase.renderedResources[row];
298
+ }
299
+ var monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[row], 1);
300
+ var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
301
+ for (var month = 0; month < this.columnCount; month++) {
302
+ var classList = [];
303
+ var groupIndex = resData.groupIndex;
304
+ classList = classList.concat(resData.className);
305
+ if (classList.indexOf(cls.RESOURCE_PARENT_CLASS) > -1) {
306
+ classList.push(cls.RESOURCE_GROUP_CELLS_CLASS);
307
+ }
308
+ else {
309
+ classList.push(cls.WORKDAY_CLASS);
310
+ }
311
+ monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[month], 1);
312
+ date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
313
+ var tdELe = createElement('td', {
314
+ className: cls.WORK_CELLS_CLASS,
315
+ attrs: {
316
+ 'role': 'gridcell', 'aria-selected': 'false',
317
+ 'data-date': date.getTime().toString()
318
+ }
319
+ });
320
+ addClass([tdELe], classList);
321
+ tdELe.setAttribute('data-group-index', groupIndex.toString());
322
+ this.renderCellTemplate({ date: date, type: 'resourceGroupCells', groupIndex: groupIndex }, tdELe);
323
+ this.wireEvents(tdELe, 'cell');
324
+ this.parent.trigger(event.renderCell, { elementType: 'resourceGroupCells', element: tdELe, date: date });
325
+ tr.appendChild(tdELe);
326
+ }
327
+ }
328
+ return tRow;
329
+ };
286
330
  TimelineYear.prototype.renderResourceContent = function (wrapper, monthBody, contentBody) {
287
331
  var months = this.getMonths();
288
332
  for (var row = 0; row < this.rowCount; row++) {
@@ -290,8 +334,8 @@ var TimelineYear = /** @class */ (function (_super) {
290
334
  var tr = createElement('tr', { attrs: { 'role': 'row' } });
291
335
  contentBody.appendChild(tr);
292
336
  var resData = void 0;
293
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
294
- resData = this.parent.resourceBase.lastResourceLevel[row];
337
+ if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
338
+ resData = this.parent.resourceBase.renderedResources[row];
295
339
  }
296
340
  var monthDate = new Date(this.parent.selectedDate.getFullYear(), months[row], 1);
297
341
  var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
@@ -312,8 +356,9 @@ var TimelineYear = /** @class */ (function (_super) {
312
356
  }
313
357
  for (var month = 0; month < this.columnCount; month++) {
314
358
  var classList = [];
315
- var groupIndex = row;
359
+ var groupIndex = void 0;
316
360
  if (this.parent.activeViewOptions.orientation === 'Vertical') {
361
+ groupIndex = resData.groupIndex;
317
362
  classList = classList.concat(resData.className);
318
363
  if (classList.indexOf(cls.RESOURCE_PARENT_CLASS) > -1) {
319
364
  classList.push(cls.RESOURCE_GROUP_CELLS_CLASS);
@@ -726,8 +726,9 @@ var VerticalView = /** @class */ (function (_super) {
726
726
  var msStartHour = startHour.getTime();
727
727
  var msEndHour = endHour.getTime();
728
728
  if (msStartHour !== msEndHour) {
729
+ var duration = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;
729
730
  length = (Math.abs(msEndHour - msStartHour) / msInterval) - ((new Date(msEndHour).getTimezoneOffset()
730
- - new Date(msStartHour).getTimezoneOffset()) / (60 / this.parent.activeViewOptions.timeScale.slotCount));
731
+ - new Date(msStartHour).getTimezoneOffset()) / duration);
731
732
  }
732
733
  if (!this.parent.activeViewOptions.timeScale.enable) {
733
734
  length = 1;
@@ -41,6 +41,9 @@ var Year = /** @class */ (function (_super) {
41
41
  var viewTypeClass = this.parent.activeViewOptions.orientation === 'Horizontal' ? 'e-horizontal' : 'e-vertical';
42
42
  addClass([this.element], [this.viewClass, viewTypeClass, className]);
43
43
  this.renderPanel(className);
44
+ if (this.parent.activeViewOptions.allowVirtualScrolling) {
45
+ addClass([this.element], [cls.VIRTUAL_SCROLL_CLASS]);
46
+ }
44
47
  var calendarTable = this.createTableLayout(cls.OUTER_TABLE_CLASS);
45
48
  this.element.appendChild(calendarTable);
46
49
  this.element.querySelector('table').setAttribute('role', 'presentation');
@@ -261,6 +264,7 @@ var Year = /** @class */ (function (_super) {
261
264
  Year.prototype.onContentScroll = function (e) {
262
265
  var target = e.target;
263
266
  var headerWrapper = this.getDatesHeaderElement();
267
+ this.parent.notify(event.virtualScroll, e);
264
268
  if (headerWrapper) {
265
269
  headerWrapper.firstElementChild.scrollLeft = target.scrollLeft;
266
270
  }