@syncfusion/ej2-schedule 31.1.17 → 31.1.20

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 (167) hide show
  1. package/dist/ej2-schedule.min.js +2 -2
  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 +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +1 -1
  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 +17 -52
  12. package/src/schedule/event-renderer/event-base.js +1 -1
  13. package/styles/bootstrap4-lite.css +8 -0
  14. package/styles/bootstrap4.css +8 -0
  15. package/styles/recurrence-editor/bootstrap4.css +8 -0
  16. package/styles/schedule/bootstrap4.css +8 -0
  17. package/dist/ts/common/calendar-util.d.ts +0 -92
  18. package/dist/ts/common/calendar-util.ts +0 -261
  19. package/dist/ts/common/index.d.ts +0 -4
  20. package/dist/ts/common/index.ts +0 -4
  21. package/dist/ts/components.d.ts +0 -5
  22. package/dist/ts/components.ts +0 -5
  23. package/dist/ts/index.d.ts +0 -6
  24. package/dist/ts/index.ts +0 -7
  25. package/dist/ts/recurrence-editor/date-generator.d.ts +0 -76
  26. package/dist/ts/recurrence-editor/date-generator.ts +0 -1699
  27. package/dist/ts/recurrence-editor/index.d.ts +0 -6
  28. package/dist/ts/recurrence-editor/index.ts +0 -6
  29. package/dist/ts/recurrence-editor/recurrence-editor-model.d.ts +0 -112
  30. package/dist/ts/recurrence-editor/recurrence-editor.d.ts +0 -245
  31. package/dist/ts/recurrence-editor/recurrence-editor.ts +0 -1257
  32. package/dist/ts/schedule/actions/action-base.d.ts +0 -44
  33. package/dist/ts/schedule/actions/action-base.ts +0 -493
  34. package/dist/ts/schedule/actions/crud.d.ts +0 -41
  35. package/dist/ts/schedule/actions/crud.ts +0 -784
  36. package/dist/ts/schedule/actions/data.d.ts +0 -63
  37. package/dist/ts/schedule/actions/data.ts +0 -128
  38. package/dist/ts/schedule/actions/drag.d.ts +0 -75
  39. package/dist/ts/schedule/actions/drag.ts +0 -1401
  40. package/dist/ts/schedule/actions/keyboard.d.ts +0 -100
  41. package/dist/ts/schedule/actions/keyboard.ts +0 -1435
  42. package/dist/ts/schedule/actions/resize.d.ts +0 -27
  43. package/dist/ts/schedule/actions/resize.ts +0 -602
  44. package/dist/ts/schedule/actions/scroll.d.ts +0 -69
  45. package/dist/ts/schedule/actions/scroll.ts +0 -105
  46. package/dist/ts/schedule/actions/touch.d.ts +0 -32
  47. package/dist/ts/schedule/actions/touch.ts +0 -314
  48. package/dist/ts/schedule/actions/virtual-scroll.d.ts +0 -55
  49. package/dist/ts/schedule/actions/virtual-scroll.ts +0 -596
  50. package/dist/ts/schedule/actions/work-cells.d.ts +0 -14
  51. package/dist/ts/schedule/actions/work-cells.ts +0 -151
  52. package/dist/ts/schedule/base/constant.d.ts +0 -102
  53. package/dist/ts/schedule/base/constant.ts +0 -103
  54. package/dist/ts/schedule/base/css-constant.d.ts +0 -475
  55. package/dist/ts/schedule/base/css-constant.ts +0 -475
  56. package/dist/ts/schedule/base/interface.d.ts +0 -673
  57. package/dist/ts/schedule/base/interface.ts +0 -738
  58. package/dist/ts/schedule/base/resource.d.ts +0 -59
  59. package/dist/ts/schedule/base/resource.ts +0 -1091
  60. package/dist/ts/schedule/base/schedule-model.d.ts +0 -930
  61. package/dist/ts/schedule/base/schedule.d.ts +0 -1967
  62. package/dist/ts/schedule/base/schedule.ts +0 -4221
  63. package/dist/ts/schedule/base/type.d.ts +0 -134
  64. package/dist/ts/schedule/base/type.ts +0 -142
  65. package/dist/ts/schedule/base/util.d.ts +0 -266
  66. package/dist/ts/schedule/base/util.ts +0 -492
  67. package/dist/ts/schedule/event-renderer/agenda-base.d.ts +0 -15
  68. package/dist/ts/schedule/event-renderer/agenda-base.ts +0 -423
  69. package/dist/ts/schedule/event-renderer/event-base.d.ts +0 -101
  70. package/dist/ts/schedule/event-renderer/event-base.ts +0 -1501
  71. package/dist/ts/schedule/event-renderer/inline-edit.d.ts +0 -23
  72. package/dist/ts/schedule/event-renderer/inline-edit.ts +0 -287
  73. package/dist/ts/schedule/event-renderer/month.d.ts +0 -60
  74. package/dist/ts/schedule/event-renderer/month.ts +0 -760
  75. package/dist/ts/schedule/event-renderer/timeline-view.d.ts +0 -51
  76. package/dist/ts/schedule/event-renderer/timeline-view.ts +0 -606
  77. package/dist/ts/schedule/event-renderer/vertical-view.d.ts +0 -57
  78. package/dist/ts/schedule/event-renderer/vertical-view.ts +0 -898
  79. package/dist/ts/schedule/event-renderer/year.d.ts +0 -27
  80. package/dist/ts/schedule/event-renderer/year.ts +0 -623
  81. package/dist/ts/schedule/exports/calendar-export.d.ts +0 -16
  82. package/dist/ts/schedule/exports/calendar-export.ts +0 -160
  83. package/dist/ts/schedule/exports/calendar-import.d.ts +0 -18
  84. package/dist/ts/schedule/exports/calendar-import.ts +0 -277
  85. package/dist/ts/schedule/exports/excel-export.d.ts +0 -14
  86. package/dist/ts/schedule/exports/excel-export.ts +0 -89
  87. package/dist/ts/schedule/exports/index.d.ts +0 -7
  88. package/dist/ts/schedule/exports/index.ts +0 -7
  89. package/dist/ts/schedule/exports/print.d.ts +0 -20
  90. package/dist/ts/schedule/exports/print.ts +0 -233
  91. package/dist/ts/schedule/index.d.ts +0 -26
  92. package/dist/ts/schedule/index.ts +0 -26
  93. package/dist/ts/schedule/models/event-settings-model.d.ts +0 -165
  94. package/dist/ts/schedule/models/event-settings.d.ts +0 -149
  95. package/dist/ts/schedule/models/event-settings.ts +0 -187
  96. package/dist/ts/schedule/models/field-options-model.d.ts +0 -37
  97. package/dist/ts/schedule/models/field-options.d.ts +0 -31
  98. package/dist/ts/schedule/models/field-options.ts +0 -41
  99. package/dist/ts/schedule/models/fields-model.d.ts +0 -129
  100. package/dist/ts/schedule/models/fields.d.ts +0 -117
  101. package/dist/ts/schedule/models/fields.ts +0 -149
  102. package/dist/ts/schedule/models/group-model.d.ts +0 -69
  103. package/dist/ts/schedule/models/group.d.ts +0 -60
  104. package/dist/ts/schedule/models/group.ts +0 -75
  105. package/dist/ts/schedule/models/header-rows-model.d.ts +0 -33
  106. package/dist/ts/schedule/models/header-rows.d.ts +0 -30
  107. package/dist/ts/schedule/models/header-rows.ts +0 -35
  108. package/dist/ts/schedule/models/models.d.ts +0 -14
  109. package/dist/ts/schedule/models/models.ts +0 -15
  110. package/dist/ts/schedule/models/quick-info-templates-model.d.ts +0 -52
  111. package/dist/ts/schedule/models/quick-info-templates.d.ts +0 -47
  112. package/dist/ts/schedule/models/quick-info-templates.ts +0 -56
  113. package/dist/ts/schedule/models/resources-model.d.ts +0 -122
  114. package/dist/ts/schedule/models/resources.d.ts +0 -106
  115. package/dist/ts/schedule/models/resources.ts +0 -138
  116. package/dist/ts/schedule/models/time-scale-model.d.ts +0 -57
  117. package/dist/ts/schedule/models/time-scale.d.ts +0 -50
  118. package/dist/ts/schedule/models/time-scale.ts +0 -61
  119. package/dist/ts/schedule/models/toolbar-model.d.ts +0 -196
  120. package/dist/ts/schedule/models/toolbar.d.ts +0 -176
  121. package/dist/ts/schedule/models/toolbar.ts +0 -196
  122. package/dist/ts/schedule/models/views-model.d.ts +0 -370
  123. package/dist/ts/schedule/models/views.d.ts +0 -335
  124. package/dist/ts/schedule/models/views.ts +0 -408
  125. package/dist/ts/schedule/models/work-hours-model.d.ts +0 -29
  126. package/dist/ts/schedule/models/work-hours.d.ts +0 -24
  127. package/dist/ts/schedule/models/work-hours.ts +0 -31
  128. package/dist/ts/schedule/popups/event-tooltip.d.ts +0 -16
  129. package/dist/ts/schedule/popups/event-tooltip.ts +0 -203
  130. package/dist/ts/schedule/popups/event-window.d.ts +0 -118
  131. package/dist/ts/schedule/popups/event-window.ts +0 -2055
  132. package/dist/ts/schedule/popups/form-validator.d.ts +0 -16
  133. package/dist/ts/schedule/popups/form-validator.ts +0 -110
  134. package/dist/ts/schedule/popups/quick-popups.d.ts +0 -78
  135. package/dist/ts/schedule/popups/quick-popups.ts +0 -1470
  136. package/dist/ts/schedule/renderer/agenda.d.ts +0 -45
  137. package/dist/ts/schedule/renderer/agenda.ts +0 -497
  138. package/dist/ts/schedule/renderer/day.d.ts +0 -20
  139. package/dist/ts/schedule/renderer/day.ts +0 -28
  140. package/dist/ts/schedule/renderer/header-renderer.d.ts +0 -48
  141. package/dist/ts/schedule/renderer/header-renderer.ts +0 -736
  142. package/dist/ts/schedule/renderer/month-agenda.d.ts +0 -29
  143. package/dist/ts/schedule/renderer/month-agenda.ts +0 -184
  144. package/dist/ts/schedule/renderer/month.d.ts +0 -61
  145. package/dist/ts/schedule/renderer/month.ts +0 -766
  146. package/dist/ts/schedule/renderer/renderer.d.ts +0 -13
  147. package/dist/ts/schedule/renderer/renderer.ts +0 -165
  148. package/dist/ts/schedule/renderer/timeline-header-row.d.ts +0 -15
  149. package/dist/ts/schedule/renderer/timeline-header-row.ts +0 -132
  150. package/dist/ts/schedule/renderer/timeline-month.d.ts +0 -29
  151. package/dist/ts/schedule/renderer/timeline-month.ts +0 -184
  152. package/dist/ts/schedule/renderer/timeline-view.d.ts +0 -31
  153. package/dist/ts/schedule/renderer/timeline-view.ts +0 -308
  154. package/dist/ts/schedule/renderer/timeline-year.d.ts +0 -22
  155. package/dist/ts/schedule/renderer/timeline-year.ts +0 -450
  156. package/dist/ts/schedule/renderer/vertical-view.d.ts +0 -63
  157. package/dist/ts/schedule/renderer/vertical-view.ts +0 -911
  158. package/dist/ts/schedule/renderer/view-base.d.ts +0 -83
  159. package/dist/ts/schedule/renderer/view-base.ts +0 -709
  160. package/dist/ts/schedule/renderer/week.d.ts +0 -22
  161. package/dist/ts/schedule/renderer/week.ts +0 -35
  162. package/dist/ts/schedule/renderer/work-week.d.ts +0 -22
  163. package/dist/ts/schedule/renderer/work-week.ts +0 -36
  164. package/dist/ts/schedule/renderer/year.d.ts +0 -46
  165. package/dist/ts/schedule/renderer/year.ts +0 -470
  166. package/dist/ts/schedule/timezone/timezone.d.ts +0 -16
  167. package/dist/ts/schedule/timezone/timezone.ts +0 -313
