@syncfusion/ej2-schedule 25.1.35 → 25.1.39

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 +19 -0
  2. package/dist/ej2-schedule.min.js +2 -2
  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 +183 -44
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +192 -45
  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 +12 -12
  13. package/src/recurrence-editor/recurrence-editor.js +1 -2
  14. package/src/schedule/actions/crud.js +3 -0
  15. package/src/schedule/actions/virtual-scroll.d.ts +2 -0
  16. package/src/schedule/actions/virtual-scroll.js +24 -1
  17. package/src/schedule/base/css-constant.d.ts +4 -0
  18. package/src/schedule/base/css-constant.js +4 -0
  19. package/src/schedule/base/interface.d.ts +1 -0
  20. package/src/schedule/base/resource.js +1 -0
  21. package/src/schedule/base/schedule.d.ts +1 -0
  22. package/src/schedule/base/schedule.js +20 -4
  23. package/src/schedule/base/type.d.ts +1 -0
  24. package/src/schedule/event-renderer/agenda-base.d.ts +1 -1
  25. package/src/schedule/event-renderer/agenda-base.js +36 -14
  26. package/src/schedule/event-renderer/event-base.js +4 -2
  27. package/src/schedule/event-renderer/month.js +1 -2
  28. package/src/schedule/event-renderer/timeline-view.js +17 -5
  29. package/src/schedule/event-renderer/vertical-view.js +18 -2
  30. package/src/schedule/popups/quick-popups.js +3 -1
  31. package/src/schedule/renderer/agenda.d.ts +1 -0
  32. package/src/schedule/renderer/agenda.js +38 -9
  33. package/src/schedule/renderer/header-renderer.js +3 -2
  34. package/src/schedule/renderer/renderer.js +1 -0
  35. package/src/schedule/renderer/timeline-year.js +4 -1
  36. package/src/schedule/renderer/vertical-view.js +14 -0
  37. package/src/schedule/renderer/view-base.js +1 -1
  38. package/styles/bootstrap-dark.css +11 -1
  39. package/styles/bootstrap.css +11 -1
  40. package/styles/bootstrap4.css +11 -1
  41. package/styles/bootstrap5-dark.css +11 -1
  42. package/styles/bootstrap5.css +11 -1
  43. package/styles/fabric-dark.css +11 -1
  44. package/styles/fabric.css +11 -1
  45. package/styles/fluent-dark.css +12 -2
  46. package/styles/fluent.css +12 -2
  47. package/styles/highcontrast-light.css +11 -1
  48. package/styles/highcontrast.css +11 -1
  49. package/styles/material-dark.css +20 -1
  50. package/styles/material.css +20 -1
  51. package/styles/material3-dark.css +11 -1
  52. package/styles/material3.css +11 -1
  53. package/styles/schedule/_layout.scss +22 -1
  54. package/styles/schedule/bootstrap-dark.css +11 -1
  55. package/styles/schedule/bootstrap.css +11 -1
  56. package/styles/schedule/bootstrap4.css +11 -1
  57. package/styles/schedule/bootstrap5-dark.css +11 -1
  58. package/styles/schedule/bootstrap5.css +11 -1
  59. package/styles/schedule/fabric-dark.css +11 -1
  60. package/styles/schedule/fabric.css +11 -1
  61. package/styles/schedule/fluent-dark.css +12 -2
  62. package/styles/schedule/fluent.css +12 -2
  63. package/styles/schedule/highcontrast-light.css +11 -1
  64. package/styles/schedule/highcontrast.css +11 -1
  65. package/styles/schedule/material-dark.css +20 -1
  66. package/styles/schedule/material.css +20 -1
  67. package/styles/schedule/material3-dark.css +11 -1
  68. package/styles/schedule/material3.css +11 -1
  69. package/styles/schedule/tailwind-dark.css +11 -1
  70. package/styles/schedule/tailwind.css +11 -1
  71. package/styles/tailwind-dark.css +11 -1
  72. package/styles/tailwind.css +11 -1
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 25.1.35
3
+ * version : 25.1.39
4
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
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@22.9.0",
3
+ "_id": "@syncfusion/ej2-schedule@25.1.37",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-HgWYJsJtHsRwZLq9VMWjqS/mOk6zZlOZ4oCvazTD0KeKLwl5mimeKns07gIPbz0pY8yWKHLOwt2tvzjYxIi23A==",
5
+ "_integrity": "sha512-flwr+93nCa0OS6J4KbFw5HBmUmNW4HFDJfV9KGRqIT9OhErmQTpp8ImOzZBuUohD27V/3dQ+MdOf9kD9rZlKcw==",
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": "https://nexus.syncfusioninternal.com/repository/ej2-release/@syncfusion/ej2-schedule/-/ej2-schedule-22.9.0.tgz",
27
- "_shasum": "35f485e5f3e388697c615f38881aa98e3965b071",
26
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-25.1.37.tgz",
27
+ "_shasum": "5d67d711e5b35889656ed5b772293682a3d896cb",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
29
  "_where": "/jenkins/workspace/elease-automation_release_25.1.1/packages/included",
