@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
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 20.4.54
3
+ * version : 21.1.37
4
4
  * Copyright Syncfusion Inc. 2001 - 2020. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-gantt@*",
3
- "_id": "@syncfusion/ej2-gantt@20.4.53",
3
+ "_id": "@syncfusion/ej2-gantt@21.1.35",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-vytG1vjcERh3V5le6Fv0M1iA1RzCwX6QrrC5LXe4nQABltBF6xxPf1/pwL/s1hdBMUXOGi2BKtK0WYo7/SUPGw==",
5
+ "_integrity": "sha512-cP3lpOL2eAFZ2Q5R5P46k7Xp3VWmuu0bOXLdfi0RWJv9cv3ltd9gXByn3FwqoKVbDnHqTcMsfLqIbkDTkHXWEQ==",
6
6
  "_location": "/@syncfusion/ej2-gantt",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,10 +23,10 @@
23
23
  "/@syncfusion/ej2-react-gantt",
24
24
  "/@syncfusion/ej2-vue-gantt"
25
25
  ],
26
- "_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-gantt/-/ej2-gantt-20.4.53.tgz",
27
- "_shasum": "bd1a810cc56f9c53e4d53fb40f5fd7d84118c78f",
26
+ "_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-gantt/-/ej2-gantt-21.1.35.tgz",
27
+ "_shasum": "a4de85ffeb4e0c788b3a33571de043639daa60bd",
28
28
  "_spec": "@syncfusion/ej2-gantt@*",
29
- "_where": "/jenkins/workspace/ease-automation_release_19.1.0.1/packages/included",
29
+ "_where": "/jenkins/workspace/elease-automation_release_21.1.1/packages/included",
30
30
  "author": {
31
31
  "name": "Syncfusion Inc."
32
32
  },
@@ -35,20 +35,20 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~20.4.51",
39
- "@syncfusion/ej2-buttons": "~20.4.53",
40
- "@syncfusion/ej2-calendars": "~20.4.54",
41
- "@syncfusion/ej2-data": "~20.4.48",
42
- "@syncfusion/ej2-dropdowns": "~20.4.54",
43
- "@syncfusion/ej2-grids": "~20.4.54",
44
- "@syncfusion/ej2-inputs": "~20.4.54",
45
- "@syncfusion/ej2-layouts": "~20.4.53",
46
- "@syncfusion/ej2-lists": "~20.4.50",
47
- "@syncfusion/ej2-navigations": "~20.4.53",
48
- "@syncfusion/ej2-notifications": "~20.4.48",
49
- "@syncfusion/ej2-popups": "~20.4.53",
50
- "@syncfusion/ej2-richtexteditor": "~20.4.53",
51
- "@syncfusion/ej2-treegrid": "~20.4.54"
38
+ "@syncfusion/ej2-base": "~21.1.37",
39
+ "@syncfusion/ej2-buttons": "~21.1.37",
40
+ "@syncfusion/ej2-calendars": "~21.1.37",
41
+ "@syncfusion/ej2-data": "~21.1.37",
42
+ "@syncfusion/ej2-dropdowns": "~21.1.37",
43
+ "@syncfusion/ej2-grids": "~21.1.37",
44
+ "@syncfusion/ej2-inputs": "~21.1.37",
45
+ "@syncfusion/ej2-layouts": "~21.1.37",
46
+ "@syncfusion/ej2-lists": "~21.1.37",
47
+ "@syncfusion/ej2-navigations": "~21.1.37",
48
+ "@syncfusion/ej2-notifications": "~21.1.37",
49
+ "@syncfusion/ej2-popups": "~21.1.37",
50
+ "@syncfusion/ej2-richtexteditor": "~21.1.37",
51
+ "@syncfusion/ej2-treegrid": "~21.1.37"
52
52
  },
53
53
  "deprecated": false,
54
54
  "description": "Essential JS 2 Gantt Component",
@@ -73,6 +73,6 @@
73
73
  "url": "git+https://github.com/syncfusion/ej2-gantt.git"
74
74
  },
75
75
  "typings": "index.d.ts",
76
- "version": "20.4.54",
76
+ "version": "21.1.37",
77
77
  "sideEffects": false
78
78
  }
