@syncfusion/ej2-schedule 20.1.56 → 20.1.61

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 (53) hide show
  1. package/CHANGELOG.md +20 -1
  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 +68 -33
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +66 -31
  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 +12 -12
  12. package/src/schedule/actions/action-base.d.ts +1 -0
  13. package/src/schedule/actions/action-base.js +3 -2
  14. package/src/schedule/actions/drag.js +10 -10
  15. package/src/schedule/base/schedule.js +5 -1
  16. package/src/schedule/event-renderer/agenda-base.js +3 -0
  17. package/src/schedule/event-renderer/event-base.js +16 -11
  18. package/src/schedule/event-renderer/month.js +1 -3
  19. package/src/schedule/popups/quick-popups.js +4 -3
  20. package/src/schedule/renderer/vertical-view.d.ts +1 -0
  21. package/src/schedule/renderer/vertical-view.js +16 -1
  22. package/src/schedule/renderer/view-base.js +8 -0
  23. package/styles/bootstrap-dark.css +1 -4
  24. package/styles/bootstrap.css +1 -4
  25. package/styles/bootstrap4.css +1 -4
  26. package/styles/bootstrap5-dark.css +0 -2
  27. package/styles/bootstrap5.css +1 -4
  28. package/styles/fabric-dark.css +1 -4
  29. package/styles/fabric.css +1 -4
  30. package/styles/fluent-dark.css +0 -2
  31. package/styles/fluent.css +1 -4
  32. package/styles/highcontrast-light.css +1 -4
  33. package/styles/highcontrast.css +1 -4
  34. package/styles/material-dark.css +1 -4
  35. package/styles/material.css +1 -4
  36. package/styles/schedule/_layout.scss +0 -1
  37. package/styles/schedule/bootstrap-dark.css +1 -4
  38. package/styles/schedule/bootstrap.css +1 -4
  39. package/styles/schedule/bootstrap4.css +1 -4
  40. package/styles/schedule/bootstrap5-dark.css +0 -2
  41. package/styles/schedule/bootstrap5.css +1 -4
  42. package/styles/schedule/fabric-dark.css +1 -4
  43. package/styles/schedule/fabric.css +1 -4
  44. package/styles/schedule/fluent-dark.css +0 -2
  45. package/styles/schedule/fluent.css +1 -4
  46. package/styles/schedule/highcontrast-light.css +1 -4
  47. package/styles/schedule/highcontrast.css +1 -4
  48. package/styles/schedule/material-dark.css +1 -4
  49. package/styles/schedule/material.css +1 -4
  50. package/styles/schedule/tailwind-dark.css +0 -2
  51. package/styles/schedule/tailwind.css +1 -4
  52. package/styles/tailwind-dark.css +0 -2
  53. package/styles/tailwind.css +1 -4
