@syncfusion/ej2-schedule 24.2.8 → 25.1.37

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 (73) hide show
  1. package/CHANGELOG.md +17 -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 +145 -39
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +146 -36
  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.js +1 -2
  14. package/src/schedule/actions/crud.js +9 -0
  15. package/src/schedule/actions/keyboard.d.ts +1 -0
  16. package/src/schedule/actions/keyboard.js +11 -4
  17. package/src/schedule/base/css-constant.d.ts +2 -0
  18. package/src/schedule/base/css-constant.js +2 -0
  19. package/src/schedule/base/interface.d.ts +1 -0
  20. package/src/schedule/base/schedule.d.ts +4 -1
  21. package/src/schedule/base/schedule.js +16 -1
  22. package/src/schedule/base/type.d.ts +1 -0
  23. package/src/schedule/event-renderer/agenda-base.d.ts +1 -1
  24. package/src/schedule/event-renderer/agenda-base.js +36 -14
  25. package/src/schedule/event-renderer/event-base.js +4 -2
  26. package/src/schedule/event-renderer/vertical-view.js +7 -1
  27. package/src/schedule/popups/quick-popups.js +11 -0
  28. package/src/schedule/renderer/agenda.d.ts +1 -0
  29. package/src/schedule/renderer/agenda.js +38 -9
  30. package/src/schedule/renderer/renderer.js +11 -3
  31. package/styles/bootstrap-dark.css +12 -2
  32. package/styles/bootstrap.css +12 -2
  33. package/styles/bootstrap4.css +9 -3
  34. package/styles/bootstrap5-dark.css +9 -3
  35. package/styles/bootstrap5.css +9 -3
  36. package/styles/fabric-dark.css +8 -2
  37. package/styles/fabric.css +8 -2
  38. package/styles/fluent-dark.css +13 -2
  39. package/styles/fluent.css +13 -2
  40. package/styles/highcontrast-light.css +8 -2
  41. package/styles/highcontrast.css +8 -2
  42. package/styles/material-dark.css +17 -2
  43. package/styles/material.css +17 -2
  44. package/styles/material3-dark.css +9 -3
  45. package/styles/material3.css +9 -3
  46. package/styles/recurrence-editor/_bds-definition.scss +15 -0
  47. package/styles/schedule/_bds-definition.scss +287 -0
  48. package/styles/schedule/_bootstrap4-definition.scss +1 -1
  49. package/styles/schedule/_bootstrap5-definition.scss +1 -1
  50. package/styles/schedule/_fusionnew-definition.scss +1 -1
  51. package/styles/schedule/_layout.scss +6 -1
  52. package/styles/schedule/_material3-definition.scss +1 -1
  53. package/styles/schedule/_tailwind-definition.scss +1 -1
  54. package/styles/schedule/bootstrap-dark.css +12 -2
  55. package/styles/schedule/bootstrap.css +12 -2
  56. package/styles/schedule/bootstrap4.css +9 -3
  57. package/styles/schedule/bootstrap5-dark.css +9 -3
  58. package/styles/schedule/bootstrap5.css +9 -3
  59. package/styles/schedule/fabric-dark.css +8 -2
  60. package/styles/schedule/fabric.css +8 -2
  61. package/styles/schedule/fluent-dark.css +13 -2
  62. package/styles/schedule/fluent.css +13 -2
  63. package/styles/schedule/highcontrast-light.css +8 -2
  64. package/styles/schedule/highcontrast.css +8 -2
  65. package/styles/schedule/icons/_bds.scss +235 -0
  66. package/styles/schedule/material-dark.css +17 -2
  67. package/styles/schedule/material.css +17 -2
  68. package/styles/schedule/material3-dark.css +9 -3
  69. package/styles/schedule/material3.css +9 -3
  70. package/styles/schedule/tailwind-dark.css +9 -3
  71. package/styles/schedule/tailwind.css +9 -3
  72. package/styles/tailwind-dark.css +9 -3
  73. package/styles/tailwind.css +9 -3
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 24.2.8
3
+ * version : 25.1.37
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@24.2.4",
3
+ "_id": "@syncfusion/ej2-schedule@25.1.35",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-oBgKnAT6yCQiWtsncH5FXAnymoL6njD8ugNGu7gYoDjpxbslOUZWLq034w0dSmhfjwUfMwOEm9P//XR46ZVcsA==",
5
+ "_integrity": "sha512-C5bGDJaFwqPz1Wq+Z8zpeJVuVORM+lbciSAfEMADI0Y4RxFMazNh7QeO+TmJob7HNwweDSMqndt8PekrkE+/iw==",
6
6
  "_location": "/@syncfusion/ej2-schedule",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,10 +23,10 @@
