@syncfusion/ej2-gantt 20.4.54 → 21.1.37

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 (95) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +1 -1
  3. package/dist/ej2-gantt.min.js +2 -2
  4. package/dist/ej2-gantt.umd.min.js +2 -2
  5. package/dist/ej2-gantt.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-gantt.es2015.js +1094 -421
  7. package/dist/es6/ej2-gantt.es2015.js.map +1 -1
  8. package/dist/es6/ej2-gantt.es5.js +1072 -399
  9. package/dist/es6/ej2-gantt.es5.js.map +1 -1
  10. package/dist/global/ej2-gantt.min.js +2 -2
  11. package/dist/global/ej2-gantt.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/package.json +20 -20
  14. package/src/gantt/actions/cell-edit.js +8 -6
  15. package/src/gantt/actions/chart-scroll.d.ts +1 -0
  16. package/src/gantt/actions/chart-scroll.js +15 -4
  17. package/src/gantt/actions/connector-line-edit.js +39 -28
  18. package/src/gantt/actions/context-menu.js +5 -5
  19. package/src/gantt/actions/dependency.js +28 -12
  20. package/src/gantt/actions/dialog-edit.js +41 -21
  21. package/src/gantt/actions/edit.js +51 -30
  22. package/src/gantt/actions/filter.d.ts +2 -1
  23. package/src/gantt/actions/filter.js +88 -2
  24. package/src/gantt/actions/keyboard.js +0 -1
  25. package/src/gantt/actions/pdf-export.d.ts +3 -1
  26. package/src/gantt/actions/pdf-export.js +12 -6
  27. package/src/gantt/actions/rowdragdrop.js +2 -2
  28. package/src/gantt/actions/selection.js +5 -2
  29. package/src/gantt/actions/taskbar-edit.d.ts +5 -0
  30. package/src/gantt/actions/taskbar-edit.js +114 -10
  31. package/src/gantt/base/date-processor.js +78 -52
  32. package/src/gantt/base/gantt-chart.js +20 -4
  33. package/src/gantt/base/gantt-model.d.ts +43 -0
  34. package/src/gantt/base/gantt.d.ts +39 -1
  35. package/src/gantt/base/gantt.js +84 -34
  36. package/src/gantt/base/interface.d.ts +2 -0
  37. package/src/gantt/base/task-processor.js +135 -98
  38. package/src/gantt/base/tree-grid.js +31 -1
  39. package/src/gantt/base/utils.js +1 -1
  40. package/src/gantt/export/pdf-gantt.js +1 -1
  41. package/src/gantt/export/pdf-taskbar.js +1 -0
  42. package/src/gantt/renderer/chart-rows.d.ts +2 -0
  43. package/src/gantt/renderer/chart-rows.js +156 -24
  44. package/src/gantt/renderer/connector-line.js +50 -20
  45. package/src/gantt/renderer/edit-tooltip.js +0 -3
  46. package/src/gantt/renderer/event-marker.js +4 -1
  47. package/src/gantt/renderer/nonworking-day.js +4 -1
  48. package/src/gantt/renderer/timeline.js +3 -3
  49. package/src/gantt/renderer/tooltip.js +101 -33
  50. package/styles/bootstrap-dark.css +33 -10
  51. package/styles/bootstrap.css +31 -10
  52. package/styles/bootstrap4.css +28 -7
  53. package/styles/bootstrap5-dark.css +30 -9
  54. package/styles/bootstrap5.css +30 -9
  55. package/styles/fabric-dark.css +28 -7
  56. package/styles/fabric.css +28 -7
  57. package/styles/fluent-dark.css +56 -29
  58. package/styles/fluent.css +56 -29
  59. package/styles/gantt/_bootstrap-dark-definition.scss +5 -4
  60. package/styles/gantt/_bootstrap-definition.scss +5 -4
  61. package/styles/gantt/_bootstrap4-definition.scss +3 -2
  62. package/styles/gantt/_bootstrap5-definition.scss +15 -14
  63. package/styles/gantt/_fabric-dark-definition.scss +3 -2
  64. package/styles/gantt/_fabric-definition.scss +3 -2
  65. package/styles/gantt/_fluent-definition.scss +18 -17
  66. package/styles/gantt/_fusionnew-definition.scss +5 -4
  67. package/styles/gantt/_highcontrast-definition.scss +3 -2
  68. package/styles/gantt/_highcontrast-light-definition.scss +3 -2
  69. package/styles/gantt/_layout.scss +45 -13
  70. package/styles/gantt/_material-dark-definition.scss +3 -2
  71. package/styles/gantt/_material-definition.scss +3 -2
  72. package/styles/gantt/_tailwind-definition.scss +9 -8
  73. package/styles/gantt/_theme.scss +25 -6
  74. package/styles/gantt/bootstrap-dark.css +33 -10
  75. package/styles/gantt/bootstrap.css +31 -10
  76. package/styles/gantt/bootstrap4.css +28 -7
  77. package/styles/gantt/bootstrap5-dark.css +30 -9
  78. package/styles/gantt/bootstrap5.css +30 -9
  79. package/styles/gantt/fabric-dark.css +28 -7
  80. package/styles/gantt/fabric.css +28 -7
  81. package/styles/gantt/fluent-dark.css +56 -29
  82. package/styles/gantt/fluent.css +56 -29
  83. package/styles/gantt/highcontrast-light.css +28 -9
  84. package/styles/gantt/highcontrast.css +28 -7
  85. package/styles/gantt/material-dark.css +31 -14
  86. package/styles/gantt/material.css +28 -7
  87. package/styles/gantt/tailwind-dark.css +28 -7
  88. package/styles/gantt/tailwind.css +28 -7
  89. package/styles/highcontrast-light.css +28 -9
  90. package/styles/highcontrast.css +28 -7
  91. package/styles/material-dark.css +31 -14
  92. package/styles/material.css +28 -7
  93. package/styles/tailwind-dark.css +28 -7
  94. package/styles/tailwind.css +28 -7
  95. package/styles/gantt/_material3-definition.scss +0 -218
