@syncfusion/ej2-gantt 19.4.55 → 20.1.47-1460716

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 (212) hide show
  1. package/CHANGELOG.md +1072 -1047
  2. package/README.md +75 -75
  3. package/dist/ej2-gantt.umd.min.js +1 -10
  4. package/dist/ej2-gantt.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-gantt.es2015.js +341 -240
  6. package/dist/es6/ej2-gantt.es2015.js.map +1 -1
  7. package/dist/es6/ej2-gantt.es5.js +713 -598
  8. package/dist/es6/ej2-gantt.es5.js.map +1 -1
  9. package/dist/global/ej2-gantt.min.js +1 -10
  10. package/dist/global/ej2-gantt.min.js.map +1 -1
  11. package/dist/global/index.d.ts +0 -9
  12. package/dist/ts/components.ts +4 -0
  13. package/dist/ts/gantt/actions/actions.ts +18 -0
  14. package/dist/ts/gantt/actions/cell-edit.ts +606 -0
  15. package/dist/ts/gantt/actions/chart-scroll.ts +167 -0
  16. package/dist/ts/gantt/actions/column-menu.ts +35 -0
  17. package/dist/ts/gantt/actions/column-reorder.ts +52 -0
  18. package/dist/ts/gantt/actions/column-resize.ts +52 -0
  19. package/dist/ts/gantt/actions/connector-line-edit.ts +829 -0
  20. package/dist/ts/gantt/actions/context-menu.ts +754 -0
  21. package/dist/ts/gantt/actions/day-markers.ts +80 -0
  22. package/dist/ts/gantt/actions/dependency.ts +692 -0
  23. package/dist/ts/gantt/actions/dialog-edit.ts +2208 -0
  24. package/dist/ts/gantt/actions/edit.ts +3499 -0
  25. package/dist/ts/gantt/actions/excel-export.ts +61 -0
  26. package/dist/ts/gantt/actions/filter.ts +302 -0
  27. package/dist/ts/gantt/actions/keyboard.ts +306 -0
  28. package/dist/ts/gantt/actions/pdf-export.ts +214 -0
  29. package/dist/ts/gantt/actions/rowdragdrop.ts +839 -0
  30. package/dist/ts/gantt/actions/selection.ts +536 -0
  31. package/dist/ts/gantt/actions/sort.ts +98 -0
  32. package/dist/ts/gantt/actions/taskbar-edit.ts +1940 -0
  33. package/dist/ts/gantt/actions/toolbar.ts +489 -0
  34. package/dist/ts/gantt/actions/virtual-scroll.ts +60 -0
  35. package/dist/ts/gantt/base/common.ts +9 -0
  36. package/dist/ts/gantt/base/constant.ts +13 -0
  37. package/dist/ts/gantt/base/css-constants.ts +148 -0
  38. package/dist/ts/gantt/base/date-processor.ts +1257 -0
  39. package/dist/ts/gantt/base/enum.ts +372 -0
  40. package/dist/ts/gantt/base/gantt-chart.ts +1248 -0
  41. package/dist/ts/gantt/base/gantt.ts +4069 -0
  42. package/dist/ts/gantt/base/interface.ts +955 -0
  43. package/dist/ts/gantt/base/splitter.ts +174 -0
  44. package/dist/ts/gantt/base/task-processor.ts +2217 -0
  45. package/dist/ts/gantt/base/tree-grid.ts +694 -0
  46. package/dist/ts/gantt/base/utils.ts +208 -0
  47. package/dist/ts/gantt/export/export-helper.ts +552 -0
  48. package/dist/ts/gantt/export/pdf-base/dictionary.ts +152 -0
  49. package/dist/ts/gantt/export/pdf-base/pdf-borders.ts +277 -0
  50. package/dist/ts/gantt/export/pdf-base/pdf-grid-table.ts +901 -0
  51. package/dist/ts/gantt/export/pdf-base/pdf-style/gantt-theme.ts +131 -0
  52. package/dist/ts/gantt/export/pdf-base/pdf-style/style.ts +91 -0
  53. package/dist/ts/gantt/export/pdf-base/treegrid-layouter.ts +414 -0
  54. package/dist/ts/gantt/export/pdf-connector-line.ts +422 -0
  55. package/dist/ts/gantt/export/pdf-gantt.ts +282 -0
  56. package/dist/ts/gantt/export/pdf-taskbar.ts +395 -0
  57. package/dist/ts/gantt/export/pdf-timeline.ts +202 -0
  58. package/dist/ts/gantt/export/pdf-treegrid.ts +406 -0
  59. package/dist/ts/gantt/models/add-dialog-field-settings.ts +33 -0
  60. package/dist/ts/gantt/models/column.ts +464 -0
  61. package/dist/ts/gantt/models/day-working-time.ts +22 -0
  62. package/dist/ts/gantt/models/edit-dialog-field-settings.ts +33 -0
  63. package/dist/ts/gantt/models/edit-settings.ts +79 -0
  64. package/dist/ts/gantt/models/event-marker.ts +27 -0
  65. package/dist/ts/gantt/models/filter-settings.ts +53 -0
  66. package/dist/ts/gantt/models/holiday.ts +34 -0
  67. package/dist/ts/gantt/models/label-settings.ts +30 -0
  68. package/dist/ts/gantt/models/models.ts +36 -0
  69. package/dist/ts/gantt/models/resource-fields.ts +38 -0
  70. package/dist/ts/gantt/models/search-settings.ts +77 -0
  71. package/dist/ts/gantt/models/selection-settings.ts +56 -0
  72. package/dist/ts/gantt/models/sort-settings.ts +50 -0
  73. package/dist/ts/gantt/models/splitter-settings.ts +47 -0
  74. package/dist/ts/gantt/models/task-fields.ts +171 -0
  75. package/dist/ts/gantt/models/timeline-settings.ts +112 -0
  76. package/dist/ts/gantt/models/tooltip-settings.ts +46 -0
  77. package/dist/ts/gantt/renderer/chart-rows.ts +1838 -0
  78. package/dist/ts/gantt/renderer/connector-line.ts +1025 -0
  79. package/dist/ts/gantt/renderer/edit-tooltip.ts +228 -0
  80. package/dist/ts/gantt/renderer/event-marker.ts +96 -0
  81. package/dist/ts/gantt/renderer/nonworking-day.ts +205 -0
  82. package/dist/ts/gantt/renderer/render.ts +5 -0
  83. package/dist/ts/gantt/renderer/timeline.ts +1397 -0
  84. package/dist/ts/gantt/renderer/tooltip.ts +450 -0
  85. package/dist/ts/gantt/renderer/virtual-content-render.ts +50 -0
  86. package/license +9 -9
  87. package/package.json +80 -80
  88. package/src/gantt/actions/cell-edit.js +2 -1
  89. package/src/gantt/actions/dialog-edit.js +2 -1
  90. package/src/gantt/actions/edit.js +36 -9
  91. package/src/gantt/actions/rowdragdrop.js +37 -15
  92. package/src/gantt/actions/selection.js +3 -2
  93. package/src/gantt/actions/taskbar-edit.js +24 -24
  94. package/src/gantt/base/date-processor.js +0 -1
  95. package/src/gantt/base/gantt-chart.js +36 -5
  96. package/src/gantt/base/gantt-model.d.ts +779 -779
  97. package/src/gantt/base/gantt.d.ts +27 -27
  98. package/src/gantt/base/gantt.js +35 -76
  99. package/src/gantt/base/splitter.js +1 -0
  100. package/src/gantt/base/task-processor.js +13 -13
  101. package/src/gantt/base/tree-grid.js +3 -1
  102. package/src/gantt/export/pdf-base/treegrid-layouter.js +13 -13
  103. package/src/gantt/export/pdf-connector-line.js +11 -11
  104. package/src/gantt/export/pdf-gantt.js +24 -24
  105. package/src/gantt/export/pdf-taskbar.js +11 -11
  106. package/src/gantt/export/pdf-treegrid.js +13 -13
  107. package/src/gantt/models/add-dialog-field-settings-model.d.ts +21 -21
  108. package/src/gantt/models/add-dialog-field-settings.js +19 -19
  109. package/src/gantt/models/day-working-time-model.d.ts +11 -11
  110. package/src/gantt/models/day-working-time.js +19 -19
  111. package/src/gantt/models/edit-dialog-field-settings-model.d.ts +21 -21
  112. package/src/gantt/models/edit-dialog-field-settings.js +19 -19
  113. package/src/gantt/models/edit-settings-model.d.ts +50 -50
  114. package/src/gantt/models/edit-settings.js +19 -19
  115. package/src/gantt/models/event-marker-model.d.ts +16 -16
  116. package/src/gantt/models/event-marker.js +19 -19
  117. package/src/gantt/models/filter-settings-model.d.ts +34 -34
  118. package/src/gantt/models/filter-settings.js +19 -19
  119. package/src/gantt/models/holiday-model.d.ts +21 -21
  120. package/src/gantt/models/holiday.js +19 -19
  121. package/src/gantt/models/label-settings-model.d.ts +16 -16
  122. package/src/gantt/models/label-settings.js +19 -19
  123. package/src/gantt/models/resource-fields-model.d.ts +21 -21
  124. package/src/gantt/models/resource-fields.js +19 -19
  125. package/src/gantt/models/search-settings-model.d.ts +56 -56
  126. package/src/gantt/models/search-settings.js +19 -19
  127. package/src/gantt/models/selection-settings-model.d.ts +35 -35
  128. package/src/gantt/models/selection-settings.js +19 -19
  129. package/src/gantt/models/sort-settings-model.d.ts +24 -24
  130. package/src/gantt/models/sort-settings.js +19 -19
  131. package/src/gantt/models/splitter-settings-model.d.ts +30 -30
  132. package/src/gantt/models/splitter-settings.js +19 -19
  133. package/src/gantt/models/task-fields-model.d.ts +110 -110
  134. package/src/gantt/models/task-fields.js +19 -19
  135. package/src/gantt/models/timeline-settings-model.d.ts +71 -71
  136. package/src/gantt/models/timeline-settings.js +19 -19
  137. package/src/gantt/models/tooltip-settings-model.d.ts +26 -26
  138. package/src/gantt/models/tooltip-settings.js +19 -19
  139. package/src/gantt/renderer/chart-rows.js +49 -37
  140. package/src/gantt/renderer/connector-line.js +22 -18
  141. package/src/gantt/renderer/event-marker.js +1 -0
  142. package/src/gantt/renderer/nonworking-day.js +13 -6
  143. package/src/gantt/renderer/timeline.d.ts +1 -0
  144. package/src/gantt/renderer/timeline.js +51 -12
  145. package/src/gantt/renderer/tooltip.js +11 -3
  146. package/styles/bootstrap-dark.css +442 -427
  147. package/styles/bootstrap.css +442 -433
  148. package/styles/bootstrap4.css +454 -479
  149. package/styles/bootstrap5-dark.css +457 -433
  150. package/styles/bootstrap5.css +457 -433
  151. package/styles/fabric-dark.css +438 -421
  152. package/styles/fabric.css +445 -428
  153. package/styles/fluent-dark.css +1938 -0
  154. package/styles/fluent-dark.scss +1 -0
  155. package/styles/fluent.css +1938 -0
  156. package/styles/fluent.scss +1 -0
  157. package/styles/gantt/_all.scss +2 -2
  158. package/styles/gantt/_bootstrap-dark-definition.scss +210 -156
  159. package/styles/gantt/_bootstrap-definition.scss +211 -157
  160. package/styles/gantt/_bootstrap4-definition.scss +213 -158
  161. package/styles/gantt/_bootstrap5-definition.scss +215 -162
  162. package/styles/gantt/_fabric-dark-definition.scss +211 -157
  163. package/styles/gantt/_fabric-definition.scss +211 -157
  164. package/styles/gantt/_fluent-dark-definition.scss +1 -0
  165. package/styles/gantt/_fluent-definition.scss +215 -162
  166. package/styles/gantt/_fusionnew-definition.scss +214 -0
  167. package/styles/gantt/_highcontrast-definition.scss +211 -157
  168. package/styles/gantt/_highcontrast-light-definition.scss +211 -157
  169. package/styles/gantt/_layout.scss +1446 -1027
  170. package/styles/gantt/_material-dark-definition.scss +212 -157
  171. package/styles/gantt/_material-definition.scss +212 -157
  172. package/styles/gantt/_material3-definition.scss +215 -0
  173. package/styles/gantt/_tailwind-definition.scss +215 -161
  174. package/styles/gantt/_theme.scss +702 -668
  175. package/styles/gantt/bootstrap-dark.css +442 -427
  176. package/styles/gantt/bootstrap.css +442 -433
  177. package/styles/gantt/bootstrap4.css +454 -479
  178. package/styles/gantt/bootstrap5-dark.css +457 -433
  179. package/styles/gantt/bootstrap5.css +457 -433
  180. package/styles/gantt/fabric-dark.css +438 -421
  181. package/styles/gantt/fabric.css +445 -428
  182. package/styles/gantt/fluent-dark.css +1938 -0
  183. package/styles/gantt/fluent-dark.scss +22 -0
  184. package/styles/gantt/fluent.css +1938 -0
  185. package/styles/gantt/fluent.scss +22 -0
  186. package/styles/gantt/highcontrast-light.css +405 -405
  187. package/styles/gantt/highcontrast.css +444 -456
  188. package/styles/gantt/icons/_bootstrap-dark.scss +124 -113
  189. package/styles/gantt/icons/_bootstrap.scss +124 -113
  190. package/styles/gantt/icons/_bootstrap4.scss +124 -113
  191. package/styles/gantt/icons/_bootstrap5.scss +124 -112
  192. package/styles/gantt/icons/_fabric-dark.scss +124 -112
  193. package/styles/gantt/icons/_fabric.scss +124 -112
  194. package/styles/gantt/icons/_fluent-dark.scss +1 -0
  195. package/styles/gantt/icons/_fluent.scss +124 -112
  196. package/styles/gantt/icons/_fusionnew.scss +120 -0
  197. package/styles/gantt/icons/_highcontrast.scss +124 -112
  198. package/styles/gantt/icons/_material-dark.scss +124 -112
  199. package/styles/gantt/icons/_material.scss +124 -112
  200. package/styles/gantt/icons/_material3.scss +124 -0
  201. package/styles/gantt/icons/_tailwind-dark.scss +124 -113
  202. package/styles/gantt/icons/_tailwind.scss +124 -113
  203. package/styles/gantt/material-dark.css +446 -417
  204. package/styles/gantt/material.css +445 -419
  205. package/styles/gantt/tailwind-dark.css +452 -482
  206. package/styles/gantt/tailwind.css +449 -479
  207. package/styles/highcontrast-light.css +405 -405
  208. package/styles/highcontrast.css +444 -456
  209. package/styles/material-dark.css +446 -417
  210. package/styles/material.css +445 -419
  211. package/styles/tailwind-dark.css +452 -482
  212. package/styles/tailwind.css +449 -479