23
23
  "/@syncfusion/ej2-react-schedule",
24
24
  "/@syncfusion/ej2-vue-schedule"
25
25
  ],
26
- "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-24.2.4.tgz",
27
- "_shasum": "4439adf0387fa69424cea8d1c249c87491244ef2",
26
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-25.1.35.tgz",
27
+ "_shasum": "dcc2a86f99921e8b4a2578498d701159a470ecec",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
- "_where": "/jenkins/workspace/elease-automation_release_24.1.1/packages/included",
29
+ "_where": "/jenkins/workspace/elease-automation_release_25.1.1/packages/included",
30
30
  "author": {
31
31
  "name": "Syncfusion Inc."
32
32
  },
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~24.2.7",
39
- "@syncfusion/ej2-buttons": "~24.2.7",
40
- "@syncfusion/ej2-calendars": "~24.2.8",
41
- "@syncfusion/ej2-data": "~24.2.3",
42
- "@syncfusion/ej2-dropdowns": "~24.2.8",
43
- "@syncfusion/ej2-excel-export": "~24.2.4",
44
- "@syncfusion/ej2-inputs": "~24.2.7",
45
- "@syncfusion/ej2-lists": "~24.2.8",
46
- "@syncfusion/ej2-navigations": "~24.2.8",
47
- "@syncfusion/ej2-popups": "~24.2.8"
38
+ "@syncfusion/ej2-base": "~25.1.35",
39
+ "@syncfusion/ej2-buttons": "~25.1.35",
40
+ "@syncfusion/ej2-calendars": "~25.1.37",
41
+ "@syncfusion/ej2-data": "~25.1.35",
42
+ "@syncfusion/ej2-dropdowns": "~25.1.37",
43
+ "@syncfusion/ej2-excel-export": "~25.1.35",
44
+ "@syncfusion/ej2-inputs": "~25.1.37",
45
+ "@syncfusion/ej2-lists": "~25.1.35",
46
+ "@syncfusion/ej2-navigations": "~25.1.37",
47
+ "@syncfusion/ej2-popups": "~25.1.35"
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": "24.2.8",
76
+ "version": "25.1.37",
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) + '" />' +
@@ -29,6 +29,12 @@ var Crud = /** @class */ (function () {
29
29
  if (!this.parent.activeView) {
30
30
  return;
31
31
  }
32
+ if (this.parent.uiStateValues && this.parent.uiStateValues.isPreventEventRefresh) {
33
+ this.parent.uiStateValues.isPreventEventRefresh = false;
34
+ this.parent.refreshEvents(false);
35
+ this.parent.hideSpinner();
36
+ return;
37
+ }
32
38
  var start = this.parent.activeView.startDate();
33
39
  var end = this.parent.activeView.endDate();
34
40
  var dataManager = this.parent.dataModule.getData(this.parent.dataModule.generateQuery(start, end));
@@ -40,6 +46,9 @@ var Crud = /** @class */ (function () {
40
46
  return;
41
47
  }
42
48
  this.parent.trigger(events.dataBinding, e, function (args) {
49
+ if (args.cancel) {
50
+ return;
51
+ }
43
52
  var resultData = extend([], args.result, null, true);
44
53
  _this.parent.eventsData = resultData.filter(function (data) { return !data[_this.parent.eventFields.isBlock]; });
45
54
  _this.parent.blockData = resultData.filter(function (data) { return data[_this.parent.eventFields.isBlock]; });
@@ -42,6 +42,7 @@ export declare class KeyboardInteraction {
42
42
  private getUniqueAppointmentElements;
43
43
  private getWorkCellFromAppointmentElement;
44
44
  private processViewNavigation;
45
+ private isCalendarTarget;
45
46
  private cancelUpDownAction;
46
47
  private processUp;
47
48
  private processDown;
@@ -558,6 +558,13 @@ var KeyboardInteraction = /** @class */ (function () {
558
558
  }
559
559
  }
560
560
  };
561
+ KeyboardInteraction.prototype.isCalendarTarget = function (e) {
562
+ var keyTarget = e.currentTarget || e.target;
563
+ if (keyTarget && !isNullOrUndefined(keyTarget.querySelector('.e-header-popup.e-popup-open'))) {
564
+ return true;
565
+ }
566
+ return false;
567
+ };
561
568
  KeyboardInteraction.prototype.cancelUpDownAction = function (isTimelineYear) {
562
569
  var isVerticalYear = isTimelineYear && this.parent.activeViewOptions.orientation === 'Vertical';
563
570
  var isGroup = this.parent.activeViewOptions.group.resources.length > 0;
@@ -571,7 +578,7 @@ var KeyboardInteraction = /** @class */ (function () {
571
578
  };
572
579
  KeyboardInteraction.prototype.processUp = function (e, isMultiple) {
573
580
  var isTimelineYear = this.parent.currentView === 'TimelineYear';
574
- if (isMultiple && this.cancelUpDownAction(isTimelineYear)) {
581
+ if (isMultiple && this.cancelUpDownAction(isTimelineYear) || (this.isCalendarTarget(e))) {
575
582
  return;
576
583
  }
577
584
  var target = (e.target);
@@ -619,7 +626,7 @@ var KeyboardInteraction = /** @class */ (function () {
619
626
  };
620
627
  KeyboardInteraction.prototype.processDown = function (e, isMultiple) {
621
628
  var isTimelineYear = this.parent.currentView === 'TimelineYear';
622
- if (isMultiple && this.cancelUpDownAction(isTimelineYear)) {
629
+ if (isMultiple && this.cancelUpDownAction(isTimelineYear) || (this.isCalendarTarget(e))) {
623
630
  return;
624
631
  }
625
632
  var target = (e.target);
@@ -729,7 +736,7 @@ var KeyboardInteraction = /** @class */ (function () {
729
736
  };
730
737
  KeyboardInteraction.prototype.processRight = function (e, isMultiple) {
731
738
  var isTimelineYear = this.parent.currentView === 'TimelineYear';
732
- if (this.isCancelLeftRightAction(e, isMultiple, isTimelineYear)) {
739
+ if (this.isCancelLeftRightAction(e, isMultiple, isTimelineYear) || (this.isCalendarTarget(e))) {
733
740
  return;
734
741
  }
735
742
  var selectedCells = this.parent.getSelectedCells();
@@ -800,7 +807,7 @@ var KeyboardInteraction = /** @class */ (function () {
800
807
  };
801
808
  KeyboardInteraction.prototype.processLeft = function (e, isMultiple) {
802
809
  var isTimelineYear = this.parent.currentView === 'TimelineYear';
803
- if (this.isCancelLeftRightAction(e, isMultiple, isTimelineYear)) {
810
+ if (this.isCancelLeftRightAction(e, isMultiple, isTimelineYear) || (this.isCalendarTarget(e))) {
804
811
  return;
805
812
  }
806
813
  var target = (e.target);
@@ -122,6 +122,8 @@ export declare const TIMELINE_WRAPPER_CLASS: string;
122
122
  /** @private */
123
123
  export declare const APPOINTMENT_WRAPPER_CLASS: string;
124
124
  /** @private */
125
+ export declare const APPOINTMENT_WRAPPER_HIDDEN_CLASS: string;
126
+ /** @private */
125
127
  export declare const DAY_WRAPPER_CLASS: string;
126
128
  /** @private */
127
129
  export declare const TOOLBAR_CONTAINER: string;
@@ -122,6 +122,8 @@ export var TIMELINE_WRAPPER_CLASS = 'e-timeline-wrapper';
122
122
  /** @private */
123
123
  export var APPOINTMENT_WRAPPER_CLASS = 'e-appointment-wrapper';
124
124
  /** @private */
125
+ export var APPOINTMENT_WRAPPER_HIDDEN_CLASS = 'e-appointment-wrapper-hidden';
126
+ /** @private */
125
127
  export var DAY_WRAPPER_CLASS = 'e-day-wrapper';
126
128
  /** @private */
127
129
  export var TOOLBAR_CONTAINER = 'e-schedule-toolbar-container';
@@ -521,6 +521,7 @@ export interface UIStateArgs {
521
521
  isBlock?: boolean;
522
522
  isCustomMonth?: boolean;
523
523
  isPreventTimezone?: boolean;
524
+ isPreventEventRefresh?: boolean;
524
525
  }
525
526
  /**
526
527
  * @private
@@ -1457,9 +1457,10 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1457
1457
  *
1458
1458
  * @function setResourceCollections
1459
1459
  * @param {ResourcesModel[]} resourceCol Accepts the resource collections in ResourcesModel type
1460
+ * @param {boolean} isEventDataRefresh Accepts the boolean to refresh the appointment data source from remote or local
1460
1461
  * @returns {void}
1461
1462
  */
1462
- setResourceCollections(resourceCol: ResourcesModel[]): void;
1463
+ setResourceCollections(resourceCol: ResourcesModel[], isEventDataRefresh?: boolean): void;
1463
1464
  /**
1464
1465
  * Current View could be change based on the provided parameters.
1465
1466
  *
@@ -1708,6 +1709,8 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1708
1709
  getEventDetails(element: Element): Record<string, any>;
1709
1710
  /**
1710
1711
  * To check whether the given time range slots are available for event creation or already occupied by other events.
1712
+ * This method currently focuses on validating appointments within the current view date range.
1713
+ * However, it does not extend this availability check to recurrence occurrences outside of the current date range.
1711
1714
  *
1712
1715
  * @function isSlotAvailable
1713
1716
  * @param {Date | Object} startTime Denotes the start time of the slot.
@@ -1992,9 +1992,14 @@ var Schedule = /** @class */ (function (_super) {
1992
1992
  *
1993
1993
  * @function setResourceCollections
1994
1994
  * @param {ResourcesModel[]} resourceCol Accepts the resource collections in ResourcesModel type
1995
+ * @param {boolean} isEventDataRefresh Accepts the boolean to refresh the appointment data source from remote or local
1995
1996
  * @returns {void}
1996
1997
  */
1997
- Schedule.prototype.setResourceCollections = function (resourceCol) {
1998
+ Schedule.prototype.setResourceCollections = function (resourceCol, isEventDataRefresh) {
1999
+ if (isEventDataRefresh === void 0) { isEventDataRefresh = true; }
2000
+ if (!isEventDataRefresh && this.uiStateValues) {
2001
+ this.uiStateValues.isPreventEventRefresh = true;
2002
+ }
1998
2003
  this.setProperties({ resources: resourceCol }, false);
1999
2004
  };
2000
2005
  /**
@@ -2114,6 +2119,8 @@ var Schedule = /** @class */ (function (_super) {
2114
2119
  this.iCalendarExportModule.initializeCalendarExport(fileName, customData);
2115
2120
  }
2116
2121
  else {
2122
+ console.warn('[WARNING] :: Module "ICalendarExport" is not available in Schedule component!' +
2123
+ ' You either misspelled the module name or forgot to load it.');
2117
2124
  throw Error('Inject ICalendarExport module');
2118
2125
  }
2119
2126
  };
@@ -2130,6 +2137,8 @@ var Schedule = /** @class */ (function (_super) {
2130
2137
  this.iCalendarImportModule.initializeCalendarImport(fileContent);
2131
2138
  }
2132
2139
  else {
2140
+ console.warn('[WARNING] :: Module "ICalendarImport" is not available in Schedule component!' +
2141
+ ' You either misspelled the module name or forgot to load it.');
2133
2142
  throw Error('Inject ICalendarImport module');
2134
2143
  }
2135
2144
  };
@@ -2175,6 +2184,8 @@ var Schedule = /** @class */ (function (_super) {
2175
2184
  this.excelExportModule.initializeExcelExport(excelExportOptions);
2176
2185
  }
2177
2186
  else {
2187
+ console.warn('[WARNING] :: Module "ExcelExport" is not available in Schedule component!' +
2188
+ ' You either misspelled the module name or forgot to load it.');
2178
2189
  throw Error('Inject ExcelExport module');
2179
2190
  }
2180
2191
  };
@@ -2191,6 +2202,8 @@ var Schedule = /** @class */ (function (_super) {
2191
2202
  this.printModule.print(printOptions);
2192
2203
  }
2193
2204
  else {
2205
+ console.warn('[WARNING] :: Module "Print" is not available in Schedule component!' +
2206
+ ' You either misspelled the module name or forgot to load it.');
2194
2207
  throw Error('Inject Print module');
2195
2208
  }
2196
2209
  };
@@ -2474,6 +2487,8 @@ var Schedule = /** @class */ (function (_super) {
2474
2487
  };
2475
2488
  /**
2476
2489
  * To check whether the given time range slots are available for event creation or already occupied by other events.
2490
+ * This method currently focuses on validating appointments within the current view date range.
2491
+ * However, it does not extend this availability check to recurrence occurrences outside of the current date range.
2477
2492
  *
2478
2493
  * @function isSlotAvailable
2479
2494
  * @param {Date | Object} startTime Denotes the start time of the slot.
@@ -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());
@@ -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
  }
@@ -103,7 +104,12 @@ var VerticalEvent = /** @class */ (function (_super) {
103
104
  if (isDragging) {
104
105
  this.parent.crudModule.crudObj.isCrudAction = false;
105
106
  }
106
- this.parent.renderTemplates();
107
+ this.parent.renderTemplates(function () {
108
+ if (_this.parent.isReact && _this.parent.activeViewOptions.eventTemplate) {
109
+ var wraps = [].slice.call(_this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS));
110
+ removeClass(wraps, cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS);
111
+ }
112
+ });
107
113
  };
108
114
  VerticalEvent.prototype.initializeValues = function () {
109
115
  this.resources = (this.parent.activeViewOptions.group.resources.length > 0) ? this.parent.uiStateValues.isGroupAdaptive ?
@@ -1357,6 +1357,17 @@ var QuickPopups = /** @class */ (function () {
1357
1357
  instance.destroy();
1358
1358
  }
1359
1359
  }
1360
+ if (popupName === 'quickPopup') {
1361
+ var input = popup.element.querySelector('input.' + cls.SUBJECT_CLASS);
1362
+ if (input) {
1363
+ input.remove();
1364
+ }
1365
+ var form = this.quickPopup.element.querySelector('form.' + cls.FORM_CLASS);
1366
+ if (form) {
1367
+ util.removeChildren(form);
1368
+ form.remove();
1369
+ }
1370
+ }
1360
1371
  };
1361
1372
  QuickPopups.prototype.refreshQuickDialog = function () {
1362
1373
  this.destroyQuickDialog();
@@ -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) {
@@ -51,15 +51,21 @@ var Render = /** @class */ (function () {
51
51
  break;
52
52
  case 'TimelineDay':
53
53
  this.parent.activeView = this.parent.timelineViewsModule;
54
- this.parent.activeView.viewClass = 'e-timeline-day-view';
54
+ if (!isNullOrUndefined(this.parent.activeView)) {
55
+ this.parent.activeView.viewClass = 'e-timeline-day-view';
56
+ }
55
57
  break;
56
58
  case 'TimelineWorkWeek':
57
59
  this.parent.activeView = this.parent.timelineViewsModule;
58
- this.parent.activeView.viewClass = 'e-timeline-work-week-view';
60
+ if (!isNullOrUndefined(this.parent.activeView)) {
61
+ this.parent.activeView.viewClass = 'e-timeline-work-week-view';
62
+ }
59
63
  break;
60
64
  case 'TimelineWeek':
61
65
  this.parent.activeView = this.parent.timelineViewsModule;
62
- this.parent.activeView.viewClass = 'e-timeline-week-view';
66
+ if (!isNullOrUndefined(this.parent.activeView)) {
67
+ this.parent.activeView.viewClass = 'e-timeline-week-view';
68
+ }
63
69
  break;
64
70
  case 'TimelineMonth':
65
71
  this.parent.activeView = this.parent.timelineMonthModule;
@@ -76,6 +82,8 @@ var Render = /** @class */ (function () {
76
82
  this.parent.headerModule.updateActiveView();
77
83
  this.parent.headerModule.setCalendarView();
78
84
  }
85
+ console.warn('[WARNING] :: Module "' + viewName + '" is not available in Schedule component!' +
86
+ ' You either misspelled the module name or forgot to load it.');
79
87
  return this.initializeLayout(firstView);
80
88
  }
81
89
  throw Error('Inject required modules');
@@ -138,6 +138,10 @@
138
138
  color: #fff;
139
139
  }
140
140
 
141
+ .e-bigger.e-multiselect.e-control-container .e-multi-select-wrapper .e-clear-icon {
142
+ margin-top: -3.2em;
143
+ }
144
+
141
145
  /*! recurrence editor theme wise definitions*/ /*! Schedule component's bootstrap theme definitions and variables */
142
146
  .e-schedule .e-schedule-toolbar .e-icon-prev::before {
143
147
  content: "\e990";
@@ -323,6 +327,9 @@
323
327
  font-size: 14px;
324
328
  text-transform: initial;
325
329
  }
330
+ .e-schedule .e-schedule-toolbar .e-toolbar-items {
331
+ height: 43px;
332
+ }
326
333
  .e-schedule .e-schedule-toolbar .e-toolbar-items.e-tbar-pos {
327
334
  height: 43px;
328
335
  min-height: 43px;
@@ -1031,6 +1038,9 @@
1031
1038
  padding: 0;
1032
1039
  position: relative;
1033
1040
  }
1041
+ .e-schedule .e-vertical-view .e-appointment-wrapper-hidden {
1042
+ visibility: hidden;
1043
+ }
1034
1044
  .e-schedule .e-vertical-view .e-all-day-appointment-wrapper .e-appointment:not(.e-schedule-event-clone) {
1035
1045
  cursor: default;
1036
1046
  }
@@ -2485,8 +2495,8 @@
2485
2495
  .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item {
2486
2496
  min-height: 56px;
2487
2497
  }
2488
- .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item:not(.e-separator),
2489
- .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item:not(.e-separator) {
2498
+ .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item:not(.e-separator):not(.e-spacer),
2499
+ .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item:not(.e-separator):not(.e-spacer) {
2490
2500
  min-width: 34px;
2491
2501
  }
2492
2502
  .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-separator,