@syncfusion/ej2-gantt 20.1.58 → 20.2.36

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 (105) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/ej2-gantt.umd.min.js +2 -2
  3. package/dist/ej2-gantt.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-gantt.es2015.js +1100 -74
  5. package/dist/es6/ej2-gantt.es2015.js.map +1 -1
  6. package/dist/es6/ej2-gantt.es5.js +1099 -71
  7. package/dist/es6/ej2-gantt.es5.js.map +1 -1
  8. package/dist/global/ej2-gantt.min.js +2 -2
  9. package/dist/global/ej2-gantt.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +18 -18
  12. package/src/gantt/actions/actions.d.ts +1 -0
  13. package/src/gantt/actions/actions.js +1 -0
  14. package/src/gantt/actions/cell-edit.js +5 -3
  15. package/src/gantt/actions/connector-line-edit.js +20 -6
  16. package/src/gantt/actions/context-menu.js +3 -4
  17. package/src/gantt/actions/critical-path.d.ts +26 -0
  18. package/src/gantt/actions/critical-path.js +735 -0
  19. package/src/gantt/actions/dependency.js +3 -0
  20. package/src/gantt/actions/dialog-edit.js +1 -1
  21. package/src/gantt/actions/edit.js +29 -3
  22. package/src/gantt/actions/filter.js +1 -1
  23. package/src/gantt/actions/keyboard.js +2 -2
  24. package/src/gantt/actions/selection.js +3 -0
  25. package/src/gantt/actions/taskbar-edit.js +6 -4
  26. package/src/gantt/actions/toolbar.js +22 -4
  27. package/src/gantt/base/css-constants.d.ts +12 -0
  28. package/src/gantt/base/css-constants.js +12 -0
  29. package/src/gantt/base/date-processor.d.ts +1 -1
  30. package/src/gantt/base/date-processor.js +8 -2
  31. package/src/gantt/base/enum.d.ts +3 -1
  32. package/src/gantt/base/gantt-chart.js +6 -2
  33. package/src/gantt/base/gantt-model.d.ts +8 -1
  34. package/src/gantt/base/gantt.d.ts +32 -1
  35. package/src/gantt/base/gantt.js +133 -5
  36. package/src/gantt/base/interface.d.ts +16 -0
  37. package/src/gantt/base/splitter.js +4 -0
  38. package/src/gantt/base/task-processor.js +19 -6
  39. package/src/gantt/base/tree-grid.js +1 -1
  40. package/src/gantt/export/export-helper.js +19 -6
  41. package/src/gantt/export/pdf-base/pdf-style/gantt-theme.js +16 -0
  42. package/src/gantt/renderer/chart-rows.js +16 -5
  43. package/src/gantt/renderer/nonworking-day.js +5 -2
  44. package/src/gantt/renderer/timeline.js +35 -14
  45. package/src/global.js +1 -1
  46. package/styles/bootstrap-dark.css +272 -14
  47. package/styles/bootstrap.css +271 -14
  48. package/styles/bootstrap4.css +273 -12
  49. package/styles/bootstrap5-dark.css +272 -15
  50. package/styles/bootstrap5.css +272 -15
  51. package/styles/fabric-dark.css +270 -12
  52. package/styles/fabric.css +276 -18
  53. package/styles/fluent-dark.css +272 -14
  54. package/styles/fluent.css +272 -14
  55. package/styles/gantt/_bootstrap-dark-definition.scss +59 -16
  56. package/styles/gantt/_bootstrap-definition.scss +57 -14
  57. package/styles/gantt/_bootstrap4-definition.scss +65 -21
  58. package/styles/gantt/_bootstrap5-definition.scss +55 -12
  59. package/styles/gantt/_fabric-dark-definition.scss +58 -15
  60. package/styles/gantt/_fabric-definition.scss +58 -15
  61. package/styles/gantt/_fluent-definition.scss +53 -10
  62. package/styles/gantt/_fusionnew-definition.scss +212 -0
  63. package/styles/gantt/_highcontrast-definition.scss +57 -14
  64. package/styles/gantt/_highcontrast-light-definition.scss +55 -12
  65. package/styles/gantt/_layout.scss +293 -7
  66. package/styles/gantt/_material-dark-definition.scss +60 -16
  67. package/styles/gantt/_material-definition.scss +65 -21
  68. package/styles/gantt/_material3-definition.scss +213 -0
  69. package/styles/gantt/_tailwind-definition.scss +52 -8
  70. package/styles/gantt/_theme.scss +56 -1
  71. package/styles/gantt/bootstrap-dark.css +272 -14
  72. package/styles/gantt/bootstrap.css +271 -14
  73. package/styles/gantt/bootstrap4.css +273 -12
  74. package/styles/gantt/bootstrap5-dark.css +272 -15
  75. package/styles/gantt/bootstrap5.css +272 -15
  76. package/styles/gantt/fabric-dark.css +270 -12
  77. package/styles/gantt/fabric.css +276 -18
  78. package/styles/gantt/fluent-dark.css +272 -14
  79. package/styles/gantt/fluent.css +272 -14
  80. package/styles/gantt/highcontrast-light.css +260 -13
  81. package/styles/gantt/highcontrast.css +271 -13
  82. package/styles/gantt/icons/_bootstrap-dark.scss +12 -1
  83. package/styles/gantt/icons/_bootstrap.scss +12 -1
  84. package/styles/gantt/icons/_bootstrap4.scss +12 -1
  85. package/styles/gantt/icons/_bootstrap5.scss +12 -0
  86. package/styles/gantt/icons/_fabric-dark.scss +12 -0
  87. package/styles/gantt/icons/_fabric.scss +12 -0
  88. package/styles/gantt/icons/_fluent.scss +12 -0
  89. package/styles/gantt/icons/_fusionnew.scss +120 -0
  90. package/styles/gantt/icons/_highcontrast.scss +12 -0
  91. package/styles/gantt/icons/_material-dark.scss +12 -0
  92. package/styles/gantt/icons/_material.scss +12 -0
  93. package/styles/gantt/icons/_material3.scss +124 -0
  94. package/styles/gantt/icons/_tailwind-dark.scss +12 -0
  95. package/styles/gantt/icons/_tailwind.scss +12 -0
  96. package/styles/gantt/material-dark.css +277 -12
  97. package/styles/gantt/material.css +279 -14
  98. package/styles/gantt/tailwind-dark.css +279 -15
  99. package/styles/gantt/tailwind.css +276 -12
  100. package/styles/highcontrast-light.css +260 -13
  101. package/styles/highcontrast.css +271 -13
  102. package/styles/material-dark.css +277 -12
  103. package/styles/material.css +279 -14
  104. package/styles/tailwind-dark.css +279 -15
  105. package/styles/tailwind.css +276 -12
