@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,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
- }