@@ -50,8 +50,10 @@ var CellEdit = /** @class */ (function () {
50
50
  }
51
51
  if (data.hasChildRecords && ((field === taskSettings.endDate && ((!isNullOrUndefined(data['isManual']) &&
52
52
  data['isManual'] === false) || this.parent.taskMode === 'Auto')) || field === taskSettings.duration
53
- || field === taskSettings.progress || field === taskSettings.work || field === 'taskType')) {
54
- args.cancel = true;
53
+ || field === taskSettings.dependency || field === taskSettings.progress || field === taskSettings.work || field === 'taskType')) {
54
+ if ((field === taskSettings.dependency && !this.parent.allowParentDependency) || field !== taskSettings.dependency) {
55
+ args.cancel = true;
56
+ }
55
57
  }
56
58
  else {
57
59
  var callBackPromise_1 = new Deferred();
@@ -101,7 +103,7 @@ var CellEdit = /** @class */ (function () {
101
103
  };
102
104
  CellEdit.prototype.isValueChange = function (args, field) {
103
105
  var data = getValue('data', args);
104
- var editedValue = data[field];
106
+ var editedValue = data["" + field];
105
107
  var previousValue = getValue('previousData', args);
106
108
  if ((isNOU(editedValue) && !isNOU(previousValue)) || (!isNOU(editedValue) && isNOU(previousValue))) {
107
109
  return true;
@@ -269,7 +271,7 @@ var CellEdit = /** @class */ (function () {
269
271
  var ganttSegments = [];
270
272
  var segments = ganttProp.segments;
271
273
  for (var i = 0; i < segments.length; i++) {
272
- var segment = segments[i];
274
+ var segment = segments[parseInt(i.toString(), 10)];
273
275
  var endDate = segment.endDate;
274
276
  endDate = (!isNullOrUndefined(ganttProp.endDate)) && endDate.getTime() <
275
277
  ganttProp.endDate.getTime() && i !== segments.length - 1 ? endDate : ganttProp.endDate;
@@ -468,7 +470,7 @@ var CellEdit = /** @class */ (function () {
468
470
  }
469
471
  }
470
472
  if (!isNOU(index) && index !== -1) {
471
- editedResources.push(previousResource[index]);
473
+ editedResources.push(previousResource[parseInt(index.toString(), 10)]);
472
474
  }
473
475
  else {
474
476
  var resource = resourceData.filter(function (resourceInfo) {
@@ -530,7 +532,7 @@ var CellEdit = /** @class */ (function () {
530
532
  CellEdit.prototype.typeEdited = function (args, editedObj) {
531
533
  var key = 'taskType';
532
534
  var ganttProb = args.data.ganttProperties;
533
- var taskType = editedObj[key];
535
+ var taskType = editedObj["" + key];
534
536
  this.parent.setRecordValue('taskType', taskType, ganttProb, true);
535
537
  //this.parent.dataOperation.updateMappingData(args.data, 'taskType');
536
538
  this.updateEditedRecord(args);
@@ -82,6 +82,7 @@ export declare class ChartScroll {
82
82
  * To set scroll left for chart scroll container
83
83
  *
84
84
  * @param {number} scrollLeft - To set scroll left for scroll container
85
+ * @param {number} leftSign - specifies left sign
85
86
  * @returns {void} .
86
87
  */
87
88
  setScrollLeft(scrollLeft: number, leftSign?: number): void;
@@ -87,9 +87,19 @@ var ChartScroll = /** @class */ (function () {
87
87
  var parent = this.parent;
88
88
  setTimeout(function () {
89
89
  parent.hideMaskRow();
90
+ if (parent.viewType === 'ResourceView' && !parent.allowTaskbarOverlap && parent.showOverAllocation) {
91
+ for (var i = 0; i < parent.currentViewData.length; i++) {
92
+ var tr = parent.chartRowsModule.ganttChartTableBody.childNodes[i];
93
+ if (tr['style'].display !== 'none' && parent.currentViewData[i].hasChildRecords && !parent.currentViewData[i].expanded) {
94
+ parent.treeGrid.getRowByIndex(i)['style'].height = tr['style'].height;
95
+ }
96
+ }
97
+ parent.contentHeight = parent.enableRtl ? parent['element'].getElementsByClassName('e-content')[2].children[0]['offsetHeight'] :
98
+ parent['element'].getElementsByClassName('e-content')[0].children[0]['offsetHeight'];
99
+ document.getElementsByClassName('e-chart-rows-container')[0]['style'].height = parent.contentHeight + 'px';
100
+ }
90
101
  }, 0);
91
102
  };
92
- ;
93
103
  ChartScroll.prototype.updateShimmer = function () {
94
104
  var parent = this.parent;
95
105
  setTimeout(function () {
@@ -129,11 +139,11 @@ var ChartScroll = /** @class */ (function () {
129
139
  scrollArgs.scrollDirection = 'Horizontal';
130
140
  scrollArgs.action = 'HorizontalScroll';
131
141
  }
132
- if ((scrollArgs.scrollDirection != 'Horizontal' && !isNullOrUndefined(scrollArgs.scrollDirection)) && this.parent.enableVirtualization === true && (this.parent.isToolBarClick
142
+ if ((scrollArgs.scrollDirection !== 'Horizontal' && !isNullOrUndefined(scrollArgs.scrollDirection)) && this.parent.enableVirtualization === true && (this.parent.isToolBarClick
133
143
  || isNullOrUndefined(this.parent.isToolBarClick))) {
134
144
  this.parent.isVirtualScroll = true;
135
145
  if (this.parent.showIndicator || isNullOrUndefined(this.parent.showIndicator)) {
136
- if (!this.parent.enableVirtualMaskRow && this.parent.enableVirtualization && this.parent.loadingIndicator.indicatorType === "Spinner") {
146
+ if (!this.parent.enableVirtualMaskRow && this.parent.enableVirtualization && this.parent.loadingIndicator.indicatorType === 'Spinner') {
137
147
  this.updateSpinner();
138
148
  }
139
149
  }
@@ -177,11 +187,12 @@ var ChartScroll = /** @class */ (function () {
177
187
  * To set scroll left for chart scroll container
178
188
  *
179
189
  * @param {number} scrollLeft - To set scroll left for scroll container
190
+ * @param {number} leftSign - specifies left sign
180
191
  * @returns {void} .
181
192
  */
182
193
  ChartScroll.prototype.setScrollLeft = function (scrollLeft, leftSign) {
183
194
  if (leftSign) {
184
- scrollLeft = leftSign == -1 && this.parent.enableRtl ? -scrollLeft : scrollLeft;
195
+ scrollLeft = leftSign === -1 && this.parent.enableRtl ? -scrollLeft : scrollLeft;
185
196
  }
186
197
  this.element.scrollLeft = scrollLeft;
187
198
  this.parent.ganttChartModule.chartTimelineContainer.scrollLeft = this.element.scrollLeft;
@@ -141,9 +141,10 @@ var ConnectorLineEdit = /** @class */ (function () {
141
141
  var from = 'from';
142
142
  var to = 'to';
143
143
  this.parent.connectorLineModule.removeConnectorLineById('parent' + predecessor[from] + 'child' + predecessor[to]);
144
- parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[from]);
145
- childGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[to]);
146
- if (parentGanttRecord || childGanttRecord) {
144
+ parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor["" + from]);
145
+ childGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor["" + to]);
146
+ if ((!this.parent.allowParentDependency && (parentGanttRecord && parentGanttRecord.expanded === true) ||
147
+ (childGanttRecord && childGanttRecord.expanded === true)) || (this.parent.allowParentDependency && (parentGanttRecord || childGanttRecord))) {
147
148
  connectorObj =
148
149
  this.parent.predecessorModule.updateConnectorLineObject(parentGanttRecord, childGanttRecord, predecessor);
149
150
  if (!isNullOrUndefined(connectorObj)) {
@@ -196,8 +197,8 @@ var ConnectorLineEdit = /** @class */ (function () {
196
197
  if (!isNullOrUndefined(values[0])) {
197
198
  var ids = this.parent.viewType === 'ResourceView' ? this.parent.getTaskIds() : this.parent.ids;
198
199
  if (ids.indexOf(values[0]) === -1) {
199
- if (values[0].indexOf(" ") != -1) {
200
- match = values[0].split(" ");
200
+ if (values[0].indexOf(' ') !== -1) {
201
+ match = values[0].split(' ');
201
202
  if (match.length === 1) {
202
203
  match = values[0].match(/(\d+|[A-z]+)/g);
203
204
  }
@@ -276,7 +277,7 @@ var ConnectorLineEdit = /** @class */ (function () {
276
277
  var parentRec = rec;
277
278
  if (rec.parentItem) {
278
279
  parentRec = this.parent.flatData.filter(function (item) {
279
- return item.uniqueID == rec.parentUniqueID;
280
+ return item.uniqueID === rec.parentUniqueID;
280
281
  })[0];
281
282
  if (parentRec.parentItem) {
282
283
  parentRec = this.getRootParent(parentRec);
@@ -357,11 +358,20 @@ var ConnectorLineEdit = /** @class */ (function () {
357
358
  if (!isNullOrUndefined(predecessorString) && predecessorString.length > 0) {
358
359
  predecessorIdArray = this.idFromPredecessor(predecessorString);
359
360
  var _loop_2 = function (count) {
360
- if (parseInt(predecessorIdArray[predecessorIdArray.length - 1]) !== ganttRecord[this_2.parent.taskFields.id]) {
361
- var num = this_2.parent.ids.indexOf(predecessorIdArray[predecessorIdArray.length - 1]);
362
- var fromRecord = this_2.parent.currentViewData[num];
363
- if (fromRecord && ganttRecord) {
364
- flag = this_2.validateParentPredecessor(fromRecord, ganttRecord);
361
+ //Check edited item has parent item in predecessor collection
362
+ if (!this_2.parent.allowParentDependency) {
363
+ var checkParent = this_2.checkParentRelation(ganttRecord, predecessorIdArray);
364
+ if (!checkParent) {
365
+ return { value: false };
366
+ }
367
+ }
368
+ else {
369
+ if (parseInt(predecessorIdArray[predecessorIdArray.length - 1]) !== ganttRecord[this_2.parent.taskFields.id]) {
370
+ var num = this_2.parent.ids.indexOf(predecessorIdArray[predecessorIdArray.length - 1]);
371
+ var fromRecord = this_2.parent.currentViewData[num];
372
+ if (fromRecord && ganttRecord) {
373
+ flag = this_2.validateParentPredecessor(fromRecord, ganttRecord);
374
+ }
365
375
  }
366
376
  }
367
377
  // Check if predecessor exist more then one
@@ -602,7 +612,6 @@ var ConnectorLineEdit = /** @class */ (function () {
602
612
  ConnectorLineEdit.prototype.applyPredecessorOption = function () {
603
613
  var args = this.parent.currentEditedArgs;
604
614
  var ganttRecord = args.data;
605
- var parentData;
606
615
  if (args.validateMode.respectLink) {
607
616
  this.parent.editModule.reUpdatePreviousRecords();
608
617
  this.parent.chartRowsModule.refreshRecords([args.data]);
@@ -612,7 +621,9 @@ var ConnectorLineEdit = /** @class */ (function () {
612
621
  this.parent.editModule.updateEditedTask(args.editEventArgs);
613
622
  }
614
623
  else if (args.validateMode.preserveLinkWithEditing) {
615
- this.calculateOffset(ganttRecord);
624
+ if (this.parent.UpdateOffsetOnTaskbarEdit) {
625
+ this.calculateOffset(ganttRecord);
626
+ }
616
627
  this.parent.editModule.updateEditedTask(args.editEventArgs);
617
628
  }
618
629
  };
@@ -643,7 +654,7 @@ var ConnectorLineEdit = /** @class */ (function () {
643
654
  var prevPredecessor = extend([], record.ganttProperties.predecessor, [], true);
644
655
  var validPredecessor = this.parent.predecessorModule.getValidPredecessor(record);
645
656
  for (var i = 0; i < validPredecessor.length; i++) {
646
- var predecessor = validPredecessor[i];
657
+ var predecessor = validPredecessor[parseInt(i.toString(), 10)];
647
658
  var parentTask = this.parent.connectorLineModule.getRecordByID(predecessor.from);
648
659
  var offset = void 0;
649
660
  if (isScheduledTask(parentTask.ganttProperties) && isScheduledTask(record.ganttProperties)) {
@@ -723,7 +734,7 @@ var ConnectorLineEdit = /** @class */ (function () {
723
734
  var parentPredecessor = extend([], [], parentGanttRecord.ganttProperties.predecessor, true);
724
735
  var index = getIndex(predecessor[i], 'from', prevPredecessor, 'to');
725
736
  prevPredecessor.splice(index, 1);
726
- var parentIndex = getIndex(predecessor[i], 'from', parentPredecessor, 'to');
737
+ var parentIndex = getIndex(predecessor[parseInt(i.toString(), 10)], 'from', parentPredecessor, 'to');
727
738
  parentPredecessor.splice(parentIndex, 1);
728
739
  this.parent.setRecordValue('predecessor', parentPredecessor, parentGanttRecord.ganttProperties, true);
729
740
  }
@@ -834,41 +845,41 @@ var ConnectorLineEdit = /** @class */ (function () {
834
845
  var violationType = null;
835
846
  if (predecessor[i].type === 'FS') {
836
847
  if (ganttTaskData.startDate < startDate) {
837
- this.validationPredecessor.push(predecessor[i]);
848
+ this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);
838
849
  violationType = 'taskBeforePredecessor_FS';
839
850
  }
840
851
  else if (ganttTaskData.startDate > startDate) {
841
- this.validationPredecessor.push(predecessor[i]);
852
+ this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);
842
853
  violationType = 'taskAfterPredecessor_FS';
843
854
  }
844
855
  }
845
856
  else if (predecessor[i].type === 'SS') {
846
857
  if (ganttTaskData.startDate < startDate) {
847
- this.validationPredecessor.push(predecessor[i]);
858
+ this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);
848
859
  violationType = 'taskBeforePredecessor_SS';
849
860
  }
850
861
  else if (ganttTaskData.startDate > startDate) {
851
- this.validationPredecessor.push(predecessor[i]);
862
+ this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);
852
863
  violationType = 'taskAfterPredecessor_SS';
853
864
  }
854
865
  }
855
866
  else if (predecessor[i].type === 'FF') {
856
867
  if (endDate <= parentGanttRecord.ganttProperties.endDate) {
857
- this.validationPredecessor.push(predecessor[i]);
868
+ this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);
858
869
  violationType = 'taskBeforePredecessor_FF';
859
870
  }
860
871
  else if (endDate > parentGanttRecord.ganttProperties.endDate) {
861
- this.validationPredecessor.push(predecessor[i]);
872
+ this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);
862
873
  violationType = 'taskAfterPredecessor_FF';
863
874
  }
864
875
  }
865
876
  else if (predecessor[i].type === 'SF') {
866
877
  if (endDate < parentGanttRecord.ganttProperties.startDate) {
867
- this.validationPredecessor.push(predecessor[i]);
878
+ this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);
868
879
  violationType = 'taskBeforePredecessor_SF';
869
880
  }
870
881
  else if (endDate >= parentGanttRecord.ganttProperties.startDate) {
871
- this.validationPredecessor.push(predecessor[i]);
882
+ this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);
872
883
  violationType = 'taskAfterPredecessor_SF';
873
884
  }
874
885
  }
@@ -899,13 +910,13 @@ var ConnectorLineEdit = /** @class */ (function () {
899
910
  var prevPredecessor = prevData.ganttProperties.predecessor;
900
911
  if (!isNullOrUndefined(prevPredecessor)) {
901
912
  for (var p = 0; p < prevPredecessor.length; p++) {
902
- var parentGanttRecord = this.parent.connectorLineModule.getRecordByID(prevPredecessor[p].from);
913
+ var parentGanttRecord = this.parent.connectorLineModule.getRecordByID(prevPredecessor[parseInt(p.toString(), 10)].from);
903
914
  if (parentGanttRecord === data) {
904
- data.ganttProperties.predecessor.push(prevPredecessor[p]);
915
+ data.ganttProperties.predecessor.push(prevPredecessor[parseInt(p.toString(), 10)]);
905
916
  }
906
917
  else {
907
918
  var parentPredecessor = extend([], [], parentGanttRecord.ganttProperties.predecessor, true);
908
- var parentIndex = getIndex(prevPredecessor[p], 'from', parentPredecessor, 'to');
919
+ var parentIndex = getIndex(prevPredecessor[parseInt(p.toString(), 10)], 'from', parentPredecessor, 'to');
909
920
  if (parentIndex !== -1) {
910
921
  parentPredecessor.splice(parentIndex, 1);
911
922
  this.parent.setRecordValue('predecessor', parentPredecessor, parentGanttRecord.ganttProperties, true);
@@ -915,9 +926,9 @@ var ConnectorLineEdit = /** @class */ (function () {
915
926
  }
916
927
  if (!isNullOrUndefined(newPredecessor)) {
917
928
  for (var n = 0; n < newPredecessor.length; n++) {
918
- var parentGanttRecord = this.parent.connectorLineModule.getRecordByID(newPredecessor[n].from);
929
+ var parentGanttRecord = this.parent.connectorLineModule.getRecordByID(newPredecessor[parseInt(n.toString(), 10)].from);
919
930
  var parentPredecessor = extend([], [], parentGanttRecord.ganttProperties.predecessor, true);
920
- parentPredecessor.push(newPredecessor[n]);
931
+ parentPredecessor.push(newPredecessor[parseInt(n.toString(), 10)]);
921
932
  this.parent.setRecordValue('predecessor', parentPredecessor, parentGanttRecord.ganttProperties, true);
922
933
  }
923
934
  }
@@ -336,7 +336,7 @@ var ContextMenu = /** @class */ (function () {
336
336
  this.parent.selectionModule.selectRow(rowIndex);
337
337
  }
338
338
  if (!args.parentItem) {
339
- this.rowData = this.parent.updatedRecords[rowIndex];
339
+ this.rowData = this.parent.updatedRecords[parseInt(rowIndex.toString(), 10)];
340
340
  }
341
341
  for (var _i = 0, _a = args.items; _i < _a.length; _i++) {
342
342
  var item = _a[_i];
@@ -468,7 +468,7 @@ var ContextMenu = /** @class */ (function () {
468
468
  this.parent.selectionModule.getSelectedRowCellIndexes().length === 1 ? true : false : false;
469
469
  var prevRecord = this.parent.updatedRecords[this.parent.selectionModule.getSelectedRowIndexes()[0] - 1];
470
470
  if (!this.parent.editSettings.allowEditing || index === 0 || index === -1 || !isSelected ||
471
- this.parent.viewType === 'ResourceView' || this.parent.updatedRecords[index].level - prevRecord.level === 1) {
471
+ this.parent.viewType === 'ResourceView' || this.parent.updatedRecords[parseInt(index.toString(), 10)].level - prevRecord.level === 1) {
472
472
  this.updateItemVisibility(item.text);
473
473
  }
474
474
  }
@@ -484,7 +484,7 @@ var ContextMenu = /** @class */ (function () {
484
484
  var isSelect = this.parent.selectionModule ? this.parent.selectionModule.selectedRowIndexes.length === 1 ||
485
485
  this.parent.selectionModule.getSelectedRowCellIndexes().length === 1 ? true : false : false;
486
486
  if (!this.parent.editSettings.allowEditing || ind === -1 || ind === 0 || !isSelect ||
487
- this.parent.viewType === 'ResourceView' || this.parent.updatedRecords[ind].level === 0) {
487
+ this.parent.viewType === 'ResourceView' || this.parent.updatedRecords[parseInt(ind.toString(), 10)].level === 0) {
488
488
  this.updateItemVisibility(item.text);
489
489
  }
490
490
  }
@@ -494,7 +494,7 @@ var ContextMenu = /** @class */ (function () {
494
494
  {
495
495
  var taskSettings = this.parent.taskFields;
496
496
  if (this.parent.readOnly || !taskbarElement || isNullOrUndefined(taskSettings.segments) ||
497
- this.parent.currentViewData[rowIndex].hasChildRecords) {
497
+ this.parent.currentViewData[parseInt(rowIndex.toString(), 10)].hasChildRecords) {
498
498
  this.updateItemVisibility(item.text);
499
499
  }
500
500
  break;
@@ -699,7 +699,7 @@ var ContextMenu = /** @class */ (function () {
699
699
  };
700
700
  ContextMenu.prototype.contextMenuOnClose = function (args) {
701
701
  var parent = 'parentObj';
702
- if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {
702
+ if (args.items.length > 0 && args.items[0]["" + parent] instanceof Menu) {
703
703
  this.revertItemStatus();
704
704
  }
705
705
  };
@@ -20,7 +20,9 @@ var Dependency = /** @class */ (function () {
20
20
  for (var count = length; count >= 0; count--) {
21
21
  var ganttData = predecessorTasks[count];
22
22
  var ganttProp = ganttData.ganttProperties;
23
- this.ensurePredecessorCollectionHelper(ganttData, ganttProp);
23
+ if ((!ganttData.hasChildRecords && !this.parent.allowParentDependency) || this.parent.allowParentDependency) {
24
+ this.ensurePredecessorCollectionHelper(ganttData, ganttProp);
25
+ }
24
26
  }
25
27
  };
26
28
  /**
@@ -184,18 +186,26 @@ var Dependency = /** @class */ (function () {
184
186
  offsetUnit: offsetUnits.durationUnit,
185
187
  offset: offsetUnits.duration
186
188
  };
187
- var fromData = _this.parent.connectorLineModule.getRecordByID(obj.to);
188
- var toData = _this.parent.connectorLineModule.getRecordByID(obj.from);
189
- var isValid;
190
- if (_this.parent.connectorLineEditModule && toData && fromData) {
191
- isValid = _this.parent.connectorLineEditModule.validateParentPredecessor(toData, fromData);
192
- if (isValid)
189
+ var isOwnParent = _this.checkIsParent(match[0]);
190
+ if (!_this.parent.allowParentDependency) {
191
+ if (!isOwnParent) {
193
192
  collection.push(obj);
193
+ }
194
194
  }
195
195
  else {
196
- collection.push(obj);
196
+ var fromData = _this.parent.connectorLineModule.getRecordByID(obj.to);
197
+ var toData = _this.parent.connectorLineModule.getRecordByID(obj.from);
198
+ var isValid = void 0;
199
+ if (_this.parent.connectorLineEditModule && toData && fromData) {
200
+ isValid = _this.parent.connectorLineEditModule.validateParentPredecessor(toData, fromData);
201
+ if (isValid)
202
+ collection.push(obj);
203
+ }
204
+ else {
205
+ collection.push(obj);
206
+ }
207
+ match.splice(0);
197
208
  }
198
- match.splice(0);
199
209
  });
200
210
  return collection;
201
211
  };
@@ -318,7 +328,9 @@ var Dependency = /** @class */ (function () {
318
328
  var length = predecessorsCollection.length;
319
329
  for (var count = 0; count < length; count++) {
320
330
  ganttRecord = predecessorsCollection[count];
321
- this.updatePredecessorHelper(ganttRecord, predecessorsCollection);
331
+ if ((!ganttRecord.hasChildRecords && !this.parent.allowParentDependency) || this.parent.allowParentDependency) {
332
+ this.updatePredecessorHelper(ganttRecord, predecessorsCollection);
333
+ }
322
334
  }
323
335
  };
324
336
  /**
@@ -367,12 +379,16 @@ var Dependency = /** @class */ (function () {
367
379
  * @private
368
380
  */
369
381
  Dependency.prototype.updatedRecordsDateByPredecessor = function () {
382
+ if (!this.parent.autoCalculateDateScheduling) {
383
+ return;
384
+ }
370
385
  var flatData = this.parent.flatData;
371
386
  var totLength = this.parent.flatData.length;
372
387
  for (var count = 0; count < totLength; count++) {
373
388
  if (flatData[count].ganttProperties.predecessorsName) {
374
389
  this.validatePredecessorDates(flatData[count]);
375
- if (flatData[count].hasChildRecords && this.parent.editModule && !this.parent.allowUnscheduledTasks) {
390
+ if (flatData[count].hasChildRecords && this.parent.editModule && !this.parent.allowUnscheduledTasks
391
+ && this.parent.allowParentDependency) {
376
392
  this.parent.editModule['updateChildItems'](flatData[count]);
377
393
  }
378
394
  }
@@ -417,7 +433,7 @@ var Dependency = /** @class */ (function () {
417
433
  var predecessor = predecessors[count];
418
434
  parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor.from);
419
435
  record = this.parent.connectorLineModule.getRecordByID(predecessor.to);
420
- if (this.parent.isLoad && this.parentPredecessors.indexOf(ganttRecord) == -1
436
+ if (this.parent.allowParentDependency && this.parent.isLoad && this.parentPredecessors.indexOf(ganttRecord) == -1
421
437
  && (ganttRecord.hasChildRecords || record.hasChildRecords)) {
422
438
  this.parentPredecessors.push(ganttRecord);
423
439
  }
@@ -1,4 +1,4 @@
1
- import { remove, extend, isNullOrUndefined, createElement, getValue, setValue, closest } from '@syncfusion/ej2-base';
1
+ import { remove, extend, isNullOrUndefined, createElement, getValue, setValue, closest, SanitizeHtmlHelper } from '@syncfusion/ej2-base';
2
2
  import { DataManager, DataUtil } from '@syncfusion/ej2-data';
3
3
  import { Dialog } from '@syncfusion/ej2-popups';
4
4
  import { Tab } from '@syncfusion/ej2-navigations';
@@ -877,7 +877,7 @@ var DialogEdit = /** @class */ (function () {
877
877
  targetId = inputElement.querySelector('input').getAttribute('id');
878
878
  inputElement = inputElement.querySelector('#' + targetId);
879
879
  }
880
- else if (!isNullOrUndefined(args.event) && !isNullOrUndefined(args.event.path[1])) {
880
+ else if (!isNullOrUndefined(args.event) && !isNullOrUndefined(args.event.path) && !isNullOrUndefined(args.event.path)[1]) {
881
881
  inputElement = args.event.path[1];
882
882
  targetId = inputElement.querySelector('input').getAttribute('id');
883
883
  inputElement = inputElement.querySelector('#' + targetId);
@@ -918,6 +918,9 @@ var DialogEdit = /** @class */ (function () {
918
918
  if (!isNullOrUndefined(tasks.startDate) && tasks.startDate !== colName) {
919
919
  this.updateScheduleFields(dialog, ganttProp, 'startDate');
920
920
  }
921
+ if (tasks.endDate === colName && !isNullOrUndefined(ganttProp.startDate) && !isNullOrUndefined(args.value) && ganttProp.startDate.getTime() > args.value) {
922
+ this.updateScheduleFields(dialog, ganttProp, 'endDate');
923
+ }
921
924
  if (!isNullOrUndefined(tasks.endDate) && tasks.endDate !== colName) {
922
925
  this.updateScheduleFields(dialog, ganttProp, 'endDate');
923
926
  }
@@ -1108,6 +1111,9 @@ var DialogEdit = /** @class */ (function () {
1108
1111
  if (taskSettings.endDate === columnName) {
1109
1112
  if (value !== '') {
1110
1113
  var endDate = this.parent.dateValidationModule.getDateFromFormat(value);
1114
+ if (isNullOrUndefined(ganttProp.startDate) && isNullOrUndefined(endDate) && ganttProp.startDate.getTime() > endDate.getTime()) {
1115
+ endDate = ganttProp.endDate;
1116
+ }
1111
1117
  if (endDate.getHours() === 0 && ganttObj.defaultEndTime !== 86400) {
1112
1118
  this.parent.dateValidationModule.setTime(ganttObj.defaultEndTime, endDate);
1113
1119
  }
@@ -1490,6 +1496,9 @@ var DialogEdit = /** @class */ (function () {
1490
1496
  item.content = this.renderGeneralTab(item.content);
1491
1497
  }
1492
1498
  else if (item.content === 'Dependency') {
1499
+ if (this.editedRecord.hasChildRecords && !this.parent.allowParentDependency) {
1500
+ item.disabled = true;
1501
+ }
1493
1502
  item.content = this.renderPredecessorTab(item.content);
1494
1503
  }
1495
1504
  else if (item.content === 'Resources') {
@@ -1951,27 +1960,34 @@ var DialogEdit = /** @class */ (function () {
1951
1960
  this.preTableCollection = [];
1952
1961
  for (var i = 0; i < flatData.length; i++) {
1953
1962
  var data = flatData[i];
1954
- var currentFlatData = data;
1955
- if (data.parentUniqueID === this.beforeOpenArgs.rowData['uniqueID']) {
1956
- this.isValidData = false;
1957
- }
1958
- else {
1959
- do {
1960
- if (currentFlatData.parentItem) {
1961
- currentFlatData = this.parent.flatData[this.parent.ids.indexOf(currentFlatData.parentItem.taskId)];
1962
- if (currentFlatData.uniqueID === this.beforeOpenArgs.rowData['uniqueID']) {
1963
- this.isValidData = false;
1964
- break;
1963
+ if (this.parent.allowParentDependency) {
1964
+ var currentFlatData = data;
1965
+ if (data.parentUniqueID === this.beforeOpenArgs.rowData['uniqueID']) {
1966
+ this.isValidData = false;
1967
+ }
1968
+ else {
1969
+ do {
1970
+ if (currentFlatData.parentItem) {
1971
+ currentFlatData = this.parent.flatData[this.parent.ids.indexOf(currentFlatData.parentItem.taskId)];
1972
+ if (currentFlatData.uniqueID === this.beforeOpenArgs.rowData['uniqueID']) {
1973
+ this.isValidData = false;
1974
+ break;
1975
+ }
1965
1976
  }
1966
- }
1967
- } while (currentFlatData.parentItem);
1968
- }
1969
- if (data.hasChildRecords && this.isValidData) {
1970
- this.isValidData = this.isParentValid(data.childRecords);
1977
+ } while (currentFlatData.parentItem);
1978
+ }
1979
+ if (data.hasChildRecords && this.isValidData) {
1980
+ this.isValidData = this.isParentValid(data.childRecords);
1981
+ }
1982
+ if (!this.isValidData) {
1983
+ this.isValidData = true;
1984
+ continue;
1985
+ }
1971
1986
  }
1972
- if (!this.isValidData) {
1973
- this.isValidData = true;
1974
- continue;
1987
+ else {
1988
+ if (data.hasChildRecords) {
1989
+ continue;
1990
+ }
1975
1991
  }
1976
1992
  var taskId = this.parent.viewType === 'ResourceView' ? data.ganttProperties.taskId.toString()
1977
1993
  : data.ganttProperties.rowUniqueID.toString();
@@ -2208,6 +2224,10 @@ var DialogEdit = /** @class */ (function () {
2208
2224
  }
2209
2225
  else {
2210
2226
  tasksData[fieldName] = controlObj.value;
2227
+ if (this.parent.enableHtmlSanitizer && typeof (controlObj.value) === 'string') {
2228
+ controlObj.value = SanitizeHtmlHelper.sanitize(controlObj.value);
2229
+ tasksData[fieldName] = controlObj.value;
2230
+ }
2211
2231
  }
2212
2232
  }
2213
2233
  }