@@ -34,6 +34,7 @@ import { DateProcessor } from './date-processor';
34
34
  import { ChartRows } from '../renderer/chart-rows';
35
35
  import { Dependency } from '../actions/dependency';
36
36
  import * as cls from './css-constants';
37
+ import { TreeGrid } from '@syncfusion/ej2-treegrid';
37
38
  import { getActualProperties } from '@syncfusion/ej2-grids';
38
39
  import { ConnectorLine } from '../renderer/connector-line';
39
40
  import { Splitter } from './splitter';
@@ -102,6 +103,7 @@ var Gantt = /** @class */ (function (_super) {
102
103
  * @private
103
104
  */
104
105
  _this.isEdit = false;
106
+ setValue('mergePersistData', _this.mergePersistGanttData, _this);
105
107
  return _this;
106
108
  }
107
109
  /**
@@ -172,8 +174,10 @@ var Gantt = /** @class */ (function (_super) {
172
174
  this.dataOperation.getNonWorkingDayIndex();
173
175
  this.columnMapping = {};
174
176
  this.controlId = this.element.id;
175
- this.cloneProjectStartDate = null;
176
- this.cloneProjectEndDate = null;
177
+ this.cloneProjectStartDate = this.enablePersistence && this.cloneProjectStartDate ?
178
+ this.cloneProjectStartDate : null;
179
+ this.cloneProjectEndDate = this.enablePersistence && this.cloneProjectEndDate ?
180
+ this.cloneProjectEndDate : null;
177
181
  this.totalHolidayDates = this.dataOperation.getHolidayDates();
178
182
  this.ganttChartModule = new GanttChart(this);
179
183
  this.timelineModule = new Timeline(this);
@@ -440,6 +444,10 @@ var Gantt = /** @class */ (function (_super) {
440
444
  this.updateRowHeightInConnectorLine(this.updatedConnectorLineCollection);
441
445
  this.connectorLineModule.renderConnectorLines(this.updatedConnectorLineCollection);
442
446
  }
447
+ if (this.enableCriticalPath) {
448
+ var criticalModule = this.criticalPathModule;
449
+ this.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);
450
+ }
443
451
  }
444
452
  };
445
453
  Gantt.prototype.keyActionHandler = function (e) {
@@ -771,6 +779,39 @@ var Gantt = /** @class */ (function (_super) {
771
779
  var value = this.dateValidationModule.getWorkString(work, workUnit);
772
780
  return value;
773
781
  };
782
+ Gantt.prototype.updateTreeColumns = function () {
783
+ var temp;
784
+ var field;
785
+ var gridColumns = this.treeGrid.grid.getColumns();
786
+ if (this.treeColumnIndex !== -1 && this.columns[this.treeColumnIndex] &&
787
+ !isNullOrUndefined(this.columns[this.treeColumnIndex]['template'])) {
788
+ temp = this.columns[this.treeColumnIndex]['template'];
789
+ field = this.columns[this.treeColumnIndex]['field'];
790
+ }
791
+ var gridColumn;
792
+ for (var i = 0; i < gridColumns.length; i++) {
793
+ gridColumn = {};
794
+ for (var j = 0; j < this.columns.length; j++) {
795
+ if (this.columns[j]['field'] == gridColumns[i].field) {
796
+ for (var _i = 0, _a = Object.keys(this.columns[j]); _i < _a.length; _i++) {
797
+ var prop = _a[_i];
798
+ if (!isUndefined(this.columns[j][prop])) {
799
+ gridColumn[prop] = gridColumns[i][prop];
800
+ }
801
+ gridColumn.visible = gridColumns[i].visible;
802
+ gridColumn.width = gridColumns[i].width;
803
+ }
804
+ this.columns[j] = (gridColumn);
805
+ if (this.columns[j]['type'] !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {
806
+ this.columns[j]['template'] = temp;
807
+ }
808
+ }
809
+ }
810
+ }
811
+ if (this.columns.length > 0) {
812
+ this.treeGrid.setProperties({ columns: this.columns }, true);
813
+ }
814
+ };
774
815
  /**
775
816
  *
776
817
  * @param {object} args .
@@ -791,6 +832,9 @@ var Gantt = /** @class */ (function (_super) {
791
832
  this.splitterElement.style.height = '100%';
792
833
  }
793
834
  if (this.isLoad) {
835
+ if (this.enablePersistence) {
836
+ this.updateTreeColumns();
837
+ }
794
838
  this.updateCurrentViewData();
795
839
  if (!this.enableVirtualization) {
796
840
  this.updateContentHeight();
@@ -820,7 +864,14 @@ var Gantt = /** @class */ (function (_super) {
820
864
  else {
821
865
  this.getCurrentRecords(args);
822
866
  }
867
+ if (this.enableCriticalPath && this.criticalPathModule) {
868
+ this.criticalPathModule.showCriticalPath(this.enableCriticalPath);
869
+ }
823
870
  this.notify('recordsUpdated', {});
871
+ if (this.enableCriticalPath && this.criticalPathModule) {
872
+ var criticalModule = this.criticalPathModule;
873
+ this.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);
874
+ }
824
875
  this.initialChartRowElements = this.ganttChartModule.getChartRows();
825
876
  this.isLoad = false;
826
877
  this.trigger('dataBound', args);
@@ -909,6 +960,7 @@ var Gantt = /** @class */ (function (_super) {
909
960
  }
910
961
  break;
911
962
  case 'timezone':
963
+ case 'enableCriticalPath':
912
964
  this.dataOperation.checkDataBinding(true);
913
965
  break;
914
966
  case 'filterSettings':
@@ -1076,15 +1128,42 @@ var Gantt = /** @class */ (function (_super) {
1076
1128
  }
1077
1129
  };
1078
1130
  /**
1079
- * Get the properties to be maintained in the persisted state.
1131
+ * Returns the properties to be maintained in persisted state.
1080
1132
  *
1081
1133
  * @returns {string} .
1082
1134
  * @private
1083
1135
  */
1084
1136
  Gantt.prototype.getPersistData = function () {
1085
- var keyEntity = ['allowSelection'];
1137
+ var keyEntity = ['sortSettings',
1138
+ 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex', 'currentZoomingLevel', 'cloneProjectStartDate', 'cloneProjectEndDate'];
1139
+ var ignoreOnPersist = {
1140
+ filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],
1141
+ searchSettings: ['fields', 'operator', 'ignoreCase'],
1142
+ sortSettings: [], columns: [], selectedRowIndex: []
1143
+ };
1144
+ var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',
1145
+ 'commandTemplate', 'commands', 'dataSource'];
1146
+ for (var i = 0; i < keyEntity.length; i++) {
1147
+ var currentObject = this[keyEntity[i]];
1148
+ for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {
1149
+ var objVal = val[k];
1150
+ delete currentObject[objVal];
1151
+ }
1152
+ }
1153
+ this.ignoreInArrays(ignoreOnColumn, this.columns);
1086
1154
  return this.addOnPersist(keyEntity);
1087
1155
  };
1156
+ Gantt.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {
1157
+ for (var i = 0; i < columns.length; i++) {
1158
+ this.ignoreInColumn(ignoreOnColumn, columns[i]);
1159
+ }
1160
+ };
1161
+ Gantt.prototype.ignoreInColumn = function (ignoreOnColumn, column) {
1162
+ for (var i = 0; i < ignoreOnColumn.length; i++) {
1163
+ delete column[ignoreOnColumn[i]];
1164
+ column.filter = {};
1165
+ }
1166
+ };
1088
1167
  /**
1089
1168
  * @returns {void} .
1090
1169
  * @private
@@ -1167,6 +1246,12 @@ var Gantt = /** @class */ (function (_super) {
1167
1246
  args: [this]
1168
1247
  });
1169
1248
  }
1249
+ if (this.enableCriticalPath) {
1250
+ modules.push({
1251
+ member: 'criticalPath',
1252
+ args: [this]
1253
+ });
1254
+ }
1170
1255
  if (this.allowResizing) {
1171
1256
  modules.push({
1172
1257
  member: 'resize',
@@ -1244,6 +1329,17 @@ var Gantt = /** @class */ (function (_super) {
1244
1329
  this.sortModule.sortColumn(columnName, direction, isMultiSort);
1245
1330
  }
1246
1331
  };
1332
+ Gantt.prototype.mergePersistGanttData = function () {
1333
+ if (!this.treeGrid) {
1334
+ this.treeGrid = new TreeGrid();
1335
+ }
1336
+ var persist1 = 'mergePersistGridData';
1337
+ this.treeGrid.grid[persist1].apply(this);
1338
+ };
1339
+ Gantt.prototype.mergeColumns = function (storedColumn, columns) {
1340
+ var persist2 = 'mergeColumns';
1341
+ this.treeGrid.grid[persist2].apply(this, [storedColumn, columns]);
1342
+ };
1247
1343
  /**
1248
1344
  * Clears all the sorted columns of the Gantt.
1249
1345
  *
@@ -1321,7 +1417,7 @@ var Gantt = /** @class */ (function (_super) {
1321
1417
  */
1322
1418
  Gantt.prototype.updateGridLineContainerHeight = function () {
1323
1419
  if (this.chartVerticalLineContainer) {
1324
- this.chartVerticalLineContainer.style.height = formatUnit(this.contentHeight);
1420
+ this.chartVerticalLineContainer.style.height = formatUnit(this.getContentHeight());
1325
1421
  }
1326
1422
  };
1327
1423
  /**
@@ -1425,6 +1521,7 @@ var Gantt = /** @class */ (function (_super) {
1425
1521
  progress: 'Progress',
1426
1522
  dependency: 'Dependency',
1427
1523
  notes: 'Notes',
1524
+ criticalPath: 'Critical Path',
1428
1525
  baselineStartDate: 'Baseline Start Date',
1429
1526
  baselineEndDate: 'Baseline End Date',
1430
1527
  taskMode: 'Task Mode',
@@ -2122,6 +2219,34 @@ var Gantt = /** @class */ (function (_super) {
2122
2219
  this.editModule.outdent();
2123
2220
  }
2124
2221
  };
2222
+ /**
2223
+ * To render the critical path tasks in Gantt.
2224
+ *
2225
+ * @returns {void} .
2226
+ * @param {boolean} isCritical- whether to render critical path or not .
2227
+ * @public
2228
+ */
2229
+ Gantt.prototype.showCriticalPath = function (isCritical) {
2230
+ if (this.criticalPathModule) {
2231
+ this.criticalPathModule.showCriticalPath(isCritical);
2232
+ var criticalModule = this.criticalPathModule;
2233
+ this.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);
2234
+ }
2235
+ };
2236
+ /**
2237
+ * To get all the critical tasks in Gantt.
2238
+ *
2239
+ * @returns {IGanttData[]} .
2240
+ * @public
2241
+ */
2242
+ Gantt.prototype.getCriticalTasks = function () {
2243
+ if (!isNullOrUndefined(this.criticalPathModule) && this.enableCriticalPath) {
2244
+ return this.criticalPathModule.getCriticalTasks();
2245
+ }
2246
+ else {
2247
+ return null;
2248
+ }
2249
+ };
2125
2250
  /**
2126
2251
  * To perform Zoom in action on Gantt timeline.
2127
2252
  *
@@ -2933,6 +3058,9 @@ var Gantt = /** @class */ (function (_super) {
2933
3058
  __decorate([
2934
3059
  Property(false)
2935
3060
  ], Gantt.prototype, "enableContextMenu", void 0);
3061
+ __decorate([
3062
+ Property(false)
3063
+ ], Gantt.prototype, "enableCriticalPath", void 0);
2936
3064
  __decorate([
2937
3065
  Property()
2938
3066
  ], Gantt.prototype, "contextMenuItems", void 0);
@@ -48,6 +48,10 @@ export interface IGanttData {
48
48
  indicators?: IIndicator[];
49
49
  /** Defines the delete . */
50
50
  isDelete?: boolean;
51
+ /** Defines the critical path of task. */
52
+ isCritical?: boolean;
53
+ /** Defines the slack value of critical path task. */
54
+ slack?: string | number;
51
55
  }
52
56
  export interface IParent {
53
57
  /** Defines the unique id of task. */
@@ -84,6 +88,10 @@ export interface ITaskData {
84
88
  isMilestone?: boolean;
85
89
  /** Defines the left of task. */
86
90
  left?: number;
91
+ /** Defines the critical path of task. */
92
+ isCritical?: boolean;
93
+ /** Defines the slack value of critical path task. */
94
+ slack?: string | number;
87
95
  /** Defines the progress of task. */
88
96
  progress?: number;
89
97
  /** Defines the progress width of task. */
@@ -358,6 +366,7 @@ export interface IConnectorLineObject {
358
366
  milestoneChild?: boolean;
359
367
  parentIndexInCurrentView?: number;
360
368
  childIndexInCurrentView?: number;
369
+ isCritical?: boolean;
361
370
  }
362
371
  export interface ISplitterResizedEventArgs {
363
372
  /** Defines the element. */
@@ -836,6 +845,12 @@ export interface ITaskbarStyle {
836
845
  milestoneColor?: PdfColor;
837
846
  /** Defines the progress text color */
838
847
  progressFontColor?: PdfColor;
848
+ /** Defines the critical task color */
849
+ criticalTaskColor?: PdfColor;
850
+ /** Defines the critical child progressbar background color */
851
+ criticalProgressColor?: PdfColor;
852
+ /** Defines the child taskbar border color */
853
+ criticalTaskBorderColor?: PdfColor;
839
854
  }
840
855
  export interface IGanttStyle {
841
856
  columnHeader?: PdfGanttCellStyle;
@@ -846,6 +861,7 @@ export interface IGanttStyle {
846
861
  timeline?: PdfGanttCellStyle;
847
862
  chartGridLineColor?: PdfColor;
848
863
  connectorLineColor?: PdfColor;
864
+ criticalConnectorLineColor?: PdfColor;
849
865
  footer?: PdfGanttCellStyle;
850
866
  }
851
867
  export interface PdfQueryTimelineCellInfoEventArgs {
@@ -25,6 +25,7 @@ var Splitter = /** @class */ (function () {
25
25
  this.splitterObject = new SplitterLayout({
26
26
  height: null,
27
27
  width: this.parent.ganttWidth.toString(),
28
+ enablePersistence: this.parent.enablePersistence,
28
29
  separatorSize: this.parent.splitterSettings.separatorSize,
29
30
  paneSettings: [
30
31
  {
@@ -76,6 +77,9 @@ var Splitter = /** @class */ (function () {
76
77
  * @private
77
78
  */
78
79
  Splitter.prototype.calculateSplitterPosition = function (splitter, isDynamic) {
80
+ if (!isNullOrUndefined(this.splitterObject) && this.parent.enablePersistence) {
81
+ return this.splitterObject.paneSettings[0].size;
82
+ }
79
83
  if (splitter.view === 'Grid') {
80
84
  return '100%';
81
85
  }
@@ -100,10 +100,11 @@ var TaskProcessor = /** @class */ (function (_super) {
100
100
  var mappingData = new DataManager(dataSource).executeLocal(new Query()
101
101
  .group(this.parent.taskFields.parentID));
102
102
  var rootData = [];
103
+ var index;
103
104
  for (var i = 0; i < mappingData.length; i++) {
104
105
  var groupData = mappingData[i];
105
106
  if (!isNullOrUndefined(groupData.key)) {
106
- var index = this.taskIds.indexOf(groupData.key.toString());
107
+ index = this.taskIds.indexOf(groupData.key.toString());
107
108
  if (index > -1) {
108
109
  if (!isNullOrUndefined(groupData.key)) {
109
110
  dataSource[index][this.parent.taskFields.child] = groupData.items;
@@ -111,7 +112,9 @@ var TaskProcessor = /** @class */ (function (_super) {
111
112
  }
112
113
  }
113
114
  }
114
- rootData.push.apply(rootData, groupData.items); // eslint-disable-line
115
+ if (index !== -1) {
116
+ rootData.push.apply(rootData, groupData.items); // eslint-disable-line
117
+ }
115
118
  }
116
119
  this.hierarchyData = this.dataReorder(dataSource, rootData);
117
120
  };
@@ -372,7 +375,11 @@ var TaskProcessor = /** @class */ (function (_super) {
372
375
  if (baselineEndDate && baselineEndDate.getHours() === 0 && this.parent.defaultEndTime !== 86400) {
373
376
  this.setTime(this.parent.defaultEndTime, baselineEndDate);
374
377
  }
375
- this.parent.setRecordValue('baselineEndDate', this.checkBaselineEndDate(baselineEndDate), ganttProperties, true);
378
+ if ((ganttProperties.baselineStartDate && baselineEndDate &&
379
+ (ganttProperties.baselineStartDate.getTime() > baselineEndDate.getTime())) || ganttProperties.isMilestone) {
380
+ baselineEndDate = ganttProperties.baselineStartDate;
381
+ }
382
+ this.parent.setRecordValue('baselineEndDate', this.checkBaselineEndDate(baselineEndDate, ganttProperties), ganttProperties, true);
376
383
  this.parent.setRecordValue('progress', progress, ganttProperties, true);
377
384
  this.parent.setRecordValue('totalProgress', progress, ganttProperties, true);
378
385
  this.parent.setRecordValue('predecessorsName', predecessors, ganttProperties, true);
@@ -393,7 +400,6 @@ var TaskProcessor = /** @class */ (function (_super) {
393
400
  !isNullOrUndefined(taskSettings.child)) {
394
401
  this.parent.setRecordValue(taskSettings.child, [], ganttData);
395
402
  }
396
- this.parent.setRecordValue('baselineEndDate', this.checkBaselineEndDate(baselineEndDate), ganttProperties, true);
397
403
  if (!isNullOrUndefined(data[taskSettings.child]) && data[taskSettings.child].length > 0) {
398
404
  this.parent.setRecordValue('hasChildRecords', true, ganttData);
399
405
  this.parent.setRecordValue('isMilestone', false, ganttProperties, true);
@@ -606,6 +612,13 @@ var TaskProcessor = /** @class */ (function (_super) {
606
612
  work = parseFloat(work.toFixed(2));
607
613
  }
608
614
  }
615
+ if (ganttData.childRecords.length > 0 && this.parent.isOnEdit) {
616
+ var childCompletedWorks = 0;
617
+ for (var i = 0; i < ganttData.childRecords.length; i++) {
618
+ childCompletedWorks += ganttData.childRecords[i].ganttProperties.work;
619
+ }
620
+ work += childCompletedWorks;
621
+ }
609
622
  this.parent.setRecordValue('work', work, ganttData.ganttProperties, true);
610
623
  if (!isNullOrUndefined(this.parent.taskFields.work)) {
611
624
  this.parent.dataOperation.updateMappingData(ganttData, 'work');
@@ -1102,7 +1115,7 @@ var TaskProcessor = /** @class */ (function (_super) {
1102
1115
  TaskProcessor.prototype.calculateBaselineWidth = function (ganttProperties) {
1103
1116
  var baselineStartDate = this.getDateFromFormat(ganttProperties.baselineStartDate);
1104
1117
  var baselineEndDate = this.getDateFromFormat(ganttProperties.baselineEndDate);
1105
- if (baselineStartDate && baselineEndDate) {
1118
+ if (baselineStartDate && baselineEndDate && (baselineStartDate.getTime() !== baselineEndDate.getTime())) {
1106
1119
  return (this.getTaskWidth(baselineStartDate, baselineEndDate));
1107
1120
  }
1108
1121
  else {
@@ -2231,7 +2244,7 @@ var TaskProcessor = /** @class */ (function (_super) {
2231
2244
  }
2232
2245
  this.updateWorkWithDuration(parentData);
2233
2246
  var parentWork = parentProp.work;
2234
- parentWork += childCompletedWorks;
2247
+ parentWork = this.parent.isOnEdit ? parentWork : (parentWork + childCompletedWorks);
2235
2248
  this.parent.setRecordValue('work', parentWork, parentProp, true);
2236
2249
  this.parent.setRecordValue('taskType', 'FixedDuration', parentProp, true);
2237
2250
  if (!isNullOrUndefined(this.parent.taskFields.type)) {
@@ -157,7 +157,7 @@ var GanttTreeGrid = /** @class */ (function () {
157
157
  var scrollWidth = this.getScrollbarWidth();
158
158
  var isMobile = /Android|Mac|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
159
159
  if (scrollWidth !== 0) {
160
- content.style.cssText += 'width: calc(100% + ' + (scrollWidth + 1) + 'px);';
160
+ content.style.cssText += 'width: calc(100% + ' + (scrollWidth + 1) + 'px);'; //actual scrollbar width 17 px but here scrollbar width set to 16px hence adding increment of 1
161
161
  }
162
162
  else {
163
163
  content.classList.add('e-gantt-scroll-padding');
@@ -149,6 +149,12 @@ var ExportHelper = /** @class */ (function () {
149
149
  predecessor.milestoneParent = data.milestoneParent;
150
150
  predecessor.milestoneChild = data.milestoneChild;
151
151
  predecessor.lineWidth = _this.parent.connectorLineWidth > 5 ? pixelToPoint(5) : pixelToPoint(_this.parent.connectorLineWidth);
152
+ if (data.isCritical) {
153
+ predecessor.connectorLineColor = _this.ganttStyle.criticalConnectorLineColor;
154
+ }
155
+ else {
156
+ predecessor.connectorLineColor = _this.ganttStyle.connectorLineColor;
157
+ }
152
158
  predecessor.connectorLineColor = _this.ganttStyle.connectorLineColor;
153
159
  _this.gantt.predecessorCollection.push(predecessor);
154
160
  });
@@ -272,9 +278,16 @@ var ExportHelper = /** @class */ (function () {
272
278
  taskbar.progressColor = new PdfColor(_this.ganttStyle.taskbar.parentProgressColor);
273
279
  }
274
280
  else {
275
- taskbar.taskColor = new PdfColor(_this.ganttStyle.taskbar.taskColor);
276
- taskbar.taskBorderColor = new PdfColor(_this.ganttStyle.taskbar.taskBorderColor);
277
- taskbar.progressColor = new PdfColor(_this.ganttStyle.taskbar.progressColor);
281
+ if (data.isCritical) {
282
+ taskbar.taskColor = new PdfColor(_this.ganttStyle.taskbar.criticalTaskColor);
283
+ taskbar.progressColor = new PdfColor(_this.ganttStyle.taskbar.criticalProgressColor);
284
+ taskbar.taskBorderColor = new PdfColor(_this.ganttStyle.taskbar.criticalTaskBorderColor);
285
+ }
286
+ else {
287
+ taskbar.taskColor = new PdfColor(_this.ganttStyle.taskbar.taskColor);
288
+ taskbar.progressColor = new PdfColor(_this.ganttStyle.taskbar.progressColor);
289
+ taskbar.taskBorderColor = new PdfColor(_this.ganttStyle.taskbar.taskBorderColor);
290
+ }
278
291
  }
279
292
  taskbar.gridLineColor = new PdfColor(_this.ganttStyle.chartGridLineColor);
280
293
  _this.gantt.taskbarCollection.push(taskbar);
@@ -502,13 +515,13 @@ var ExportValueFormatter = /** @class */ (function () {
502
515
  if (typeof args.column.format === 'string') {
503
516
  var format = void 0;
504
517
  if (args.column.type === 'date') {
505
- format = { type: 'date', skeleton: args.column.format };
518
+ format = { type: 'date', format: args.column.format };
506
519
  }
507
520
  else if (args.column.type === 'time') {
508
- format = { type: 'time', skeleton: args.column.format };
521
+ format = { type: 'time', format: args.column.format };
509
522
  }
510
523
  else {
511
- format = { type: 'dateTime', skeleton: args.column.format };
524
+ format = { type: 'dateTime', format: args.column.format };
512
525
  }
513
526
  return this.returnFormattedValue(args, format);
514
527
  }
@@ -53,6 +53,10 @@ var PdfGanttTheme = /** @class */ (function () {
53
53
  //chart side theme
54
54
  ganttStyle.taskbar.taskColor = new PdfColor(49, 122, 185);
55
55
  ganttStyle.taskbar.progressColor = new PdfColor(33, 82, 125);
56
+ ganttStyle.taskbar.criticalTaskColor = new PdfColor(255, 139, 139);
57
+ ganttStyle.taskbar.criticalProgressColor = new PdfColor(255, 85, 85);
58
+ ganttStyle.criticalConnectorLineColor = new PdfColor(255, 85, 85);
59
+ ganttStyle.taskbar.criticalTaskBorderColor = new PdfColor(255, 85, 85);
56
60
  ganttStyle.taskbar.parentTaskColor = new PdfColor(119, 119, 119);
57
61
  ganttStyle.taskbar.parentProgressColor = new PdfColor(85, 85, 85);
58
62
  ganttStyle.taskbar.taskBorderColor = new PdfColor(33, 82, 125);
@@ -69,6 +73,10 @@ var PdfGanttTheme = /** @class */ (function () {
69
73
  //chart side theme
70
74
  ganttStyle.taskbar.taskColor = new PdfColor(0, 123, 255);
71
75
  ganttStyle.taskbar.progressColor = new PdfColor(0, 86, 179);
76
+ ganttStyle.taskbar.criticalTaskColor = new PdfColor(255, 139, 139);
77
+ ganttStyle.taskbar.criticalProgressColor = new PdfColor(255, 85, 85);
78
+ ganttStyle.criticalConnectorLineColor = new PdfColor(255, 85, 85);
79
+ ganttStyle.taskbar.criticalTaskBorderColor = new PdfColor(255, 85, 85);
72
80
  ganttStyle.taskbar.parentTaskColor = new PdfColor(108, 117, 125);
73
81
  ganttStyle.taskbar.parentProgressColor = new PdfColor(73, 80, 87);
74
82
  ganttStyle.taskbar.taskBorderColor = new PdfColor(0, 86, 179);
@@ -87,6 +95,10 @@ var PdfGanttTheme = /** @class */ (function () {
87
95
  //chart side theme
88
96
  ganttStyle.taskbar.taskColor = new PdfColor(0, 120, 214);
89
97
  ganttStyle.taskbar.progressColor = new PdfColor(0, 91, 163);
98
+ ganttStyle.taskbar.criticalTaskColor = new PdfColor(255, 139, 139);
99
+ ganttStyle.taskbar.criticalProgressColor = new PdfColor(255, 85, 85);
100
+ ganttStyle.criticalConnectorLineColor = new PdfColor(255, 85, 85);
101
+ ganttStyle.taskbar.criticalTaskBorderColor = new PdfColor(255, 85, 85);
90
102
  ganttStyle.taskbar.parentTaskColor = new PdfColor(118, 118, 118);
91
103
  ganttStyle.taskbar.parentProgressColor = new PdfColor(80, 80, 80);
92
104
  ganttStyle.taskbar.taskBorderColor = new PdfColor(0, 91, 163);
@@ -103,6 +115,10 @@ var PdfGanttTheme = /** @class */ (function () {
103
115
  //chart side theme
104
116
  ganttStyle.taskbar.taskColor = new PdfColor(88, 105, 197);
105
117
  ganttStyle.taskbar.progressColor = new PdfColor(63, 81, 181);
118
+ ganttStyle.taskbar.criticalTaskColor = new PdfColor(255, 139, 139);
119
+ ganttStyle.taskbar.criticalProgressColor = new PdfColor(255, 85, 85);
120
+ ganttStyle.criticalConnectorLineColor = new PdfColor(255, 85, 85);
121
+ ganttStyle.taskbar.criticalTaskBorderColor = new PdfColor(255, 85, 85);
106
122
  ganttStyle.taskbar.parentTaskColor = new PdfColor(132, 132, 132);
107
123
  ganttStyle.taskbar.parentProgressColor = new PdfColor(97, 97, 97);
108
124
  ganttStyle.taskbar.taskBorderColor = new PdfColor(63, 81, 181);
@@ -175,7 +175,8 @@ var ChartRows = /** @class */ (function (_super) {
175
175
  labelString = labelString === 'isCustomTemplate' ? this.parent.labelSettings.taskLabel : labelString;
176
176
  }
177
177
  if (labelString.indexOf('null') === -1) {
178
- if (this.getTaskLabel(this.parent.labelSettings.taskLabel) === 'isCustomTemplate' && !this.isTemplate(this.parent.labelSettings.taskLabel)) {
178
+ if (this.getTaskLabel(this.parent.labelSettings.taskLabel) === 'isCustomTemplate' &&
179
+ !this.isTemplate(this.parent.labelSettings.taskLabel)) {
179
180
  labelString = '';
180
181
  }
181
182
  if (isNaN(parseInt(labelString))) {
@@ -225,7 +226,7 @@ var ChartRows = /** @class */ (function (_super) {
225
226
  progressDiv[0].querySelectorAll('.e-task-label')[0].children[0])
226
227
  progressDiv[0].querySelectorAll('.e-task-label')[0].children[0].remove();
227
228
  if (progressDiv[0].querySelectorAll('.e-task-label')[0].textContent == '' &&
228
- childLabel && !childLabel['elementRef'] && tempDiv.innerHTML != '')
229
+ childLabel && !childLabel['elementRef'] && tempDiv.innerHTML !== '')
229
230
  progressDiv[0].querySelectorAll('.e-task-label')[0].textContent = childLabel;
230
231
  }
231
232
  if (!isNullOrUndefined(taskbarInnerDiv) && taskbarInnerDiv.length > 0) {
@@ -243,6 +244,13 @@ var ChartRows = /** @class */ (function (_super) {
243
244
  var splitTasks = '';
244
245
  for (var i = 0; i < data.ganttProperties.segments.length; i++) {
245
246
  var segment = data.ganttProperties.segments[i];
247
+ var progressBarVisible = void 0;
248
+ if (!segment.showProgress) {
249
+ progressBarVisible = 'hidden';
250
+ }
251
+ else {
252
+ progressBarVisible = 'initial';
253
+ }
246
254
  var segmentPosition = (i === 0) ? 'e-segment-first' : (i === data.ganttProperties.segments.length - 1)
247
255
  ? 'e-segment-last' : 'e-segment-inprogress';
248
256
  splitTasks += (
@@ -250,7 +258,7 @@ var ChartRows = /** @class */ (function (_super) {
250
258
  '<div class="' + cls.childTaskBarInnerDiv + ' ' + segmentPosition + ' ' + cls.traceChildTaskBar + ' ' +
251
259
  ' e-segmented-taskbar' +
252
260
  '"style="width:' + segment.width + 'px;position: absolute; left:' + segment.left + 'px;height:' +
253
- (this.taskBarHeight) + 'px; overflow: initial;" data-segment-index = "' + i + '" aria-label = "' +
261
+ (this.taskBarHeight) + 'px; overflow:' + progressBarVisible + ';" data-segment-index = "' + i + '" aria-label = "' +
254
262
  this.generateSpiltTaskAriaLabel(segment, data.ganttProperties) + '"> ' +
255
263
  this.getSplitTaskbarLeftResizerNode() +
256
264
  //split progress bar
@@ -372,6 +380,7 @@ var ChartRows = /** @class */ (function (_super) {
372
380
  this.parent.dataOperation.updateMappingData(mergeData, 'segments');
373
381
  if (segments.length === 1) {
374
382
  this.parent.setRecordValue('endDate', endDate, mergeData.ganttProperties, true);
383
+ this.parent.setRecordValue('EndDate', endDate, mergeData, true);
375
384
  this.parent.setRecordValue('segments', null, mergeData.ganttProperties, true);
376
385
  this.parent.dataOperation.updateMappingData(mergeData, 'segments');
377
386
  }
@@ -540,6 +549,7 @@ var ChartRows = /** @class */ (function (_super) {
540
549
  else {
541
550
  startDate = new Date(splitDate.getTime());
542
551
  startDate.setDate(startDate.getDate() + 1 + increment);
552
+ this.setTime(this.parent.defaultStartTime, startDate);
543
553
  startDate = this.parent.dataOperation.checkStartDate(startDate, ganttProp, false);
544
554
  segmentEndDate = new Date(endDate.getTime());
545
555
  segmentEndDate.setDate(segmentEndDate.getDate() + 1);
@@ -813,7 +823,8 @@ var ChartRows = /** @class */ (function (_super) {
813
823
  labelString = labelString === 'isCustomTemplate' ? this.parent.labelSettings.taskLabel : labelString;
814
824
  }
815
825
  if (labelString.indexOf('null') === -1) {
816
- if (this.getTaskLabel(this.parent.labelSettings.taskLabel) === 'isCustomTemplate' && !this.isTemplate(this.parent.labelSettings.taskLabel)) {
826
+ if (this.getTaskLabel(this.parent.labelSettings.taskLabel) === 'isCustomTemplate' &&
827
+ !this.isTemplate(this.parent.labelSettings.taskLabel)) {
817
828
  labelString = '';
818
829
  }
819
830
  if (isNaN(parseInt(labelString))) {
@@ -842,7 +853,7 @@ var ChartRows = /** @class */ (function (_super) {
842
853
  progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].children[0])
843
854
  progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].children[0].remove();
844
855
  if (progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].textContent == '' &&
845
- parentLabel && !parentLabel['elementRef'] && div.innerHTML != '')
856
+ parentLabel && !parentLabel['elementRef'] && div.innerHTML !== '')
846
857
  progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].textContent = parentLabel;
847
858
  }
848
859
  var milestoneTemplate = '<div class="' + cls.parentMilestone + '" style="position:absolute;">' +
@@ -1,5 +1,6 @@
1
- import { createElement, formatUnit, remove, isNullOrUndefined } from '@syncfusion/ej2-base';
1
+ import { createElement, formatUnit, remove } from '@syncfusion/ej2-base';
2
2
  import * as cls from '../base/css-constants';
3
+ import { isNullOrUndefined } from '@syncfusion/ej2-base';
3
4
  var NonWorkingDay = /** @class */ (function () {
4
5
  function NonWorkingDay(gantt) {
5
6
  this.weekendWidthUpdated = false;
@@ -56,8 +57,9 @@ var NonWorkingDay = /** @class */ (function () {
56
57
  var toDate;
57
58
  var container = createElement('div');
58
59
  var height = this.parent.contentHeight;
60
+ // eslint-disable-next-line
59
61
  var toolbarHeight = 0;
60
- if (!isNullOrUndefined(this.parent.toolbarModule)) {
62
+ if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {
61
63
  toolbarHeight = this.parent.toolbarModule.element.offsetHeight;
62
64
  }
63
65
  var viewportHeight = this.parent.ganttHeight - toolbarHeight - this.parent.ganttChartModule.chartTimelineContainer.offsetHeight;
@@ -162,6 +164,7 @@ var NonWorkingDay = /** @class */ (function () {
162
164
  };
163
165
  NonWorkingDay.prototype.updateHolidayLabelHeight = function () {
164
166
  var height = this.parent.getContentHeight();
167
+ // eslint-disable-next-line
165
168
  var toolbarHeight = 0;
166
169
  if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {
167
170
  toolbarHeight = this.parent.toolbarModule.element.offsetHeight;