@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,596 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { append, addClass, remove, isNullOrUndefined, setStyleAttribute, createElement, prepend, removeClass } from '@syncfusion/ej2-base';
3
- import { TdData, ScrollEventArgs } from '../base/interface';
4
- import { Schedule } from '../base/schedule';
5
- import * as events from '../base/constant';
6
- import * as cls from '../base/css-constant';
7
- import * as util from '../base/util';
8
-
9
- /**
10
- * Virtual Scroll
11
- */
12
- export class VirtualScroll {
13
- private parent: Schedule;
14
- private translateY: number = 0;
15
- private itemSize: number = 60;
16
- public bufferCount: number;
17
- private renderedLength: number = 0;
18
- private averageRowHeight: number = 0;
19
- private timeValue: number;
20
- private focusedEle: Element;
21
- private isResourceCell: boolean;
22
- public isHorizontalScroll: boolean;
23
- public isRemoteRefresh: boolean;
24
- private startIndex: number = 0;
25
- public existingDataCollection: TdData[] = [];
26
- public enableTransition: boolean = true;
27
-
28
- constructor(parent: Schedule) {
29
- this.parent = parent;
30
- this.bufferCount = parent.activeViewOptions.overscanCount < 3 ? 3 : parent.activeViewOptions.overscanCount;
31
- this.addEventListener();
32
- }
33
-
34
- private addEventListener(): void {
35
- if (!this.parent || this.parent && this.parent.isDestroyed) { return; }
36
- this.parent.on(events.virtualScroll, this.virtualScrolling, this);
37
- }
38
-
39
- private removeEventListener(): void {
40
- if (!this.parent || this.parent && this.parent.isDestroyed) { return; }
41
- this.parent.off(events.virtualScroll, this.virtualScrolling);
42
- }
43
-
44
- public getRenderedCount(): number {
45
- this.setItemSize();
46
- const containerSize: number = this.isHorizontalScroll ? this.parent.element.clientWidth : this.parent.element.clientHeight;
47
- this.renderedLength = Math.ceil(containerSize / this.itemSize) + this.bufferCount;
48
- return this.renderedLength;
49
- }
50
-
51
- public renderVirtualTrack(contentWrap: Element): void {
52
- const wrap: HTMLElement = createElement('div', { className: cls.VIRTUAL_TRACK_CLASS }) as HTMLElement;
53
- if (this.isHorizontalScroll) {
54
- const colCount: number = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1].length;
55
- wrap.style.width = (colCount * this.itemSize) + 'px';
56
- } else {
57
- wrap.style.height = (this.parent.resourceBase.expandedResources.length * this.itemSize) + 'px';
58
- }
59
- contentWrap.appendChild(wrap);
60
- }
61
-
62
- public updateVirtualScrollHeight(): void {
63
- const virtual: HTMLElement = this.parent.element.querySelector('.' + cls.VIRTUAL_TRACK_CLASS) as HTMLElement;
64
- const lastResourceIndex: number =
65
- this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex;
66
- const lastRenderIndex: number =
67
- this.parent.resourceBase.renderedResources[this.parent.resourceBase.renderedResources.length - 1].groupIndex;
68
- if (lastRenderIndex !== lastResourceIndex) {
69
- const conTable: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS) as HTMLElement;
70
- this.renderedLength = conTable.querySelector('tbody').children.length;
71
- virtual.style.height = (conTable.offsetHeight + (this.parent.resourceBase.expandedResources.length - (this.renderedLength)) *
72
- conTable.offsetHeight / this.renderedLength) + 'px';
73
- const conWrap: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS) as HTMLElement;
74
- if ((conWrap.scrollHeight - conWrap.scrollTop) < conWrap.offsetHeight * this.bufferCount) {
75
- virtual.style.height = parseInt(virtual.style.height, 10) + (conWrap.offsetHeight * this.bufferCount) + 'px';
76
- }
77
- } else {
78
- virtual.style.height = '';
79
- }
80
- this.averageRowHeight = virtual.offsetHeight / this.parent.resourceBase.expandedResources.length;
81
- }
82
-
83
- public updateVirtualTrackHeight(wrap: HTMLElement): void {
84
- const resourceCount: number = this.parent.resourceBase.renderedResources.length;
85
- if (resourceCount !== this.getRenderedCount()) {
86
- wrap.style.height = (this.parent.element.querySelector('.e-content-wrap') as HTMLElement).clientHeight + 'px';
87
- const resWrap: HTMLElement = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS) as HTMLElement;
88
- const conWrap: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS) as HTMLElement;
89
- const eventWrap: HTMLElement = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS) as HTMLElement;
90
- this.translateY = 0;
91
- this.setTranslate(resWrap, conWrap, eventWrap);
92
- } else {
93
- const lastRenderIndex: number = this.parent.resourceBase.renderedResources[resourceCount - 1].groupIndex;
94
- const lastCollIndex: number =
95
- this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex;
96
- let renderedResCount: number = resourceCount + (lastCollIndex - lastRenderIndex);
97
- renderedResCount = (renderedResCount > this.parent.resourceBase.expandedResources.length) ?
98
- this.parent.resourceBase.expandedResources.length : renderedResCount;
99
- wrap.style.height = (renderedResCount * this.itemSize) + 'px';
100
- }
101
- }
102
-
103
- public setItemSize(): void {
104
- if (this.isHorizontalScroll) {
105
- this.itemSize = util.getElementWidthFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS,
106
- this.parent.uiStateValues.isTransformed) || this.itemSize;
107
- } else {
108
- this.itemSize = this.parent.getElementHeightFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
109
- }
110
- }
111
-
112
- public refreshLayout(): void {
113
- const initialHeight: number = this.parent.uiStateValues.scheduleHeight;
114
- this.parent.uiStateValues.scheduleHeight = this.parent.element.offsetHeight;
115
- const preRenderedLength: number = this.renderedLength;
116
- if (this.parent.uiStateValues.scheduleHeight !== initialHeight) {
117
- if (preRenderedLength < this.getRenderedCount()) {
118
- this.isRemoteRefresh = true;
119
- }
120
- const resWrap: HTMLElement = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS) as HTMLElement;
121
- const conWrap: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS) as HTMLElement;
122
- const eventWrap: HTMLElement = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS) as HTMLElement;
123
- if (!this.parent.rowAutoHeight) {
124
- this.enableTransition = false;
125
- removeClass([conWrap, resWrap], 'e-transition');
126
- }
127
- let firstTDIndex: number = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);
128
- const endIndex: number = (firstTDIndex + this.renderedLength);
129
- firstTDIndex = (endIndex > this.parent.resourceBase.expandedResources.length) ?
130
- (this.parent.resourceBase.expandedResources.length - this.renderedLength) : firstTDIndex;
131
- firstTDIndex = firstTDIndex < 0 ? 0 : firstTDIndex;
132
- this.existingDataCollection = this.parent.resourceBase.renderedResources;
133
- this.parent.resourceBase.renderedResources = this.parent.resourceBase.expandedResources.slice(firstTDIndex, endIndex);
134
- if (this.parent.resourceBase.renderedResources.length > 0) {
135
- this.updateContent(resWrap, conWrap, eventWrap, this.parent.resourceBase.renderedResources);
136
- }
137
- }
138
- }
139
-
140
- private renderEvents(): void {
141
- this.setTabIndex();
142
- const dynamicData: Record<string, any>[] = this.triggerScrollEvent(events.virtualScrollStop);
143
- if (this.parent.activeViewOptions && this.parent.activeViewOptions.enableLazyLoading && this.parent.crudModule) {
144
- if (dynamicData.length > 0) {
145
- this.parent.crudModule.refreshProcessedData(true, dynamicData);
146
- this.parent.hideSpinner();
147
- return;
148
- }
149
- this.parent.crudModule.refreshDataManager();
150
- return;
151
- }
152
- if (this.parent.crudModule) {
153
- this.parent.crudModule.refreshProcessedData(true);
154
- }
155
- if (this.parent.currentView !== 'Month') {
156
- this.parent.notify(events.contentReady, {});
157
- }
158
- this.parent.hideSpinner();
159
- }
160
-
161
- public virtualScrolling(): void {
162
- if (this.parent.quickPopup) {
163
- this.parent.quickPopup.quickPopupHide();
164
- this.parent.quickPopup.morePopup.hide();
165
- }
166
- const conWrap: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS) as HTMLElement;
167
- if (this.isHorizontalScroll) {
168
- this.horizontalScrolling(conWrap);
169
- } else {
170
- const resWrap: HTMLElement = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS) as HTMLElement;
171
- const eventWrap: HTMLElement = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS) as HTMLElement;
172
- const timeIndicator: HTMLElement = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS) as HTMLElement;
173
- const conTable: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS) as HTMLElement;
174
- if (!this.parent.rowAutoHeight) {
175
- addClass([conWrap, resWrap], 'e-transition');
176
- }
177
- this.renderedLength = resWrap.querySelector('tbody').children.length;
178
- const firstTDIndex: number = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);
179
- const scrollHeight: number = this.parent.rowAutoHeight ?
180
- (conTable.offsetHeight - conWrap.offsetHeight) : this.bufferCount * this.itemSize;
181
- let resCollection: TdData[] = [];
182
- this.existingDataCollection = this.parent.resourceBase.renderedResources;
183
- if ((conWrap.scrollTop) - this.translateY < 0) {
184
- resCollection = this.upScroll(conWrap, firstTDIndex);
185
- } else if ((conWrap.scrollTop + conWrap.clientHeight >= conWrap.scrollHeight - this.itemSize) ||
186
- (conWrap.scrollTop > (this.translateY + scrollHeight))) {
187
- resCollection = this.downScroll(conWrap, firstTDIndex);
188
- }
189
- if (!isNullOrUndefined(resCollection) && resCollection.length > 0) {
190
- this.triggerScrollEvent(events.virtualScrollStart);
191
- const selectedEle: Element[] = this.parent.getSelectedCells();
192
- this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;
193
- this.updateContent(resWrap, conWrap, eventWrap, resCollection);
194
- this.setTranslate(resWrap, conWrap, eventWrap, timeIndicator);
195
- if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj.action === 'drag') {
196
- this.parent.dragAndDropModule.navigationWrapper();
197
- }
198
- window.clearTimeout(this.timeValue);
199
- this.timeValue = window.setTimeout(() => { this.renderEvents(); }, 250);
200
- }
201
- }
202
- }
203
-
204
- private horizontalScrolling(conWrap: HTMLElement): void {
205
- let resCollection: TdData[] = [];
206
- const scrollWidth: number = this.bufferCount * this.itemSize;
207
- if (Math.abs(conWrap.scrollLeft) - Math.abs(this.translateY) < 0) {
208
- resCollection = this.leftScroll(conWrap);
209
- } else if (Math.abs(conWrap.scrollLeft) - Math.abs(this.translateY) > scrollWidth) {
210
- resCollection = this.rightScroll(conWrap);
211
- }
212
- if (!isNullOrUndefined(resCollection) && resCollection.length > 0) {
213
- if (this.parent.resourceBase.expandedResources.length !== resCollection.length ||
214
- this.parent.resourceBase.expandedResources[0] !== resCollection[0] ||
215
- this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1] !==
216
- resCollection[resCollection.length - 1]) {
217
- this.triggerScrollEvent(events.virtualScrollStart);
218
- const colLevels: TdData[][] = this.parent.activeView.colLevels.slice(0);
219
- this.updateHorizontalContent(conWrap, resCollection);
220
- setStyleAttribute(conWrap.querySelector('table') as HTMLElement, { transform: `translateX(${this.translateY}px)` });
221
- this.parent.activeView.colLevels = colLevels;
222
- if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj.action === 'drag') {
223
- this.parent.dragAndDropModule.navigationWrapper();
224
- }
225
- }
226
- window.clearTimeout(this.timeValue);
227
- this.timeValue = window.setTimeout(() => { this.renderEvents(); }, 250);
228
- }
229
- }
230
-
231
- private triggerScrollEvent(action: string): Record<string, any>[] {
232
- let dynamicData: Record<string, any>[] = [];
233
- if (!this.parent.activeView){
234
- return dynamicData;
235
- }
236
- const eventArgs: ScrollEventArgs = {
237
- startDate: this.parent.activeView.startDate(),
238
- endDate: this.parent.activeView.endDate(),
239
- startIndex: this.parent.resourceBase.renderedResources[0].groupIndex,
240
- endIndex: this.parent.resourceBase.renderedResources[this.parent.resourceBase.renderedResources.length - 1].groupIndex,
241
- resourceData: this.parent.resourceBase.renderedResources.map((x: TdData) => x.resourceData),
242
- name: action
243
- };
244
- this.parent.trigger(action, eventArgs, (args: ScrollEventArgs) => {
245
- if (action === events.virtualScrollStart) {
246
- this.parent.showSpinner();
247
- }
248
- else if (action === events.virtualScrollStop && !isNullOrUndefined(args.eventData) && args.eventData.length > 0) {
249
- dynamicData = args.eventData;
250
- }
251
- });
252
- return dynamicData;
253
- }
254
-
255
- private upScroll(conWrap: HTMLElement, firstTDIndex: number): TdData[] {
256
- let index: number = 0;
257
- index = (~~(conWrap.scrollTop / this.itemSize) + Math.ceil(conWrap.clientHeight / this.itemSize)) - this.renderedLength;
258
-
259
- if (this.parent.rowAutoHeight) {
260
- index = (index > firstTDIndex) ? firstTDIndex - this.bufferCount : index;
261
- }
262
- index = (index > 0) ? index : 0;
263
- const prevSetCollection: TdData[] = this.getBufferCollection(index, index + this.renderedLength);
264
- this.parent.resourceBase.renderedResources = prevSetCollection;
265
- if (firstTDIndex === 0) {
266
- this.translateY = conWrap.scrollTop;
267
- } else {
268
- let height: number = (this.parent.rowAutoHeight) ? this.averageRowHeight : this.itemSize;
269
- height = (height > 0) ? height : this.itemSize;
270
- this.translateY = (conWrap.scrollTop - (this.bufferCount * height) > 0) ?
271
- conWrap.scrollTop - (this.bufferCount * height) : 0;
272
- }
273
- return prevSetCollection;
274
- }
275
-
276
- private downScroll(conWrap: HTMLElement, firstTDIndex: number): TdData[] {
277
- const lastResource: number = this.parent.resourceBase.
278
- renderedResources[this.parent.resourceBase.renderedResources.length - 1].groupIndex;
279
- const lastResourceIndex: number =
280
- this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex;
281
- if (lastResource === lastResourceIndex) {
282
- return null;
283
- }
284
- let nextSetResIndex: number = 0;
285
- nextSetResIndex = ~~(conWrap.scrollTop / this.itemSize);
286
- if (this.parent.rowAutoHeight) {
287
- nextSetResIndex = ~~((conWrap.scrollTop - this.translateY) / this.averageRowHeight) + firstTDIndex;
288
- nextSetResIndex = (nextSetResIndex > firstTDIndex + this.bufferCount) ? nextSetResIndex : firstTDIndex + this.bufferCount;
289
- }
290
- let lastIndex: number = nextSetResIndex + this.renderedLength;
291
- lastIndex = (lastIndex > this.parent.resourceBase.expandedResources.length) ?
292
- nextSetResIndex + (this.parent.resourceBase.expandedResources.length - nextSetResIndex) : lastIndex;
293
- const nextSetCollection: TdData[] = this.getBufferCollection(lastIndex - this.renderedLength, lastIndex);
294
- this.translateY = conWrap.scrollTop;
295
- return nextSetCollection;
296
- }
297
-
298
- private leftScroll(conWrap: HTMLElement): TdData[] {
299
- let index: number = 0;
300
- index = (~~(Math.abs(conWrap.scrollLeft) / this.itemSize) + Math.ceil(conWrap.clientWidth / this.itemSize)) - this.renderedLength;
301
- index = (index > 0) ? index : 0;
302
- return this.getCollection(index, index + this.renderedLength);
303
- }
304
-
305
- private rightScroll(conWrap: HTMLElement): TdData[] {
306
- const lastLevel: TdData[] = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1];
307
- let nextSetIndex: number = 0;
308
- nextSetIndex = ~~(Math.abs(conWrap.scrollLeft) / this.itemSize);
309
- let lastIndex: number = nextSetIndex + this.renderedLength;
310
- lastIndex = (lastIndex > lastLevel.length - 1 ) ? lastLevel.length - 1 : lastIndex;
311
- return this.getCollection(lastIndex - this.renderedLength, lastIndex);
312
- }
313
-
314
- private getCollection(startIndex: number, endIndex: number): TdData[] {
315
- this.translateY = startIndex * this.itemSize;
316
- startIndex = (startIndex < 0) ? 0 : startIndex;
317
- const lastLevel: TdData[] = this.getResCollection(startIndex, endIndex);
318
- if (this.parent.enableRtl) {
319
- this.translateY = - this.translateY;
320
- }
321
- return lastLevel;
322
- }
323
-
324
- private getResCollection(startIndex: number, endIndex: number): TdData[] {
325
- const lastLevel: TdData[] = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1];
326
- endIndex = endIndex > lastLevel.length ? lastLevel.length - 1 : endIndex;
327
- let resCollection: TdData[] = [];
328
- const index: Record<string, number> = { startIndex: 0, endIndex: 0 };
329
- if (this.parent.activeViewOptions.group.byDate) {
330
- if (lastLevel[parseInt(startIndex.toString(), 10)].date.getTime() ===
331
- this.parent.resourceBase.expandedResources[0].date.getTime() &&
332
- lastLevel[parseInt(endIndex.toString(), 10)].date.getTime() ===
333
- this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].date.getTime()) {
334
- return this.parent.resourceBase.expandedResources;
335
- }
336
- resCollection =
337
- this.getByDateCollection(lastLevel[parseInt(startIndex.toString(), 10)],
338
- lastLevel[parseInt(endIndex.toString(), 10)], index);
339
- this.setRenderedDates(resCollection);
340
- } else {
341
- if (lastLevel[parseInt(startIndex.toString(), 10)].groupIndex === this.parent.resourceBase.expandedResources[0].groupIndex &&
342
- lastLevel[parseInt(endIndex.toString(), 10)].groupIndex ===
343
- this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex) {
344
- return this.parent.resourceBase.expandedResources;
345
- }
346
- resCollection =
347
- this.getByIdCollection(lastLevel[parseInt(startIndex.toString(), 10)], lastLevel[parseInt(endIndex.toString(), 10)], index);
348
- }
349
- if (this.parent.currentView !== 'Month') {
350
- this.startIndex = index.startIndex;
351
- resCollection = lastLevel.slice(index.startIndex, index.endIndex);
352
- }
353
- this.translateY = index.startIndex * this.itemSize;
354
- return resCollection;
355
- }
356
-
357
- private getByDateCollection(firstItem: TdData, lastItem: TdData, index: Record<string, number>): TdData[] {
358
- const resCollection: TdData[] = this.parent.activeView.colLevels[0].filter((data: TdData) =>
359
- firstItem.date.getTime() <= data.date.getTime() &&
360
- data.date.getTime() <= lastItem.date.getTime());
361
- this.setStartEndIndex(this.parent.activeView.colLevels[0], resCollection[0], resCollection[resCollection.length - 1], index);
362
- return resCollection;
363
- }
364
-
365
- private getByIdCollection(firstItem: TdData, lastItem: TdData, index: Record<string, number>): TdData[] {
366
- const resCollection: TdData[] = this.parent.resourceBase.lastResourceLevel.filter((data: TdData) =>
367
- firstItem.groupIndex <= data.groupIndex && data.groupIndex <= lastItem.groupIndex);
368
- this.parent.resourceBase.renderedResources = resCollection;
369
- this.setStartEndIndex(this.parent.resourceBase.lastResourceLevel, resCollection[0], resCollection[resCollection.length - 1], index);
370
- return resCollection;
371
- }
372
-
373
- private setStartEndIndex(data: TdData[], firstItem: TdData, lastItem: TdData, colIndex: Record<string, number>): void {
374
- let index: number = 0;
375
- data.filter((data: TdData) => {
376
- if (firstItem === data) {
377
- colIndex.startIndex = index;
378
- } else if (lastItem === data) {
379
- colIndex.endIndex = index + data.colSpan;
380
- }
381
- index += data.colSpan;
382
- });
383
- if (firstItem === lastItem) {
384
- colIndex.endIndex = colIndex.startIndex + lastItem.colSpan;
385
- }
386
- }
387
-
388
- public updateContent(resWrap: HTMLElement, conWrap: HTMLElement, eventWrap: HTMLElement, resCollection: TdData[]): void {
389
- const renderedLength: number = resWrap.querySelector('tbody').children.length;
390
- if (document.activeElement && document.activeElement.classList.contains(cls.RESOURCE_CELLS_CLASS)) {
391
- this.isResourceCell = true;
392
- this.parent.element.focus();
393
- }
394
- for (let i: number = 0; i < renderedLength; i++) {
395
- remove(eventWrap.querySelector('div'));
396
- }
397
- this.parent.resourceBase.renderedResources = resCollection;
398
- const currentGroupIndices: number[] = this.parent.activeView.getGroupIndices(resCollection);
399
- const previousGroupIndices: number[] = this.parent.activeView.getGroupIndices(this.existingDataCollection);
400
- const newGroupIndices: number[] = currentGroupIndices.filter((index: number) => previousGroupIndices.indexOf(index) < 0);
401
- const resWrapRows: HTMLElement[] = Array.from(resWrap.querySelectorAll('tbody tr'));
402
- const conWrapRows: HTMLElement[] = Array.from(conWrap.querySelectorAll('tbody tr'));
403
- const resWrapBody: HTMLElement = resWrap.querySelector('tbody');
404
- const conWrapBody: HTMLElement = conWrap.querySelector('tbody');
405
- this.removeObsoleteRows(resWrapRows, currentGroupIndices);
406
- this.removeObsoleteRows(conWrapRows, currentGroupIndices);
407
- const resourceRows: Element[] = this.parent.resourceBase.getContentRows(resCollection, true);
408
- if (this.parent.isReact) {
409
- this.parent.renderTemplates();
410
- }
411
- const contentRows: Element[] = this.parent.activeView.getContentRows();
412
- const eventRows: Element[] = this.parent.activeView.getEventRows(resCollection.length);
413
- for (let i: number = 0; i < newGroupIndices.length; i++) {
414
- const index: number = currentGroupIndices.indexOf(newGroupIndices[parseInt(i.toString(), 10)]);
415
- if (index === 0) {
416
- prepend([resourceRows[parseInt(i.toString(), 10)]], resWrapBody);
417
- prepend([contentRows[parseInt(i.toString(), 10)]], conWrapBody);
418
- } else if (resWrapBody && conWrapBody && resWrapBody.children[parseInt(index.toString(), 10)] &&
419
- conWrapBody.children[parseInt(index.toString(), 10)]) {
420
- resWrapBody.insertBefore(resourceRows[parseInt(i.toString(), 10)], resWrapBody.children[parseInt(index.toString(), 10)]);
421
- conWrapBody.insertBefore(contentRows[parseInt(i.toString(), 10)], conWrapBody.children[parseInt(index.toString(), 10)]);
422
- }
423
- else {
424
- append([resourceRows[parseInt(i.toString(), 10)]], resWrapBody);
425
- append([contentRows[parseInt(i.toString(), 10)]], conWrapBody);
426
- }
427
- }
428
- append(eventRows, eventWrap);
429
- }
430
-
431
- private removeObsoleteRows(elements: HTMLElement[], currentGroupIndices: number[]): void {
432
- elements.forEach((element: HTMLElement) => {
433
- const groupIndex: number = parseInt(element.firstElementChild.getAttribute('data-group-index'), 10);
434
- if (currentGroupIndices.indexOf(groupIndex) < 0) {
435
- remove(element);
436
- }
437
- });
438
- }
439
-
440
- private updateHorizontalContent(conWrap: HTMLElement, resCollection: TdData[]): void {
441
- this.existingDataCollection = this.parent.resourceBase.expandedResources;
442
- this.parent.resourceBase.expandedResources = resCollection;
443
- const selectedEle: Element[] = this.parent.getSelectedCells();
444
- this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;
445
-
446
- const tbody: Element = conWrap.querySelector('tbody');
447
- const renderedRows: HTMLTableRowElement[] = Array.from(tbody.querySelectorAll('tr'));
448
-
449
- if (this.parent.currentView === 'Month') {
450
- this.updateMonthViewContent(conWrap, resCollection);
451
- } else {
452
- this.updateOtherViewContent(conWrap, resCollection, renderedRows);
453
- }
454
- }
455
-
456
- private updateMonthViewContent(conWrap: HTMLElement, resCollection: TdData[]): void {
457
- const renderedLength: number = conWrap.querySelectorAll(' tr').length;
458
- for (let i: number = 0; i < renderedLength; i++) {
459
- remove(conWrap.querySelector('tbody tr'));
460
- }
461
-
462
- if (this.parent.activeViewOptions.group.byDate) {
463
- this.parent.activeView.colLevels[0] = resCollection;
464
- } else {
465
- this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 2] = resCollection;
466
- }
467
-
468
- const contentRows: Element[] = this.parent.activeView.getContentRows();
469
- append(contentRows, conWrap.querySelector('tbody'));
470
- }
471
-
472
- private updateOtherViewContent(conWrap: HTMLElement, resCollection: TdData[], renderedRows: Element[]): void {
473
- const tbody: Element = conWrap.querySelector('tbody');
474
- const colGroup: Element = conWrap.querySelector('colgroup');
475
- const thead: Element = conWrap.querySelector('thead');
476
- const table: Element = conWrap.querySelector('table');
477
- this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1] = resCollection;
478
- const newGroupIndices: Set<number> = new Set(resCollection.map((data: TdData) => data.groupIndex));
479
- renderedRows.forEach((row: Element) => {
480
- const tdElements: NodeListOf<HTMLTableCellElement> = row.querySelectorAll('td');
481
- tdElements.forEach((td: HTMLTableCellElement) => {
482
- const groupIndex: number = parseInt(td.getAttribute('data-group-index'), 10);
483
- if (!newGroupIndices.has(groupIndex)) {
484
- td.remove();
485
- }
486
- });
487
- });
488
- const col: Element[] = [].slice.call(conWrap.querySelector('colgroup').children);
489
- for (let i: number = 0; i < col.length; i++) {
490
- remove(col[parseInt(i.toString(), 10)]);
491
- }
492
- resCollection.forEach(() => colGroup.appendChild(createElement('col')));
493
- const tHead: Element[] = [].slice.call(conWrap.querySelector('thead').children);
494
- for (let i: number = 0; i < tHead.length; i++) {
495
- remove(tHead[parseInt(i.toString(), 10)]);
496
- }
497
- thead.appendChild(this.parent.eventBase.createEventWrapper('', this.startIndex > 0 ? this.startIndex : 0));
498
- if (this.parent.activeViewOptions.timeScale.enable) {
499
- thead.appendChild(this.parent.eventBase.createEventWrapper('timeIndicator'));
500
- }
501
- prepend([thead], table);
502
- const contentRows: Element[] = this.parent.activeView.getContentRows();
503
- this.mergeNewTdData(tbody, contentRows);
504
- }
505
-
506
- private mergeNewTdData(tbody: Element, contentRows: Element[]): void {
507
- const existingRows: HTMLTableRowElement[] = Array.from(tbody.querySelectorAll<HTMLTableRowElement>('tr'));
508
-
509
- existingRows.forEach((existingRow: HTMLTableRowElement, rowIndex: number) => {
510
- if (rowIndex < contentRows.length) {
511
- const newRow: Element = contentRows[parseInt(rowIndex.toString(), 10)];
512
- const existingTds: HTMLTableCellElement[] = Array.from(existingRow.querySelectorAll<HTMLTableCellElement>('td'));
513
- const newTds: HTMLTableCellElement[] = Array.from(newRow.querySelectorAll<HTMLTableCellElement>('td'));
514
-
515
- newTds.forEach((newTd: HTMLTableCellElement) => {
516
- const newGroupIndex: number = parseInt(newTd.getAttribute('data-group-index').toString(), 10);
517
- let inserted: boolean = false;
518
-
519
- for (const existingTd of existingTds) {
520
- const existingGroupIndex: number = parseInt(existingTd.getAttribute('data-group-index').toString(), 10);
521
-
522
- if (newGroupIndex < existingGroupIndex) {
523
- existingRow.insertBefore(newTd, existingTd);
524
- inserted = true;
525
- break;
526
- }
527
- }
528
-
529
- if (!inserted) {
530
- existingRow.appendChild(newTd);
531
- }
532
- });
533
- }
534
- });
535
- }
536
-
537
- private getBufferCollection(startIndex: number, endIndex: number): TdData[] {
538
- return this.parent.resourceBase.expandedResources.slice(startIndex, endIndex);
539
- }
540
-
541
- private setTranslate(resWrap: HTMLElement, conWrap: HTMLElement, eventWrap: HTMLElement, timeIndicator?: HTMLElement): void {
542
- setStyleAttribute(resWrap.querySelector('table') as HTMLElement, { transform: `translateY(${this.translateY}px)` });
543
- setStyleAttribute(conWrap.querySelector('table') as HTMLElement, { transform: `translateY(${this.translateY}px)` });
544
- setStyleAttribute(eventWrap, { transform: `translateY(${this.translateY}px)` });
545
- if (!isNullOrUndefined(timeIndicator)) {
546
- setStyleAttribute(timeIndicator, { transform: `translateY(${this.translateY}px)` });
547
- }
548
- }
549
-
550
- public updateFocusedWorkCell(): void {
551
- if (this.focusedEle) {
552
- const date: number = parseInt(this.focusedEle.getAttribute('data-date'), 10);
553
- const groupIndex: number = parseInt(this.focusedEle.getAttribute('data-group-index'), 10);
554
- const ele: HTMLTableCellElement =
555
- this.parent.element.querySelector(`.${cls.WORK_CELLS_CLASS}[data-date="${date}"][data-group-index="${groupIndex}"]`);
556
- if (ele) {
557
- this.parent.addSelectedClass([ele], ele, true);
558
- }
559
- this.focusedEle = null;
560
- }
561
- }
562
-
563
- public setRenderedDates(resCollection: TdData[]): void {
564
- if (this.parent.currentView !== 'Month') {
565
- const dateCol: Date[] = resCollection.map((x: TdData) => x.date);
566
- this.parent.resourceBase.renderedResources.forEach((x: TdData) => x.renderDates = dateCol);
567
- } else {
568
- const dateCol: number[] = resCollection.map((x: TdData) => x.date.getDay());
569
- const renderDates: Date[] = this.parent.activeView.renderDates.filter((x: Date) => dateCol.indexOf(x.getDay()) >= 0);
570
- this.parent.resourceBase.renderedResources.forEach((x: TdData) => x.renderDates = renderDates);
571
- }
572
- }
573
-
574
- private setTabIndex(): void {
575
- const resColWrap: HTMLElement = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
576
- const resCells: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.RESOURCE_CELLS_CLASS));
577
- if (resCells && resColWrap) {
578
- resCells.forEach((element: HTMLElement) => {
579
- if (element.getBoundingClientRect().top >= resColWrap.getBoundingClientRect().top) {
580
- element.setAttribute('tabindex', '0');
581
- }
582
- });
583
- }
584
- const focusResCell: HTMLElement = this.parent.element.querySelector(`.${cls.RESOURCE_CELLS_CLASS}[tabindex="${0}"]`);
585
- if (this.isResourceCell && focusResCell) {
586
- focusResCell.focus();
587
- this.isResourceCell = false;
588
- }
589
- }
590
-
591
- public destroy(): void {
592
- this.removeEventListener();
593
- this.focusedEle = null;
594
- }
595
-
596
- }
@@ -1,14 +0,0 @@
1
- import { Schedule } from '../base/schedule';
2
- /**
3
- * Work cell interactions
4
- */
5
- export declare class WorkCellInteraction {
6
- private parent;
7
- constructor(parent: Schedule);
8
- cellMouseDown(e: Event): void;
9
- cellClick(e: Event & MouseEvent): void;
10
- cellDblClick(e: Event): void;
11
- private onHover;
12
- private isPreventAction;
13
- destroy(): void;
14
- }