30
30
  "author": {
@@ -36,15 +36,15 @@
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
38
  "@syncfusion/ej2-base": "~25.1.35",
39
- "@syncfusion/ej2-buttons": "~25.1.35",
40
- "@syncfusion/ej2-calendars": "~25.1.35",
39
+ "@syncfusion/ej2-buttons": "~25.1.39",
40
+ "@syncfusion/ej2-calendars": "~25.1.39",
41
41
  "@syncfusion/ej2-data": "~25.1.35",
42
- "@syncfusion/ej2-dropdowns": "~25.1.35",
42
+ "@syncfusion/ej2-dropdowns": "~25.1.39",
43
43
  "@syncfusion/ej2-excel-export": "~25.1.35",
44
- "@syncfusion/ej2-inputs": "~25.1.35",
45
- "@syncfusion/ej2-lists": "~25.1.35",
46
- "@syncfusion/ej2-navigations": "~25.1.35",
47
- "@syncfusion/ej2-popups": "~25.1.35"
44
+ "@syncfusion/ej2-inputs": "~25.1.38",
45
+ "@syncfusion/ej2-lists": "~25.1.39",
46
+ "@syncfusion/ej2-navigations": "~25.1.39",
47
+ "@syncfusion/ej2-popups": "~25.1.39"
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": "25.1.35",
76
+ "version": "25.1.39",
77
77
  "sideEffects": false
78
78
  }
