@syncfusion/ej2-schedule 31.1.17 → 31.1.21

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 (168) 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 +7 -3
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +6 -2
  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 +18 -53
  12. package/src/schedule/actions/virtual-scroll.js +5 -1
  13. package/src/schedule/event-renderer/event-base.js +1 -1
  14. package/styles/bootstrap4-lite.css +8 -0
  15. package/styles/bootstrap4.css +8 -0
  16. package/styles/recurrence-editor/bootstrap4.css +8 -0
  17. package/styles/schedule/bootstrap4.css +8 -0
  18. package/dist/ts/common/calendar-util.d.ts +0 -92
  19. package/dist/ts/common/calendar-util.ts +0 -261
  20. package/dist/ts/common/index.d.ts +0 -4
  21. package/dist/ts/common/index.ts +0 -4
  22. package/dist/ts/components.d.ts +0 -5
  23. package/dist/ts/components.ts +0 -5
  24. package/dist/ts/index.d.ts +0 -6
  25. package/dist/ts/index.ts +0 -7
  26. package/dist/ts/recurrence-editor/date-generator.d.ts +0 -76
  27. package/dist/ts/recurrence-editor/date-generator.ts +0 -1699
  28. package/dist/ts/recurrence-editor/index.d.ts +0 -6
  29. package/dist/ts/recurrence-editor/index.ts +0 -6
  30. package/dist/ts/recurrence-editor/recurrence-editor-model.d.ts +0 -112
  31. package/dist/ts/recurrence-editor/recurrence-editor.d.ts +0 -245
  32. package/dist/ts/recurrence-editor/recurrence-editor.ts +0 -1257
  33. package/dist/ts/schedule/actions/action-base.d.ts +0 -44
  34. package/dist/ts/schedule/actions/action-base.ts +0 -493
  35. package/dist/ts/schedule/actions/crud.d.ts +0 -41
  36. package/dist/ts/schedule/actions/crud.ts +0 -784
  37. package/dist/ts/schedule/actions/data.d.ts +0 -63
  38. package/dist/ts/schedule/actions/data.ts +0 -128
  39. package/dist/ts/schedule/actions/drag.d.ts +0 -75
  40. package/dist/ts/schedule/actions/drag.ts +0 -1401
  41. package/dist/ts/schedule/actions/keyboard.d.ts +0 -100
  42. package/dist/ts/schedule/actions/keyboard.ts +0 -1435
  43. package/dist/ts/schedule/actions/resize.d.ts +0 -27
  44. package/dist/ts/schedule/actions/resize.ts +0 -602
  45. package/dist/ts/schedule/actions/scroll.d.ts +0 -69
  46. package/dist/ts/schedule/actions/scroll.ts +0 -105
  47. package/dist/ts/schedule/actions/touch.d.ts +0 -32
  48. package/dist/ts/schedule/actions/touch.ts +0 -314
  49. package/dist/ts/schedule/actions/virtual-scroll.d.ts +0 -55
  50. package/dist/ts/schedule/actions/virtual-scroll.ts +0 -596
  51. package/dist/ts/schedule/actions/work-cells.d.ts +0 -14
  52. package/dist/ts/schedule/actions/work-cells.ts +0 -151
  53. package/dist/ts/schedule/base/constant.d.ts +0 -102
  54. package/dist/ts/schedule/base/constant.ts +0 -103
  55. package/dist/ts/schedule/base/css-constant.d.ts +0 -475
  56. package/dist/ts/schedule/base/css-constant.ts +0 -475
  57. package/dist/ts/schedule/base/interface.d.ts +0 -673
  58. package/dist/ts/schedule/base/interface.ts +0 -738
  59. package/dist/ts/schedule/base/resource.d.ts +0 -59
  60. package/dist/ts/schedule/base/resource.ts +0 -1091
  61. package/dist/ts/schedule/base/schedule-model.d.ts +0 -930
  62. package/dist/ts/schedule/base/schedule.d.ts +0 -1967
  63. package/dist/ts/schedule/base/schedule.ts +0 -4221
  64. package/dist/ts/schedule/base/type.d.ts +0 -134
  65. package/dist/ts/schedule/base/type.ts +0 -142
  66. package/dist/ts/schedule/base/util.d.ts +0 -266
  67. package/dist/ts/schedule/base/util.ts +0 -492
  68. package/dist/ts/schedule/event-renderer/agenda-base.d.ts +0 -15
  69. package/dist/ts/schedule/event-renderer/agenda-base.ts +0 -423
  70. package/dist/ts/schedule/event-renderer/event-base.d.ts +0 -101
  71. package/dist/ts/schedule/event-renderer/event-base.ts +0 -1501
  72. package/dist/ts/schedule/event-renderer/inline-edit.d.ts +0 -23
  73. package/dist/ts/schedule/event-renderer/inline-edit.ts +0 -287
  74. package/dist/ts/schedule/event-renderer/month.d.ts +0 -60
  75. package/dist/ts/schedule/event-renderer/month.ts +0 -760
  76. package/dist/ts/schedule/event-renderer/timeline-view.d.ts +0 -51
  77. package/dist/ts/schedule/event-renderer/timeline-view.ts +0 -606
  78. package/dist/ts/schedule/event-renderer/vertical-view.d.ts +0 -57
  79. package/dist/ts/schedule/event-renderer/vertical-view.ts +0 -898
  80. package/dist/ts/schedule/event-renderer/year.d.ts +0 -27
  81. package/dist/ts/schedule/event-renderer/year.ts +0 -623
  82. package/dist/ts/schedule/exports/calendar-export.d.ts +0 -16
  83. package/dist/ts/schedule/exports/calendar-export.ts +0 -160
  84. package/dist/ts/schedule/exports/calendar-import.d.ts +0 -18
  85. package/dist/ts/schedule/exports/calendar-import.ts +0 -277
  86. package/dist/ts/schedule/exports/excel-export.d.ts +0 -14
  87. package/dist/ts/schedule/exports/excel-export.ts +0 -89
  88. package/dist/ts/schedule/exports/index.d.ts +0 -7
  89. package/dist/ts/schedule/exports/index.ts +0 -7
  90. package/dist/ts/schedule/exports/print.d.ts +0 -20
  91. package/dist/ts/schedule/exports/print.ts +0 -233
  92. package/dist/ts/schedule/index.d.ts +0 -26
  93. package/dist/ts/schedule/index.ts +0 -26
  94. package/dist/ts/schedule/models/event-settings-model.d.ts +0 -165
  95. package/dist/ts/schedule/models/event-settings.d.ts +0 -149
  96. package/dist/ts/schedule/models/event-settings.ts +0 -187
  97. package/dist/ts/schedule/models/field-options-model.d.ts +0 -37
  98. package/dist/ts/schedule/models/field-options.d.ts +0 -31
  99. package/dist/ts/schedule/models/field-options.ts +0 -41
  100. package/dist/ts/schedule/models/fields-model.d.ts +0 -129
  101. package/dist/ts/schedule/models/fields.d.ts +0 -117
  102. package/dist/ts/schedule/models/fields.ts +0 -149
  103. package/dist/ts/schedule/models/group-model.d.ts +0 -69
  104. package/dist/ts/schedule/models/group.d.ts +0 -60
  105. package/dist/ts/schedule/models/group.ts +0 -75
  106. package/dist/ts/schedule/models/header-rows-model.d.ts +0 -33
  107. package/dist/ts/schedule/models/header-rows.d.ts +0 -30
  108. package/dist/ts/schedule/models/header-rows.ts +0 -35
  109. package/dist/ts/schedule/models/models.d.ts +0 -14
  110. package/dist/ts/schedule/models/models.ts +0 -15
  111. package/dist/ts/schedule/models/quick-info-templates-model.d.ts +0 -52
  112. package/dist/ts/schedule/models/quick-info-templates.d.ts +0 -47
  113. package/dist/ts/schedule/models/quick-info-templates.ts +0 -56
  114. package/dist/ts/schedule/models/resources-model.d.ts +0 -122
  115. package/dist/ts/schedule/models/resources.d.ts +0 -106
  116. package/dist/ts/schedule/models/resources.ts +0 -138
  117. package/dist/ts/schedule/models/time-scale-model.d.ts +0 -57
  118. package/dist/ts/schedule/models/time-scale.d.ts +0 -50
  119. package/dist/ts/schedule/models/time-scale.ts +0 -61
  120. package/dist/ts/schedule/models/toolbar-model.d.ts +0 -196
  121. package/dist/ts/schedule/models/toolbar.d.ts +0 -176
  122. package/dist/ts/schedule/models/toolbar.ts +0 -196
  123. package/dist/ts/schedule/models/views-model.d.ts +0 -370
  124. package/dist/ts/schedule/models/views.d.ts +0 -335
  125. package/dist/ts/schedule/models/views.ts +0 -408
  126. package/dist/ts/schedule/models/work-hours-model.d.ts +0 -29
  127. package/dist/ts/schedule/models/work-hours.d.ts +0 -24
  128. package/dist/ts/schedule/models/work-hours.ts +0 -31
  129. package/dist/ts/schedule/popups/event-tooltip.d.ts +0 -16
  130. package/dist/ts/schedule/popups/event-tooltip.ts +0 -203
  131. package/dist/ts/schedule/popups/event-window.d.ts +0 -118
  132. package/dist/ts/schedule/popups/event-window.ts +0 -2055
  133. package/dist/ts/schedule/popups/form-validator.d.ts +0 -16
  134. package/dist/ts/schedule/popups/form-validator.ts +0 -110
  135. package/dist/ts/schedule/popups/quick-popups.d.ts +0 -78
  136. package/dist/ts/schedule/popups/quick-popups.ts +0 -1470
  137. package/dist/ts/schedule/renderer/agenda.d.ts +0 -45
  138. package/dist/ts/schedule/renderer/agenda.ts +0 -497
  139. package/dist/ts/schedule/renderer/day.d.ts +0 -20
  140. package/dist/ts/schedule/renderer/day.ts +0 -28
  141. package/dist/ts/schedule/renderer/header-renderer.d.ts +0 -48
  142. package/dist/ts/schedule/renderer/header-renderer.ts +0 -736
  143. package/dist/ts/schedule/renderer/month-agenda.d.ts +0 -29
  144. package/dist/ts/schedule/renderer/month-agenda.ts +0 -184
  145. package/dist/ts/schedule/renderer/month.d.ts +0 -61
  146. package/dist/ts/schedule/renderer/month.ts +0 -766
  147. package/dist/ts/schedule/renderer/renderer.d.ts +0 -13
  148. package/dist/ts/schedule/renderer/renderer.ts +0 -165
  149. package/dist/ts/schedule/renderer/timeline-header-row.d.ts +0 -15
  150. package/dist/ts/schedule/renderer/timeline-header-row.ts +0 -132
  151. package/dist/ts/schedule/renderer/timeline-month.d.ts +0 -29
  152. package/dist/ts/schedule/renderer/timeline-month.ts +0 -184
  153. package/dist/ts/schedule/renderer/timeline-view.d.ts +0 -31
  154. package/dist/ts/schedule/renderer/timeline-view.ts +0 -308
  155. package/dist/ts/schedule/renderer/timeline-year.d.ts +0 -22
  156. package/dist/ts/schedule/renderer/timeline-year.ts +0 -450
  157. package/dist/ts/schedule/renderer/vertical-view.d.ts +0 -63
  158. package/dist/ts/schedule/renderer/vertical-view.ts +0 -911
  159. package/dist/ts/schedule/renderer/view-base.d.ts +0 -83
  160. package/dist/ts/schedule/renderer/view-base.ts +0 -709
  161. package/dist/ts/schedule/renderer/week.d.ts +0 -22
  162. package/dist/ts/schedule/renderer/week.ts +0 -35
  163. package/dist/ts/schedule/renderer/work-week.d.ts +0 -22
  164. package/dist/ts/schedule/renderer/work-week.ts +0 -36
  165. package/dist/ts/schedule/renderer/year.d.ts +0 -46
  166. package/dist/ts/schedule/renderer/year.ts +0 -470
  167. package/dist/ts/schedule/timezone/timezone.d.ts +0 -16
  168. 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
- }