@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,44 +0,0 @@
1
- import { ActionBaseArgs, ResizeEdges, DragEventArgs, ResizeEventArgs } from '../base/interface';
2
- import { Schedule } from '../base/schedule';
3
- import { MonthEvent } from '../event-renderer/month';
4
- import { VerticalEvent } from '../event-renderer/vertical-view';
5
- import { YearEvent } from '../event-renderer/year';
6
- /**
7
- * Base class for the common drag and resize related actions
8
- */
9
- export declare class ActionBase {
10
- parent: Schedule;
11
- actionObj: ActionBaseArgs;
12
- resizeEdges: ResizeEdges;
13
- scrollArgs: ActionBaseArgs;
14
- scrollEdges: ResizeEdges;
15
- monthEvent: MonthEvent;
16
- verticalEvent: VerticalEvent;
17
- yearEvent: YearEvent;
18
- daysVariation: number;
19
- private scrollEventArgs;
20
- constructor(parent: Schedule);
21
- getChangedData(multiData?: Record<string, any>[]): Record<string, any>;
22
- saveChangedData(eventArgs: DragEventArgs | ResizeEventArgs, isMultiSelect?: boolean): void;
23
- calculateIntervalTime(date: Date): Date;
24
- getContentAreaDimension(): Record<string, any>;
25
- getIndex(index: number): number;
26
- updateTimePosition(date: Date, multiData?: Record<string, any>[]): void;
27
- getResourceElements(table: HTMLTableCellElement[]): HTMLTableCellElement[];
28
- getOriginalElement(element: HTMLElement): HTMLElement[];
29
- createCloneElement(element: HTMLElement): HTMLElement;
30
- removeCloneElementClasses(): void;
31
- removeCloneElement(): void;
32
- getCursorElement(e: MouseEvent & TouchEvent): HTMLElement;
33
- autoScroll(): void;
34
- autoScrollValidation(): boolean;
35
- actionClass(type: string): void;
36
- updateScrollPosition(e: MouseEvent & TouchEvent): void;
37
- updateOriginalElement(cloneElement: HTMLElement): void;
38
- getUpdatedEvent(startTime: Date, endTime: Date, eventObj: Record<string, any>): Record<string, any>;
39
- dynamicYearlyEventsRendering(event: Record<string, any>, isResize?: boolean): void;
40
- renderDynamicElement(cellTd: HTMLElement | Element, element: HTMLElement, isAppointment?: boolean): void;
41
- createAppointmentElement(resIndex: number, innerText: string): HTMLElement;
42
- dynamicEventsRendering(event: Record<string, any>): void;
43
- destroy(): void;
44
- }
@@ -1,493 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { addClass, createElement, extend, isNullOrUndefined, closest, setStyleAttribute } from '@syncfusion/ej2-base';
3
- import { formatUnit, remove, removeClass } from '@syncfusion/ej2-base';
4
- import { ActionBaseArgs, ResizeEdges, DragEventArgs, ResizeEventArgs, TdData } from '../base/interface';
5
- import { Schedule } from '../base/schedule';
6
- import { CurrentAction } from '../base/type';
7
- import { MonthEvent } from '../event-renderer/month';
8
- import { VerticalEvent } from '../event-renderer/vertical-view';
9
- import { YearEvent } from '../event-renderer/year';
10
- import * as cls from '../base/css-constant';
11
- import * as util from '../base/util';
12
-
13
- /**
14
- * Base class for the common drag and resize related actions
15
- */
16
-
17
- export class ActionBase {
18
- public parent: Schedule;
19
- public actionObj: ActionBaseArgs;
20
- public resizeEdges: ResizeEdges;
21
- public scrollArgs: ActionBaseArgs;
22
- public scrollEdges: ResizeEdges;
23
- public monthEvent: MonthEvent;
24
- public verticalEvent: VerticalEvent;
25
- public yearEvent: YearEvent;
26
- public daysVariation: number = 0;
27
- private scrollEventArgs: MouseEvent & TouchEvent;
28
-
29
- constructor(parent: Schedule) {
30
- this.parent = parent;
31
- this.actionObj = {
32
- X: 0, Y: 0, groupIndex: 0, cellWidth: 0, cellHeight: 0, slotInterval: 0, interval: 0, actionIndex: 0,
33
- cloneElement: [], originalElement: [], action: null, isAllDay: null, excludeSelectors: null,
34
- index: 0, navigationInterval: null, scrollInterval: null
35
- };
36
- this.scrollArgs = { element: null, width: 0, height: 0 };
37
- this.resizeEdges = { left: false, right: false, top: false, bottom: false };
38
- this.scrollEdges = { left: false, right: false, top: false, bottom: false };
39
- }
40
-
41
- public getChangedData(multiData?: Record<string, any>[]): Record<string, any> {
42
- const eventObj: Record<string, any> = extend({}, this.actionObj.event, null, true) as Record<string, any>;
43
- eventObj[this.parent.eventFields.startTime] = this.actionObj.start;
44
- eventObj[this.parent.eventFields.endTime] = this.actionObj.end;
45
- if (!isNullOrUndefined(this.actionObj.isAllDay)) {
46
- eventObj[this.parent.eventFields.isAllDay] = this.actionObj.isAllDay;
47
- }
48
- if (this.parent.activeViewOptions.group.resources.length > 0) {
49
- const originalElement: HTMLElement[] = this.getOriginalElement(this.actionObj.element);
50
- if (originalElement) {
51
- let indexCol: number[] = originalElement.map((element: HTMLElement) => parseInt(element.getAttribute('data-group-index'), 10));
52
- if (indexCol.indexOf(this.actionObj.groupIndex) === -1 || (!isNullOrUndefined(multiData) && multiData.length > 0)) {
53
- const cloneIndex: number = parseInt(this.actionObj.clone.getAttribute('data-group-index'), 10);
54
- indexCol = indexCol.filter((index: number) => index !== cloneIndex);
55
- indexCol.push(this.actionObj.groupIndex);
56
- if (multiData && multiData.length > 0) {
57
- multiData.forEach((data: Record<string, any>) => {
58
- this.parent.resourceBase.getResourceData(data, this.actionObj.groupIndex, indexCol);
59
- });
60
- } else {
61
- this.parent.resourceBase.getResourceData(eventObj, this.actionObj.groupIndex, indexCol);
62
- }
63
- }
64
- }
65
- }
66
- return eventObj;
67
- }
68
-
69
- public saveChangedData(eventArgs: DragEventArgs | ResizeEventArgs, isMultiSelect: boolean = false): void {
70
- this.parent.activeEventData.event = this.actionObj.event;
71
- this.parent.currentAction = 'Save';
72
- let currentAction: CurrentAction;
73
- let eventsCollection: Record<string, any>[] = [eventArgs.data];
74
- if (isMultiSelect) {
75
- eventsCollection = (eventArgs as DragEventArgs).selectedData;
76
- }
77
- for (const eventObj of eventsCollection) {
78
- const isSameResource: boolean = (this.parent.activeViewOptions.group.resources.length > 0) ?
79
- parseInt(this.actionObj.element.getAttribute('data-group-index'), 10) === this.actionObj.groupIndex : true;
80
- if (+eventObj[this.parent.eventFields.startTime] === +this.actionObj.event[this.parent.eventFields.startTime] &&
81
- +eventObj[this.parent.eventFields.endTime] === +this.actionObj.event[this.parent.eventFields.endTime] && isSameResource) {
82
- this.parent.crudModule.crudObj.isCrudAction = false;
83
- return;
84
- }
85
-
86
- if (eventObj[this.parent.eventFields.recurrenceRule]) {
87
- const eveId: number = (eventObj[this.parent.eventFields.recurrenceID] || eventObj[this.parent.eventFields.id]) as number;
88
- if (eventObj[this.parent.eventFields.id] === eventObj[this.parent.eventFields.recurrenceID]) {
89
- eventObj[this.parent.eventFields.id] = this.parent.eventBase.getEventMaxID();
90
- currentAction = 'EditOccurrence';
91
- }
92
- if (this.parent.enableRecurrenceValidation
93
- && this.parent.eventWindow.editOccurrenceValidation(eveId, eventObj, this.actionObj.event)) {
94
- return;
95
- }
96
- } else {
97
- currentAction = null;
98
- }
99
- if (eventObj[this.parent.eventFields.startTimezone] || eventObj[this.parent.eventFields.endTimezone]) {
100
- this.parent.eventBase.timezoneConvert(eventObj);
101
- }
102
- this.parent.crudModule.saveEvent(eventObj, currentAction);
103
- }
104
- }
105
-
106
- public calculateIntervalTime(date: Date): Date {
107
- let dateInMS: number = util.resetTime(date).getTime();
108
- const startHour: Date = this.parent.activeView.getStartHour();
109
- const intervalInMS: number = util.MS_PER_MINUTE * this.actionObj.interval;
110
- dateInMS += (startHour.getHours() * 60 + startHour.getMinutes()) * util.MS_PER_MINUTE + startHour.getSeconds() * 1000;
111
- dateInMS = dateInMS + Math.floor((date.getTime() - dateInMS) / intervalInMS) * intervalInMS;
112
- return new Date(dateInMS);
113
- }
114
-
115
- public getContentAreaDimension(): Record<string, any> {
116
- const viewElement: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS) as HTMLElement;
117
- let trElement: HTMLElement[] = [].slice.call(viewElement.querySelector('tr').children);
118
- if (!this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.group.resources.length > 0 &&
119
- !this.parent.isAdaptive && !this.parent.enableAdaptiveUI && !this.parent.virtualScrollModule) {
120
- trElement = this.getResourceElements(trElement as HTMLTableCellElement[]);
121
- }
122
- const leftOffset: ClientRect = trElement[0].getBoundingClientRect();
123
- const rightOffset: ClientRect = trElement.slice(-1)[0].getBoundingClientRect();
124
- const viewDimension: Record<string, any> = {
125
- bottom: viewElement.scrollHeight - 5,
126
- left: this.parent.enableRtl ? rightOffset.left : leftOffset.left,
127
- right: this.parent.enableRtl ? leftOffset.right : rightOffset.right,
128
- top: 0,
129
- leftOffset: this.parent.enableRtl ? rightOffset.right : leftOffset.right,
130
- rightOffset: this.parent.enableRtl ? leftOffset.left : rightOffset.left
131
- };
132
- return viewDimension;
133
- }
134
-
135
- public getIndex(index: number): number {
136
- const contentElements: HTMLTableCellElement[] = [].slice.call(this.parent.getContentTable().querySelector('tr').children);
137
- const indexes: { [key: string]: number } = { minIndex: 0, maxIndex: contentElements.length - 1 };
138
- if (this.actionObj.action === 'resize' && this.parent.activeViewOptions.group.resources.length > 0 &&
139
- !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeView.isTimelineView()) {
140
- const groupElements: HTMLTableCellElement[] = this.getResourceElements(contentElements);
141
- indexes.minIndex = groupElements[0].cellIndex;
142
- indexes.maxIndex = groupElements.slice(-1)[0].cellIndex;
143
- }
144
- if (index < indexes.minIndex) {
145
- index = indexes.minIndex;
146
- }
147
- if (index > indexes.maxIndex) {
148
- index = indexes.maxIndex;
149
- }
150
- return index;
151
- }
152
-
153
- public updateTimePosition(date: Date, multiData?: Record<string, any>[]): void {
154
- let index: number = 0;
155
- for (const cloneElement of this.actionObj.cloneElement) {
156
- const timeElement: Element = cloneElement.querySelector('.' + cls.APPOINTMENT_TIME);
157
- if (timeElement) {
158
- let startTime: Date = this.actionObj.start;
159
- let endTime: Date = this.actionObj.end;
160
- if (multiData && multiData.length > 0) {
161
- startTime = multiData[parseInt(index.toString(), 10)][this.parent.eventFields.startTime] as Date;
162
- endTime = multiData[parseInt(index.toString(), 10)][this.parent.eventFields.endTime] as Date;
163
- }
164
- timeElement.innerHTML = this.parent.getTimeString(startTime) + ' - ' +
165
- this.parent.getTimeString(endTime);
166
- }
167
- index++;
168
- }
169
- if (!this.parent.activeViewOptions.timeScale.enable || !this.parent.isAdaptive || this.parent.currentView === 'Month' ||
170
- this.parent.currentView === 'TimelineMonth') {
171
- return;
172
- }
173
- let timeIndicator: HTMLElement = this.parent.element.querySelector('.' + cls.CLONE_TIME_INDICATOR_CLASS) as HTMLElement;
174
- if (!timeIndicator) {
175
- timeIndicator = createElement('div', { className: cls.CLONE_TIME_INDICATOR_CLASS });
176
- const wrapperClass: string = this.parent.activeView.isTimelineView() ? cls.DATE_HEADER_WRAP_CLASS : cls.TIME_CELLS_WRAP_CLASS;
177
- this.parent.element.querySelector('.' + wrapperClass).appendChild(timeIndicator);
178
- }
179
- timeIndicator.innerHTML = this.parent.getTimeString(date);
180
- let offsetValue: number = 0;
181
- if (this.parent.activeView.isTimelineView()) {
182
- if (this.parent.enableRtl) {
183
- const rightValue: number = parseInt(this.actionObj.clone.style.right, 10);
184
- offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.left ?
185
- rightValue + this.actionObj.clone.offsetWidth : rightValue;
186
- timeIndicator.style.right = formatUnit(offsetValue);
187
- } else {
188
- const leftValue: number = parseInt(this.actionObj.clone.style.left, 10);
189
- offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.left ?
190
- leftValue : leftValue + this.actionObj.clone.offsetWidth;
191
- timeIndicator.style.left = formatUnit(offsetValue);
192
- }
193
- } else {
194
- offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.top ? this.actionObj.clone.offsetTop :
195
- this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight;
196
- timeIndicator.style.top = formatUnit(offsetValue);
197
- }
198
- }
199
-
200
- public getResourceElements(table: HTMLTableCellElement[]): HTMLTableCellElement[] {
201
- return table.filter((element: HTMLTableCellElement) =>
202
- parseInt(element.getAttribute('data-group-index'), 10) === this.actionObj.groupIndex);
203
- }
204
-
205
- public getOriginalElement(element: HTMLElement): HTMLElement[] {
206
- let originalElement: HTMLElement[];
207
- const guid: string = element.getAttribute('data-guid');
208
- const isMorePopup: boolean = element.offsetParent && element.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS);
209
- if (isMorePopup || this.parent.activeView.isTimelineView() || (this.actionObj.action !== 'resize' && this.parent.virtualScrollModule)) {
210
- originalElement = [].slice.call(this.parent.element.querySelectorAll('[data-guid="' + guid + '"]'));
211
- } else {
212
- const tr: HTMLElement = closest(element, 'tr') as HTMLElement;
213
- if (tr) {
214
- originalElement = [].slice.call(tr.querySelectorAll('[data-guid="' + guid + '"]'));
215
- }
216
- }
217
- return originalElement;
218
- }
219
-
220
- public createCloneElement(element: HTMLElement): HTMLElement {
221
- const cloneWrapper: HTMLElement = document.createElement('div');
222
- cloneWrapper.appendChild(element.cloneNode(true));
223
- const cloneElement: HTMLElement = cloneWrapper.children[0] as HTMLElement;
224
- const cloneClassLists: string[] = [cls.CLONE_ELEMENT_CLASS];
225
- cloneClassLists.push((this.actionObj.action === 'drag') ? cls.DRAG_CLONE_CLASS : cls.RESIZE_CLONE_CLASS);
226
- if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineMonth') {
227
- cloneClassLists.push(cls.MONTH_CLONE_ELEMENT_CLASS);
228
- }
229
- addClass([cloneElement], cloneClassLists);
230
- addClass([element], cls.EVENT_ACTION_CLASS);
231
- if (!isNullOrUndefined(element.parentElement)) {
232
- element.parentElement.appendChild(cloneElement);
233
- }
234
- cloneElement.style.width = formatUnit(cloneElement.offsetWidth - 2);
235
- const dragElement: HTMLElement = document.querySelector(this.parent.eventDragArea);
236
- if (this.parent.eventDragArea && this.actionObj.action === 'drag' && dragElement) {
237
- dragElement.appendChild(cloneElement);
238
- }
239
- setStyleAttribute(cloneElement, { border: '0px' });
240
- return cloneElement;
241
- }
242
-
243
- public removeCloneElementClasses(): void {
244
- let elements: HTMLElement[] = this.actionObj.originalElement;
245
- if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineYear' ||
246
- this.parent.currentView === 'Day' || this.parent.currentView === 'Week' || this.parent.currentView === 'WorkWeek') {
247
- elements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.EVENT_ACTION_CLASS));
248
- }
249
- removeClass(elements, cls.EVENT_ACTION_CLASS);
250
- }
251
-
252
- public removeCloneElement(): void {
253
- this.actionObj.originalElement = [];
254
- const dynamicEle: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.e-dynamic-clone'));
255
- for (const cloneEle of dynamicEle) {
256
- remove(cloneEle);
257
- }
258
- for (const cloneElement of this.actionObj.cloneElement) {
259
- if (!isNullOrUndefined(cloneElement.parentNode)) { remove(cloneElement); }
260
- }
261
- this.actionObj.cloneElement = [];
262
- const timeIndicator: Element = this.parent.element.querySelector('.' + cls.CLONE_TIME_INDICATOR_CLASS);
263
- if (timeIndicator) {
264
- remove(timeIndicator);
265
- }
266
- }
267
-
268
- public getCursorElement(e: MouseEvent & TouchEvent): HTMLElement {
269
- const pages: (MouseEvent & TouchEvent) | Touch = this.parent.eventBase.getPageCoordinates(e);
270
- return document.elementFromPoint(pages.clientX, pages.clientY) as HTMLElement;
271
- }
272
-
273
- public autoScroll(): void {
274
- const parent: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS) as HTMLElement;
275
- const yIsScrollable: boolean = parent.offsetHeight <= parent.scrollHeight;
276
- const xIsScrollable: boolean = parent.offsetWidth <= parent.scrollWidth;
277
- const yInBounds: boolean = yIsScrollable && parent.scrollTop >= 0 && parent.scrollTop + parent.offsetHeight <= parent.scrollHeight;
278
- let xInBounds: boolean = xIsScrollable && parent.scrollLeft >= 0 && parent.scrollLeft + parent.offsetWidth <= parent.scrollWidth;
279
- if (this.actionObj.action === 'resize' && this.scrollEdges.right && (parent.scrollLeft + parent.offsetWidth) > parent.scrollWidth) {
280
- const tdCollections: number = ([].slice.call((this.parent.getContentTable().querySelector('tr') as HTMLTableRowElement).children)).length - 1;
281
- const cellIndex: number = Math.ceil((this.actionObj.clone.offsetLeft + (this.actionObj.clone.offsetWidth)) /
282
- this.actionObj.cellWidth);
283
- xInBounds = cellIndex === tdCollections;
284
- }
285
- if (yInBounds && (this.scrollEdges.top || this.scrollEdges.bottom)) {
286
- parent.scrollTop += this.scrollEdges.top ? -this.actionObj.scroll.scrollBy : this.actionObj.scroll.scrollBy;
287
- if (this.actionObj.action === 'resize') {
288
- if (parent.scrollHeight !== parent.offsetHeight + parent.scrollTop && parent.scrollTop > 0) {
289
- this.actionObj.Y += this.scrollEdges.top ? this.actionObj.scroll.scrollBy : -this.actionObj.scroll.scrollBy;
290
- }
291
- }
292
- }
293
- if (xInBounds && (this.scrollEdges.left || this.scrollEdges.right)) {
294
- parent.scrollLeft += this.scrollEdges.left ? -this.actionObj.scroll.scrollBy : this.actionObj.scroll.scrollBy;
295
- if (this.actionObj.action === 'resize') {
296
- if (parent.scrollWidth !== parent.offsetWidth + parent.scrollLeft && parent.scrollLeft > 0) {
297
- this.actionObj.X += this.scrollEdges.left ? this.actionObj.scroll.scrollBy : -this.actionObj.scroll.scrollBy;
298
- }
299
- }
300
- }
301
- }
302
-
303
- public autoScrollValidation(): boolean {
304
- if (!this.actionObj.scroll.enable) {
305
- return false;
306
- }
307
- const res: ResizeEdges = this.parent.boundaryValidation(this.actionObj.pageY, this.actionObj.pageX);
308
- this.scrollEdges = res;
309
- return res.bottom || res.top || res.left || res.right;
310
- }
311
-
312
- public actionClass(type: string): void {
313
- if (type === 'addClass') {
314
- addClass([this.parent.element], cls.EVENT_ACTION_CLASS);
315
- } else {
316
- removeClass([this.parent.element], cls.EVENT_ACTION_CLASS);
317
- }
318
- }
319
-
320
- public updateScrollPosition(e: MouseEvent & TouchEvent): void {
321
- this.scrollEventArgs = e;
322
- if (this.actionObj.scroll.enable && isNullOrUndefined(this.actionObj.scrollInterval)) {
323
- this.actionObj.scrollInterval = window.setInterval(
324
- () => {
325
- if (this.autoScrollValidation() && !this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {
326
- if (this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.group.resources.length > 0
327
- && this.actionObj.groupIndex < 0) {
328
- return;
329
- }
330
- this.autoScroll();
331
- if (this.actionObj.action === 'drag') {
332
- this.parent.dragAndDropModule.updateDraggingDateTime(this.scrollEventArgs);
333
- } else {
334
- this.parent.resizeModule.updateResizingDirection(this.scrollEventArgs);
335
- }
336
- }
337
- },
338
- this.actionObj.scroll.timeDelay);
339
- }
340
- }
341
-
342
- public updateOriginalElement(cloneElement: HTMLElement): void {
343
- let query: string = '[data-id="' + cloneElement.getAttribute('data-id') + '"]';
344
- if (this.parent.activeViewOptions.group.resources.length > 0) {
345
- query = query.concat('[data-group-index = "' + cloneElement.getAttribute('data-group-index') + '"]');
346
- }
347
- if (cloneElement.hasAttribute('data-guid')) {
348
- query += '[data-guid="' + cloneElement.getAttribute('data-guid') + '"]';
349
- }
350
- const elements: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll(query));
351
- addClass(elements, cls.EVENT_ACTION_CLASS);
352
- const eventWrappers: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CLONE_ELEMENT_CLASS));
353
- removeClass(eventWrappers, cls.EVENT_ACTION_CLASS);
354
- }
355
-
356
- public getUpdatedEvent(startTime: Date, endTime: Date, eventObj: Record<string, any>): Record<string, any> {
357
- const event: Record<string, any> = JSON.parse(JSON.stringify(eventObj));
358
- event[this.parent.eventFields.startTime] = startTime;
359
- event[this.parent.eventFields.endTime] = endTime;
360
- return event;
361
- }
362
-
363
- public dynamicYearlyEventsRendering(event: Record<string, any>, isResize: boolean = false): void {
364
- if (!isNullOrUndefined(this.parent.eventDragArea)) {
365
- return;
366
- }
367
- let appWidth: number = this.actionObj.cellWidth - 7;
368
- if (isResize && (this.resizeEdges.left || this.resizeEdges.right)) {
369
- appWidth = this.actionObj.cellWidth * (event.count as number);
370
- }
371
- if (!isResize && (
372
- this.parent.activeViewOptions.orientation === 'Horizontal' && this.parent.activeViewOptions.group.resources.length === 0)) {
373
- const eventObj: Record<string, any> = this.yearEvent.isSpannedEvent(event, event[this.parent.eventFields.startTime]);
374
- if ((eventObj[this.parent.eventFields.startTime] as Date).getTime() ===
375
- (eventObj[this.parent.eventFields.endTime] as Date).getTime()) {
376
- (<{ [key: string]: number }>eventObj.isSpanned).count = 1;
377
- }
378
- appWidth = (<{ [key: string]: number }>eventObj.isSpanned).count * this.actionObj.cellWidth;
379
- }
380
- if (!isResize && this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length !== 0) {
381
- const eventObj: Record<string, any> = this.yearEvent.isSpannedEvent(event, event[this.parent.eventFields.startTime]);
382
- appWidth = eventObj.isSpanned.count * this.actionObj.cellWidth;
383
- }
384
- const appointmentElement: HTMLElement =
385
- this.createAppointmentElement(this.actionObj.groupIndex, event[this.parent.eventFields.subject] as string);
386
- appointmentElement.setAttribute('drag', 'true');
387
- addClass([appointmentElement], cls.CLONE_ELEMENT_CLASS);
388
- setStyleAttribute(appointmentElement, {
389
- 'width': appWidth + 'px', 'border': '0px', 'pointer-events': 'none',
390
- 'position': 'absolute', 'overflow': 'hidden', 'padding': '3px'
391
- });
392
- if (this.actionObj.clone.style.backgroundColor !== '') {
393
- setStyleAttribute(appointmentElement, { 'backgroundColor': this.actionObj.clone.style.backgroundColor });
394
- }
395
- const date: number = util.resetTime(event[this.parent.eventFields.startTime] as Date).getTime();
396
- let query: string = '.' + cls.WORK_CELLS_CLASS + '[data-date="' + date + '"]';
397
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
398
- query = '.' + cls.WORK_CELLS_CLASS + '[data-date="' + date + '"][data-group-index="' + this.actionObj.groupIndex + '"]';
399
- }
400
- const cellTd: Element = this.parent.element.querySelector(query);
401
- if (isNullOrUndefined(cellTd)) {
402
- return;
403
- }
404
- if (isResize) {
405
- const dateHeader: HTMLElement = cellTd.querySelector('.' + cls.DATE_HEADER_CLASS) as HTMLElement;
406
- let appHeight: number = this.actionObj.cellHeight * (event.count as number) -
407
- (dateHeader ? dateHeader.offsetHeight : 0) - 7;
408
- if (this.resizeEdges.right || this.resizeEdges.left) {
409
- appHeight = parseInt(this.actionObj.clone.style.height, 10);
410
- }
411
- setStyleAttribute(appointmentElement, { 'height': appHeight + 'px' });
412
- }
413
- this.renderDynamicElement(cellTd, appointmentElement, true);
414
- this.actionObj.cloneElement.push(appointmentElement);
415
- }
416
-
417
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
418
- public renderDynamicElement(cellTd: HTMLElement | Element, element: HTMLElement, isAppointment: boolean = false): void {
419
- if (cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {
420
- cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(element);
421
- } else {
422
- const wrapper: HTMLElement = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });
423
- wrapper.appendChild(element);
424
- cellTd.appendChild(wrapper);
425
- }
426
- }
427
-
428
- public createAppointmentElement(resIndex: number, innerText: string): HTMLElement {
429
- const appointmentWrapper: HTMLElement = createElement('div', {
430
- className: cls.APPOINTMENT_CLASS,
431
- innerHTML: innerText
432
- });
433
- if (this.parent.activeViewOptions.group.resources.length > 0) {
434
- appointmentWrapper.setAttribute('data-group-index', resIndex.toString());
435
- }
436
- return appointmentWrapper;
437
- }
438
-
439
- public dynamicEventsRendering(event: Record<string, any>): void {
440
- if (!isNullOrUndefined(this.parent.eventDragArea)) {
441
- return;
442
- }
443
- let dateRender: Date[] = this.parent.activeView.renderDates;
444
- let workCells: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));
445
- let workDays: number[] = this.parent.activeViewOptions.workDays;
446
- let groupOrder: string[];
447
- if (this.parent.activeViewOptions.group.resources.length > 0) {
448
- const renderedResource: TdData[] = this.parent.virtualScrollModule && this.parent.virtualScrollModule.isHorizontalScroll ?
449
- this.parent.resourceBase.renderedResources : this.parent.resourceBase.lastResourceLevel;
450
- const resources: TdData[] = renderedResource.
451
- filter((res: TdData) => res.groupIndex === this.actionObj.groupIndex);
452
- dateRender = resources[0].renderDates;
453
- const elementSelector: string = `.${cls.WORK_CELLS_CLASS}[data-group-index="${this.actionObj.groupIndex}"]`;
454
- workCells = [].slice.call(this.parent.element.querySelectorAll(elementSelector));
455
- workDays = resources[0].workDays;
456
- groupOrder = resources[0].groupOrder;
457
- }
458
- this.monthEvent.dateRender = dateRender;
459
- this.monthEvent.getSlotDates(workDays);
460
- if (this.resizeEdges.left || this.resizeEdges.right) {
461
- const eventWrappers: HTMLElement[] = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CLONE_ELEMENT_CLASS));
462
- for (const wrapper of eventWrappers) {
463
- remove(wrapper);
464
- }
465
- }
466
- const spannedEvents: Record<string, any>[] = this.monthEvent.splitEvent(event, dateRender);
467
- for (const event of spannedEvents) {
468
- const day: number = this.parent.getIndexOfDate(dateRender, util.resetTime(event[this.monthEvent.fields.startTime] as Date));
469
- const diffInDays: number = (event.data as Record<string, any>).count as number;
470
- const appWidth: number = (diffInDays * this.actionObj.cellWidth) - 7;
471
- const appointmentElement: HTMLElement = this.monthEvent.createAppointmentElement(event, this.actionObj.groupIndex, true);
472
- appointmentElement.setAttribute('drag', 'true');
473
- addClass([appointmentElement], cls.CLONE_ELEMENT_CLASS);
474
- this.monthEvent.applyResourceColor(appointmentElement, event, 'backgroundColor', groupOrder);
475
- setStyleAttribute(appointmentElement, { 'width': appWidth + 'px', 'border': '0px', 'pointer-events': 'none' });
476
- const cellTd: Element = workCells[parseInt(day.toString(), 10)];
477
- if (cellTd) {
478
- this.monthEvent.renderElement(cellTd, appointmentElement, true);
479
- this.actionObj.cloneElement.push(appointmentElement);
480
- }
481
- }
482
- }
483
-
484
- public destroy(): void {
485
- if (!this.parent || this.parent && this.parent.isDestroyed) {
486
- return;
487
- }
488
- this.actionObj = {};
489
- this.scrollArgs = {};
490
- this.resizeEdges = { left: false, right: false, top: false, bottom: false };
491
- this.scrollEdges = { left: false, right: false, top: false, bottom: false };
492
- }
493
- }
@@ -1,41 +0,0 @@
1
- import { CrudAction } from '../base/interface';
2
- import { ReturnType, CurrentAction } from '../base/type';
3
- import { Schedule } from '../base/schedule';
4
- /**
5
- * Schedule CRUD operations
6
- */
7
- export declare class Crud {
8
- private parent;
9
- crudObj: CrudAction;
10
- constructor(parent: Schedule);
11
- private getQuery;
12
- private getTable;
13
- refreshDataManager(): void;
14
- private dataManagerSuccess;
15
- dataManagerFailure(e: ReturnType): void;
16
- refreshProcessedData(isVirtualScrollAction?: boolean, dynamicEvents?: Record<string, any>[]): void;
17
- private refreshData;
18
- private processAddEvent;
19
- private processSaveEvent;
20
- private processDeleteEvent;
21
- addEvent(eventData: Record<string, any> | Record<string, any>[]): void;
22
- saveEvent(eventData: Record<string, any> | Record<string, any>[], action: CurrentAction): void;
23
- deleteEvent(eventData: string | number | Record<string, any> | Record<string, any>[], action: CurrentAction): void;
24
- private processOccurrences;
25
- private processFollowSeries;
26
- private processEntireSeries;
27
- private processDelete;
28
- private processSave;
29
- private getParentEvent;
30
- private excludeDateCheck;
31
- private processRecurrenceRule;
32
- private getUpdatedRecurrenceRule;
33
- private isBlockEvent;
34
- /**
35
- * To destroy the crud module.
36
- *
37
- * @returns {void}
38
- * @private
39
- */
40
- destroy(): void;
41
- }