@@ -716,7 +716,6 @@ var RecurrenceEditor = /** @class */ (function (_super) {
716
716
  RecurrenceEditor.prototype.setTemplate = function () {
717
717
  var dayData = this.getDayData('narrow');
718
718
  var fullDay = this.getDayData('wide');
719
- var labelId = this.element.id + '_' + 'end_label';
720
719
  this.element.innerHTML = '<div class="' + HEADER + '">' +
721
720
  '<div class="' + INPUTWARAPPER + ' ' + FORMLEFT + '">' +
722
721
  '<input type="text" tabindex="0" class="' + REPEATELEMENT +
@@ -763,7 +762,7 @@ var RecurrenceEditor = /** @class */ (function (_super) {
763
762
  '</div></div>' +
764
763
  '<div class="' + INPUTWARAPPERSIDE + ' ' + ENDON + ' ' + FORMRIGHT + '">' +
765
764
  '<div class="' + INPUTWARAPPER + ' ' + ENDONLEFT + '">' +
766
- '<input type="text" tabindex="0" class="' + ENDONELEMENT + '" aria-labelledby="' + labelId + '"title="' + this.localeObj.getConstant(END) + '" />' +
765
+ '<input type="text" tabindex="0" class="' + ENDONELEMENT + '"title="' + this.localeObj.getConstant(END) + '" />' +
767
766
  '</div>' +
768
767
  '<div class="' + INPUTWARAPPER + ' ' + ENDONDATE + '" >' +
769
768
  '<input type="text" tabindex="0" class="' + UNTILDATE + '"title="' + this.localeObj.getConstant(UNTIL) + '" />' +
@@ -46,6 +46,9 @@ var Crud = /** @class */ (function () {
46
46
  return;
47
47
  }
48
48
  this.parent.trigger(events.dataBinding, e, function (args) {
49
+ if (args.cancel) {
50
+ return;
51
+ }
49
52
  var resultData = extend([], args.result, null, true);
50
53
  _this.parent.eventsData = resultData.filter(function (data) { return !data[_this.parent.eventFields.isBlock]; });
51
54
  _this.parent.blockData = resultData.filter(function (data) { return data[_this.parent.eventFields.isBlock]; });
@@ -14,6 +14,7 @@ export declare class VirtualScroll {
14
14
  private focusedEle;
15
15
  private isResourceCell;
16
16
  isHorizontalScroll: boolean;
17
+ isRemoteRefresh: boolean;
17
18
  private startIndex;
18
19
  constructor(parent: Schedule);
19
20
  private addEventListener;
@@ -23,6 +24,7 @@ export declare class VirtualScroll {
23
24
  updateVirtualScrollHeight(): void;
24
25
  updateVirtualTrackHeight(wrap: HTMLElement): void;
25
26
  setItemSize(): void;
27
+ refreshLayout(): void;
26
28
  private renderEvents;
27
29
  virtualScrolling(): void;
28
30
  private horizontalScrolling;
@@ -92,6 +92,27 @@ var VirtualScroll = /** @class */ (function () {
92
92
  this.itemSize = util.getElementHeightFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
93
93
  }
94
94
  };
95
+ VirtualScroll.prototype.refreshLayout = function () {
96
+ var initialHeight = this.parent.uiStateValues.scheduleHeight;
97
+ this.parent.uiStateValues.scheduleHeight = this.parent.element.offsetHeight;
98
+ var preRenderedLength = this.renderedLength;
99
+ if (this.parent.uiStateValues.scheduleHeight !== initialHeight) {
100
+ if (preRenderedLength < this.getRenderedCount()) {
101
+ this.isRemoteRefresh = true;
102
+ }
103
+ var resWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
104
+ var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
105
+ var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
106
+ var firstTDIndex = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);
107
+ var endIndex = (firstTDIndex + this.renderedLength);
108
+ firstTDIndex = (endIndex > this.parent.resourceBase.expandedResources.length) ?
109
+ (this.parent.resourceBase.expandedResources.length - this.renderedLength) : firstTDIndex;
110
+ this.parent.resourceBase.renderedResources = this.parent.resourceBase.expandedResources.slice(firstTDIndex, endIndex);
111
+ if (this.parent.resourceBase.renderedResources.length > 0) {
112
+ this.updateContent(resWrap, conWrap, eventWrap, this.parent.resourceBase.renderedResources);
113
+ }
114
+ }
115
+ };
95
116
  VirtualScroll.prototype.renderEvents = function () {
96
117
  this.setTabIndex();
97
118
  var dynamicData = this.triggerScrollEvent(events.virtualScrollStop);
@@ -127,7 +148,9 @@ var VirtualScroll = /** @class */ (function () {
127
148
  var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
128
149
  var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);
129
150
  var conTable = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);
130
- addClass([conWrap], 'e-transition');
151
+ if (!this.parent.rowAutoHeight) {
152
+ addClass([conWrap, resWrap], 'e-transition');
153
+ }
131
154
  this.renderedLength = resWrap.querySelector('tbody').children.length;
132
155
  var firstTDIndex = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);
133
156
  var scrollHeight = this.parent.rowAutoHeight ?
@@ -8,6 +8,8 @@ export declare const RTL: string;
8
8
  /** @private */
9
9
  export declare const DEVICE_CLASS: string;
10
10
  /** @private */
11
+ export declare const ADAPTIVE_CLASS: string;
12
+ /** @private */
11
13
  export declare const MULTI_DRAG: string;
12
14
  /** @private */
13
15
  export declare const ICON: string;
@@ -122,6 +124,8 @@ export declare const TIMELINE_WRAPPER_CLASS: string;
122
124
  /** @private */
123
125
  export declare const APPOINTMENT_WRAPPER_CLASS: string;
124
126
  /** @private */
127
+ export declare const APPOINTMENT_WRAPPER_HIDDEN_CLASS: string;
128
+ /** @private */
125
129
  export declare const DAY_WRAPPER_CLASS: string;
126
130
  /** @private */
127
131
  export declare const TOOLBAR_CONTAINER: string;
@@ -8,6 +8,8 @@ export var RTL = 'e-rtl';
8
8
  /** @private */
9
9
  export var DEVICE_CLASS = 'e-device';
10
10
  /** @private */
11
+ export var ADAPTIVE_CLASS = 'e-adaptive';
12
+ /** @private */
11
13
  export var MULTI_DRAG = 'e-multi-drag';
12
14
  /** @private */
13
15
  export var ICON = 'e-icons';
@@ -122,6 +124,8 @@ export var TIMELINE_WRAPPER_CLASS = 'e-timeline-wrapper';
122
124
  /** @private */
123
125
  export var APPOINTMENT_WRAPPER_CLASS = 'e-appointment-wrapper';
124
126
  /** @private */
127
+ export var APPOINTMENT_WRAPPER_HIDDEN_CLASS = 'e-appointment-wrapper-hidden';
128
+ /** @private */
125
129
  export var DAY_WRAPPER_CLASS = 'e-day-wrapper';
126
130
  /** @private */
127
131
  export var TOOLBAR_CONTAINER = 'e-schedule-toolbar-container';
@@ -522,6 +522,7 @@ export interface UIStateArgs {
522
522
  isCustomMonth?: boolean;
523
523
  isPreventTimezone?: boolean;
524
524
  isPreventEventRefresh?: boolean;
525
+ scheduleHeight?: number;
525
526
  }
526
527
  /**
527
528
  * @private
@@ -493,6 +493,7 @@ var ResourceBase = /** @class */ (function () {
493
493
  args = {
494
494
  cancel: false, event: (event) ? event.event : null, groupIndex: _this.parent.uiStateValues.groupIndex, requestType: 'resourceChanged'
495
495
  };
496
+ _this.parent.adaptiveGroupIndex = _this.parent.uiStateValues.groupIndex;
496
497
  _this.parent.trigger(events.actionComplete, args);
497
498
  }
498
499
  });
@@ -137,6 +137,7 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
137
137
  scrollTop: number;
138
138
  scrollLeft: number;
139
139
  isPrinting: boolean;
140
+ adaptiveGroupIndex: number;
140
141
  /**
141
142
  * Sets the `width` of the Schedule component, accepting both string and number values.
142
143
  *
@@ -72,7 +72,9 @@ var Schedule = /** @class */ (function (_super) {
72
72
  * @param {string | HTMLElement} element Accepts the DOM element reference
73
73
  */
74
74
  function Schedule(options, element) {
75
- return _super.call(this, options, element) || this;
75
+ var _this = _super.call(this, options, element) || this;
76
+ _this.adaptiveGroupIndex = 0;
77
+ return _this;
76
78
  }
77
79
  /**
78
80
  * Core method that initializes the control rendering.
@@ -96,6 +98,12 @@ var Schedule = /** @class */ (function (_super) {
96
98
  else {
97
99
  removeClasses.push(cls.DEVICE_CLASS);
98
100
  }
101
+ if (this.enableAdaptiveUI) {
102
+ addClasses.push(cls.ADAPTIVE_CLASS);
103
+ }
104
+ else {
105
+ removeClasses.push(cls.ADAPTIVE_CLASS);
106
+ }
99
107
  if (this.allowMultiDrag) {
100
108
  addClasses.push(cls.MULTI_DRAG);
101
109
  }
@@ -708,7 +716,7 @@ var Schedule = /** @class */ (function (_super) {
708
716
  if (this && isNullOrUndefined(this.uiStateValues) || !(this.enablePersistence)) {
709
717
  this.uiStateValues = {
710
718
  expand: false, isInitial: true, left: 0, top: 0, isGroupAdaptive: false,
711
- isIgnoreOccurrence: false, groupIndex: 0, action: false, isBlock: false, isCustomMonth: true, isPreventTimezone: false
719
+ isIgnoreOccurrence: false, groupIndex: this.adaptiveGroupIndex, action: false, isBlock: false, isCustomMonth: true, isPreventTimezone: false
712
720
  };
713
721
  }
714
722
  this.currentTimezoneDate = this.getCurrentTime();
@@ -1202,6 +1210,9 @@ var Schedule = /** @class */ (function (_super) {
1202
1210
  && document.activeElement.classList.contains(cls.SUBJECT_CLASS))) {
1203
1211
  return;
1204
1212
  }
1213
+ if (this.virtualScrollModule && this.activeView.isTimelineView()) {
1214
+ this.virtualScrollModule.refreshLayout();
1215
+ }
1205
1216
  if (this.activeViewOptions.timeScale.enable && this.activeView) {
1206
1217
  this.activeView.highlightCurrentTime();
1207
1218
  }
@@ -1213,7 +1224,12 @@ var Schedule = /** @class */ (function (_super) {
1213
1224
  && !this.activeViewOptions.timeScale.enable) || this.activeView.isTimelineView()) {
1214
1225
  this.activeView.resetColWidth();
1215
1226
  this.notify(events.scrollUiUpdate, { cssProperties: this.getCssProperties(), isPreventScrollUpdate: true });
1216
- this.refreshEvents(false);
1227
+ var isRemoteRefresh = false;
1228
+ if (this.activeViewOptions.enableLazyLoading && this.virtualScrollModule && this.virtualScrollModule.isRemoteRefresh) {
1229
+ isRemoteRefresh = this.virtualScrollModule.isRemoteRefresh;
1230
+ this.virtualScrollModule.isRemoteRefresh = false;
1231
+ }
1232
+ this.refreshEvents(isRemoteRefresh);
1217
1233
  }
1218
1234
  else {
1219
1235
  this.notify(events.contentReady, {});
@@ -1396,7 +1412,7 @@ var Schedule = /** @class */ (function (_super) {
1396
1412
  * @private
1397
1413
  */
1398
1414
  Schedule.prototype.getPersistData = function () {
1399
- return this.addOnPersist(['currentView', 'selectedDate', 'scrollTop', 'scrollLeft']);
1415
+ return this.addOnPersist(['currentView', 'selectedDate', 'scrollTop', 'scrollLeft', 'adaptiveGroupIndex']);
1400
1416
  };
1401
1417
  /**
1402
1418
  * Called internally, if any of the property value changed.
@@ -41,6 +41,7 @@ export declare type ReturnType = {
41
41
  result: Record<string, any>[];
42
42
  count: number;
43
43
  aggregates?: Record<string, any>;
44
+ cancel: boolean;
44
45
  };
45
46
  /**
46
47
  * An enum that holds the available popup types in the scheduler. They are
@@ -6,7 +6,7 @@ export declare class AgendaBase extends ViewBase {
6
6
  createAppointment(event: Record<string, any>): HTMLElement[];
7
7
  processAgendaEvents(events: Record<string, any>[]): Record<string, any>[];
8
8
  wireEventActions(): void;
9
- calculateResourceTableElement(tBody: Element, noOfDays: number, agendaDate: Date): void;
9
+ calculateResourceTableElement(tBody: Element, noOfDays: number, agendaDate: Date, agendaEnd?: Date): void;
10
10
  private createResourceTableRow;
11
11
  createDateHeaderElement(date: Date): Element;
12
12
  renderEmptyContent(tBody: Element, agendaDate: Date): void;
@@ -163,7 +163,8 @@ var AgendaBase = /** @class */ (function (_super) {
163
163
  EventHandler.add(element, 'click', this.parent.agendaModule.dayNavigationClick, this);
164
164
  }
165
165
  };
166
- AgendaBase.prototype.calculateResourceTableElement = function (tBody, noOfDays, agendaDate) {
166
+ AgendaBase.prototype.calculateResourceTableElement = function (tBody, noOfDays, agendaDate, agendaEnd) {
167
+ if (agendaEnd === void 0) { agendaEnd = null; }
167
168
  if (isNullOrUndefined(this.parent.resourceBase.lastResourceLevel)) {
168
169
  var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);
169
170
  this.parent.resourceBase.generateResourceLevels(level);
@@ -172,7 +173,9 @@ var AgendaBase = /** @class */ (function (_super) {
172
173
  var days = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;
173
174
  var resColl = this.parent.resourceBase.resourceCollection;
174
175
  var resData = this.parent.resourceBase.lastResourceLevel;
176
+ var agendaStart = agendaDate;
175
177
  var initialDate = agendaDate;
178
+ var showWeekend = this.parent.activeViewOptions.showWeekend;
176
179
  for (var i = 0; i < days; i++) {
177
180
  var lastLevelInfo = [];
178
181
  var tempLastLevelInfo = [];
@@ -180,6 +183,21 @@ var AgendaBase = /** @class */ (function (_super) {
180
183
  var eventObj = void 0;
181
184
  var dateObj = void 0;
182
185
  var firstDate = util.addDays(initialDate, i);
186
+ if (this.parent.currentView === 'Agenda' && this.parent.activeViewOptions.group.byDate &&
187
+ this.parent.activeViewOptions.allowVirtualScrolling && !showWeekend && !this.isWorkDay(firstDate)) {
188
+ do {
189
+ firstDate = util.addDays(firstDate, 1);
190
+ if (firstDate >= agendaEnd) {
191
+ break;
192
+ }
193
+ } while (!this.isWorkDay(firstDate) ||
194
+ this.parent.eventBase.filterEvents(firstDate, util.addDays(firstDate, 1)).length < 1);
195
+ if (firstDate >= agendaEnd) {
196
+ break;
197
+ }
198
+ initialDate = util.addDays(firstDate, -i);
199
+ agendaLastDate = util.addDays(firstDate, 1);
200
+ }
183
201
  var finalDate = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda')
184
202
  ? util.addDays(firstDate, 1) : agendaLastDate;
185
203
  var agendaCollection = this.parent.eventBase.filterEvents(firstDate, finalDate);
@@ -194,7 +212,9 @@ var AgendaBase = /** @class */ (function (_super) {
194
212
  for (var r = 0; r < noOfDays; r++) {
195
213
  // eslint-disable-next-line max-len
196
214
  var resDayCollection = this.parent.eventBase.filterEvents(agendaDate, util.addDays(agendaDate, 1), resDataCollection, undefined);
197
- if (resDayCollection.length > 0 || !this.parent.hideEmptyAgendaDays ||
215
+ if (((showWeekend || !showWeekend && (this.parent.group.byDate ? this.isWorkDay(agendaDate) :
216
+ this.isWorkDay(agendaDate, resData[parseInt(res.toString(), 10)].workDays)))
217
+ && (resDayCollection.length > 0 || !this.parent.hideEmptyAgendaDays)) ||
198
218
  this.parent.currentView === 'MonthAgenda') {
199
219
  data.push(resDayCollection[0]);
200
220
  eventObj = {
@@ -220,16 +240,18 @@ var AgendaBase = /** @class */ (function (_super) {
220
240
  agendaDate = util.addDays(agendaDate, 1);
221
241
  if (agendaDate.getTime() >= agendaLastDate.getTime() || this.parent.activeViewOptions.group.byDate
222
242
  || this.parent.currentView === 'MonthAgenda') {
223
- lastLevelInfo[lastLevelInfo.length - 1][1].cssClass = cls.AGENDA_DAY_BORDER_CLASS;
224
- var tempObj = {
225
- rowSpan: data.length, type: 'resourceColumn', resource: resColl[parseInt((resColl.length - 1).toString(), 10)],
226
- groupOrder: resData[parseInt(res.toString(), 10)].groupOrder.slice(0, -1),
227
- resourceData: resData[parseInt(res.toString(), 10)].resourceData,
228
- groupIndex: (lastLevelInfo.length - data.length), className: [cls.RESOURCE_NAME],
229
- date: agendaDate
230
- };
231
- lastLevelInfo[parseInt((lastLevelInfo.length - data.length).toString(), 10)].push(tempObj);
232
- tempLastLevelInfo.push(extend({}, tempObj, null, true));
243
+ if (data.length > 0) {
244
+ lastLevelInfo[lastLevelInfo.length - 1][1].cssClass = cls.AGENDA_DAY_BORDER_CLASS;
245
+ var tempObj = {
246
+ rowSpan: data.length, type: 'resourceColumn', resource: resColl[parseInt((resColl.length - 1).toString(), 10)],
247
+ groupOrder: resData[parseInt(res.toString(), 10)].groupOrder.slice(0, -1),
248
+ resourceData: resData[parseInt(res.toString(), 10)].resourceData,
249
+ groupIndex: (lastLevelInfo.length - data.length), className: [cls.RESOURCE_NAME],
250
+ date: agendaDate
251
+ };
252
+ lastLevelInfo[parseInt((lastLevelInfo.length - data.length).toString(), 10)].push(tempObj);
253
+ tempLastLevelInfo.push(extend({}, tempObj, null, true));
254
+ }
233
255
  break;
234
256
  }
235
257
  }
@@ -264,9 +286,9 @@ var AgendaBase = /** @class */ (function (_super) {
264
286
  this.createResourceTableRow(lastLevelInfo, tBody);
265
287
  }
266
288
  }
267
- var totalCollection = this.parent.eventBase.filterEvents(initialDate, agendaLastDate);
289
+ var totalCollection = this.parent.eventBase.filterEvents(agendaStart, agendaLastDate);
268
290
  if (totalCollection.length === 0 && !this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) {
269
- this.renderEmptyContent(tBody, initialDate);
291
+ this.renderEmptyContent(tBody, agendaStart);
270
292
  }
271
293
  };
272
294
  AgendaBase.prototype.createResourceTableRow = function (tContent, tBody) {
@@ -1281,11 +1281,13 @@ var EventBase = /** @class */ (function () {
1281
1281
  if (index === void 0) { index = 0; }
1282
1282
  var tr = createElement('tr');
1283
1283
  var levels = this.parent.activeView.colLevels.slice(-1)[0];
1284
+ var className = this.parent.isReact && this.parent.activeViewOptions.eventTemplate ?
1285
+ ' ' + cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS : '';
1284
1286
  for (var i = 0, len = levels.length; i < len; i++) {
1285
1287
  var col = levels[parseInt(i.toString(), 10)];
1286
1288
  var appointmentWrap = createElement('td', {
1287
- className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : (type === 'timeIndicator') ?
1288
- cls.TIMELINE_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS, attrs: { 'data-date': col.date.getTime().toString() }
1289
+ className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS + className : (type === 'timeIndicator') ?
1290
+ cls.TIMELINE_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS + className, attrs: { 'data-date': col.date.getTime().toString() }
1289
1291
  });
1290
1292
  if (!isNullOrUndefined(col.groupIndex)) {
1291
1293
  appointmentWrap.setAttribute('data-group-index', col.groupIndex.toString());
@@ -676,8 +676,7 @@ var MonthEvent = /** @class */ (function (_super) {
676
676
  attrs: {
677
677
  'role': 'button',
678
678
  'tabindex': '0',
679
- 'aria-label': this.parent.globalize.formatNumber(count) + '&nbsp;'
680
- + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),
679
+ 'aria-label': this.parent.globalize.formatNumber(count) + ' ' + this.parent.localeObj.getConstant('moreEvents'),
681
680
  'data-count': count.toString(),
682
681
  'data-start-date': startDate.getTime().toString(),
683
682
  'data-end-date': endDate.getTime().toString()
@@ -90,11 +90,18 @@ var TimelineEvent = /** @class */ (function (_super) {
90
90
  };
91
91
  TimelineEvent.prototype.getOverlapSortComparerEvents = function (startDate, endDate, appointmentsCollection) {
92
92
  var appointments = [];
93
- for (var _i = 0, appointmentsCollection_1 = appointmentsCollection; _i < appointmentsCollection_1.length; _i++) {
94
- var app = appointmentsCollection_1[_i];
95
- if (this.renderType === 'day') {
96
- if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(new Date(startDate.getTime())).getTime()) &&
97
- (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(new Date(startDate.getTime())).getTime())) {
93
+ var _loop_1 = function (app) {
94
+ if (this_1.renderType === 'day') {
95
+ var start_1 = util.resetTime(startDate).getTime();
96
+ var end_1 = util.resetTime(endDate).getTime();
97
+ var appStart_1 = util.resetTime(app[this_1.fields.startTime]).getTime();
98
+ var appEnd_1 = util.resetTime(app[this_1.fields.endTime]).getTime();
99
+ var isEndOverlap = function () {
100
+ var endTime = (end_1 - (util.getDateInMs(endDate) <= 0 ? util.MS_PER_DAY : 0));
101
+ endTime = start_1 > endTime ? start_1 : endTime;
102
+ return appEnd_1 >= endTime && appStart_1 <= endTime;
103
+ };
104
+ if (appStart_1 <= start_1 && appEnd_1 >= start_1 || isEndOverlap() || appStart_1 > start_1 && appEnd_1 < end_1) {
98
105
  appointments.push(app);
99
106
  }
100
107
  }
@@ -105,6 +112,11 @@ var TimelineEvent = /** @class */ (function (_super) {
105
112
  appointments.push(app);
106
113
  }
107
114
  }
115
+ };
116
+ var this_1 = this;
117
+ for (var _i = 0, appointmentsCollection_1 = appointmentsCollection; _i < appointmentsCollection_1.length; _i++) {
118
+ var app = appointmentsCollection_1[_i];
119
+ _loop_1(app);
108
120
  }
109
121
  return appointments;
110
122
  };
@@ -12,7 +12,7 @@ var __extends = (this && this.__extends) || (function () {
12
12
  };
13
13
  })();
14
14
  /* eslint-disable @typescript-eslint/no-explicit-any */
15
- import { append, createElement, extend, EventHandler, Animation, formatUnit } from '@syncfusion/ej2-base';
15
+ import { append, createElement, extend, EventHandler, Animation, formatUnit, closest } from '@syncfusion/ej2-base';
16
16
  import { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';
17
17
  import { EventBase } from './event-base';
18
18
  import * as util from '../base/util';
@@ -44,6 +44,7 @@ var VerticalEvent = /** @class */ (function (_super) {
44
44
  return _this;
45
45
  }
46
46
  VerticalEvent.prototype.renderAppointments = function () {
47
+ var _this = this;
47
48
  if (isNullOrUndefined(this.parent)) {
48
49
  return;
49
50
  }
@@ -54,6 +55,14 @@ var VerticalEvent = /** @class */ (function (_super) {
54
55
  var wrapperElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.BLOCK_APPOINTMENT_CLASS +
55
56
  ',.' + cls.APPOINTMENT_CLASS + ',.' + cls.ROW_COUNT_WRAPPER_CLASS));
56
57
  var isDragging = (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) ? true : false;
58
+ var hideWrapper = function (wrapper) {
59
+ if (_this.parent.isReact && !isNullOrUndefined(_this.parent.activeViewOptions.eventTemplate)) {
60
+ var appWrapper = closest(wrapper, '.' + cls.DAY_WRAPPER_CLASS + ',.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS);
61
+ if (appWrapper && !appWrapper.classList.contains(cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS)) {
62
+ addClass([appWrapper], cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS);
63
+ }
64
+ }
65
+ };
57
66
  for (var _i = 0, wrapperElements_1 = wrapperElements; _i < wrapperElements_1.length; _i++) {
58
67
  var wrapper = wrapperElements_1[_i];
59
68
  if (isDragging && !(wrapper.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) ||
@@ -62,11 +71,13 @@ var VerticalEvent = /** @class */ (function (_super) {
62
71
  for (var j = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; j < len; j++) {
63
72
  if (groupIndex === this.parent.crudModule.crudObj.sourceEvent[parseInt(j.toString(), 10)].groupIndex ||
64
73
  groupIndex === this.parent.crudModule.crudObj.targetEvent[parseInt(j.toString(), 10)].groupIndex) {
74
+ hideWrapper(wrapper);
65
75
  remove(wrapper);
66
76
  }
67
77
  }
68
78
  }
69
79
  else {
80
+ hideWrapper(wrapper);
70
81
  remove(wrapper);
71
82
  }
72
83
  }
@@ -103,7 +114,12 @@ var VerticalEvent = /** @class */ (function (_super) {
103
114
  if (isDragging) {
104
115
  this.parent.crudModule.crudObj.isCrudAction = false;
105
116
  }
106
- this.parent.renderTemplates();
117
+ this.parent.renderTemplates(function () {
118
+ if (_this.parent.isReact && _this.parent.activeViewOptions.eventTemplate) {
119
+ var wraps = [].slice.call(_this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS));
120
+ removeClass(wraps, cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS);
121
+ }
122
+ });
107
123
  };
108
124
  VerticalEvent.prototype.initializeValues = function () {
109
125
  this.resources = (this.parent.activeViewOptions.group.resources.length > 0) ? this.parent.uiStateValues.isGroupAdaptive ?
@@ -53,7 +53,7 @@ var QuickPopups = /** @class */ (function () {
53
53
  QuickPopups.prototype.renderMorePopup = function () {
54
54
  var moreEventPopup = "<div class=\"" + cls.MORE_EVENT_POPUP_CLASS + "\"><div class=\"" + cls.MORE_EVENT_HEADER_CLASS + "\">" +
55
55
  ("<div class=\"" + cls.MORE_EVENT_CLOSE_CLASS + "\" title=\"" + this.l10n.getConstant('close') + "\" tabindex=\"0\" role=\"button\"></div>") +
56
- ("<div class=\"" + cls.MORE_EVENT_DATE_HEADER_CLASS + "\"><div class=\"" + cls.MORE_EVENT_HEADER_DAY_CLASS + "\"></div>") +
56
+ ("<div class=\"" + cls.MORE_EVENT_DATE_HEADER_CLASS + "\"><div class=\"" + cls.MORE_EVENT_HEADER_DAY_CLASS + "\" id=\"" + this.parent.element.id + "_more_popup\"></div>") +
57
57
  ("<div class=\"" + cls.MORE_EVENT_HEADER_DATE_CLASS + " " + cls.NAVIGATE_CLASS + "\" tabindex=\"0\" role=\"link\"></div></div></div></div>");
58
58
  var moreEventWrapper = createElement('div', {
59
59
  className: cls.MORE_POPUP_WRAPPER_CLASS + ' e-popup-close',
@@ -78,6 +78,8 @@ var QuickPopups = /** @class */ (function () {
78
78
  viewPortElement: (this.parent.isAdaptive ? document.body : this.parent.element),
79
79
  zIndex: (this.parent.isAdaptive ? 1002 : 2)
80
80
  });
81
+ this.morePopup.element.setAttribute('role', 'dialog');
82
+ this.morePopup.element.setAttribute('aria-labelledby', this.parent.element.id + '_more_popup');
81
83
  var closeButton = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS);
82
84
  this.renderButton('e-round', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeButton, this.closeClick);
83
85
  EventHandler.add(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS), 'click', this.navigationClick, this);
@@ -20,6 +20,7 @@ export declare class Agenda extends AgendaBase implements IRenderer {
20
20
  refreshHeader(): void;
21
21
  private renderInitialContent;
22
22
  renderContent(tBody: Element, agendaDate: Date, lastDate: Date): void;
23
+ private isAgendaWorkDay;
23
24
  private agendaScrolling;
24
25
  private virtualScrolling;
25
26
  private getElementFromScrollerPosition;
@@ -150,9 +150,20 @@ var Agenda = /** @class */ (function (_super) {
150
150
  var firstDate = new Date(agendaDate.getTime());
151
151
  var isObject = this.appointmentFiltering(firstDate, lastDate);
152
152
  if (isObject.length > 0 && this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) {
153
- agendaDate = isObject[0][fieldMapping.startTime];
154
- agendaDate = new Date(new Date(agendaDate.getTime()).setHours(0, 0, 0, 0));
155
- this.updateHeaderText(isObject[0][fieldMapping.startTime]);
153
+ if (!this.parent.activeViewOptions.showWeekend && !this.isAgendaWorkDay(isObject[0][fieldMapping.startTime])) {
154
+ for (var _i = 0, isObject_1 = isObject; _i < isObject_1.length; _i++) {
155
+ var event_2 = isObject_1[_i];
156
+ if (this.isAgendaWorkDay(event_2[fieldMapping.startTime])) {
157
+ agendaDate = new Date(new Date(event_2[fieldMapping.startTime].getTime()).setHours(0, 0, 0, 0));
158
+ this.updateHeaderText(event_2[fieldMapping.startTime]);
159
+ break;
160
+ }
161
+ }
162
+ }
163
+ else {
164
+ agendaDate = new Date(new Date(isObject[0][fieldMapping.startTime].getTime()).setHours(0, 0, 0, 0));
165
+ this.updateHeaderText(isObject[0][fieldMapping.startTime]);
166
+ }
156
167
  }
157
168
  var endDate;
158
169
  if (!this.parent.hideEmptyAgendaDays || (this.parent.agendaDaysCount > 0 && isObject.length > 0)) {
@@ -166,18 +177,25 @@ var Agenda = /** @class */ (function (_super) {
166
177
  this.parent.headerModule.updateHeaderItems('remove');
167
178
  }
168
179
  }
169
- this.calculateResourceTableElement(tBody, this.parent.agendaDaysCount, date);
180
+ this.calculateResourceTableElement(tBody, this.parent.agendaDaysCount, date, lastDate);
170
181
  }
171
182
  else {
172
183
  for (var day = 0; day < this.parent.agendaDaysCount; day++) {
173
- var filterData = this.appointmentFiltering(agendaDate);
174
184
  var nTr = this.createTableRowElement(agendaDate, 'data');
175
- if (this.element.querySelector('tr[data-row-index="' + parseInt(nTr.getAttribute('data-row-index'), 10) + '"]')) {
185
+ var virtualContent = this.element.querySelector('tr[data-row-index="' + (+(nTr.dataset.rowIndex)) + '"]');
186
+ if (virtualContent || !this.parent.activeViewOptions.showWeekend && !this.isAgendaWorkDay(agendaDate)) {
176
187
  agendaDate = util.addDays(agendaDate, 1);
188
+ if (!virtualContent && this.parent.activeViewOptions.allowVirtualScrolling) {
189
+ day--;
190
+ }
191
+ if (agendaDate.getTime() > lastDate.getTime()) {
192
+ break;
193
+ }
177
194
  continue;
178
195
  }
179
196
  var dTd = nTr.children[0];
180
197
  var aTd = nTr.children[1];
198
+ var filterData = this.appointmentFiltering(agendaDate);
181
199
  if (filterData.length > 0 || (!this.parent.hideEmptyAgendaDays && filterData.length === 0)) {
182
200
  var elementType = (!this.parent.hideEmptyAgendaDays && filterData.length === 0) ? 'noEvents' : 'data';
183
201
  dTd.appendChild(this.createDateHeaderElement(agendaDate));
@@ -204,6 +222,14 @@ var Agenda = /** @class */ (function (_super) {
204
222
  }
205
223
  this.agendaDates = { start: firstDate, end: endDate };
206
224
  };
225
+ Agenda.prototype.isAgendaWorkDay = function (date) {
226
+ if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.group.byDate) {
227
+ return this.isWorkDay(date, this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex].workDays);
228
+ }
229
+ else {
230
+ return this.isWorkDay(date);
231
+ }
232
+ };
207
233
  Agenda.prototype.agendaScrolling = function (event) {
208
234
  if (this.parent.quickPopup) {
209
235
  this.parent.quickPopup.quickPopupHide();
@@ -308,9 +334,12 @@ var Agenda = /** @class */ (function (_super) {
308
334
  var lastDate = this.getEndDateFromStartDate(date);
309
335
  var daysCount = 0;
310
336
  do {
311
- var filterData = this.appointmentFiltering(currentDate);
312
- if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {
313
- daysCount++;
337
+ if (this.parent.activeViewOptions.showWeekend || !this.parent.activeViewOptions.showWeekend &&
338
+ this.isAgendaWorkDay(currentDate)) {
339
+ var filterData = this.appointmentFiltering(currentDate);
340
+ if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {
341
+ daysCount++;
342
+ }
314
343
  }
315
344
  currentDate = util.addDays(currentDate, (type === 'next') ? 1 : -1);
316
345
  if (currentDate < firstDate || currentDate > lastDate) {