@@ -1,27 +0,0 @@
1
- import { Schedule } from '../base/schedule';
2
- import { TimelineEvent } from './timeline-view';
3
- /**
4
- * Year view events render
5
- */
6
- export declare class YearEvent extends TimelineEvent {
7
- cellHeader: number;
8
- private isResource;
9
- constructor(parent: Schedule);
10
- renderAppointments(): void;
11
- private yearViewEvents;
12
- private timelineYearViewEvents;
13
- private updateSpannedEvents;
14
- private timelineResourceEvents;
15
- private shouldRenderAppointment;
16
- private renderResourceEvent;
17
- setMaxEventHeight(event: HTMLElement, cell: HTMLElement): void;
18
- private renderEvent;
19
- private renderMoreIndicator;
20
- private createEventElement;
21
- isSpannedEvent(eventObj: Record<string, any>, monthDate: Date): Record<string, any>;
22
- private updateSpannedEventDetails;
23
- getOverlapEvents(date: Date, appointments: Record<string, any>[]): Record<string, any>[];
24
- private getMonths;
25
- private removeCellHeight;
26
- destroy(): void;
27
- }
@@ -1,623 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { addClass, append, createElement, extend, remove, isNullOrUndefined } from '@syncfusion/ej2-base';
3
- import { setStyleAttribute, EventHandler } from '@syncfusion/ej2-base';
4
- import { Schedule } from '../base/schedule';
5
- import { EventRenderedArgs, TdData } from '../base/interface';
6
- import { TimelineEvent } from './timeline-view';
7
- import * as util from '../base/util';
8
- import * as events from '../base/constant';
9
- import * as cls from '../base/css-constant';
10
-
11
- const EVENT_GAP: number = 2;
12
-
13
- /**
14
- * Year view events render
15
- */
16
-
17
- export class YearEvent extends TimelineEvent {
18
- public cellHeader: number;
19
- private isResource: boolean = false;
20
-
21
- constructor(parent: Schedule) {
22
- super(parent, 'day');
23
- }
24
-
25
- public renderAppointments(): void {
26
- if (this.parent.dragAndDropModule) {
27
- this.parent.dragAndDropModule.setDragArea();
28
- }
29
- this.fields = this.parent.eventFields;
30
- const elementSelector: string = (this.parent.currentView === 'Year') ? '.' + cls.WORK_CELLS_CLASS + ' ' + '.' + cls.APPOINTMENT_CLASS :
31
- '.' + cls.APPOINTMENT_WRAPPER_CLASS + ',.' + cls.MORE_INDICATOR_CLASS;
32
- const eventWrappers: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll(elementSelector));
33
- for (const wrapper of eventWrappers) {
34
- remove(wrapper);
35
- }
36
- this.renderedEvents = [];
37
- if (this.parent.currentView === 'Year') {
38
- this.yearViewEvents();
39
- } else {
40
- this.removeCellHeight();
41
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
42
- this.isResource = true;
43
- this.timelineResourceEvents();
44
- } else {
45
- this.timelineYearViewEvents();
46
- }
47
- }
48
- this.parent.renderTemplates();
49
- this.parent.notify(events.contentReady, {});
50
- }
51
-
52
- private yearViewEvents(): void {
53
- const months: number[] = this.getMonths();
54
- for (const month of months) {
55
- const queryString: string = `.e-month-calendar:nth-child(${months.indexOf(month) + 1}) td.e-work-cells`;
56
- const workCells: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll(queryString));
57
- const monthDate: Date = new Date(this.parent.selectedDate.getFullYear(), month, 1);
58
- const monthStart: Date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
59
- const monthEnd: Date = this.parent.calendarUtil.getMonthEndDate(new Date(monthDate.getTime()));
60
- let startDate: Date = util.getWeekFirstDate(monthStart, this.parent.activeViewOptions.firstDayOfWeek);
61
- const endDate: Date = util.addDays(util.getWeekLastDate(monthEnd, this.parent.activeViewOptions.firstDayOfWeek), 1);
62
- for (let index: number = 0; startDate.getTime() < endDate.getTime(); index++) {
63
- const start: Date = util.resetTime(new Date(startDate.getTime()));
64
- const end: Date = util.addDays(new Date(start.getTime()), 1);
65
- startDate = util.addDays(new Date(startDate.getTime()), 1);
66
- if (!this.parent.isMinMaxDate(start as Date)) {
67
- continue;
68
- }
69
- const filterEvents: Record<string, any>[] = this.parent.eventBase.filterEvents(start, end);
70
- if (filterEvents.length > 0) {
71
- const workCell: HTMLElement = workCells[parseInt(index.toString(), 10)];
72
- if (workCell) {
73
- workCell.appendChild(createElement('div', { className: cls.APPOINTMENT_CLASS }));
74
- }
75
- }
76
- }
77
- }
78
- }
79
-
80
- private timelineYearViewEvents(): void {
81
- const workCell: HTMLElement = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')');
82
- this.cellWidth = this.parent.getElementWidth(workCell);
83
- this.cellHeader = util.getOuterHeight(workCell.querySelector('.' + cls.DATE_HEADER_CLASS));
84
- const eventTable: Element = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
85
- this.eventHeight = this.parent.getElementHeightFromClass(eventTable, cls.APPOINTMENT_CLASS);
86
- const selector: string =
87
- `.${cls.MONTH_HEADER_WRAPPER} tbody tr,.${cls.RESOURCE_COLUMN_TABLE_CLASS} tbody tr,.${cls.CONTENT_TABLE_CLASS} tbody tr`;
88
- this.addCellHeight(selector, this.eventHeight, EVENT_GAP, this.cellHeader, this.moreIndicatorHeight);
89
- const wrapperCollection: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));
90
- const months: number[] = this.getMonths();
91
- const groupIndex: number = (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.uiStateValues.isGroupAdaptive) ?
92
- this.parent.uiStateValues.groupIndex : undefined;
93
- for (let row: number = 0; row < months.length; row++) {
94
- const wrapper: Element = wrapperCollection[parseInt(row.toString(), 10)];
95
- let td: number = row + 1;
96
- let eventWrapper: HTMLElement = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });
97
- wrapper.appendChild(eventWrapper);
98
- let monthStart: Date = new Date(this.parent.selectedDate.getFullYear(), months[parseInt(row.toString(), 10)], 1);
99
- const monthEnd: Date = new Date(monthStart.getFullYear(), monthStart.getMonth() + 1, 0);
100
- let dayIndex: number = monthStart.getDay();
101
- const isSpannedCollection: Record<string, any>[] = [];
102
- if (this.parent.activeViewOptions.orientation === 'Horizontal') {
103
- this.renderedEvents = [];
104
- }
105
- while (monthStart.getTime() <= monthEnd.getTime()) {
106
- let leftValue: number;
107
- let rightValue: number;
108
- if (this.parent.activeViewOptions.orientation === 'Vertical') {
109
- const wrapper: Element = wrapperCollection[parseInt(dayIndex.toString(), 10)];
110
- td = dayIndex + 1;
111
- eventWrapper = wrapper.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS) as HTMLElement;
112
- if (!eventWrapper) {
113
- eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });
114
- wrapper.appendChild(eventWrapper);
115
- }
116
- if (this.parent.enableRtl) {
117
- rightValue = row * this.cellWidth;
118
- } else {
119
- leftValue = row * this.cellWidth;
120
- }
121
- } else {
122
- if (this.parent.enableRtl) {
123
- rightValue = ((dayIndex + monthStart.getDate()) - 1) * this.cellWidth;
124
- } else {
125
- leftValue = ((dayIndex + monthStart.getDate()) - 1) * this.cellWidth;
126
- }
127
- }
128
- const rowTd: HTMLElement = this.parent.element.querySelector(`.e-content-wrap tr:nth-child(${td}) td`) as HTMLElement;
129
- this.cellHeight = rowTd.offsetHeight;
130
- const dayStart: Date = util.resetTime(new Date(monthStart.getTime()));
131
- const dayEnd: Date = util.addDays(new Date(dayStart.getTime()), 1);
132
- let resource: TdData;
133
- if (this.parent.uiStateValues.isGroupAdaptive) {
134
- resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];
135
- }
136
- let dayEvents: Record<string, any>[] = this.parent.eventBase.filterEvents(dayStart, dayEnd, undefined, resource);
137
- dayEvents = this.parent.eventBase.sortByDateTime(dayEvents);
138
- for (let index: number = 0, count: number = dayEvents.length; index < count; index++) {
139
- const eventData: Record<string, any> =
140
- extend({}, dayEvents[parseInt(index.toString(), 10)], null, true) as Record<string, any>;
141
- this.updateSpannedEvents(eventData, dayStart, dayEnd);
142
- const overlapIndex: number = this.getIndex(dayStart as Date);
143
- eventData.Index = overlapIndex;
144
- const availedHeight: number = this.cellHeader + (this.eventHeight * (overlapIndex + 1)) + EVENT_GAP +
145
- this.moreIndicatorHeight;
146
- const appArea: number = this.cellHeight - this.cellHeader - this.moreIndicatorHeight;
147
- const renderedAppCount: number = Math.floor(appArea / (this.eventHeight + EVENT_GAP));
148
- const eventsPerRow: number = this.parent.rowAutoHeight ? 1 : this.parent.activeViewOptions.maxEventsPerRow;
149
- const moreIndicatorCount: number = this.parent.activeViewOptions.maxEventsPerRow ? count - eventsPerRow
150
- : (count - renderedAppCount) <= 0 ? 1 : count - renderedAppCount;
151
- if (this.parent.activeViewOptions.orientation === 'Horizontal') {
152
- const isRendered: Record<string, any>[] = this.renderedEvents.filter((eventObj: Record<string, any>) =>
153
- eventObj.Guid === eventData.Guid);
154
- const isSpanned: Record<string, any>[] = isSpannedCollection.filter((eventObj: Record<string, any>) =>
155
- eventObj.Guid === eventData.Guid);
156
- if (isRendered.length > 0 && isRendered[0].MoreIndicator || isSpanned.length > 0 && isSpanned[0].MoreIndicator) {
157
- const moreIndex: number = this.parent.activeViewOptions.orientation === 'Horizontal' ? row : dayIndex;
158
- this.renderMoreIndicator(eventWrapper, moreIndicatorCount,
159
- dayStart, moreIndex, leftValue, rightValue, groupIndex);
160
- continue;
161
- } else if (isRendered.length > 0 || isSpanned.length > 0) {
162
- continue;
163
- }
164
- }
165
- if (this.maxHeight && this.parent.currentView.indexOf('Timeline') !== -1 && overlapIndex > 0) {
166
- continue;
167
- }
168
- if (this.parent.rowAutoHeight || this.shouldRenderAppointment(overlapIndex, availedHeight)) {
169
- this.renderEvent(eventWrapper, eventData, row, leftValue, rightValue, monthStart, dayIndex);
170
- if (this.parent.rowAutoHeight || this.cellHeight > availedHeight) {
171
- this.updateCellHeight(rowTd, availedHeight);
172
- }
173
- isSpannedCollection.push(eventData);
174
- } else {
175
- const moreIndex: number = this.parent.activeViewOptions.orientation === 'Horizontal' ? row : dayIndex;
176
- this.renderMoreIndicator(eventWrapper, moreIndicatorCount, dayStart, moreIndex, leftValue, rightValue, groupIndex);
177
- if (this.parent.activeViewOptions.orientation === 'Horizontal') {
178
- eventData.MoreIndicator = true;
179
- this.renderedEvents.push(eventData);
180
- isSpannedCollection.push(eventData);
181
- }
182
- }
183
- }
184
- monthStart = util.addDays(new Date(monthStart.getTime()), 1);
185
- if (this.parent.activeViewOptions.orientation === 'Vertical') {
186
- dayIndex++;
187
- this.renderedEvents = [];
188
- }
189
- }
190
- }
191
- if (this.parent.rowAutoHeight && this.parent.activeViewOptions.orientation === 'Vertical') {
192
- const appContainer: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));
193
- const tr: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr'));
194
- appContainer.forEach((ele: HTMLElement, index: number) => {
195
- const app: HTMLElement[] = [].slice.call(ele.querySelectorAll('.' + cls.APPOINTMENT_CLASS));
196
- const appTop: number = tr[parseInt(index.toString(), 10)].offsetTop + this.cellHeader + EVENT_GAP;
197
- app.forEach((app: HTMLElement) => {
198
- const overlap: number = parseInt(app.getAttribute('data-index'), 10);
199
- app.style.top = appTop + (overlap * this.eventHeight) + 'px';
200
- app.removeAttribute('data-index');
201
- });
202
- });
203
- }
204
- }
205
-
206
- private updateSpannedEvents(eventObj: Record<string, any>, dayStart: Date, dayEnd: Date): void {
207
- const isLeftRightResize: boolean = (this.isResource && this.parent.activeViewOptions.orientation === 'Vertical') ||
208
- (!this.isResource && this.parent.activeViewOptions.orientation === 'Horizontal');
209
- const data: Record<string, any> = { isLeft: true, isRight: true, isBottom: true, isTop: true };
210
- if (dayStart.getTime() <= (eventObj[this.fields.startTime] as Date).getTime()) {
211
- if (isLeftRightResize) {
212
- data.isLeft = false;
213
- } else {
214
- data.isTop = false;
215
- }
216
- }
217
- if ((dayEnd.getTime() >= (eventObj[this.fields.endTime] as Date).getTime()) || (isLeftRightResize && !this.isResource &&
218
- util.addDays(dayEnd, -1).getMonth() === (eventObj[this.fields.endTime] as Date).getMonth()) ||
219
- (isLeftRightResize && this.isResource && (dayEnd.getTime() <= eventObj[this.fields.endTime].getTime()))) {
220
- if (isLeftRightResize) {
221
- data.isRight = false;
222
- } else {
223
- data.isBottom = false;
224
- }
225
- }
226
- eventObj.data = data;
227
- }
228
-
229
- private timelineResourceEvents(): void {
230
- const contentTable: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
231
- const isVerticalScrollbarAvail: boolean = contentTable.offsetWidth > contentTable.clientWidth;
232
- const workCell: HTMLElement = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);
233
- this.cellWidth = this.parent.getElementWidth(workCell);
234
- this.cellHeader = 0;
235
- const eventTable: Element = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
236
- this.eventHeight = this.parent.getElementHeightFromClass(eventTable, cls.APPOINTMENT_CLASS);
237
- const selector: string =
238
- `.${cls.MONTH_HEADER_WRAPPER} tbody tr,.${cls.RESOURCE_COLUMN_TABLE_CLASS} tbody tr,.${cls.CONTENT_TABLE_CLASS} tbody tr`;
239
- this.addCellHeight(selector, this.eventHeight, EVENT_GAP, this.cellHeader, this.moreIndicatorHeight);
240
- const wrapperCollection: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));
241
- const resources: TdData[] = this.parent.uiStateValues.isGroupAdaptive ?
242
- [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :
243
- this.parent.activeViewOptions.allowVirtualScrolling ? this.parent.resourceBase.renderedResources :
244
- this.parent.resourceBase.lastResourceLevel;
245
- const months: number[] = this.getMonths();
246
- if (this.parent.activeViewOptions.orientation === 'Horizontal') {
247
- for (let month: number = 0; month < months.length; month++) {
248
- const monthStart: Date = new Date(this.parent.selectedDate.getFullYear(), months[parseInt(month.toString(), 10)], 1);
249
- for (let i: number = 0, len: number = resources.length; i < len; i++) {
250
- this.renderedEvents = [];
251
- this.renderResourceEvent(wrapperCollection[parseInt(month.toString(), 10)], resources[parseInt(i.toString(), 10)],
252
- month, i, monthStart);
253
- }
254
- }
255
- } else {
256
- for (let i: number = 0, len: number = resources.length; i < len; i++) {
257
- this.renderedEvents = [];
258
- for (let month: number = 0; month < months.length; month++) {
259
- const monthStart: Date = new Date(this.parent.selectedDate.getFullYear(), months[parseInt(month.toString(), 10)], 1);
260
- this.renderResourceEvent(wrapperCollection[parseInt(i.toString(), 10)], resources[parseInt(i.toString(), 10)], month,
261
- i, monthStart);
262
- }
263
- }
264
- }
265
- if (this.parent.rowAutoHeight && !isVerticalScrollbarAvail && contentTable.offsetWidth > contentTable.clientWidth) {
266
- const appointments: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));
267
- appointments.forEach((ele: HTMLElement) => {
268
- ele.style.removeProperty('left');
269
- ele.style.removeProperty('right');
270
- });
271
- const appContainer: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));
272
- const conTable: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);
273
- const tr: HTMLElement[] = [].slice.call(conTable.querySelectorAll('tbody tr'));
274
- appContainer.forEach((ele: HTMLElement, index: number) => {
275
- const appWrapper: HTMLElement[] = [].slice.call(ele.children);
276
- const row: HTMLElement = tr[parseInt(index.toString(), 10)];
277
- appWrapper.forEach((appWrap: HTMLElement, cellIndex: number) => {
278
- const td: HTMLElement = row.querySelector(`td:nth-child(${cellIndex + 1})`);
279
- const app: HTMLElement[] = [].slice.call(appWrap.children);
280
- const width: number = this.parent.getElementWidth(td);
281
- const left: number = td.offsetLeft;
282
- if (this.parent.enableRtl) {
283
- const right: number = conTable.offsetWidth - left - td.offsetWidth;
284
- app.forEach((app: HTMLElement) => {
285
- app.style.width = Math.floor(parseInt(app.style.width, 10) / width) * width + 'px';
286
- app.style.right = right + 'px';
287
- });
288
- } else {
289
- app.forEach((app: HTMLElement) => {
290
- app.style.width = Math.floor(parseInt(app.style.width, 10) / width) * width + 'px';
291
- app.style.left = left + 'px';
292
- });
293
- }
294
- });
295
- });
296
- }
297
- }
298
-
299
- private shouldRenderAppointment(overlapIndex: number, availedHeight: number): boolean {
300
- const eventsPerRow: number = this.parent.rowAutoHeight ? 1 : this.parent.activeViewOptions.maxEventsPerRow;
301
- if (this.parent.activeViewOptions.maxEventsPerRow && !this.parent.rowAutoHeight &&
302
- !this.parent.eventSettings.enableIndicator) {
303
- return overlapIndex < eventsPerRow;
304
- } else if (this.maxOrIndicator) {
305
- return overlapIndex < 1;
306
- } else {
307
- return this.cellHeight > availedHeight;
308
- }
309
- }
310
-
311
- private renderResourceEvent(wrapper: Element, resource: TdData, month: number, index: number, monthStart: Date): void {
312
- const eventWrapper: HTMLElement = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });
313
- wrapper.appendChild(eventWrapper);
314
- const monthEnd: Date = util.addDays(util.lastDateOfMonth(new Date(monthStart.getTime())), 1);
315
- const eventDatas: Record<string, any>[] = this.parent.eventBase.filterEvents(monthStart, monthEnd, undefined, resource);
316
- const rowIndex: number = this.parent.activeViewOptions.orientation === 'Vertical' ? index : month;
317
- const td: HTMLElement = this.parent.element.querySelector(`.e-content-wrap tr:nth-child(${rowIndex + 1}) td`) as HTMLElement;
318
- this.cellHeight = td.offsetHeight;
319
- this.groupOrder = resource.groupOrder;
320
- const isSpannedCollection: Record<string, any>[] = [];
321
- for (let a: number = 0; a < eventDatas.length; a++) {
322
- const data: Record<string, any> = eventDatas[parseInt(a.toString(), 10)];
323
- let overlapIndex: number;
324
- const eventData: Record<string, any> = extend({}, data, null, true) as Record<string, any>;
325
- if (this.parent.activeViewOptions.group.resources.length > 0) {
326
- const eventObj: Record<string, any> = this.isSpannedEvent(eventData, monthStart);
327
- overlapIndex = this.getIndex(eventObj[this.fields.startTime] as Date);
328
- eventData.Index = overlapIndex;
329
- } else {
330
- overlapIndex = this.getIndex(eventData[this.fields.startTime] as Date);
331
- eventData.Index = overlapIndex;
332
- }
333
- const availedHeight: number = this.cellHeader + (this.eventHeight * (a + 1)) + EVENT_GAP + this.moreIndicatorHeight;
334
- const leftValue: number = (this.parent.activeViewOptions.orientation === 'Vertical') ?
335
- month * this.cellWidth : index * this.cellWidth;
336
- if (!this.parent.isMinMaxDate(eventData[this.fields.startTime] as Date)) {
337
- return;
338
- }
339
- if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0) {
340
- const isRendered: Record<string, any>[] = this.renderedEvents.filter((eventObj: Record<string, any>) =>
341
- eventObj.Guid === eventData.Guid);
342
- const isSpanned: Record<string, any>[] = isSpannedCollection.filter((eventObj: Record<string, any>) =>
343
- eventObj.Guid === eventData.Guid);
344
- if (isRendered.length > 0 || isSpanned.length > 0) {
345
- continue;
346
- }
347
- }
348
- if (this.maxHeight && this.parent.currentView.indexOf('Timeline') !== -1 && overlapIndex > 0) {
349
- continue;
350
- }
351
- if (this.parent.rowAutoHeight || this.shouldRenderAppointment(overlapIndex, availedHeight)) {
352
- this.renderEvent(eventWrapper, eventData, month, leftValue, leftValue, monthStart, index);
353
- this.updateCellHeight(td, availedHeight);
354
- isSpannedCollection.push(eventData);
355
- } else {
356
- const moreIndex: number = this.parent.activeViewOptions.orientation === 'Horizontal' ? month : index;
357
- this.renderMoreIndicator(eventWrapper, eventDatas.length - a, monthStart, moreIndex, leftValue, leftValue, index);
358
- if (this.parent.activeViewOptions.orientation === 'Horizontal') {
359
- for (let i: number = index; i < eventDatas.length; i++) {
360
- this.renderedEvents.push(extend({}, eventDatas[parseInt(i.toString(), 10)],
361
- { Index: overlapIndex + i }, true) as Record<string, any>);
362
- }
363
- }
364
- break;
365
- }
366
- }
367
- }
368
-
369
- public setMaxEventHeight(event: HTMLElement, cell: HTMLElement): void {
370
- const height: number = (cell.offsetHeight - this.cellHeader) - (this.maxHeight ? 0 : this.moreIndicatorHeight);
371
- setStyleAttribute(event, { 'height': height + 'px', 'align-items': 'center' });
372
- }
373
-
374
- // eslint-disable-next-line max-len
375
- private renderEvent(wrapper: HTMLElement, eventData: Record<string, any>, row: number, left: number, right: number, monthDate: Date, rowIndex?: number): void {
376
- const eventObj: Record<string, any> = this.isSpannedEvent(eventData, monthDate);
377
- const wrap: HTMLElement = this.createEventElement(eventObj);
378
- let width: number;
379
- let index: number;
380
- if (eventObj.isSpanned.count === 1) {
381
- const endTime: Date = util.addDays(eventObj[this.fields.endTime] as Date, -1);
382
- eventObj[this.fields.endTime] = (endTime > eventObj[this.fields.startTime]) ? endTime : eventObj[this.fields.endTime];
383
- }
384
- if (eventObj[this.fields.startTime] > eventObj[this.fields.endTime]) {
385
- return;
386
- }
387
- if (this.parent.activeViewOptions.orientation === 'Horizontal') {
388
- index = row + 1;
389
- if ((eventObj[this.fields.startTime] as Date).getTime() === (eventObj[this.fields.endTime] as Date).getTime()) {
390
- eventObj.isSpanned.count = 1;
391
- }
392
- width = eventObj.isSpanned.count * this.cellWidth;
393
- } else {
394
- index = rowIndex + 1;
395
- width = this.isResource ? eventObj.isSpanned.count * this.cellWidth : this.cellWidth;
396
- }
397
- const rowTd: HTMLElement = this.parent.element.querySelector(`.e-content-wrap tr:nth-child(${index}) td`) as HTMLElement;
398
- const top: number = rowTd.offsetTop + this.cellHeader + (this.eventHeight * <number>eventObj.Index) + EVENT_GAP;
399
- setStyleAttribute(wrap, {
400
- 'width': width + 'px', 'height': this.eventHeight + 'px', 'left': left + 'px', 'right': right + 'px', 'top': top + 'px'
401
- });
402
- if (this.maxOrIndicator && this.parent.currentView.indexOf('Timeline') !== -1) {
403
- this.setMaxEventHeight(wrap, rowTd);
404
- }
405
- if (!this.isResource && this.parent.rowAutoHeight && this.parent.activeViewOptions.orientation === 'Vertical') {
406
- wrap.setAttribute('data-index', eventObj.Index.toString());
407
- }
408
- const args: EventRenderedArgs = { data: eventObj, element: wrap, cancel: false, type: 'event' };
409
- this.parent.trigger(events.eventRendered, args, (eventArgs: EventRenderedArgs) => {
410
- if (!eventArgs.cancel) {
411
- wrapper.appendChild(wrap);
412
- this.wireAppointmentEvents(wrap, eventObj);
413
- if (this.parent.activeViewOptions.group.resources.length > 0) {
414
- this.renderedEvents.push(extend({}, eventObj, null, true) as Record<string, any>);
415
- } else if (this.parent.activeViewOptions.orientation === 'Vertical') {
416
- this.renderedEvents.push(extend({}, eventObj, null, true) as Record<string, any>);
417
- } else if ((eventObj.isSpanned.isRight || eventObj.isSpanned.isLeft) && this.parent.activeViewOptions.orientation === 'Horizontal'
418
- || !eventObj.isSpanned.isRight) {
419
- this.renderedEvents.push(extend({}, eventObj, null, true) as Record<string, any>);
420
- }
421
- }
422
- });
423
- }
424
-
425
- // eslint-disable-next-line max-len
426
- private renderMoreIndicator(wrapper: HTMLElement, count: number, startDate: Date, row: number, left: number, right: number, index?: number): void {
427
- if (this.parent.activeViewOptions.group.resources.length === 0 && wrapper.querySelector('[data-start-date="' + startDate.getTime() + '"]')) {
428
- return;
429
- }
430
- let endDate: Date;
431
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
432
- endDate = util.addDays(util.lastDateOfMonth(new Date(startDate.getTime())), 1);
433
- } else {
434
- endDate = util.addDays(new Date(startDate.getTime()), 1);
435
- }
436
- const moreIndicator: HTMLElement = this.getMoreIndicatorElement(count, startDate, endDate);
437
- const rowTr: HTMLElement = this.parent.element.querySelector(`.e-content-wrap tr:nth-child(${row + 1})`) as HTMLElement;
438
- const top: number = rowTr.offsetTop + (this.cellHeight - this.moreIndicatorHeight);
439
- left = (Math.floor(left / this.cellWidth) * this.cellWidth);
440
- right = (Math.floor(right / this.cellWidth) * this.cellWidth);
441
- setStyleAttribute(moreIndicator, { 'width': this.cellWidth + 'px', 'left': left + 'px', 'right': right + 'px', 'top': top + 'px' });
442
- if (!isNullOrUndefined(index)) {
443
- moreIndicator.setAttribute('data-group-index', index.toString());
444
- }
445
- wrapper.appendChild(moreIndicator);
446
- EventHandler.add(moreIndicator, 'click', this.moreIndicatorClick, this);
447
- }
448
-
449
- private createEventElement(record: Record<string, any>): HTMLElement {
450
- const eventSubject: string = (record[this.fields.subject] || this.parent.eventSettings.fields.subject.default
451
- || this.parent.localeObj.getConstant('addTitle')) as string;
452
- const eventWrapper: HTMLElement = createElement('div', {
453
- className: cls.APPOINTMENT_CLASS,
454
- attrs: {
455
- 'data-id': 'Appointment_' + record[this.fields.id],
456
- 'data-guid': record.Guid as string,
457
- 'role': 'button', 'tabindex': '0',
458
- 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),
459
- 'aria-label': this.parent.getAnnouncementString(record)
460
- }
461
- });
462
- if (this.cssClass) {
463
- addClass([eventWrapper], this.cssClass);
464
- }
465
- if (record[this.fields.isReadonly]) {
466
- addClass([eventWrapper], cls.READ_ONLY);
467
- }
468
- if (this.parent.activeViewOptions.group.resources.length > 0) {
469
- const resIndex: number = this.getGroupIndexFromEvent(record);
470
- eventWrapper.setAttribute('data-group-index', resIndex.toString());
471
- }
472
- let templateElement: HTMLElement[] = [];
473
- const eventObj: Record<string, any> = extend({}, record, null, true) as Record<string, any>;
474
- if (this.parent.activeViewOptions.eventTemplate) {
475
- const templateId: string = this.parent.element.id + '_' + this.parent.activeViewOptions.eventTemplateName + 'eventTemplate';
476
- templateElement = this.parent.getAppointmentTemplate()(eventObj, this.parent, 'eventTemplate', templateId, false,
477
- undefined, undefined, this.parent.root);
478
- } else {
479
- const locationEle: string = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '') as string;
480
- const subjectEle: HTMLElement = createElement('div', {
481
- className: cls.SUBJECT_CLASS,
482
- innerHTML: (eventSubject + (locationEle ? ';&nbsp' + locationEle : ''))
483
- });
484
- const startTimeEle: HTMLElement = createElement('div', {
485
- className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),
486
- innerHTML: this.parent.getTimeString(eventObj[this.fields.startTime] as Date)
487
- });
488
- const endTimeEle: HTMLElement = createElement('div', {
489
- className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),
490
- innerHTML: this.parent.getTimeString(eventObj[this.fields.endTime] as Date)
491
- });
492
- addClass([subjectEle], 'e-text-center');
493
- if (record[this.fields.isAllDay]) {
494
- templateElement = [subjectEle];
495
- } else if (!eventObj.isLeft && !eventObj.isRight) {
496
- templateElement = [startTimeEle, subjectEle, endTimeEle];
497
- } else {
498
- if (!eventObj.isLeft) {
499
- templateElement.push(startTimeEle);
500
- }
501
- templateElement.push(subjectEle);
502
- if (!eventObj.isRight) {
503
- templateElement.push(endTimeEle);
504
- }
505
- }
506
- }
507
- const appointmentDetails: HTMLElement = createElement('div', { className: cls.APPOINTMENT_DETAILS });
508
- append(templateElement, appointmentDetails);
509
- eventWrapper.appendChild(appointmentDetails);
510
- this.parent.eventBase.renderSpannedIcon(eventWrapper, record.isSpanned);
511
- this.renderResizeHandler(eventWrapper, record.data as Record<string, any>, record[this.fields.isReadonly] as boolean);
512
- this.applyResourceColor(eventWrapper, eventObj, 'backgroundColor', this.groupOrder);
513
- return eventWrapper;
514
- }
515
-
516
- public isSpannedEvent(eventObj: Record<string, any>, monthDate: Date): Record<string, any> {
517
- const monthStart: Date = new Date(monthDate.getFullYear(), monthDate.getMonth(), 1);
518
- const monthEnd: Date = util.addDays(new Date(monthDate.getFullYear(), monthDate.getMonth() + 1, 0), 1);
519
- const eventData: Record<string, any> = extend({}, eventObj, null, true) as Record<string, any>;
520
- const eventStart: Date = eventData[this.fields.startTime] as Date;
521
- const eventEnd: Date = eventData[this.fields.endTime] as Date;
522
- const isSpanned: Record<string, any> = { isLeft: false, isRight: false, count: 1 };
523
- const yearStart: Date = new Date(this.parent.selectedDate.getFullYear(), this.parent.firstMonthOfYear, 1);
524
- const yearEnd: Date = util.addMonths(yearStart, this.parent.monthsCount);
525
- if (this.isResource) {
526
- this.updateSpannedEvents(eventObj, monthStart, monthEnd);
527
- }
528
- if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0) {
529
- this.updateSpannedEventDetails(eventStart, eventEnd, yearStart, yearEnd, eventData, isSpanned);
530
- const originalStartTime: Date = eventData[this.fields.startTime];
531
- const originalEndTime: Date = new Date(eventData[this.fields.endTime] - 1);
532
- isSpanned.count = (originalEndTime.getMonth() - originalStartTime.getMonth()) +
533
- (this.parent.monthsCount * (originalEndTime.getFullYear() - originalStartTime.getFullYear())) + 1;
534
- }
535
- else {
536
- this.updateSpannedEventDetails(eventStart, eventEnd, monthStart, monthEnd, eventData, isSpanned);
537
- if (this.parent.activeViewOptions.group.resources.length === 0 || this.parent.uiStateValues.isGroupAdaptive) {
538
- let end: number = util.resetTime(eventData[this.fields.endTime]).getTime();
539
- const start: number = util.resetTime(eventData[this.fields.startTime]).getTime();
540
- if (eventObj[this.fields.isAllDay] && end === eventObj[this.fields.endTime].getTime() || isSpanned.isRight) {
541
- end = util.addDays(new Date(end), -1).getTime();
542
- }
543
- isSpanned.count = Math.round((end - start) / util.MS_PER_DAY) + 1;
544
- }
545
- }
546
- eventData.isSpanned = isSpanned;
547
- if (util.resetTime(eventStart).getTime() < util.resetTime(this.parent.minDate).getTime()) {
548
- eventData[this.fields.startTime] = this.parent.minDate;
549
- }
550
- if (util.resetTime(eventEnd).getTime() > util.resetTime(this.parent.maxDate).getTime()) {
551
- eventData[this.fields.endTime] = this.parent.maxDate;
552
- }
553
- return eventData;
554
- }
555
-
556
- private updateSpannedEventDetails(eventStart: Date, eventEnd: Date, viewStart: Date, viewEnd: Date,
557
- eventObj: Record<string, any>, isSpanned: Record<string, any>): void {
558
- if (eventStart.getTime() < viewStart.getTime()) {
559
- eventObj[this.fields.startTime] = viewStart;
560
- isSpanned.isLeft = true;
561
- }
562
- if (eventEnd.getTime() > viewEnd.getTime()) {
563
- eventObj[this.fields.endTime] = viewEnd;
564
- isSpanned.isRight = true;
565
- }
566
- }
567
-
568
- public getOverlapEvents(date: Date, appointments: Record<string, any>[]): Record<string, any>[] {
569
- const appointmentsList: Record<string, any>[] = [];
570
- let dateStart: number;
571
- let dateEnd: number;
572
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
573
- const monthStart: Date = this.parent.calendarUtil.getMonthStartDate(new Date(date.getTime()));
574
- const monthEnd: Date = util.addDays(this.parent.calendarUtil.getMonthEndDate(new Date(date.getTime())), -1);
575
- dateStart = util.resetTime(new Date(monthStart.getTime())).getTime();
576
- dateEnd = util.resetTime(new Date(monthEnd.getTime())).getTime();
577
- } else {
578
- if (this.parent.rowAutoHeight) {
579
- dateStart = util.resetTime(new Date(date.getTime())).getTime();
580
- dateEnd = util.addDays(util.resetTime(new Date(date.getTime())), 1).getTime();
581
- } else {
582
- dateStart = dateEnd = util.resetTime(new Date(date.getTime())).getTime();
583
- }
584
- }
585
- for (const app of appointments) {
586
- const appStart: Date = new Date(app[this.fields.startTime].getTime());
587
- const appEnd: Date = new Date(app[this.fields.endTime].getTime());
588
- const timeCondition: boolean = app[this.fields.isAllDay] ? util.resetTime(appEnd).getTime() > dateStart :
589
- util.resetTime(appEnd).getTime() >= dateStart;
590
- if (((util.resetTime(appStart).getTime() <= dateStart) && (timeCondition)) ||
591
- (util.resetTime(appStart).getTime() >= dateStart) && (util.resetTime(appEnd).getTime() <= dateEnd)) {
592
- appointmentsList.push(app);
593
- }
594
- else if (this.parent.activeViewOptions.orientation === 'Vertical') {
595
- if (util.resetTime(appStart).getTime() >= dateStart && util.resetTime(appEnd).getTime() >= dateEnd) {
596
- appointmentsList.push(app);
597
- }
598
- }
599
- }
600
- return appointmentsList;
601
- }
602
-
603
- private getMonths(): number[] {
604
- // eslint-disable-next-line prefer-spread
605
- return Array.apply(null, { length: this.parent.monthsCount }).map((value: number, index: number) =>
606
- this.parent.firstMonthOfYear + index);
607
- }
608
-
609
- private removeCellHeight(): void {
610
- const elementSelector: string =
611
- `.${cls.MONTH_HEADER_WRAPPER} tbody tr,.${cls.RESOURCE_COLUMN_TABLE_CLASS} tbody tr,.${cls.CONTENT_TABLE_CLASS} tbody tr`;
612
- const rows: HTMLElement[] = [].slice.call(this.element.querySelectorAll(elementSelector));
613
- for (const row of rows) {
614
- (row.firstElementChild as HTMLElement).style.height = '';
615
- }
616
- }
617
-
618
- public destroy(): void {
619
- super.destroy();
620
- this.parent = null;
621
- }
622
-
623
- }