@@ -404,7 +404,7 @@ var Edit = /** @class */ (function () {
404
404
  for (var _i = 0, _b = Object.keys(data); _i < _b.length; _i++) {
405
405
  var key = _b[_i];
406
406
  if ([tasks.startDate, tasks.endDate, tasks.duration].indexOf(key) !== -1) {
407
- if (isNullOrUndefined(data[key]) && !ganttObj.allowUnscheduledTasks) {
407
+ if (isNullOrUndefined(data["" + key]) && !ganttObj.allowUnscheduledTasks) {
408
408
  continue;
409
409
  }
410
410
  if (isFromDialog) {
@@ -459,7 +459,7 @@ var Edit = /** @class */ (function () {
459
459
  else if (key === tasks.name) {
460
460
  ganttPropKey = 'taskName';
461
461
  }
462
- else if (key === tasks.segments) {
462
+ else if ((key === tasks.segments) && (!isNullOrUndefined(ganttData.ganttProperties.segments))) {
463
463
  ganttPropKey = 'segments';
464
464
  /* eslint-disable-next-line */
465
465
  if (data && !isNullOrUndefined(data[this.parent.taskFields.segments]) && data[this.parent.taskFields.segments].length > 0) {
@@ -827,8 +827,10 @@ var Edit = /** @class */ (function () {
827
827
  */
828
828
  Edit.prototype.updateEditedTask = function (args) {
829
829
  var ganttRecord = args.data;
830
- this.updateParentChildRecord(ganttRecord);
831
- if (this.parent.isConnectorLineUpdate) {
830
+ if (this.parent.autoCalculateDateScheduling) {
831
+ this.updateParentChildRecord(ganttRecord);
832
+ }
833
+ if (this.parent.isConnectorLineUpdate && this.parent.autoCalculateDateScheduling) {
832
834
  /* validating predecessor for updated child items */
833
835
  for (var i = 0; i < this.validatedChildItems.length; i++) {
834
836
  var child = this.validatedChildItems[i];
@@ -847,7 +849,7 @@ var Edit = /** @class */ (function () {
847
849
  this.parent.predecessorModule.validatePredecessor(ganttRecord, [], '');
848
850
  this.parent.predecessorModule.isValidatedParentTaskID = '';
849
851
  }
850
- if (ganttRecord.hasChildRecords && this.parent.previousRecords[ganttRecord.uniqueID].ganttProperties.startDate &&
852
+ if (this.parent.allowParentDependency && ganttRecord.hasChildRecords && this.parent.previousRecords[ganttRecord.uniqueID].ganttProperties.startDate &&
851
853
  (args.action === "DrawConnectorLine")) {
852
854
  this.updateChildItems(ganttRecord);
853
855
  }
@@ -855,7 +857,9 @@ var Edit = /** @class */ (function () {
855
857
  }
856
858
  /** Update parent up-to zeroth level */
857
859
  if (ganttRecord.parentItem) {
858
- this.parent.dataOperation.updateParentItems(ganttRecord, true);
860
+ if (this.parent.autoCalculateDateScheduling) {
861
+ this.parent.dataOperation.updateParentItems(ganttRecord, true);
862
+ }
859
863
  var parentData = this.parent.getRecordByID(ganttRecord.parentItem.taskId);
860
864
  if (!parentData.ganttProperties.predecessorsName) {
861
865
  this.parent.predecessorModule.validatePredecessor(parentData, [], '');
@@ -1101,7 +1105,7 @@ var Edit = /** @class */ (function () {
1101
1105
  durationDiff = this.parent.dateValidationModule.getDuration(validStartDate, validEndDate, 'minute', true, false);
1102
1106
  }
1103
1107
  for (var i = 0; i < childRecords.length; i++) {
1104
- if ((!(this.parent.isUnscheduledTask(childRecords[i].ganttProperties))) && (childRecords[i].ganttProperties.isAutoSchedule)) {
1108
+ if (childRecords[i].ganttProperties.isAutoSchedule) {
1105
1109
  if (durationDiff > 0) {
1106
1110
  var startDate = isScheduledTask(childRecords[i].ganttProperties) ?
1107
1111
  childRecords[i].ganttProperties.startDate : childRecords[i].ganttProperties.startDate ?
@@ -1219,52 +1223,52 @@ var Edit = /** @class */ (function () {
1219
1223
  }
1220
1224
  for (var i = 0; i < eLength; i++) {
1221
1225
  if (e.changedRecords) {
1222
- rec = e.changedRecords[i];
1226
+ rec = e.changedRecords[parseInt(i.toString(), 10)];
1223
1227
  }
1224
1228
  else {
1225
- rec = e[i];
1229
+ rec = e[parseInt(i.toString(), 10)];
1226
1230
  }
1227
1231
  var _aLength = Object.keys(rec).length;
1228
1232
  for (var j = 0, _a = Object.keys(rec); j < _aLength; j++) {
1229
- var key = _a[j];
1230
- this.parent.editedRecords[i][key] = rec[key];
1231
- this.parent.editedRecords[i].taskData[key] = rec[key];
1233
+ var key = _a[parseInt(j.toString(), 10)];
1234
+ this.parent.editedRecords[parseInt(i.toString(), 10)]["" + key] = rec["" + key];
1235
+ this.parent.editedRecords[parseInt(i.toString(), 10)].taskData["" + key] = rec["" + key];
1232
1236
  }
1233
1237
  if (this.parent.taskFields.id !== null) {
1234
- this.parent.editedRecords[i].ganttProperties["taskId"] = rec[this.parent.taskFields.id];
1238
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['taskId'] = rec[this.parent.taskFields.id];
1235
1239
  }
1236
1240
  if (this.parent.taskFields.name !== null) {
1237
- this.parent.editedRecords[i].ganttProperties["taskName"] = rec[this.parent.taskFields.name];
1241
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['taskName'] = rec[this.parent.taskFields.name];
1238
1242
  }
1239
1243
  if (this.parent.taskFields.startDate !== null) {
1240
- this.parent.editedRecords[i].ganttProperties["startDate"] = rec[this.parent.taskFields.startDate];
1244
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['startDate'] = rec[this.parent.taskFields.startDate];
1241
1245
  }
1242
1246
  if (this.parent.taskFields.endDate !== null) {
1243
- this.parent.editedRecords[i].ganttProperties["endDate"] = rec[this.parent.taskFields.endDate];
1247
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['endDate'] = rec[this.parent.taskFields.endDate];
1244
1248
  }
1245
1249
  if (this.parent.taskFields.duration !== null) {
1246
- this.parent.editedRecords[i].ganttProperties["duration"] = parseInt(rec[this.parent.taskFields.duration]);
1250
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['duration'] = parseInt(rec[this.parent.taskFields.duration]);
1247
1251
  }
1248
1252
  if (this.parent.taskFields.durationUnit !== null) {
1249
- this.parent.editedRecords[i].ganttProperties["durationUnit"] = rec[this.parent.taskFields.durationUnit];
1253
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['durationUnit'] = rec[this.parent.taskFields.durationUnit];
1250
1254
  }
1251
1255
  if (this.parent.taskFields.progress !== null) {
1252
- this.parent.editedRecords[i].ganttProperties["progress"] = rec[this.parent.taskFields.progress];
1256
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['progress'] = rec[this.parent.taskFields.progress];
1253
1257
  }
1254
1258
  if (this.parent.taskFields.dependency !== null) {
1255
- this.parent.editedRecords[i].ganttProperties["dependency"] = rec[this.parent.taskFields.dependency];
1259
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['dependency'] = rec[this.parent.taskFields.dependency];
1256
1260
  }
1257
1261
  if (this.parent.taskFields.parentID !== null) {
1258
- this.parent.editedRecords[i].ganttProperties["parentID"] = rec[this.parent.taskFields.parentID];
1262
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['parentID'] = rec[this.parent.taskFields.parentID];
1259
1263
  }
1260
1264
  if (this.parent.taskFields.baselineEndDate !== null) {
1261
- this.parent.editedRecords[i].ganttProperties["baselineEndDate"] = rec[this.parent.taskFields.baselineEndDate];
1265
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['baselineEndDate'] = rec[this.parent.taskFields.baselineEndDate];
1262
1266
  }
1263
1267
  if (this.parent.taskFields.baselineStartDate !== null) {
1264
- this.parent.editedRecords[i].ganttProperties["baselineStartDate"] = rec[this.parent.taskFields.baselineStartDate];
1268
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['baselineStartDate'] = rec[this.parent.taskFields.baselineStartDate];
1265
1269
  }
1266
1270
  if (this.parent.taskFields.resourceInfo !== null) {
1267
- this.parent.editedRecords[i].ganttProperties["resources"] = rec[this.parent.taskFields.resourceInfo];
1271
+ this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['resources'] = rec[this.parent.taskFields.resourceInfo];
1268
1272
  }
1269
1273
  }
1270
1274
  this.saveSuccess(args);
@@ -1333,6 +1337,14 @@ var Edit = /** @class */ (function () {
1333
1337
  }
1334
1338
  if (!this.isTreeGridRefresh) {
1335
1339
  this.parent.chartRowsModule.refreshRecords(this.parent.editedRecords);
1340
+ if (this.parent.viewType === 'ResourceView' && !this.parent.allowTaskbarOverlap && this.parent.showOverAllocation) {
1341
+ this.parent.contentHeight = this.parent['element'].getElementsByClassName('e-content')[0].children[0]['offsetHeight'];
1342
+ this.parent.ganttChartModule.chartBodyContent.style.height = this.parent.contentHeight + 'px';
1343
+ this.parent.ganttChartModule.renderRangeContainer(this.parent.currentViewData);
1344
+ if (this.parent.taskFields.dependency) {
1345
+ this.parent.ganttChartModule.reRenderConnectorLines();
1346
+ }
1347
+ }
1336
1348
  if (this.parent.isConnectorLineUpdate && !isNullOrUndefined(this.parent.connectorLineEditModule)) {
1337
1349
  this.parent.updatedConnectorLineCollection = [];
1338
1350
  this.parent.connectorLineIds = [];
@@ -2248,15 +2260,24 @@ var Edit = /** @class */ (function () {
2248
2260
  if (parentTask && parentTask.ganttProperties.taskName !==
2249
2261
  this_2.parent.localeObj.getConstant('unassignedTask') && isDuplicate.length === 0) {
2250
2262
  this_2.checkWithUnassignedTask(updateUnAssignedResources_1[i]);
2251
- if (parentTask) {
2252
- this_2.parent.dataOperation.updateParentItems(updateUnAssignedResources_1[i].parentItem);
2253
- }
2254
2263
  }
2255
2264
  else if (!parentTask && (!isDuplicate || isDuplicate.length === 0)) {
2256
2265
  this_2.checkWithUnassignedTask(updateUnAssignedResources_1[i]);
2257
- if (updateUnAssignedResources_1[i].parentItem && unassignedTask) {
2258
- this_2.parent.dataOperation.updateParentItems(updateUnAssignedResources_1[i].parentItem);
2266
+ }
2267
+ unassignedTask = this_2.parent.flatData.filter(function (data) {
2268
+ return data.ganttProperties.taskName === _this.parent.localeObj.getConstant('unassignedTask');
2269
+ })[0];
2270
+ var parentItem = this_2.parent.currentViewData.filter(function (data) {
2271
+ if (data.ganttProperties.taskId == updateUnAssignedResources_1[i].ganttProperties.taskId && (!data.hasChildRecords && data.parentItem)
2272
+ && unassignedTask.uniqueID === data.parentItem.uniqueID) {
2273
+ return data;
2259
2274
  }
2275
+ else {
2276
+ return null;
2277
+ }
2278
+ });
2279
+ if (parentItem[0]) {
2280
+ this_2.parent.dataOperation.updateParentItems(parentItem[0]);
2260
2281
  }
2261
2282
  };
2262
2283
  var this_2 = this;
@@ -2866,7 +2887,7 @@ var Edit = /** @class */ (function () {
2866
2887
  if (!isNullOrUndefined(ganttData)) {
2867
2888
  _this.validateUpdateValues(args.newTaskData, ganttData, true);
2868
2889
  }
2869
- if (!isNullOrUndefined(args.data[tempTaskID])) {
2890
+ if (!isNullOrUndefined(args.data["" + tempTaskID])) {
2870
2891
  if (args.data[tempTaskID] != args.data['ganttProperties']['taskId']) {
2871
2892
  args.data['ganttProperties']['taskId'] = args.data[tempTaskID];
2872
2893
  args.newTaskData[tempTaskID] = args.data[tempTaskID];
@@ -4,7 +4,7 @@ import { Gantt } from '../base/gantt';
4
4
  */
5
5
  export declare class Filter {
6
6
  parent: Gantt;
7
- private filterMenuElement;
7
+ filterMenuElement: HTMLElement;
8
8
  constructor(gantt: Gantt);
9
9
  private getModuleName;
10
10
  /**
@@ -39,6 +39,7 @@ export declare class Filter {
39
39
  private actionBegin;
40
40
  closeFilterOnContextClick(element: Element): void;
41
41
  private actionComplete;
42
+ private setPosition;
42
43
  private updateFilterMenuPosition;
43
44
  private removeEventListener;
44
45
  /**
@@ -1,5 +1,5 @@
1
1
  import { TreeGrid, Filter as TreeGridFilter } from '@syncfusion/ej2-treegrid';
2
- import { filterAfterOpen } from '@syncfusion/ej2-grids';
2
+ import { filterAfterOpen, getFilterMenuPostion } from '@syncfusion/ej2-grids';
3
3
  import { getActualProperties, getCustomDateFormat } from '@syncfusion/ej2-grids';
4
4
  import { getValue, isNullOrUndefined, remove, createElement, addClass, closest, EventHandler } from '@syncfusion/ej2-base';
5
5
  import { TextBox } from '@syncfusion/ej2-inputs';
@@ -255,9 +255,95 @@ var Filter = /** @class */ (function () {
255
255
  }
256
256
  }
257
257
  };
258
+ Filter.prototype.setPosition = function (li, ul) {
259
+ var gridPos = this.parent.element.getBoundingClientRect();
260
+ var gridPosTop = gridPos.top;
261
+ var gridPosLeft = gridPos.left;
262
+ var parentNode;
263
+ var parentNodeTop;
264
+ var parentNodeLeft;
265
+ var paddingTop;
266
+ var paddingLeft;
267
+ var marginTop;
268
+ var marginLeft;
269
+ if (!isNullOrUndefined(this.parent.element.parentNode) && this.parent.element.parentNode['tagName'] != 'BODY') {
270
+ parentNode = this.parent.element.parentNode;
271
+ parentNodeTop = parentNode.getBoundingClientRect().top;
272
+ marginTop = parentNode.style.marginTop;
273
+ while (true) {
274
+ if (Math.abs(gridPosTop) > Math.abs(parentNodeTop)) {
275
+ paddingTop = gridPosTop - parentNodeTop;
276
+ break;
277
+ }
278
+ if (!isNullOrUndefined(this.parent.element.parentNode)) {
279
+ parentNode = parentNode.parentNode;
280
+ marginTop = parentNode.parentNode.style.marginTop;
281
+ }
282
+ parentNodeTop = parentNode.getBoundingClientRect().top;
283
+ }
284
+ parentNodeLeft = parentNode.getBoundingClientRect().left;
285
+ marginLeft = parentNode.style.marginLeft;
286
+ while (true) {
287
+ if (Math.abs(gridPosLeft) > Math.abs(parentNodeLeft)) {
288
+ paddingLeft = gridPosLeft - parentNodeLeft;
289
+ break;
290
+ }
291
+ if (!isNullOrUndefined(this.parent.element.parentNode)) {
292
+ parentNode = parentNode.parentNode;
293
+ marginLeft = parentNode.style.marginLeft;
294
+ }
295
+ parentNodeLeft = parentNode.getBoundingClientRect().left;
296
+ }
297
+ }
298
+ var liPos = li.getBoundingClientRect();
299
+ var left = liPos.right + window.scrollX;
300
+ var top = liPos.top + window.scrollY;
301
+ if (gridPos.right < (left + ul.offsetWidth)) {
302
+ if ((liPos.left - ul.offsetWidth) > gridPos.left) {
303
+ left = (liPos.left - ul.offsetWidth);
304
+ }
305
+ else {
306
+ left -= (left + ul.offsetWidth) - gridPos.right;
307
+ }
308
+ }
309
+ else {
310
+ if (!isNullOrUndefined(paddingTop) && !isNullOrUndefined(paddingLeft)) {
311
+ left = Math.abs(liPos.right - gridPos.left);
312
+ top = Math.abs(liPos.top - gridPos.top);
313
+ }
314
+ }
315
+ if (!isNullOrUndefined(paddingTop) && !isNullOrUndefined(paddingLeft)) {
316
+ ul.style.top = typeof (parseInt(marginTop)) === "string" ? (top + paddingTop + parseInt(marginTop)) + 'px' : (top + paddingTop) + 'px';
317
+ ul.style.left = typeof (parseInt(marginLeft)) === "string" ? (left + paddingLeft + parseInt(marginLeft) + 8) + 'px' : (left + paddingLeft) + 'px';
318
+ }
319
+ else {
320
+ ul.style.top = top + 'px';
321
+ ul.style.left = left + 'px';
322
+ }
323
+ };
258
324
  Filter.prototype.updateFilterMenuPosition = function (element, args) {
259
325
  addClass([element], 'e-gantt');
260
- document.querySelector('#' + this.parent.treeGrid.grid.element.id).appendChild(element);
326
+ document.querySelector('#' + this.parent.controlId).appendChild(element);
327
+ var targetElement;
328
+ if (this.parent.showColumnMenu) {
329
+ targetElement = document.querySelector('#treeGrid' + this.parent.controlId + '_gridcontrol_colmenu_Filter');
330
+ element.style.zIndex = targetElement.parentElement.style.zIndex;
331
+ if (this.parent.treeGrid.filterSettings.type === 'Menu') {
332
+ this.setPosition(targetElement, getValue('filterModel.dlgObj.element', args));
333
+ }
334
+ else {
335
+ this.setPosition(targetElement, getValue('filterModel.dialogObj.element', args));
336
+ }
337
+ }
338
+ else {
339
+ targetElement = this.parent.treeGrid.grid.getColumnHeaderByField(args.columnName).querySelector('.e-filtermenudiv');
340
+ if (this.parent.treeGrid.filterSettings.type === 'Menu') {
341
+ getFilterMenuPostion(targetElement, getValue('filterModel.dlgObj', args));
342
+ }
343
+ else {
344
+ getFilterMenuPostion(targetElement, getValue('filterModel.dialogObj', args));
345
+ }
346
+ }
261
347
  if (this.parent.treeGrid.filterSettings.type === 'Menu') {
262
348
  element.querySelector('.e-valid-input').focus();
263
349
  }
@@ -230,7 +230,6 @@ var FocusModule = /** @class */ (function () {
230
230
  var top_1 = containerPosition.top + (containerPosition.height / 2);
231
231
  var left = containerPosition.left + (containerPosition.width / 2);
232
232
  this.setActiveElement(e.target);
233
- // eslint-disable-next-line security/detect-non-literal-fs-filename
234
233
  contextMenu.open(top_1, left);
235
234
  e.preventDefault();
236
235
  break;
@@ -11,6 +11,8 @@ export declare class PdfExport {
11
11
  private pdfDocument;
12
12
  gantt: PdfGantt;
13
13
  isPdfExport: boolean;
14
+ private isBlob;
15
+ private blobPromise;
14
16
  /**
15
17
  * @param {Gantt} parent .
16
18
  * @hidden
@@ -34,7 +36,7 @@ export declare class PdfExport {
34
36
  * @param {object} pdfDoc .
35
37
  * @returns {Promise<Object>} .
36
38
  */
37
- export(pdfExportProperties?: PdfExportProperties, isMultipleExport?: boolean, pdfDoc?: Object): Promise<Object>;
39
+ export(pdfExportProperties?: PdfExportProperties, isMultipleExport?: boolean, pdfDoc?: Object, isBlob?: boolean): Promise<Object>;
38
40
  private exportWithData;
39
41
  private processExport;
40
42
  private processSectionExportProperties;
@@ -45,8 +45,9 @@ var PdfExport = /** @class */ (function () {
45
45
  * @param {object} pdfDoc .
46
46
  * @returns {Promise<Object>} .
47
47
  */
48
- PdfExport.prototype.export = function (pdfExportProperties, isMultipleExport, pdfDoc) {
48
+ PdfExport.prototype.export = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {
49
49
  var _this = this;
50
+ this.isBlob = isBlob;
50
51
  var args = {
51
52
  requestType: 'beforePdfExport',
52
53
  ganttObject: this.parent,
@@ -90,7 +91,7 @@ var PdfExport = /** @class */ (function () {
90
91
  this.pdfDocument = new PdfDocument();
91
92
  }
92
93
  this.processExport(data, pdfExportProperties, isMultipleExport).then(function () {
93
- _this.parent.trigger('pdfExportComplete', {});
94
+ _this.parent.trigger('pdfExportComplete', _this.isBlob ? { promise: _this.blobPromise } : {});
94
95
  if (!isNullOrUndefined(_this.parent.loadingIndicator) && _this.parent.loadingIndicator.indicatorType === "Shimmer") {
95
96
  _this.parent.hideMaskRow();
96
97
  }
@@ -116,12 +117,17 @@ var PdfExport = /** @class */ (function () {
116
117
  var layouter = _this.gantt.drawGrid(pdfPage, 0, 0, format);
117
118
  _this.gantt.drawChart(layouter);
118
119
  if (!isMultipleExport) {
119
- // save the PDF
120
- if (!isNullOrUndefined(pdfExportProperties) && pdfExportProperties.fileName) {
121
- _this.pdfDocument.save(pdfExportProperties.fileName);
120
+ if (!_this.isBlob) {
121
+ // save the PDF
122
+ if (!isNullOrUndefined(pdfExportProperties) && pdfExportProperties.fileName) {
123
+ _this.pdfDocument.save(pdfExportProperties.fileName);
124
+ }
125
+ else {
126
+ _this.pdfDocument.save('Export.pdf');
127
+ }
122
128
  }
123
129
  else {
124
- _this.pdfDocument.save('Export.pdf');
130
+ _this.blobPromise = _this.pdfDocument.save();
125
131
  }
126
132
  _this.pdfDocument.destroy();
127
133
  }
@@ -348,7 +348,7 @@ var RowDD = /** @class */ (function () {
348
348
  parentUniqueID = this.droppedRecord.uniqueID;
349
349
  }
350
350
  else {
351
- parentUniqueID = this.droppedRecord.parentItem.uniqueID;
351
+ parentUniqueID = this.droppedRecord.parentItem ? this.droppedRecord.parentItem.uniqueID : this.droppedRecord.uniqueID;
352
352
  }
353
353
  var droppedParentItem = this.parent.getTaskByUniqueID(parentUniqueID);
354
354
  var editedObj = {};
@@ -375,7 +375,7 @@ var RowDD = /** @class */ (function () {
375
375
  this.updateSharedResourceTask();
376
376
  }
377
377
  }
378
- if (this.parent.taskFields.dependency) {
378
+ if (this.parent.taskFields.dependency && this.parent.allowParentDependency) {
379
379
  var isValidPredecessor = true;
380
380
  var draggedParent = void 0;
381
381
  var toParent_1;
@@ -307,7 +307,10 @@ var Selection = /** @class */ (function () {
307
307
  var rIndex = parseInt(selectedRow.getAttribute('aria-rowindex'), 10);
308
308
  var isToggle = this.parent.selectionSettings.enableToggle;
309
309
  if (this.parent.selectionSettings.type === 'Single' || (!this.isMultiCtrlRequest && !this.isMultiShiftRequest)) {
310
- this.selectRow(rIndex, isToggle);
310
+ if (!this.parent.allowTaskbarDragAndDrop || (this.parent.allowTaskbarDragAndDrop && (this.parent.rowDragAndDropModule &&
311
+ !this.parent.rowDragAndDropModule['draggedRecord']))) {
312
+ this.selectRow(rIndex, isToggle);
313
+ }
311
314
  }
312
315
  else {
313
316
  if (this.isMultiShiftRequest) {
@@ -351,7 +354,7 @@ var Selection = /** @class */ (function () {
351
354
  };
352
355
  Selection.prototype.addRemoveClass = function (records) {
353
356
  if (typeof (records) == "number") {
354
- records = Array.from(String(records), function (num) { return Number(num); });
357
+ records = [records];
355
358
  }
356
359
  var ganttRow = [].slice.call(this.parent.ganttChartModule.chartBodyContent.querySelector('tbody').children);
357
360
  var _loop_1 = function (i) {
@@ -47,6 +47,11 @@ export declare class TaskbarEdit extends DateProcessor {
47
47
  private elementOffsetHeight;
48
48
  segmentIndex: number;
49
49
  private targetElement;
50
+ currentItemTop: number;
51
+ currentItemPrevTop: number;
52
+ topValue: number;
53
+ draggedRecordMarginTop: number;
54
+ dragMoveY: number;
50
55
  constructor(ganttObj?: Gantt);
51
56
  private wireEvents;
52
57
  /**
@@ -42,6 +42,10 @@ var TaskbarEdit = /** @class */ (function (_super) {
42
42
  _this.elementOffsetWidth = 0;
43
43
  _this.elementOffsetHeight = 0;
44
44
  _this.segmentIndex = -1;
45
+ _this.currentItemTop = 0;
46
+ _this.currentItemPrevTop = 0;
47
+ _this.topValue = 0;
48
+ _this.draggedRecordMarginTop = 0;
45
49
  _this.parent = ganttObj;
46
50
  _this.initPublicProp();
47
51
  _this.wireEvents();
@@ -284,7 +288,9 @@ var TaskbarEdit = /** @class */ (function (_super) {
284
288
  if (!isNullOrUndefined(parentRecord) && !parentRecord.expanded) {
285
289
  this.prevZIndex = (this.taskBarEditElement).style.zIndex;
286
290
  (this.taskBarEditElement).style.zIndex = '1000';
287
- addClass([this.taskBarEditElement.querySelector('.e-gantt-child-taskbar')], 'e-collapsed-taskbar-drag');
291
+ if (this.taskBarEditElement.querySelector('.e-gantt-child-taskbar')) {
292
+ addClass([this.taskBarEditElement.querySelector('.e-gantt-child-taskbar')], 'e-collapsed-taskbar-drag');
293
+ }
288
294
  }
289
295
  }
290
296
  }
@@ -448,9 +454,20 @@ var TaskbarEdit = /** @class */ (function (_super) {
448
454
  this.parent.ganttChartModule.scrollObject.previousScroll.left;
449
455
  }
450
456
  this.tooltipPositionX = this.mouseDownX;
451
- this.mouseDownY = e.pageY - containerPosition.top +
457
+ this.mouseDownY = this.dragMoveY = e.pageY - containerPosition.top +
452
458
  this.parent.ganttChartModule.scrollObject.previousScroll.top;
453
459
  }
460
+ if (this.parent.viewType == "ResourceView" && this.parent.allowTaskbarDragAndDrop) {
461
+ var toolbarHeight = 0;
462
+ if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {
463
+ toolbarHeight = this.parent.toolbarModule.element.offsetHeight;
464
+ }
465
+ this.topValue = this.parent.getOffsetRect(event.target).top - this.parent.getOffsetRect(this.parent.element).top -
466
+ parseInt((closest(event.target, '.e-taskbar-main-container'))['style'].marginTop) -
467
+ this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'] -
468
+ toolbarHeight + document.getElementsByClassName('e-chart-scroll-container e-content')[0].scrollTop;
469
+ this.currentItemPrevTop = this.currentItemTop = this.topValue;
470
+ }
454
471
  if (this.taskBarEditAction === 'ConnectorPointLeftDrag' || this.taskBarEditAction === 'ConnectorPointRightDrag') {
455
472
  this.fromPredecessorText = this.taskBarEditAction === 'ConnectorPointLeftDrag' ? 'start' : 'finish';
456
473
  this.parent.connectorLineModule.tooltipTable.innerHTML = this.parent.connectorLineModule.getConnectorLineTooltipInnerTd(this.taskBarEditRecord.ganttProperties.taskName, this.fromPredecessorText, '', '');
@@ -582,6 +599,22 @@ var TaskbarEdit = /** @class */ (function (_super) {
582
599
  this.drawFalseLine();
583
600
  }
584
601
  }
602
+ if (this.parent.viewType == 'ResourceView' && this.parent.allowTaskbarDragAndDrop) {
603
+ if (this.dragMoveY > this.mouseMoveY) {
604
+ this.mouseMoveY = this.dragMoveY - this.mouseMoveY;
605
+ this.currentItemTop = this.currentItemTop - this.mouseMoveY;
606
+ }
607
+ else {
608
+ this.mouseMoveY -= this.dragMoveY;
609
+ this.currentItemTop = this.currentItemTop + this.mouseMoveY;
610
+ }
611
+ var containerPosition = this.parent.getOffsetRect(this.parent.ganttChartModule.chartBodyContainer);
612
+ this.dragMoveY = e.pageY - containerPosition.top + this.parent.ganttChartModule.scrollObject.previousScroll.top;
613
+ this.topValue = this.currentItemTop;
614
+ this.currentItemPrevTop = (this.currentItemPrevTop === 0 ||
615
+ this.topValue == this.currentItemTop) ? this.topValue :
616
+ this.currentItemPrevTop;
617
+ }
585
618
  this.setItemPosition();
586
619
  this.updateEditedItem();
587
620
  this.editTooltip.updateTooltip(this.segmentIndex);
@@ -661,12 +694,12 @@ var TaskbarEdit = /** @class */ (function (_super) {
661
694
  this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.left;
662
695
  this.startScrollTimer('left');
663
696
  }
664
- else if (isConnectorLineEdit && ((mouseY + 80) >
697
+ else if (((mouseY + 80) >
665
698
  containerPosition.top + this.parent.ganttChartModule.chartBodyContainer.offsetHeight)) {
666
699
  this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.top;
667
700
  this.startScrollTimer('bottom');
668
701
  }
669
- else if (isConnectorLineEdit && ((mouseY - 20) < containerPosition.top)) {
702
+ else if (((mouseY - 20) < containerPosition.top)) {
670
703
  this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.top;
671
704
  this.startScrollTimer('top');
672
705
  }
@@ -1452,6 +1485,11 @@ var TaskbarEdit = /** @class */ (function (_super) {
1452
1485
  taskBarMainContainer.style.width = (width) + 'px';
1453
1486
  leftLabelContainer.style.width = (item.left) + 'px';
1454
1487
  taskBarMainContainer.style.setProperty(position, (item.left) + 'px');
1488
+ if (this.parent.viewType === 'ResourceView' && this.parent.allowTaskbarDragAndDrop && this.parent.rowDragAndDropModule &&
1489
+ (this.taskBarEditAction === 'ChildDrag' || this.taskBarEditAction === 'MilestoneDrag')) {
1490
+ taskBarMainContainer.style.setProperty('top', (this.topValue) + 'px');
1491
+ taskBarMainContainer.style.zIndex = '4';
1492
+ }
1455
1493
  if (this.taskBarEditAction === 'LeftResizing' && this.segmentIndex === 0) {
1456
1494
  var parent_1 = this.taskBarEditElement.parentElement;
1457
1495
  var segmentedTasks = parent_1.getElementsByClassName('e-segmented-taskbar');
@@ -1564,7 +1602,8 @@ var TaskbarEdit = /** @class */ (function (_super) {
1564
1602
  this.previousMouseMove = null;
1565
1603
  this.editTooltip.showHideTaskbarEditTooltip(false, this.segmentIndex);
1566
1604
  if (this.taskBarEditAction && this.isMouseDragged) {
1567
- if (!this.dragMouseLeave && this.taskBarEditedAction) {
1605
+ if ((!this.dragMouseLeave && this.taskBarEditedAction) || (this.parent.viewType === 'ResourceView' &&
1606
+ this.parent.allowTaskbarDragAndDrop)) {
1568
1607
  this.taskBarEditedAction(e);
1569
1608
  this.isMouseDragged = false;
1570
1609
  }
@@ -1673,6 +1712,65 @@ var TaskbarEdit = /** @class */ (function (_super) {
1673
1712
  var args = extend({}, arg);
1674
1713
  var ganttRecord = args.data;
1675
1714
  var taskData = ganttRecord.ganttProperties;
1715
+ var draggedRecIndex = this.parent.currentViewData.indexOf(ganttRecord);
1716
+ if ((args.taskBarEditAction === 'MilestoneDrag' || args.taskBarEditAction === 'ChildDrag') && this.parent.viewType === "ResourceView"
1717
+ && this.parent.allowTaskbarDragAndDrop && this.dragMoveY > 0) {
1718
+ if (this.parent.rowDragAndDropModule) {
1719
+ var flatRecordCol = this.parent.currentViewData;
1720
+ if (flatRecordCol[this.taskBarEditRecord.parentItem.index] && ((this.parent.editedRecords.indexOf(flatRecordCol[this.taskBarEditRecord.parentItem.index]) === -1))) {
1721
+ this.parent.editedRecords.push(flatRecordCol[this.taskBarEditRecord.parentItem.index]);
1722
+ }
1723
+ var ganttrec = void 0;
1724
+ var resHeight = 0;
1725
+ var rowCount = 0;
1726
+ var childIndex_1;
1727
+ var droppedRecord = void 0;
1728
+ var treeGridrows = this.parent.treeGrid.getRows().length;
1729
+ for (var i = 0; i < treeGridrows; i++) {
1730
+ if (resHeight < this.dragMoveY && this.parent.getRowByIndex(i).style.display !== 'none') {
1731
+ rowCount = i;
1732
+ resHeight = resHeight + parseInt(this.parent.getRowByIndex(i).style.height);
1733
+ if (!flatRecordCol[i].parentItem) {
1734
+ ganttrec = flatRecordCol[i];
1735
+ }
1736
+ else {
1737
+ ganttrec = this.parent.getRecordByID(flatRecordCol[i].parentItem.taskId);
1738
+ }
1739
+ }
1740
+ }
1741
+ var draggedRecordtaskbar = this.parent.getRowByIndex(draggedRecIndex).getElementsByClassName('e-taskbar-main-container');
1742
+ var taskbarContainer = this.parent.getRowByIndex(rowCount).getElementsByClassName('e-taskbar-main-container');
1743
+ for (var j = 0; j < taskbarContainer.length; j++) {
1744
+ if (taskbarContainer[j]['offsetTop'] < this.dragMoveY && draggedRecordtaskbar[0].getAttribute('rowuniqueid') !==
1745
+ taskbarContainer[j].getAttribute('rowuniqueid')) {
1746
+ this.draggedRecordMarginTop = taskbarContainer[j]['style'].marginTop;
1747
+ childIndex_1 = taskbarContainer[j].getAttribute('rowuniqueid');
1748
+ }
1749
+ }
1750
+ if (childIndex_1) {
1751
+ droppedRecord = this.parent.currentViewData.filter(function (data) {
1752
+ if (data['rowUniqueID'] === childIndex_1) {
1753
+ return data;
1754
+ }
1755
+ else {
1756
+ return null;
1757
+ }
1758
+ });
1759
+ }
1760
+ if (droppedRecord) {
1761
+ var droppedRecordIndex = this.parent.currentViewData.indexOf(droppedRecord[0]);
1762
+ var position = (droppedRecord[0].hasChildRecords || (!droppedRecord[0].parentItem &&
1763
+ droppedRecord[0].childRecords.length == 0)) ? 'child' : 'below';
1764
+ if (this.parent.rowDragAndDropModule) {
1765
+ this.parent.rowDragAndDropModule.reorderRows([draggedRecIndex], droppedRecordIndex, position);
1766
+ }
1767
+ this.dragMoveY = 0;
1768
+ }
1769
+ }
1770
+ if (this.parent.viewType === 'ResourceView' && this.parent.showOverAllocation) {
1771
+ this.parent.ganttChartModule.renderOverAllocationContainer();
1772
+ }
1773
+ }
1676
1774
  if (args.taskBarEditAction === 'ProgressResizing') {
1677
1775
  if (args.previousData.progress !== taskData.progress) {
1678
1776
  this.parent.setRecordValue('progress', this.getProgressPercent(taskData.width, taskData.progressWidth), taskData, true);
@@ -1864,14 +1962,20 @@ var TaskbarEdit = /** @class */ (function (_super) {
1864
1962
  }
1865
1963
  if ((this.parent.virtualScrollModule && this.parent.enableVirtualization &&
1866
1964
  !this.elementOffsetLeft) || !this.parent.enableVirtualization) {
1867
- if (this.taskBarEditElement.children[0].classList.contains('e-manualparent-main-container')) {
1868
- this.elementOffsetLeft = this.taskBarEditElement.children[0]['offsetLeft'] + this.taskBarEditElement.offsetLeft;
1869
- this.elementOffsetTop = ((this.taskBarEditElement.offsetTop - 5) + this.taskBarEditElement.children[0]['offsetTop']) + scrollTop;
1870
- }
1871
- else {
1965
+ if (!this.parent.allowParentDependency) {
1872
1966
  this.elementOffsetLeft = this.taskBarEditElement.offsetLeft;
1873
1967
  this.elementOffsetTop = this.taskBarEditElement.offsetTop + scrollTop;
1874
1968
  }
1969
+ else {
1970
+ if (this.taskBarEditElement.children[0].classList.contains('e-manualparent-main-container')) {
1971
+ this.elementOffsetLeft = this.taskBarEditElement.children[0]['offsetLeft'] + this.taskBarEditElement.offsetLeft;
1972
+ this.elementOffsetTop = ((this.taskBarEditElement.offsetTop - 5) + this.taskBarEditElement.children[0]['offsetTop']) + scrollTop;
1973
+ }
1974
+ else {
1975
+ this.elementOffsetLeft = this.taskBarEditElement.offsetLeft;
1976
+ this.elementOffsetTop = this.taskBarEditElement.offsetTop + scrollTop;
1977
+ }
1978
+ }
1875
1979
  this.elementOffsetWidth = this.taskBarEditElement.offsetWidth;
1876
1980
  this.elementOffsetHeight = this.taskBarEditElement.offsetHeight;
1877
1981
  }