@@ -5718,7 +5718,7 @@ class EventBase {
5718
5718
  isAllDayAppointment(event) {
5719
5719
  const fieldMapping = this.parent.eventFields;
5720
5720
  const isAllDay = event[fieldMapping.isAllDay];
5721
- const isFullDay = ((event[fieldMapping.endTime].getTime() - event[fieldMapping.startTime].getTime())
5721
+ const isFullDay = ((getUniversalTime(event[fieldMapping.endTime]) - getUniversalTime(event[fieldMapping.startTime]))
5722
5722
  / MS_PER_DAY) >= 1;
5723
5723
  return (isAllDay || (this.parent.eventSettings.spannedEventPlacement !== 'TimeSlot' && isFullDay)) ? true : false;
5724
5724
  }
@@ -5737,6 +5737,7 @@ class EventBase {
5737
5737
  }
5738
5738
  else if (!closest(element, '.' + POPUP_OPEN)) {
5739
5739
  this.removeSelectedAppointmentClass();
5740
+ this.parent.selectedElements = [];
5740
5741
  }
5741
5742
  }
5742
5743
  wireAppointmentEvents(element, event, isPreventCrud = false) {
@@ -5838,6 +5839,7 @@ class EventBase {
5838
5839
  this.parent.trigger(eventClick, args, (eventClickArgs) => {
5839
5840
  if (eventClickArgs.cancel) {
5840
5841
  this.removeSelectedAppointmentClass();
5842
+ this.parent.selectedElements = [];
5841
5843
  if (this.parent.quickPopup) {
5842
5844
  this.parent.quickPopup.quickPopupHide();
5843
5845
  }
@@ -5869,6 +5871,7 @@ class EventBase {
5869
5871
  this.activeEventData(e, true);
5870
5872
  }
5871
5873
  this.removeSelectedAppointmentClass();
5874
+ this.parent.selectedElements = [];
5872
5875
  if (this.parent.activeEventData.element.classList.contains(INLINE_APPOINTMENT_CLASS) ||
5873
5876
  this.parent.activeEventData.element.querySelector('.' + INLINE_SUBJECT_CLASS)) {
5874
5877
  return;
@@ -6265,16 +6268,18 @@ class EventBase {
6265
6268
  }
6266
6269
  }
6267
6270
  updateEventMinimumDuration(startEndHours, startTime, endTime) {
6268
- const eventDuration = (getUniversalTime(endTime) - getUniversalTime(startTime)) / MS_PER_MINUTE;
6269
- if (eventDuration < this.parent.eventSettings.minimumEventDuration) {
6270
- const tempEnd = new Date(startTime);
6271
- tempEnd.setMinutes(tempEnd.getMinutes() + this.parent.eventSettings.minimumEventDuration);
6272
- endTime = tempEnd;
6273
- if (endTime.getTime() > startEndHours.endHour.getTime()) {
6274
- const tempStart = new Date(startEndHours.endHour.getTime());
6275
- tempStart.setMinutes(tempStart.getMinutes() - this.parent.eventSettings.minimumEventDuration);
6276
- startTime = tempStart;
6277
- endTime = startEndHours.endHour;
6271
+ if (startTime.getTime() < endTime.getTime()) {
6272
+ const eventDuration = (getUniversalTime(endTime) - getUniversalTime(startTime)) / MS_PER_MINUTE;
6273
+ if (eventDuration < this.parent.eventSettings.minimumEventDuration) {
6274
+ const tempEnd = new Date(startTime);
6275
+ tempEnd.setMinutes(tempEnd.getMinutes() + this.parent.eventSettings.minimumEventDuration);
6276
+ endTime = tempEnd;
6277
+ if (endTime.getTime() > startEndHours.endHour.getTime()) {
6278
+ const tempStart = new Date(startEndHours.endHour.getTime());
6279
+ tempStart.setMinutes(tempStart.getMinutes() - this.parent.eventSettings.minimumEventDuration);
6280
+ startTime = tempStart;
6281
+ endTime = startEndHours.endHour;
6282
+ }
6278
6283
  }
6279
6284
  }
6280
6285
  return { startDate: startTime, endDate: endTime };
@@ -7227,9 +7232,7 @@ class MonthEvent extends EventBase {
7227
7232
  this.sortByDateTime(blockList);
7228
7233
  if (this.parent.currentView === 'Month' && this.parent.rowAutoHeight && this.parent.activeViewOptions.group.resources.length === 0) {
7229
7234
  const totalCells = [].slice.call(this.parent.element.querySelectorAll('.e-content-wrap table tr td:first-child'));
7230
- const height = this.parent.height === 'auto' ? (this.parent.element.querySelector('.e-content-wrap').clientHeight +
7231
- this.parent.element.querySelector('.e-date-header-wrap').clientHeight) / totalCells.length
7232
- : this.parent.element.querySelector('.e-schedule-table').clientHeight / totalCells.length;
7235
+ const height = this.parent.element.querySelector('.' + CONTENT_TABLE_CLASS).clientHeight / totalCells.length;
7233
7236
  totalCells.forEach((cell) => {
7234
7237
  setStyleAttribute(cell, { 'height': height + 'px' });
7235
7238
  });
@@ -9078,6 +9081,7 @@ class QuickPopups {
9078
9081
  }
9079
9082
  else {
9080
9083
  const isSameTarget = this.isSameEventClick(events);
9084
+ this.parent.selectedElements = [];
9081
9085
  if (isSameTarget) {
9082
9086
  return;
9083
9087
  }
@@ -9143,7 +9147,7 @@ class QuickPopups {
9143
9147
  `<button class="${DELETE_CLASS + ' ' + ICON}" title="${this.l10n.getConstant('delete')}"></button>` +
9144
9148
  `<button class="${CLOSE_CLASS}" title="${this.l10n.getConstant('close')}"></button></div>` +
9145
9149
  `<div class="${SUBJECT_WRAP}"><div class="${SUBJECT_CLASS} ${TEXT_ELLIPSIS}" ` +
9146
- `title="${args.eventSubject}">${args.eventSubject}</div></div >`;
9150
+ `title="${args.eventSubject ? args.eventSubject.replaceAll('"', '\'') : args.eventSubject}">${args.eventSubject}</div></div >`;
9147
9151
  break;
9148
9152
  }
9149
9153
  const templateWrapper = createElement('div', { innerHTML: header });
@@ -9325,11 +9329,11 @@ class QuickPopups {
9325
9329
  (endDate.getTime() - startDate.getTime()) / (60 * 60 * 1000) < 24 ? 1 : 0;
9326
9330
  if (eventData[fields.isAllDay]) {
9327
9331
  details = startDateDetails + ' (' + this.l10n.getConstant('allDay') + ')';
9328
- if (((endDate.getTime() - startDate.getTime()) / MS_PER_DAY) > 1) {
9332
+ if (((getUniversalTime(endDate) - getUniversalTime(startDate)) / MS_PER_DAY) > 1) {
9329
9333
  details += '&nbsp;-&nbsp;' + endDateDetails + ' (' + this.l10n.getConstant('allDay') + ')';
9330
9334
  }
9331
9335
  }
9332
- else if ((((endDate.getTime() - startDate.getTime()) / MS_PER_DAY) >= 1) || spanLength > 0) {
9336
+ else if ((((getUniversalTime(endDate) - getUniversalTime(startDate)) / MS_PER_DAY) >= 1) || spanLength > 0) {
9333
9337
  details = startDateDetails + ' (' + startTimeDetail + ')' + '&nbsp;-&nbsp;' + endDateDetails + ' (' + endTimeDetail + ')';
9334
9338
  }
9335
9339
  else {
@@ -16557,8 +16561,12 @@ let Schedule = class Schedule extends Component {
16557
16561
  this.refreshEvents(false);
16558
16562
  }
16559
16563
  break;
16560
- case 'showWeekend':
16561
16564
  case 'workDays':
16565
+ if (JSON.stringify(oldProp.workDays) !== JSON.stringify(newProp.workDays)) {
16566
+ state.isLayout = true;
16567
+ }
16568
+ break;
16569
+ case 'showWeekend':
16562
16570
  case 'startHour':
16563
16571
  case 'endHour':
16564
16572
  case 'workHours':
@@ -18288,6 +18296,7 @@ class ActionBase {
18288
18296
  }
18289
18297
  }
18290
18298
  updateScrollPosition(e) {
18299
+ this.scrollEventArgs = e;
18291
18300
  if (this.actionObj.scroll.enable && isNullOrUndefined(this.actionObj.scrollInterval)) {
18292
18301
  this.actionObj.scrollInterval = window.setInterval(() => {
18293
18302
  if (this.autoScrollValidation() && !this.actionObj.clone.classList.contains(ALLDAY_APPOINTMENT_CLASS)) {
@@ -18297,10 +18306,10 @@ class ActionBase {
18297
18306
  }
18298
18307
  this.autoScroll();
18299
18308
  if (this.actionObj.action === 'drag') {
18300
- this.parent.dragAndDropModule.updateDraggingDateTime(e);
18309
+ this.parent.dragAndDropModule.updateDraggingDateTime(this.scrollEventArgs);
18301
18310
  }
18302
18311
  else {
18303
- this.parent.resizeModule.updateResizingDirection(e);
18312
+ this.parent.resizeModule.updateResizingDirection(this.scrollEventArgs);
18304
18313
  }
18305
18314
  }
18306
18315
  }, this.actionObj.scroll.timeDelay);
@@ -20017,7 +20026,7 @@ class DragAndDrop extends ActionBase {
20017
20026
  const eventObj = extend({}, this.actionObj.event, null, true);
20018
20027
  const eventStart = eventObj[this.parent.eventFields.startTime];
20019
20028
  const eventEnd = eventObj[this.parent.eventFields.endTime];
20020
- const eventDuration = eventEnd.getTime() - eventStart.getTime();
20029
+ const eventDuration = getUniversalTime(eventEnd) - getUniversalTime(eventStart);
20021
20030
  let offsetTop = Math.floor(parseInt(this.actionObj.clone.style.top, 10) / this.actionObj.cellHeight)
20022
20031
  * this.actionObj.cellHeight;
20023
20032
  offsetTop = offsetTop < 0 ? 0 : offsetTop;
@@ -20372,8 +20381,8 @@ class DragAndDrop extends ActionBase {
20372
20381
  if (isNullOrUndefined(this.parent.eventDragArea)) {
20373
20382
  this.removeCloneElement();
20374
20383
  }
20375
- const eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -
20376
- eventObj[this.parent.eventFields.startTime].getTime();
20384
+ const eventDuration = getUniversalTime(eventObj[this.parent.eventFields.endTime]) -
20385
+ getUniversalTime(eventObj[this.parent.eventFields.startTime]);
20377
20386
  let td = closest(this.actionObj.target, 'td');
20378
20387
  if (!isNullOrUndefined(td)) {
20379
20388
  const tr = td.parentElement;
@@ -20386,12 +20395,12 @@ class DragAndDrop extends ActionBase {
20386
20395
  this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);
20387
20396
  }
20388
20397
  const timeString = new Date(currentDate.setDate(currentDate.getDate() - this.daysVariation));
20389
- let dragStart$$1 = new Date(timeString.getTime());
20390
- let dragEnd = new Date(dragStart$$1.getTime());
20391
- const startTimeDiff = eventObj[this.parent.eventFields.startTime].getTime() -
20392
- (resetTime(new Date(+eventObj[this.parent.eventFields.startTime]))).getTime();
20393
- dragStart$$1 = new Date(dragStart$$1.getTime() + startTimeDiff);
20394
- dragEnd = new Date(dragStart$$1.getTime() + eventDuration);
20398
+ const dragStart$$1 = new Date(timeString.getTime());
20399
+ const startTimeDiff = getUniversalTime(eventObj[this.parent.eventFields.startTime]) -
20400
+ getUniversalTime(resetTime(new Date(+eventObj[this.parent.eventFields.startTime])));
20401
+ dragStart$$1.setMilliseconds(startTimeDiff);
20402
+ const dragEnd = new Date(dragStart$$1.getTime());
20403
+ dragEnd.setMilliseconds(eventDuration);
20395
20404
  this.actionObj.start = new Date(dragStart$$1.getTime());
20396
20405
  this.actionObj.end = new Date(dragEnd.getTime());
20397
20406
  }
@@ -20446,8 +20455,8 @@ class DragAndDrop extends ActionBase {
20446
20455
  }
20447
20456
  calculateTimelineTime(e) {
20448
20457
  const eventObj = extend({}, this.actionObj.event, null, true);
20449
- const eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -
20450
- eventObj[this.parent.eventFields.startTime].getTime();
20458
+ const eventDuration = getUniversalTime(eventObj[this.parent.eventFields.endTime]) -
20459
+ getUniversalTime(eventObj[this.parent.eventFields.startTime]);
20451
20460
  let offsetLeft = this.parent.enableRtl ? Math.abs(this.actionObj.clone.offsetLeft) - this.actionObj.clone.offsetWidth :
20452
20461
  parseInt(this.actionObj.clone.style.left, 10);
20453
20462
  offsetLeft = Math.floor(offsetLeft / this.actionObj.cellWidth) * this.actionObj.cellWidth;
@@ -20680,7 +20689,7 @@ class DragAndDrop extends ActionBase {
20680
20689
  const cursorElement = this.getCursorElement(e);
20681
20690
  if (cursorElement) {
20682
20691
  top = cursorElement.classList.contains(WORK_CELLS_CLASS) ? cursorElement.offsetTop :
20683
- cursorElement.offsetParent.classList.contains(APPOINTMENT_CLASS) ?
20692
+ (cursorElement.offsetParent && cursorElement.offsetParent.classList.contains(APPOINTMENT_CLASS)) ?
20684
20693
  cursorElement.offsetParent.offsetTop : top;
20685
20694
  }
20686
20695
  }
@@ -21219,6 +21228,14 @@ class ViewBase {
21219
21228
  const tdDate = new Date(resetTime(new Date(+scrollDate)).getTime()).getTime();
21220
21229
  const dateElement = scrollWrap.querySelector(`.${WORK_CELLS_CLASS}[data-date="${tdDate}"]`);
21221
21230
  if (this.parent.currentView === 'Month' && dateElement) {
21231
+ if (scrollWrap.scrollWidth > scrollWrap.clientWidth) {
21232
+ if (!this.parent.enableRtl) {
21233
+ scrollWrap.scrollLeft = dateElement.offsetLeft;
21234
+ }
21235
+ else {
21236
+ scrollWrap.scrollLeft = -(this.parent.getContentTable().offsetWidth - dateElement.offsetLeft - dateElement.offsetWidth);
21237
+ }
21238
+ }
21222
21239
  scrollWrap.scrollTop = dateElement.offsetTop;
21223
21240
  }
21224
21241
  if (this.parent.currentView === 'TimelineMonth' && dateElement) {
@@ -21407,11 +21424,26 @@ class VerticalView extends ViewBase {
21407
21424
  }
21408
21425
  scrollToHour(hour, scrollDate) {
21409
21426
  const date = this.parent.getStartEndTime(hour);
21410
- if (isNullOrUndefined(date) || !isNullOrUndefined(scrollDate)) {
21427
+ if (!isNullOrUndefined(scrollDate)) {
21428
+ const headerElement = this.element.querySelector('.' + HEADER_CELLS_CLASS + '[data-date="' + new Date(resetTime(scrollDate)).getTime() + '"]');
21429
+ if (headerElement) {
21430
+ if (this.parent.enableRtl) {
21431
+ const conWrap = this.element.querySelector('.' + CONTENT_TABLE_CLASS);
21432
+ this.getScrollableElement().scrollLeft = -(conWrap.offsetWidth - headerElement.offsetLeft - headerElement.offsetWidth);
21433
+ }
21434
+ else {
21435
+ this.getScrollableElement().scrollLeft = headerElement.offsetLeft;
21436
+ }
21437
+ }
21438
+ }
21439
+ if (isNullOrUndefined(date)) {
21411
21440
  return;
21412
21441
  }
21413
21442
  this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);
21414
21443
  }
21444
+ scrollToDate(scrollDate) {
21445
+ this.scrollToHour(null, scrollDate);
21446
+ }
21415
21447
  generateColumnLevels() {
21416
21448
  const level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);
21417
21449
  let columnLevels = [];
@@ -23139,6 +23171,9 @@ class AgendaBase extends ViewBase {
23139
23171
  itemClass: this.parent.activeView.viewClass,
23140
23172
  template: `<div class="${AGENDA_NO_EVENT_CLASS}">${this.parent.localeObj.getConstant('noEvents')}</div>`
23141
23173
  });
23174
+ if (listElement.querySelector('.e-agenda-item').children.length === 0) {
23175
+ listElement.firstElementChild.appendChild(createElement('div', { className: AGENDA_NO_EVENT_CLASS, innerHTML: this.parent.localeObj.getConstant('noEvents') }));
23176
+ }
23142
23177
  }
23143
23178
  else {
23144
23179
  listElement = ListBase.createList(this.parent.createElement, listData, {