@@ -0,0 +1,754 @@
1
+ import * as cons from './../base/css-constants';
2
+ import {
3
+ ContextMenuOpenEventArgs as CMenuOpenEventArgs, ContextMenuClickEventArgs as CMenuClickEventArgs, ActionBeginArgs
4
+ } from './../base/interface';
5
+ import { TreeGrid, ContextMenu as TreeGridContextMenu } from '@syncfusion/ej2-treegrid';
6
+ import { remove, closest, isNullOrUndefined, getValue, extend, getElement, addClass } from '@syncfusion/ej2-base';
7
+ import { Gantt } from './../base/gantt';
8
+ import { Deferred } from '@syncfusion/ej2-data';
9
+ import { ContextMenu as Menu, OpenCloseMenuEventArgs } from '@syncfusion/ej2-navigations';
10
+ import { NotifyArgs, ContextMenuItemModel } from '@syncfusion/ej2-grids';
11
+ import { ITaskData, IGanttData, IPredecessor, RowPosition, ITaskSegment } from '../base/common';
12
+ import { TaskFieldsModel } from '../models/models';
13
+ // eslint-disable-next-line
14
+ /**
15
+ * The ContextMenu module is used to handle the context menu items & sub-menu items.
16
+ *
17
+ * @returns {void} .
18
+ */
19
+ export class ContextMenu {
20
+ /**
21
+ * @private
22
+ */
23
+ public contextMenu: Menu;
24
+ private parent: Gantt;
25
+ private ganttID: string;
26
+ private element: HTMLUListElement;
27
+ private headerMenuItems: any; // eslint-disable-line
28
+ private contentMenuItems: ContextMenuItemModel[];
29
+ private rowData: IGanttData;
30
+ public segmentIndex: number = -1;
31
+ private clickedPosition: number;
32
+ private targetElement: Element;
33
+ private isEdit: boolean;
34
+ /**
35
+ * @private
36
+ */
37
+ public isOpen: boolean;
38
+ /**
39
+ * @private
40
+ */
41
+ public item: string;
42
+ private predecessors: IPredecessor[];
43
+ private hideItems: string[];
44
+ private disableItems: string[];
45
+ constructor(parent?: Gantt) {
46
+ this.parent = parent;
47
+ this.ganttID = parent.element.id;
48
+ TreeGrid.Inject(TreeGridContextMenu);
49
+ this.parent.treeGrid.contextMenuClick = this.headerContextMenuClick.bind(this);
50
+ this.parent.treeGrid.contextMenuOpen = this.headerContextMenuOpen.bind(this);
51
+ this.addEventListener();
52
+ this.resetItems();
53
+ }
54
+
55
+ private addEventListener(): void {
56
+ if (this.parent.isDestroyed) { return; }
57
+ this.parent.on('initiate-contextMenu', this.render, this);
58
+ this.parent.on('reRender-contextMenu', this.reRenderContextMenu, this);
59
+ this.parent.on('contextMenuClick', this.contextMenuItemClick, this);
60
+ this.parent.on('contextMenuOpen', this.contextMenuBeforeOpen, this);
61
+ }
62
+
63
+ private reRenderContextMenu(e: NotifyArgs): void {
64
+ if (e.module === this.getModuleName() && e.enable) {
65
+ if (this.contextMenu) {
66
+ this.contextMenu.destroy();
67
+ remove(this.element);
68
+ }
69
+ this.resetItems();
70
+ this.render();
71
+ }
72
+ }
73
+
74
+ private render(): void {
75
+ this.element = this.parent.createElement('ul', {
76
+ id: this.ganttID + '_contextmenu', className: cons.focusCell
77
+ }) as HTMLUListElement;
78
+ this.parent.element.appendChild(this.element);
79
+ const target: string = '#' + this.ganttID;
80
+
81
+ this.contextMenu = new Menu({
82
+ items: this.getMenuItems(),
83
+ locale: this.parent.locale,
84
+ target: target,
85
+ animationSettings: { effect: 'None' },
86
+ select: this.contextMenuItemClick.bind(this),
87
+ beforeOpen: this.contextMenuBeforeOpen.bind(this),
88
+ onOpen: this.contextMenuOpen.bind(this),
89
+ onClose: this.contextMenuOnClose.bind(this),
90
+ cssClass: 'e-gantt'
91
+ });
92
+ this.contextMenu.appendTo(this.element);
93
+ this.parent.treeGrid.contextMenuItems = this.headerMenuItems;
94
+ }
95
+
96
+
97
+ private contextMenuItemClick(args: CMenuClickEventArgs): void {
98
+ this.item = this.getKeyFromId(args.item.id);
99
+ let position: RowPosition;
100
+ let data: Object; let taskfields: TaskFieldsModel;
101
+ const parentItem: ContextMenuItemModel = getValue('parentObj', args.item);
102
+ let index: number = -1;
103
+ if (parentItem && !isNullOrUndefined(parentItem.id) && this.getKeyFromId(parentItem.id) === 'DeleteDependency') {
104
+ index = parentItem.items.indexOf(args.item);
105
+ }
106
+ if (this.parent.isAdaptive) {
107
+ if (this.item === 'TaskInformation' || this.item === 'Above' || this.item === 'Below'
108
+ || this.item === 'Child' || this.item === 'DeleteTask') {
109
+ if (this.parent.selectionModule && this.parent.selectionSettings.type === 'Multiple') {
110
+ this.parent.selectionModule.hidePopUp();
111
+ (<HTMLElement>document.getElementsByClassName('e-gridpopup')[0]).style.display = 'none';
112
+ }
113
+ }
114
+ }
115
+ switch (this.item) {
116
+ case 'TaskInformation':
117
+ this.parent.openEditDialog(Number(this.rowData.ganttProperties.rowUniqueID));
118
+ break;
119
+ case 'Above':
120
+ case 'Below':
121
+ case 'Child':
122
+ position = this.item;
123
+ data = extend({}, {}, this.rowData.taskData, true);
124
+ taskfields = this.parent.taskFields;
125
+ if (data[taskfields.startDate]) {
126
+ this.parent.setRecordValue(taskfields.startDate, this.rowData.ganttProperties.startDate, data, true);
127
+ }
128
+ if (data[taskfields.endDate]) {
129
+ this.parent.setRecordValue(taskfields.endDate, this.rowData.ganttProperties.endDate, data, true);
130
+ }
131
+ if (!isNullOrUndefined(taskfields.dependency)) {
132
+ data[taskfields.dependency] = null;
133
+ }
134
+ if (!isNullOrUndefined(taskfields.child) && data[taskfields.child]) {
135
+ delete data[taskfields.child];
136
+ }
137
+ if (!isNullOrUndefined(taskfields.parentID) && data[taskfields.parentID]) {
138
+ data[taskfields.parentID] = null;
139
+ }
140
+ if (this.rowData) {
141
+ const rowIndex: number = this.parent.updatedRecords.indexOf(this.rowData);
142
+ this.parent.addRecord(data, position, rowIndex);
143
+ }
144
+ break;
145
+ case 'Milestone':
146
+ case 'ToMilestone':
147
+ this.parent.convertToMilestone(this.rowData.ganttProperties.rowUniqueID);
148
+ break;
149
+ case 'DeleteTask':
150
+ this.parent.editModule.deleteRecord(this.rowData);
151
+ break;
152
+ case 'ToTask':
153
+ data = extend({}, {}, this.rowData.taskData, true);
154
+ taskfields = this.parent.taskFields;
155
+ if (!isNullOrUndefined(taskfields.duration)) {
156
+ const ganttProp: ITaskData = this.rowData.ganttProperties;
157
+ data[taskfields.duration] = '1 ' + ganttProp.durationUnit;
158
+ } else {
159
+ data[taskfields.startDate] = new Date(this.rowData.taskData[taskfields.startDate]);
160
+ const endDate: Date = new Date(this.rowData.taskData[taskfields.startDate]);
161
+ endDate.setDate(endDate.getDate() + 1);
162
+ data[taskfields.endDate] = endDate;
163
+ }
164
+ if (!isNullOrUndefined(data[taskfields.milestone])) {
165
+ if (data[taskfields.milestone] === true) {
166
+ data[taskfields.milestone] = false;
167
+ }
168
+ }
169
+ this.parent.updateRecordByID(data);
170
+ break;
171
+ case 'Cancel':
172
+ this.parent.cancelEdit();
173
+ break;
174
+ case 'Save':
175
+ this.parent.editModule.cellEditModule.isCellEdit = false;
176
+ this.parent.treeGrid.grid.saveCell();
177
+ break;
178
+ case 'Dependency' + index:
179
+ this.parent.connectorLineEditModule.removePredecessorByIndex(this.rowData, index);
180
+ break;
181
+ case 'Auto':
182
+ case 'Manual':
183
+ this.parent.changeTaskMode(this.rowData);
184
+ break;
185
+ case 'Indent':
186
+ this.parent.indent();
187
+ break;
188
+ case 'Outdent':
189
+ this.parent.outdent();
190
+ break;
191
+ case 'Left':
192
+ case 'Right':
193
+ this.mergeCall(this.item);
194
+ break;
195
+ case 'SplitTask':
196
+ this.splitTaskCall(args);
197
+ break;
198
+ }
199
+ args.type = 'Content';
200
+ args.rowData = this.rowData;
201
+ this.parent.trigger('contextMenuClick', args);
202
+ }
203
+
204
+ private splitTaskCall(args: CMenuClickEventArgs): void {
205
+ this.isEdit = true;
206
+ const taskSettings: TaskFieldsModel = this.parent.taskFields;
207
+ const currentClickedDate: Date = this.getClickedDate(args.element as HTMLElement);
208
+ if (isNullOrUndefined(this.parent.timelineSettings.bottomTier) && this.parent.timelineSettings.bottomTier.unit !== 'Hour') {
209
+ currentClickedDate.setHours(0, 0, 0, 0);
210
+ }
211
+ const eventArgs: ActionBeginArgs = {
212
+ rowData: this.rowData as IGanttData,
213
+ requestType: 'splitTaskbar',
214
+ splitDate: currentClickedDate,
215
+ cancel: false,
216
+ target: this.targetElement
217
+ };
218
+ // eslint-disable-next-line
219
+ this.parent.trigger('actionBegin', eventArgs, (eventArgs: ActionBeginArgs) => {
220
+ this.parent.chartRowsModule.splitTask(this.rowData[taskSettings.id], currentClickedDate);
221
+ });
222
+ }
223
+ private mergeCall(item: string): void {
224
+ this.isEdit = true;
225
+ const taskSettings: TaskFieldsModel = this.parent.taskFields;
226
+ const segments: ITaskSegment[] = this.rowData.ganttProperties.segments;
227
+ const firstSegment: number = item === 'Right' ? this.segmentIndex : segments[this.segmentIndex - 1].segmentIndex;
228
+ const secondSegment: number = item === 'Left' ? this.segmentIndex : segments[this.segmentIndex + 1].segmentIndex;
229
+ const segmentIndexes: { firstSegmentIndex: number, secondSegmentIndex: number }[] = [
230
+ { 'firstSegmentIndex': firstSegment, 'secondSegmentIndex': secondSegment }
231
+ ];
232
+ const eventArgs: ActionBeginArgs = {
233
+ rowData: this.rowData as IGanttData,
234
+ mergeSegmentIndexes: segmentIndexes,
235
+ requestType: 'mergeSegment',
236
+ cancel: false,
237
+ target: this.targetElement
238
+ };
239
+ this.parent.trigger('actionBegin', eventArgs, (eventArgs: ActionBeginArgs) => {
240
+ if (eventArgs.cancel === false) {
241
+ this.parent.chartRowsModule.mergeTask(this.rowData[taskSettings.id], segmentIndexes);
242
+ }
243
+ });
244
+ }
245
+ // eslint-disable-next-line
246
+ private getClickedDate(element: HTMLElement): Date {
247
+ // context menu click position
248
+ const ganttElementPosition: { top: number, left: number } = this.parent.getOffsetRect(this.parent.element);
249
+ const ganttLeft: number = ganttElementPosition.left - this.parent.element.offsetLeft;
250
+ // task left position
251
+ const pageLeft: number = ganttLeft + this.parent.ganttChartModule.chartElement.offsetLeft +
252
+ this.rowData.ganttProperties.left - this.parent.ganttChartModule.scrollElement.scrollLeft;
253
+
254
+ // difference from task start date to current click position.
255
+ const currentTaskDifference: number = this.clickedPosition - pageLeft;
256
+
257
+ let splitTaskDuration: number = Math.ceil(currentTaskDifference / this.parent.perDayWidth);
258
+ const startDate: Date = this.rowData.ganttProperties.startDate;
259
+ if (!isNullOrUndefined(this.parent.timelineSettings.bottomTier) && this.parent.timelineSettings.bottomTier.unit === 'Hour') {
260
+ splitTaskDuration = Math.ceil(currentTaskDifference / this.parent.timelineSettings.timelineUnitSize);
261
+ splitTaskDuration -= 1;
262
+ }
263
+
264
+ const contextMenuClickDate: Date =
265
+ this.parent.dataOperation.getEndDate(
266
+ startDate, splitTaskDuration, this.rowData.ganttProperties.durationUnit, this.rowData, false
267
+ );
268
+ return contextMenuClickDate;
269
+ }
270
+ private contextMenuBeforeOpen(args: CMenuOpenEventArgs): void | Deferred {
271
+ const target: Element = args.event ? args.event.target as Element :
272
+ !this.parent.focusModule ? this.parent.focusModule.getActiveElement() :
273
+ this.parent.ganttChartModule.targetElement;
274
+ // Closed edited cell before opening context menu
275
+ // eslint-disable-next-line
276
+ if (!isNullOrUndefined(this.parent.editModule) && this.parent.editModule.cellEditModule && this.parent.editModule.cellEditModule.isCellEdit && target.parentElement.classList.contains('e-row')) {
277
+ this.parent.treeGrid.closeEdit();
278
+ }
279
+ if (!isNullOrUndefined(args.element) && args.element.id === this.parent.element.id + '_contextmenu') {
280
+ this.clickedPosition = getValue('event', args).clientX;
281
+ }
282
+ const targetElement: Element = closest(target, '.e-gantt-child-taskbar');
283
+ if (targetElement) {
284
+ this.targetElement = args.target = targetElement;
285
+ }
286
+ args.gridRow = closest(target, '.e-row');
287
+ args.chartRow = closest(target, '.e-chart-row');
288
+ const menuElement: Element = closest(target, '.e-gantt');
289
+ const editForm: Element = closest(target, cons.editForm);
290
+ if (!editForm && this.parent.editModule && this.parent.editModule.cellEditModule
291
+ && this.parent.editModule.cellEditModule.isCellEdit && this.parent.editModule.dialogModule.dialogObj
292
+ && !this.parent.editModule.dialogModule.dialogObj.open) {
293
+ this.parent.treeGrid.grid.saveCell();
294
+ this.parent.editModule.cellEditModule.isCellEdit = false;
295
+ }
296
+ if (this.parent.readOnly) {
297
+ this.contextMenu.enableItems(
298
+ ['Add', 'Save', 'Convert', 'Delete Dependency', 'Delete Task', 'TaskMode', 'Indent', 'Outdent', 'SplitTask', 'MergeTask'],
299
+ false
300
+ );
301
+ }
302
+ if ((isNullOrUndefined(args.gridRow) && isNullOrUndefined(args.chartRow)) || this.contentMenuItems.length === 0) {
303
+ if (!isNullOrUndefined(args.parentItem) && !isNullOrUndefined(menuElement)) {
304
+ args.cancel = false;
305
+ } else {
306
+ args.cancel = true;
307
+ }
308
+ }
309
+ if (!args.cancel) {
310
+ let rowIndex: number = -1;
311
+ if (args.gridRow) {
312
+ // eslint-disable-next-line
313
+ rowIndex = parseInt(args.gridRow.getAttribute('aria-rowindex'), 0);
314
+ } else if (args.chartRow) {
315
+ // eslint-disable-next-line
316
+ rowIndex = parseInt(args.chartRow.getAttribute('aria-rowindex'), 0);
317
+ }
318
+ if (this.parent.selectionModule && this.parent.allowSelection && !args.parentItem && !isNullOrUndefined(args.chartRow)) {
319
+ this.parent.selectionModule.selectRow(rowIndex);
320
+ }
321
+ if (!args.parentItem) {
322
+ this.rowData = this.parent.updatedRecords[rowIndex];
323
+ }
324
+ for (const item of args.items) {
325
+ // let target: EventTarget = target;
326
+ if (!item.separator) {
327
+ if ((target.classList.contains('e-gantt-unscheduled-taskbar')) && ((item.text === this.getLocale('splitTask')) || (item.text === this.getLocale('mergeTask')))) {
328
+ this.hideItems.push(item.text);
329
+ }
330
+ else {
331
+ this.updateItemStatus(item, target, rowIndex);
332
+ }
333
+ }
334
+ }
335
+ args.rowData = this.rowData;
336
+ args.type = 'Content';
337
+ args.disableItems = this.disableItems;
338
+ args.hideItems = this.hideItems;
339
+ args.hideChildItems = [];
340
+ if (args.rowData.level === 0 && this.parent.viewType === 'ResourceView') {
341
+ args.cancel = true;
342
+ return;
343
+ }
344
+ const callBackPromise: Deferred = new Deferred();
345
+ this.parent.trigger('contextMenuOpen', args, (arg: CMenuOpenEventArgs) => {
346
+ callBackPromise.resolve(arg);
347
+ this.hideItems = arg.hideItems;
348
+ this.disableItems = arg.disableItems;
349
+ if (!arg.parentItem && arg.hideItems.length === arg.items.length) {
350
+ this.revertItemStatus();
351
+ arg.cancel = true;
352
+ }
353
+ if (this.hideItems.length > 0) {
354
+ this.contextMenu.hideItems(this.hideItems);
355
+ }
356
+ if (this.disableItems.length > 0) {
357
+ this.contextMenu.enableItems(this.disableItems, false);
358
+ }
359
+ if (args.hideChildItems.length > 0) {
360
+ this.contextMenu.hideItems(args.hideChildItems);
361
+ }
362
+ });
363
+ return callBackPromise;
364
+ }
365
+ }
366
+
367
+ private updateItemStatus(item: ContextMenuItemModel, target: EventTarget, rowIndex: number): void {
368
+ const key: string = this.getKeyFromId(item.id);
369
+ const editForm: Element = closest(target as Element, cons.editForm);
370
+ const subMenu: ContextMenuItemModel[] = [];
371
+ const taskbarElement: Element = closest(target as Element, '.e-gantt-child-taskbar');
372
+ if (editForm) {
373
+ if (!(key === 'Save' || key === 'Cancel')) {
374
+ this.hideItems.push(item.text);
375
+ }
376
+ } else {
377
+ switch (key) {
378
+ case 'TaskInformation':
379
+ if (!this.parent.editSettings.allowEditing || !this.parent.editModule) {
380
+ this.updateItemVisibility(item.text);
381
+ }
382
+ break;
383
+ case 'Add':
384
+ if (!this.parent.editSettings.allowAdding || !this.parent.editModule) {
385
+ this.updateItemVisibility(item.text);
386
+ }
387
+ break;
388
+ case 'Save':
389
+ case 'Cancel':
390
+ this.hideItems.push(item.text);
391
+ break;
392
+ case 'Convert':
393
+ if (this.rowData.hasChildRecords) {
394
+ this.hideItems.push(item.text);
395
+ } else if (!this.parent.editSettings.allowEditing || !this.parent.editModule) {
396
+ this.updateItemVisibility(item.text);
397
+ } else {
398
+ if (!this.rowData.ganttProperties.isMilestone) {
399
+ subMenu.push(
400
+ this.createItemModel(cons.content, 'ToMilestone', this.getLocale('toMilestone')));
401
+ } else {
402
+ subMenu.push(
403
+ this.createItemModel(cons.content, 'ToTask', this.getLocale('toTask')));
404
+ }
405
+ item.items = subMenu;
406
+ }
407
+ break;
408
+ case 'DeleteDependency':
409
+ {
410
+ const items: ContextMenuItemModel[] = this.getPredecessorsItems();
411
+ if (this.rowData.hasChildRecords) {
412
+ this.hideItems.push(item.text);
413
+ } else if (!this.parent.editSettings.allowDeleting || items.length === 0 || !this.parent.editModule) {
414
+ this.updateItemVisibility(item.text);
415
+ } else if (items.length > 0) {
416
+ item.items = items;
417
+ }
418
+ break;
419
+ }
420
+ case 'DeleteTask':
421
+ if (!this.parent.editSettings.allowDeleting || !this.parent.editModule) {
422
+ this.updateItemVisibility(item.text);
423
+ }
424
+ break;
425
+ case 'TaskMode':
426
+ if (this.parent.taskMode !== 'Custom') {
427
+ this.updateItemVisibility(item.text);
428
+ } else {
429
+ if (this.rowData.ganttProperties.isAutoSchedule) {
430
+ subMenu.push(
431
+ this.createItemModel(cons.content, 'Manual', this.getLocale('manual')));
432
+ } else {
433
+ subMenu.push(
434
+ this.createItemModel(cons.content, 'Auto', this.getLocale('auto')));
435
+ }
436
+ item.items = subMenu;
437
+ }
438
+ break;
439
+ case 'Indent':
440
+ {
441
+ if (!this.parent.allowSelection) {
442
+ this.hideItems.push(item.text);
443
+ } else {
444
+ const index: number = this.parent.selectedRowIndex;
445
+ const isSelected: boolean = this.parent.selectionModule ? this.parent.selectionModule.selectedRowIndexes.length === 1 ||
446
+ this.parent.selectionModule.getSelectedRowCellIndexes().length === 1 ? true : false : false;
447
+ const prevRecord: IGanttData = this.parent.updatedRecords[this.parent.selectionModule.getSelectedRowIndexes()[0] - 1];
448
+ if (!this.parent.editSettings.allowEditing || index === 0 || index === -1 || !isSelected ||
449
+ this.parent.viewType === 'ResourceView' || this.parent.updatedRecords[index].level - prevRecord.level === 1) {
450
+ this.updateItemVisibility(item.text);
451
+ }
452
+ }
453
+ break;
454
+ }
455
+ case 'Outdent':
456
+ {
457
+ if (!this.parent.allowSelection) {
458
+ this.hideItems.push(item.text);
459
+ } else {
460
+ const ind: number = this.parent.selectionModule.getSelectedRowIndexes()[0];
461
+ const isSelect: boolean = this.parent.selectionModule ? this.parent.selectionModule.selectedRowIndexes.length === 1 ||
462
+ this.parent.selectionModule.getSelectedRowCellIndexes().length === 1 ? true : false : false;
463
+ if (!this.parent.editSettings.allowEditing || ind === -1 || ind === 0 || !isSelect ||
464
+ this.parent.viewType === 'ResourceView' || this.parent.updatedRecords[ind].level === 0) {
465
+ this.updateItemVisibility(item.text);
466
+ }
467
+ }
468
+ break;
469
+ }
470
+ case 'SplitTask':
471
+ {
472
+ const taskSettings: TaskFieldsModel = this.parent.taskFields;
473
+ if (this.parent.readOnly || !taskbarElement || isNullOrUndefined(taskSettings.segments) ||
474
+ this.parent.currentViewData[rowIndex].hasChildRecords) {
475
+ this.updateItemVisibility(item.text);
476
+ }
477
+ break;
478
+ }
479
+ case 'MergeTask':
480
+ if (this.parent.readOnly || !taskbarElement) {
481
+ this.updateItemVisibility(item.text);
482
+ } else {
483
+ this.mergeItemVisiblity(target as HTMLElement, item);
484
+ }
485
+ break;
486
+ }
487
+ }
488
+ }
489
+ private mergeItemVisiblity(target: HTMLElement, item: ContextMenuItemModel): void {
490
+ const subMenu: ContextMenuItemModel[] = [];
491
+ const taskfields: TaskFieldsModel = this.parent.taskFields;
492
+ const currentClickedDate: Date = this.getClickedDate(target as HTMLElement);
493
+ this.segmentIndex = this.parent.chartRowsModule.getSegmentIndex(currentClickedDate, this.rowData);
494
+ const segments: ITaskSegment[] = this.rowData.ganttProperties.segments;
495
+ if (!isNullOrUndefined(segments) && segments.length > 0) {
496
+ if (isNullOrUndefined(taskfields.segments) && this.segmentIndex === -1) {
497
+ this.updateItemVisibility(item.text);
498
+ } else {
499
+ if (this.segmentIndex === 0) {
500
+ subMenu.push(this.createItemModel(cons.content, 'Right', this.getLocale('right')));
501
+ } else if (this.segmentIndex === segments.length - 1) {
502
+ subMenu.push(this.createItemModel(cons.content, 'Left', this.getLocale('left')));
503
+ } else {
504
+ subMenu.push(this.createItemModel(cons.content, 'Right', this.getLocale('right')));
505
+ subMenu.push(this.createItemModel(cons.content, 'Left', this.getLocale('left')));
506
+ }
507
+ item.items = subMenu;
508
+ }
509
+ } else {
510
+ this.hideItems.push(item.text);
511
+ }
512
+ }
513
+ private updateItemVisibility(text: string): void {
514
+ const isDefaultItem: boolean = !isNullOrUndefined(this.parent.contextMenuItems) ? false : true;
515
+ if (isDefaultItem) {
516
+ this.hideItems.push(text);
517
+ } else {
518
+ this.disableItems.push(text);
519
+ }
520
+ }
521
+ private contextMenuOpen(args: CMenuOpenEventArgs): void {
522
+ this.isOpen = true;
523
+ const firstMenuItem: Element = args.element.querySelectorAll('li:not(.e-menu-hide):not(.e-disabled)')[0];
524
+ addClass([firstMenuItem], 'e-focused');
525
+ }
526
+
527
+ private getMenuItems(): ContextMenuItemModel[] {
528
+ const menuItems: ContextMenuItemModel[] = !isNullOrUndefined(this.parent.contextMenuItems) ?
529
+ this.parent.contextMenuItems as ContextMenuItemModel[] : this.getDefaultItems() as ContextMenuItemModel[];
530
+ for (const item of menuItems) {
531
+ if (typeof item === 'string' && this.getDefaultItems().indexOf(item) !== -1) {
532
+ this.buildDefaultItems(item);
533
+ } else if (typeof item !== 'string') {
534
+ if (this.getDefaultItems().indexOf(item.text) !== -1) {
535
+ this.buildDefaultItems(item.text, item.iconCss);
536
+ } else if (item.target === cons.columnHeader) {
537
+ this.headerMenuItems.push(item);
538
+ } else {
539
+ this.contentMenuItems.push(item);
540
+ }
541
+ }
542
+ }
543
+ return this.contentMenuItems;
544
+ }
545
+ private createItemModel(target: string, item: string, text: string, iconCss?: string): ContextMenuItemModel {
546
+ const itemModel: ContextMenuItemModel = {
547
+ text: text,
548
+ id: this.generateID(item),
549
+ target: target,
550
+ iconCss: iconCss ? 'e-icons ' + iconCss : null
551
+ };
552
+ return itemModel;
553
+ }
554
+
555
+ private getLocale(text: string): string {
556
+ const localeText: string = this.parent.localeObj.getConstant(text);
557
+ return localeText;
558
+ }
559
+
560
+ private buildDefaultItems(item: string, iconCSS?: string): void {
561
+ let contentMenuItem: ContextMenuItemModel;
562
+ switch (item) {
563
+ case 'AutoFitAll':
564
+ case 'AutoFit':
565
+ case 'SortAscending':
566
+ case 'SortDescending':
567
+ this.headerMenuItems.push(item);
568
+ break;
569
+ case 'TaskInformation':
570
+ contentMenuItem = this.createItemModel(
571
+ cons.content, item, this.getLocale('taskInformation'), this.getIconCSS(cons.editIcon, iconCSS));
572
+ break;
573
+ case 'Indent':
574
+ contentMenuItem = this.createItemModel(
575
+ cons.content, item, this.getLocale('indent'), this.getIconCSS(cons.indentIcon, iconCSS));
576
+ break;
577
+ case 'Outdent':
578
+ contentMenuItem = this.createItemModel(
579
+ cons.content, item, this.getLocale('outdent'), this.getIconCSS(cons.outdentIcon, iconCSS));
580
+ break;
581
+ case 'Save':
582
+ contentMenuItem = this.createItemModel(
583
+ cons.editIcon, item, this.getLocale('save'), this.getIconCSS(cons.saveIcon, iconCSS));
584
+ break;
585
+ case 'Cancel':
586
+ contentMenuItem = this.createItemModel(
587
+ cons.editIcon, item, this.getLocale('cancel'), this.getIconCSS(cons.cancelIcon, iconCSS));
588
+ break;
589
+ case 'Add':
590
+ contentMenuItem = this.createItemModel(
591
+ cons.content, item, this.getLocale('add'), this.getIconCSS(cons.addIcon, iconCSS));
592
+ //Sub item menu
593
+ contentMenuItem.items = [];
594
+ contentMenuItem.items.push(
595
+ this.createItemModel(cons.content, 'Above', this.getLocale('above'), this.getIconCSS(cons.addAboveIcon, iconCSS)));
596
+ contentMenuItem.items.push(
597
+ this.createItemModel(cons.content, 'Below', this.getLocale('below'), this.getIconCSS(cons.addBelowIcon, iconCSS)));
598
+ if (this.parent.viewType !== 'ResourceView') {
599
+ contentMenuItem.items.push(
600
+ this.createItemModel(cons.content, 'Child', this.getLocale('child')));
601
+ }
602
+ contentMenuItem.items.push(this.createItemModel(
603
+ cons.content, 'Milestone',
604
+ this.getLocale('milestone')));
605
+ break;
606
+ case 'DeleteTask':
607
+ contentMenuItem = this.createItemModel(
608
+ cons.content, item, this.getLocale('deleteTask'),
609
+ this.getIconCSS(cons.deleteIcon, iconCSS));
610
+ break;
611
+ case 'DeleteDependency':
612
+ contentMenuItem = this.createItemModel(
613
+ cons.content, item, this.getLocale('deleteDependency'));
614
+ contentMenuItem.items = [];
615
+ contentMenuItem.items.push({});
616
+ break;
617
+ case 'Convert':
618
+ contentMenuItem = this.createItemModel(
619
+ cons.content, item, this.getLocale('convert'));
620
+ contentMenuItem.items = [];
621
+ contentMenuItem.items.push({});
622
+ break;
623
+ case 'TaskMode':
624
+ contentMenuItem = this.createItemModel(
625
+ cons.content, item, this.getLocale('changeScheduleMode'));
626
+ contentMenuItem.items = [];
627
+ contentMenuItem.items.push({});
628
+ break;
629
+ case 'SplitTask':
630
+ contentMenuItem = this.createItemModel(
631
+ cons.content, item, this.getLocale('splitTask'));
632
+ break;
633
+ case 'MergeTask':
634
+ contentMenuItem = this.createItemModel(
635
+ cons.content, item, this.getLocale('mergeTask'));
636
+ contentMenuItem.items = [];
637
+ contentMenuItem.items.push({});
638
+ }
639
+ if (contentMenuItem) {
640
+ this.contentMenuItems.push(contentMenuItem);
641
+ }
642
+ }
643
+
644
+ private getIconCSS(menuClass: string, iconString?: string): string {
645
+ return isNullOrUndefined(iconString) ? menuClass : iconString;
646
+ }
647
+
648
+ private getPredecessorsItems(): ContextMenuItemModel[] {
649
+ this.predecessors = this.parent.predecessorModule.getValidPredecessor(this.rowData);
650
+ const items: ContextMenuItemModel[] = []; let itemModel: ContextMenuItemModel;
651
+ let increment: number = 0;
652
+ for (const predecessor of this.predecessors) {
653
+ const ganttData: IGanttData = this.parent.getRecordByID(predecessor.from);
654
+ const ganttProp: ITaskData = ganttData.ganttProperties;
655
+ const text: string = ganttProp.rowUniqueID + ' - ' + ganttProp.taskName;
656
+ const id: string = 'Dependency' + increment++;
657
+ itemModel = this.createItemModel(cons.content, id, text);
658
+ items.push(itemModel);
659
+ }
660
+ return items;
661
+ }
662
+
663
+ private headerContextMenuClick = (args: CMenuClickEventArgs): void => {
664
+ const gridRow: Element = closest(args.event.target as Element, '.e-row');
665
+ const chartRow: Element = closest(args.event.target as Element, '.e-chart-row');
666
+ if (isNullOrUndefined(gridRow) && isNullOrUndefined(chartRow)) {
667
+ args.type = 'Header';
668
+ this.parent.trigger('contextMenuClick', args);
669
+ }
670
+ }
671
+ private headerContextMenuOpen = (args: CMenuOpenEventArgs): void => {
672
+ const gridRow: Element = closest(args.event.target as Element, '.e-row');
673
+ const chartRow: Element = closest(args.event.target as Element, '.e-chart-row');
674
+ if (isNullOrUndefined(gridRow) && isNullOrUndefined(chartRow)) {
675
+ args.type = 'Header';
676
+ this.parent.trigger('contextMenuOpen', args);
677
+ } else {
678
+ args.cancel = true;
679
+ }
680
+ }
681
+
682
+ private getDefaultItems(): string[] {
683
+ return ['AutoFitAll', 'AutoFit',
684
+ 'TaskInformation', 'DeleteTask', 'Save', 'Cancel',
685
+ 'SortAscending', 'SortDescending', 'Add',
686
+ 'DeleteDependency', 'Convert', 'TaskMode', 'Indent', 'Outdent', 'SplitTask', 'MergeTask'
687
+ ];
688
+ }
689
+ /**
690
+ * To get ContextMenu module name.
691
+ *
692
+ * @returns {string} .
693
+ */
694
+ public getModuleName(): string {
695
+ return 'contextMenu';
696
+ }
697
+
698
+ private removeEventListener(): void {
699
+ if (this.parent.isDestroyed) {
700
+ return;
701
+ }
702
+ this.parent.off('initiate-contextMenu', this.render);
703
+ this.parent.off('reRender-contextMenu', this.reRenderContextMenu);
704
+ this.parent.off('contextMenuClick', this.contextMenuItemClick);
705
+ this.parent.off('contextMenuOpen', this.contextMenuOpen);
706
+ }
707
+
708
+ private contextMenuOnClose(args: OpenCloseMenuEventArgs): void {
709
+ const parent: string = 'parentObj';
710
+ if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {
711
+ this.revertItemStatus();
712
+ }
713
+ }
714
+
715
+ private revertItemStatus(): void {
716
+ this.contextMenu.showItems(this.hideItems);
717
+ this.contextMenu.enableItems(this.disableItems);
718
+ this.hideItems = [];
719
+ this.disableItems = [];
720
+ this.isOpen = false;
721
+ }
722
+ private resetItems(): void {
723
+ this.hideItems = [];
724
+ this.disableItems = [];
725
+ this.headerMenuItems = [];
726
+ this.contentMenuItems = [];
727
+ this.item = null;
728
+ }
729
+
730
+ private generateID(item: string): string {
731
+ return this.ganttID + '_contextMenu_' + item;
732
+ }
733
+ private getKeyFromId(id: string): string {
734
+ const idPrefix: string = this.ganttID + '_contextMenu_';
735
+ if (id.indexOf(idPrefix) > -1) {
736
+ return id.replace(idPrefix, '');
737
+ } else {
738
+ return 'Custom';
739
+ }
740
+ }
741
+ /**
742
+ * To destroy the contextmenu module.
743
+ *
744
+ * @returns {void} .
745
+ * @private
746
+ */
747
+ public destroy(): void {
748
+ this.contextMenu.destroy();
749
+ remove(this.element);
750
+ this.removeEventListener();
751
+ this.contextMenu = null;
752
+ this.element = null;
753
+ }
754
+ }