@syncfusion/ej2-gantt 20.4.51 → 20.4.53

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.
@@ -631,9 +631,9 @@ class DateProcessor {
631
631
  * @returns {Date} .
632
632
  * @private
633
633
  */
634
- getStartDate(endDate, duration, durationUnit, ganttProp) {
634
+ getStartDate(endDate, duration, durationUnit, ganttProp, fromValidation) {
635
635
  let tempEnd = new Date(endDate.getTime());
636
- const startDate = new Date(endDate.getTime());
636
+ let startDate = new Date(endDate.getTime());
637
637
  let secondDuration = this.getDurationAsSeconds(duration, durationUnit);
638
638
  let nonWork = 0;
639
639
  let workHours = 0;
@@ -647,6 +647,12 @@ class DateProcessor {
647
647
  }
648
648
  tempEnd = new Date(startDate.getTime());
649
649
  }
650
+ /* To render the milestone in proper date while loading */
651
+ if (fromValidation && ganttProp.isMilestone) {
652
+ startDate.setDate(startDate.getDate() - 1);
653
+ this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, startDate);
654
+ startDate = this.parent.dateValidationModule.checkStartDate(startDate, ganttProp, true);
655
+ }
650
656
  return startDate;
651
657
  }
652
658
  /**
@@ -708,7 +714,21 @@ class DateProcessor {
708
714
  this.setTime(this.parent.defaultStartTime, sDate);
709
715
  }
710
716
  else if (!isNullOrUndefined(duration)) {
711
- sDate = this.getProjectStartDate(ganttProp);
717
+ this.parent.flatData.map((record) => {
718
+ if (record.ganttProperties.taskId == ganttProp.taskId) {
719
+ if ((!isNullOrUndefined(record.parentItem)) && (record.parentItem.taskId)) {
720
+ this.parent.flatData.map((data) => {
721
+ if (data.ganttProperties.taskId === record.parentItem.taskId) {
722
+ if (!isNullOrUndefined(data.ganttProperties.startDate))
723
+ sDate = data.ganttProperties.startDate;
724
+ }
725
+ });
726
+ }
727
+ else {
728
+ sDate = this.getProjectStartDate(ganttProp);
729
+ }
730
+ }
731
+ });
712
732
  }
713
733
  }
714
734
  else {
@@ -2900,6 +2920,39 @@ class TaskProcessor extends DateProcessor {
2900
2920
  task.taskData[this.parent.taskFields.durationUnit] = task.ganttProperties.durationUnit;
2901
2921
  }
2902
2922
  }
2923
+ setDataSource(data) {
2924
+ let createData = [];
2925
+ let length = data.length;
2926
+ for (var i = 0; i < length; i++) {
2927
+ let record = data[i];
2928
+ createData.push(record);
2929
+ if (!(isNullOrUndefined(data[i][this.parent.taskFields.child]))) {
2930
+ this.setDataSource(data[i][this.parent.taskFields.child]);
2931
+ }
2932
+ }
2933
+ return createData;
2934
+ }
2935
+ setStartDate(task) {
2936
+ let hierarchicalData = [];
2937
+ if (!isNullOrUndefined(this.parent.taskFields.parentID) && !isNullOrUndefined(this.parent.taskFields.id)) {
2938
+ hierarchicalData = this.setDataSource(this.parent.dataSource);
2939
+ }
2940
+ else {
2941
+ hierarchicalData = this.parent.dataSource;
2942
+ }
2943
+ this.parent.flatData.map((data) => {
2944
+ hierarchicalData.map((record) => {
2945
+ if (data.ganttProperties.taskId === record[this.parent.taskFields.id]) {
2946
+ if (!isNullOrUndefined(this.parent.taskFields.startDate)) {
2947
+ task[this.parent.taskFields.endDate] = record[this.parent.taskFields.endDate];
2948
+ }
2949
+ if (!isNullOrUndefined(this.parent.taskFields.endDate)) {
2950
+ task[this.parent.taskFields.endDate] = record[this.parent.taskFields.endDate];
2951
+ }
2952
+ }
2953
+ });
2954
+ });
2955
+ }
2903
2956
  getWorkInHour(work, workUnit) {
2904
2957
  if (workUnit === 'day') {
2905
2958
  return work * (this.parent.secondsPerDay / 3600);
@@ -3191,6 +3244,9 @@ class TaskProcessor extends DateProcessor {
3191
3244
  if (!isNullOrUndefined(this.parent.taskFields.duration)) {
3192
3245
  this.setRecordDuration(ganttData, this.parent.taskFields.duration);
3193
3246
  }
3247
+ if (this.parent.isLoad) {
3248
+ this.setStartDate(ganttData);
3249
+ }
3194
3250
  this.calculateScheduledValues(ganttData, data, false);
3195
3251
  }
3196
3252
  this.updateGanttData();
@@ -5649,6 +5705,9 @@ class Timeline {
5649
5705
  * @private
5650
5706
  */
5651
5707
  changeTimelineSettings(newTimeline) {
5708
+ if (!this.isZoomIn) {
5709
+ this.isSingleTier = newTimeline.topTier.unit === 'None' || newTimeline.bottomTier.unit === 'None' ? true : false;
5710
+ }
5652
5711
  const skipProperty = this.isSingleTier ?
5653
5712
  this.customTimelineSettings.topTier.unit === 'None' ?
5654
5713
  'topTier' : 'bottomTier' : null;
@@ -5660,7 +5719,9 @@ class Timeline {
5660
5719
  else {
5661
5720
  const value = property === 'topTier' ? 'bottomTier' : 'topTier';
5662
5721
  const assignValue = 'bottomTier';
5663
- this.customTimelineSettings[value] = Object.assign({}, newTimeline[assignValue]);
5722
+ if (newTimeline[assignValue].unit != "None") {
5723
+ this.customTimelineSettings[value] = Object.assign({}, newTimeline[assignValue]);
5724
+ }
5664
5725
  }
5665
5726
  });
5666
5727
  this.parent.isTimelineRoundOff = this.isZoomToFit ? false : isNullOrUndefined(this.parent.projectStartDate) ? true : false;
@@ -5894,7 +5955,9 @@ class Timeline {
5894
5955
  this.customTimelineSettings.bottomTier.count : this.customTimelineSettings.topTier.count;
5895
5956
  const unit = this.customTimelineSettings.bottomTier.unit !== 'None' ?
5896
5957
  this.customTimelineSettings.bottomTier.unit : this.customTimelineSettings.topTier.unit;
5897
- const zoomLevel = this.getCurrentZoomingLevel(unit, count);
5958
+ const tier = this.customTimelineSettings.bottomTier.unit !== 'None' ?
5959
+ "bottomTier" : "topTier";
5960
+ const zoomLevel = this.getCurrentZoomingLevel(unit, count, tier);
5898
5961
  if (this.parent.toolbarModule) {
5899
5962
  if (zoomLevel === this.parent.zoomingLevels[this.parent.zoomingLevels.length - 1].level) {
5900
5963
  this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomin'], false);
@@ -5912,7 +5975,7 @@ class Timeline {
5912
5975
  * @returns {number} .
5913
5976
  * @private
5914
5977
  */
5915
- getCurrentZoomingLevel(unit, count) {
5978
+ getCurrentZoomingLevel(unit, count, tier) {
5916
5979
  let level;
5917
5980
  let currentZoomCollection;
5918
5981
  let checkSameCountLevels;
@@ -5922,15 +5985,32 @@ class Timeline {
5922
5985
  this.parent.zoomingLevels = this.parent.getZoomingLevels();
5923
5986
  }
5924
5987
  let sameUnitLevels = this.parent.zoomingLevels.filter((tempLevel) => {
5925
- return tempLevel.bottomTier.unit === unit;
5988
+ if (tier === "bottomTier") {
5989
+ return tempLevel.bottomTier.unit === unit;
5990
+ }
5991
+ else {
5992
+ return tempLevel.topTier.unit === unit;
5993
+ }
5926
5994
  });
5927
5995
  if (sameUnitLevels.length === 0) {
5928
5996
  const closestUnit = this.getClosestUnit(unit, '', false);
5929
5997
  sameUnitLevels = this.parent.zoomingLevels.filter((tempLevel) => {
5930
- return tempLevel.bottomTier.unit === closestUnit;
5998
+ if (tier === "bottomTier") {
5999
+ return tempLevel.bottomTier.unit === closestUnit;
6000
+ }
6001
+ else {
6002
+ return tempLevel.topTier.unit === closestUnit;
6003
+ }
5931
6004
  });
5932
6005
  }
5933
- const sortedUnitLevels = sameUnitLevels.sort((a, b) => (a.bottomTier.count < b.bottomTier.count) ? 1 : -1);
6006
+ const sortedUnitLevels = sameUnitLevels.sort((a, b) => {
6007
+ if (tier === "bottomTier") {
6008
+ return (a.bottomTier.count < b.bottomTier.count) ? 1 : -1;
6009
+ }
6010
+ else {
6011
+ return (a.topTier.count < b.topTier.count) ? 1 : -1;
6012
+ }
6013
+ });
5934
6014
  for (let i = 0; i < sortedUnitLevels.length; i++) {
5935
6015
  firstValue = sortedUnitLevels[i];
5936
6016
  if (i === sortedUnitLevels.length - 1) {
@@ -5940,10 +6020,15 @@ class Timeline {
5940
6020
  else {
5941
6021
  secondValue = sortedUnitLevels[i + 1];
5942
6022
  }
5943
- if (count >= firstValue.bottomTier.count) {
6023
+ if (count >= firstValue[tier].count) {
5944
6024
  currentZoomCollection = sortedUnitLevels[i];
5945
6025
  checkSameCountLevels = sortedUnitLevels.filter((tempLevel) => {
5946
- return tempLevel.bottomTier.count === currentZoomCollection.bottomTier.count;
6026
+ if (tier === "bottomTier") {
6027
+ return tempLevel.bottomTier.count === currentZoomCollection.bottomTier.count;
6028
+ }
6029
+ else {
6030
+ return tempLevel.topTier.count === currentZoomCollection.topTier.count;
6031
+ }
5947
6032
  });
5948
6033
  if (checkSameCountLevels.length > 1) {
5949
6034
  level = this.checkCollectionsWidth(checkSameCountLevels);
@@ -5953,10 +6038,15 @@ class Timeline {
5953
6038
  }
5954
6039
  break;
5955
6040
  }
5956
- else if (count < firstValue.bottomTier.count && count > secondValue.bottomTier.count) {
6041
+ else if (count < firstValue[tier].count && count > secondValue[tier].count) {
5957
6042
  currentZoomCollection = sortedUnitLevels[i + 1];
5958
6043
  checkSameCountLevels = sortedUnitLevels.filter((tempLevel) => {
5959
- return tempLevel.bottomTier.count === currentZoomCollection.bottomTier.count;
6044
+ if (tier === "bottomTier") {
6045
+ return tempLevel.bottomTier.count === currentZoomCollection.bottomTier.count;
6046
+ }
6047
+ else {
6048
+ return tempLevel.topTier.count === currentZoomCollection.topTier.count;
6049
+ }
5960
6050
  });
5961
6051
  if (checkSameCountLevels.length > 1) {
5962
6052
  level = this.checkCollectionsWidth(checkSameCountLevels);
@@ -7058,7 +7148,13 @@ class GanttTreeGrid {
7058
7148
  this.parent.treeGrid.allowKeyboard = this.parent.allowKeyboard;
7059
7149
  this.parent.treeGrid.enableImmutableMode = this.parent.enableImmutableMode;
7060
7150
  this.treeGridColumns = [];
7151
+ if (!this.parent.isLocaleChanged && this.parent.isLoad) {
7152
+ this.parent.previousGanttColumns = extend([], [], this.parent.columns, true);
7153
+ }
7061
7154
  this.validateGanttColumns();
7155
+ if (this.parent.isLocaleChanged) {
7156
+ this.parent.isLocaleChanged = false;
7157
+ }
7062
7158
  this.addEventListener();
7063
7159
  }
7064
7160
  addEventListener() {
@@ -7476,6 +7572,9 @@ class GanttTreeGrid {
7476
7572
  */
7477
7573
  createTreeGridColumn(column, isDefined) {
7478
7574
  const taskSettings = this.parent.taskFields;
7575
+ let previousColumn = this.parent.previousGanttColumns.filter((prevcolumn) => {
7576
+ return column.field == prevcolumn.field;
7577
+ })[0];
7479
7578
  column.disableHtmlEncode = !isNullOrUndefined(column.disableHtmlEncode) ? column.disableHtmlEncode : this.parent.disableHtmlEncode;
7480
7579
  if (taskSettings.id !== column.field) {
7481
7580
  column.clipMode = column.clipMode ? column.clipMode : 'EllipsisWithTooltip';
@@ -7486,14 +7585,24 @@ class GanttTreeGrid {
7486
7585
  }
7487
7586
  else if (taskSettings.name === column.field) {
7488
7587
  /** Name column */
7489
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('name');
7588
+ if (this.parent.isLocaleChanged && previousColumn) {
7589
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('name');
7590
+ }
7591
+ else {
7592
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('name');
7593
+ }
7490
7594
  column.width = column.width ? column.width : 150;
7491
7595
  column.editType = column.editType ? column.editType : 'stringedit';
7492
7596
  column.type = column.type ? column.type : 'string';
7493
7597
  }
7494
7598
  else if (taskSettings.startDate === column.field) {
7495
7599
  /** Name column */
7496
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('startDate');
7600
+ if (this.parent.isLocaleChanged && previousColumn) {
7601
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('startDate');
7602
+ }
7603
+ else {
7604
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('startDate');
7605
+ }
7497
7606
  column.editType = column.editType ? column.editType :
7498
7607
  this.parent.getDateFormat().toLowerCase().indexOf('hh') !== -1 ? 'datetimepickeredit' : 'datepickeredit';
7499
7608
  column.format = column.format ? column.format : { type: 'date', format: this.parent.getDateFormat() };
@@ -7501,7 +7610,12 @@ class GanttTreeGrid {
7501
7610
  column.edit = { params: { renderDayCell: this.parent.renderWorkingDayCell.bind(this.parent) } };
7502
7611
  }
7503
7612
  else if (taskSettings.endDate === column.field) {
7504
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('endDate');
7613
+ if (this.parent.isLocaleChanged && previousColumn) {
7614
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('endDate');
7615
+ }
7616
+ else {
7617
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('endDate');
7618
+ }
7505
7619
  column.format = column.format ? column.format : { type: 'date', format: this.parent.getDateFormat() };
7506
7620
  column.editType = column.editType ? column.editType :
7507
7621
  this.parent.getDateFormat().toLowerCase().indexOf('hh') !== -1 ? 'datetimepickeredit' : 'datepickeredit';
@@ -7510,7 +7624,12 @@ class GanttTreeGrid {
7510
7624
  }
7511
7625
  else if (taskSettings.duration === column.field) {
7512
7626
  column.width = column.width ? column.width : 150;
7513
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('duration');
7627
+ if (this.parent.isLocaleChanged && previousColumn) {
7628
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('duration');
7629
+ }
7630
+ else {
7631
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('duration');
7632
+ }
7514
7633
  column.valueAccessor = column.valueAccessor ? column.valueAccessor : !isNullOrUndefined(column.edit) ? null :
7515
7634
  this.durationValueAccessor.bind(this);
7516
7635
  column.editType = column.editType ? column.editType : 'stringedit';
@@ -7520,7 +7639,12 @@ class GanttTreeGrid {
7520
7639
  this.composeProgressColumn(column);
7521
7640
  }
7522
7641
  else if (taskSettings.dependency === column.field) {
7523
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('dependency');
7642
+ if (this.parent.isLocaleChanged && previousColumn) {
7643
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('dependency');
7644
+ }
7645
+ else {
7646
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('dependency');
7647
+ }
7524
7648
  column.width = column.width ? column.width : 150;
7525
7649
  column.editType = column.editType ? column.editType : 'stringedit';
7526
7650
  column.type = 'string';
@@ -7530,7 +7654,12 @@ class GanttTreeGrid {
7530
7654
  this.composeResourceColumn(column);
7531
7655
  }
7532
7656
  else if (taskSettings.notes === column.field) {
7533
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('notes');
7657
+ if (this.parent.isLocaleChanged && previousColumn) {
7658
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('notes');
7659
+ }
7660
+ else {
7661
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('notes');
7662
+ }
7534
7663
  column.width = column.width ? column.width : 150;
7535
7664
  column.editType = column.editType ? column.editType : 'stringedit';
7536
7665
  if (!this.parent.showInlineNotes) {
@@ -7545,26 +7674,46 @@ class GanttTreeGrid {
7545
7674
  const colName = (taskSettings.baselineEndDate === column.field) ? 'baselineEndDate' :
7546
7675
  'baselineStartDate';
7547
7676
  column.width = column.width ? column.width : 150;
7548
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant(colName);
7677
+ if (this.parent.isLocaleChanged && previousColumn) {
7678
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant(colName);
7679
+ }
7680
+ else {
7681
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant(colName);
7682
+ }
7549
7683
  column.format = column.format ? column.format : { type: 'date', format: this.parent.getDateFormat() };
7550
7684
  column.editType = column.editType ? column.editType :
7551
7685
  this.parent.getDateFormat().toLowerCase().indexOf('hh') !== -1 ? 'datetimepickeredit' : 'datepickeredit';
7552
7686
  }
7553
7687
  else if (taskSettings.work === column.field) {
7554
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('work');
7688
+ if (this.parent.isLocaleChanged && previousColumn) {
7689
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('work');
7690
+ }
7691
+ else {
7692
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('work');
7693
+ }
7555
7694
  column.width = column.width ? column.width : 150;
7556
7695
  column.valueAccessor = column.valueAccessor ? column.valueAccessor : this.workValueAccessor.bind(this);
7557
7696
  column.editType = column.editType ? column.editType : 'numericedit';
7558
7697
  }
7559
7698
  else if (taskSettings.type === column.field) {
7560
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('taskType');
7699
+ if (this.parent.isLocaleChanged && previousColumn) {
7700
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('taskType');
7701
+ }
7702
+ else {
7703
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('taskType');
7704
+ }
7561
7705
  column.width = column.width ? column.width : 150;
7562
7706
  //column.type = 'string';
7563
7707
  column.editType = 'dropdownedit';
7564
7708
  column.valueAccessor = column.valueAccessor ? column.valueAccessor : this.taskTypeValueAccessor.bind(this);
7565
7709
  }
7566
7710
  else if (taskSettings.manual === column.field && this.parent.taskMode === 'Custom') {
7567
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('taskMode');
7711
+ if (this.parent.isLocaleChanged && previousColumn) {
7712
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('taskMode');
7713
+ }
7714
+ else {
7715
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('taskMode');
7716
+ }
7568
7717
  column.width = column.width ? column.width : 120;
7569
7718
  column.editType = column.editType ? column.editType : 'dropdownedit';
7570
7719
  column.valueAccessor = column.valueAccessor ? column.valueAccessor : this.modeValueAccessor.bind(this);
@@ -7588,7 +7737,15 @@ class GanttTreeGrid {
7588
7737
  * @returns {void} .
7589
7738
  */
7590
7739
  composeResourceColumn(column) {
7591
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('resourceName');
7740
+ let previousColumn = this.parent.previousGanttColumns.filter((prevcolumn) => {
7741
+ return column.field == prevcolumn.field;
7742
+ })[0];
7743
+ if (this.parent.isLocaleChanged && previousColumn) {
7744
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('resourceName');
7745
+ }
7746
+ else {
7747
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('resourceName');
7748
+ }
7592
7749
  column.width = column.width ? column.width : 150;
7593
7750
  column.type = 'string';
7594
7751
  column.valueAccessor = column.valueAccessor ? column.valueAccessor : this.resourceValueAccessor.bind(this);
@@ -7623,7 +7780,17 @@ class GanttTreeGrid {
7623
7780
  const lengthDataSource = this.parent.dataSource['length'];
7624
7781
  let taskIDName;
7625
7782
  column.isPrimaryKey = isProjectView ? true : false;
7626
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('id');
7783
+ if (this.parent.isLocaleChanged) {
7784
+ let previousColumn = this.parent.previousGanttColumns.filter((prevcolumn) => {
7785
+ return column.field == prevcolumn.field;
7786
+ })[0];
7787
+ if (previousColumn) {
7788
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('id');
7789
+ }
7790
+ }
7791
+ else {
7792
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('id');
7793
+ }
7627
7794
  column.width = column.width ? column.width : 100;
7628
7795
  for (let i = 0; i < lengthDataSource; i++) {
7629
7796
  if (!isNullOrUndefined(this.parent.dataSource[i][this.parent.taskFields.id])) {
@@ -7660,7 +7827,15 @@ class GanttTreeGrid {
7660
7827
  * @returns {void} .
7661
7828
  */
7662
7829
  composeProgressColumn(column) {
7663
- column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('progress');
7830
+ let previousColumn = this.parent.previousGanttColumns.filter((prevcolumn) => {
7831
+ return column.field == prevcolumn.field;
7832
+ })[0];
7833
+ if (this.parent.isLocaleChanged && previousColumn) {
7834
+ column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('progress');
7835
+ }
7836
+ else {
7837
+ column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('progress');
7838
+ }
7664
7839
  column.width = column.width ? column.width : 150;
7665
7840
  column.editType = column.editType ? column.editType : 'numericedit';
7666
7841
  }
@@ -9561,7 +9736,7 @@ class ChartRows extends DateProcessor {
9561
9736
  for (let i = 0; i < this.parent.currentViewData.length; i++) {
9562
9737
  const tempTemplateData = this.parent.currentViewData[i];
9563
9738
  if (this.parent.viewType === 'ResourceView') {
9564
- if (this.parent.editModule && this.parent.editModule.isResourceTaskDeleted) {
9739
+ if (this.parent.editModule && this.parent.editModule.isResourceTaskDeleted || this.parent.isFromOnPropertyChange) {
9565
9740
  this.parent.initialChartRowElements = this.parent.ganttChartModule.getChartRows();
9566
9741
  this.parent.editModule.isResourceTaskDeleted = false;
9567
9742
  }
@@ -10072,7 +10247,10 @@ class ChartRows extends DateProcessor {
10072
10247
  addClass([cloneElement], 'collpse-parent-border');
10073
10248
  const id = chartRows[i].querySelector('.' + taskBarMainContainer).getAttribute('rowUniqueId');
10074
10249
  const ganttData = this.parent.getRecordByID(id);
10075
- const zIndex = (ganttData.ganttProperties.eOverlapIndex).toString();
10250
+ let zIndex = "";
10251
+ if (ganttData && ganttData.ganttProperties.eOverlapIndex) {
10252
+ zIndex = (ganttData.ganttProperties.eOverlapIndex).toString();
10253
+ }
10076
10254
  const cloneChildElement = cloneElement.cloneNode(true);
10077
10255
  cloneChildElement.style.zIndex = zIndex;
10078
10256
  parentTrNode[0].childNodes[0].childNodes[0].childNodes[0].appendChild(cloneChildElement);
@@ -10770,7 +10948,7 @@ class Dependency {
10770
10948
  const offsetValue = predecessor.offset;
10771
10949
  const durationUnit = predecessor.offsetUnit;
10772
10950
  if (offsetValue < 0) {
10773
- resultDate = this.dateValidateModule.getStartDate(this.dateValidateModule.checkEndDate(date, record), (offsetValue * -1), durationUnit, record);
10951
+ resultDate = this.dateValidateModule.getStartDate(this.dateValidateModule.checkEndDate(date, record), (offsetValue * -1), durationUnit, record, true);
10774
10952
  }
10775
10953
  else {
10776
10954
  resultDate = this.dateValidateModule.getEndDate(date, offsetValue, durationUnit, record, false);
@@ -12934,6 +13112,7 @@ let Gantt = class Gantt extends Component {
12934
13112
  super(options, element);
12935
13113
  this.showIndicator = true;
12936
13114
  this.singleTier = 0;
13115
+ this.isLocaleChanged = false;
12937
13116
  /** @hidden */
12938
13117
  this.isCancelled = false;
12939
13118
  /** @hidden */
@@ -14270,6 +14449,7 @@ let Gantt = class Gantt extends Component {
14270
14449
  case 'dayWorkingTime':
14271
14450
  case 'allowUnscheduledTasks':
14272
14451
  case 'holidays':
14452
+ this.isLoad = true;
14273
14453
  if (prop === 'holidays') {
14274
14454
  this.totalHolidayDates = this.dataOperation.getHolidayDates();
14275
14455
  this.notify('ui-update', { module: 'day-markers', properties: newProp });
@@ -14278,6 +14458,7 @@ let Gantt = class Gantt extends Component {
14278
14458
  this.treeGrid.refreshColumns();
14279
14459
  this.chartRowsModule.initiateTemplates();
14280
14460
  this.chartRowsModule.refreshGanttRows();
14461
+ this.isLoad = false;
14281
14462
  break;
14282
14463
  case 'addDialogFields':
14283
14464
  case 'editDialogFields':
@@ -14357,6 +14538,9 @@ let Gantt = class Gantt extends Component {
14357
14538
  case 'enableRtl':
14358
14539
  case 'readOnly':
14359
14540
  case 'viewType':
14541
+ if (prop === 'locale') {
14542
+ this.isLocaleChanged = true;
14543
+ }
14360
14544
  isRefresh = true;
14361
14545
  break;
14362
14546
  case 'validateManualTasksOnLinking':
@@ -17946,6 +18130,16 @@ class TaskbarEdit extends DateProcessor {
17946
18130
  merge(this.taskBarEditRecord.ganttProperties, arg.previousData);
17947
18131
  }
17948
18132
  });
18133
+ this.parent.flatData.map((data) => {
18134
+ if ((!isNullOrUndefined(this.taskBarEditRecord.parentItem)) && data.ganttProperties.taskId === this.taskBarEditRecord.parentItem.taskId) {
18135
+ data.childRecords.map((s) => {
18136
+ if (isNullOrUndefined(s.ganttProperties.startDate) || isNullOrUndefined(s.ganttProperties.endDate) ||
18137
+ isNullOrUndefined(s.ganttProperties.duration)) {
18138
+ this.parent.dataOperation.updateGanttData();
18139
+ }
18140
+ });
18141
+ }
18142
+ });
17949
18143
  }
17950
18144
  }
17951
18145
  /**
@@ -18498,7 +18692,7 @@ class TaskbarEdit extends DateProcessor {
18498
18692
  }
18499
18693
  updateChildDrag(item) {
18500
18694
  const left = this.getRoundOffStartLeft(item, this.roundOffDuration);
18501
- const projectStartDate = this.getDateByLeft(left);
18695
+ const projectStartDate = this.getDateByLeft(left, item.isMilestone, item);
18502
18696
  let endDate;
18503
18697
  if (this.segmentIndex === 0) {
18504
18698
  this.parent.setRecordValue('startDate', this.parent.dateValidationModule.checkStartDate(projectStartDate, item, null), item, true);
@@ -18721,10 +18915,16 @@ class TaskbarEdit extends DateProcessor {
18721
18915
  * @returns {Date} .
18722
18916
  * @private
18723
18917
  */
18724
- getDateByLeft(left) {
18725
- const pStartDate = new Date(this.parent.timelineModule.timelineStartDate.toString());
18918
+ getDateByLeft(left, isMilestone, property) {
18919
+ let pStartDate = new Date(this.parent.timelineModule.timelineStartDate.toString());
18726
18920
  const milliSecondsPerPixel = (24 * 60 * 60 * 1000) / this.parent.perDayWidth;
18727
18921
  pStartDate.setTime(pStartDate.getTime() + (left * milliSecondsPerPixel));
18922
+ /* To render the milestone in proper date while editing */
18923
+ if (isMilestone) {
18924
+ pStartDate.setDate(pStartDate.getDate() - 1);
18925
+ this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, pStartDate);
18926
+ pStartDate = this.parent.dateValidationModule.checkStartDate(pStartDate, property, true);
18927
+ }
18728
18928
  const tierMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.topTier :
18729
18929
  this.parent.timelineModule.bottomTier;
18730
18930
  if (tierMode !== 'Hour' && tierMode !== 'Minutes') {
@@ -22255,7 +22455,7 @@ class ConnectorLineEdit {
22255
22455
  this.parent.chartRowsModule.refreshRecords([args.data]);
22256
22456
  }
22257
22457
  else if (args.validateMode.removeLink) {
22258
- this.removePredecessors(ganttRecord, this.validationPredecessor);
22458
+ this.checkChildRecords(ganttRecord);
22259
22459
  this.parent.editModule.updateEditedTask(args.editEventArgs);
22260
22460
  }
22261
22461
  else if (args.validateMode.preserveLinkWithEditing) {
@@ -22263,6 +22463,29 @@ class ConnectorLineEdit {
22263
22463
  this.parent.editModule.updateEditedTask(args.editEventArgs);
22264
22464
  }
22265
22465
  }
22466
+ checkChildRecords(ganttRecord) {
22467
+ this.validationPredecessor = ganttRecord.ganttProperties.predecessor;
22468
+ if (!isNullOrUndefined(this.validationPredecessor)) {
22469
+ this.removePredecessors(ganttRecord, this.validationPredecessor);
22470
+ }
22471
+ if (ganttRecord.childRecords.length > 0) {
22472
+ for (let i = 0; i < ganttRecord.childRecords.length; i++) {
22473
+ let childRecord = ganttRecord.childRecords[i];
22474
+ this.validationPredecessor = childRecord.ganttProperties.predecessor;
22475
+ if (!isNullOrUndefined(this.validationPredecessor)) {
22476
+ this.removePredecessors(childRecord, this.validationPredecessor);
22477
+ }
22478
+ if (childRecord.childRecords.length > 0) {
22479
+ this.checkChildRecords(childRecord);
22480
+ }
22481
+ }
22482
+ }
22483
+ else if (!isNullOrUndefined(ganttRecord.parentItem)) {
22484
+ let parentRecord = this.parent.getRecordByID(ganttRecord.parentItem.taskId);
22485
+ this.validationPredecessor = parentRecord.ganttProperties.predecessor;
22486
+ this.removePredecessors(parentRecord, this.validationPredecessor);
22487
+ }
22488
+ }
22266
22489
  calculateOffset(record) {
22267
22490
  const prevPredecessor = extend([], record.ganttProperties.predecessor, [], true);
22268
22491
  const validPredecessor = this.parent.predecessorModule.getValidPredecessor(record);
@@ -22338,6 +22561,9 @@ class ConnectorLineEdit {
22338
22561
  */
22339
22562
  removePredecessors(ganttRecord, predecessor) {
22340
22563
  const prevPredecessor = extend([], [], ganttRecord.ganttProperties.predecessor, true);
22564
+ if (isNullOrUndefined(predecessor)) {
22565
+ return;
22566
+ }
22341
22567
  const preLength = predecessor.length;
22342
22568
  for (let i = 0; i < preLength; i++) {
22343
22569
  const parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[i].from);
@@ -22433,14 +22659,20 @@ class ConnectorLineEdit {
22433
22659
  * @returns {boolean} .
22434
22660
  * @private
22435
22661
  */
22436
- validateTypes(ganttRecord) {
22662
+ validateTypes(ganttRecord, data) {
22437
22663
  const predecessor = this.parent.predecessorModule.getValidPredecessor(ganttRecord);
22438
22664
  let parentGanttRecord;
22665
+ let ganttTaskData;
22439
22666
  this.validationPredecessor = [];
22440
22667
  let violatedParent;
22441
22668
  let violateType;
22442
22669
  const startDate = this.parent.predecessorModule.getPredecessorDate(ganttRecord, predecessor);
22443
- const ganttTaskData = ganttRecord.ganttProperties;
22670
+ if (data) {
22671
+ ganttTaskData = data.ganttProperties;
22672
+ }
22673
+ else {
22674
+ ganttTaskData = ganttRecord.ganttProperties;
22675
+ }
22444
22676
  const endDate = this.parent.allowUnscheduledTasks && isNullOrUndefined(startDate) ?
22445
22677
  ganttTaskData.endDate :
22446
22678
  this.dateValidateModule.getEndDate(startDate, ganttTaskData.duration, ganttTaskData.durationUnit, ganttTaskData, false);
@@ -23321,7 +23553,30 @@ class Edit$2 {
23321
23553
  * @private
23322
23554
  */
23323
23555
  initiateUpdateAction(args) {
23324
- const isValidatePredecessor = this.isCheckPredecessor(args.data);
23556
+ let isValidatePredecessor = this.isCheckPredecessor(args.data);
23557
+ let parentData;
23558
+ let childRecordIndex;
23559
+ if (!isNullOrUndefined(args.data.parentItem) && !isValidatePredecessor) {
23560
+ parentData = this.parent.getRecordByID(args.data.parentItem.taskId);
23561
+ if (this.isTaskbarMoved(args.data) && this.parent.predecessorModule.getValidPredecessor(parentData).length > 0
23562
+ && this.parent.isInPredecessorValidation) {
23563
+ isValidatePredecessor = true;
23564
+ }
23565
+ else {
23566
+ isValidatePredecessor = false;
23567
+ }
23568
+ }
23569
+ else if (args.data.childRecords.length > 0 && !isValidatePredecessor) {
23570
+ isValidatePredecessor = this.isCheckPredecessor(args.data);
23571
+ if (!isValidatePredecessor && this.isTaskbarMoved(args.data)) {
23572
+ for (var i = 0; i < args.data.childRecords.length; i++) {
23573
+ if (this.parent.predecessorModule.getValidPredecessor(args.data.childRecords[i]).length > 0) {
23574
+ childRecordIndex = i;
23575
+ isValidatePredecessor = true;
23576
+ }
23577
+ }
23578
+ }
23579
+ }
23325
23580
  this.taskbarMoved = this.isTaskbarMoved(args.data);
23326
23581
  this.predecessorUpdated = this.isPredecessorUpdated(args.data);
23327
23582
  if (this.predecessorUpdated) {
@@ -23330,7 +23585,15 @@ class Edit$2 {
23330
23585
  }
23331
23586
  let validateObject = {};
23332
23587
  if (isValidatePredecessor) {
23333
- validateObject = this.parent.connectorLineEditModule.validateTypes(args.data);
23588
+ if (!isNullOrUndefined(parentData)) {
23589
+ validateObject = this.parent.connectorLineEditModule.validateTypes(parentData, args.data);
23590
+ }
23591
+ else if (!isNullOrUndefined(childRecordIndex)) {
23592
+ validateObject = this.parent.connectorLineEditModule.validateTypes(args.data.childRecords[childRecordIndex], args.data);
23593
+ }
23594
+ else {
23595
+ validateObject = this.parent.connectorLineEditModule.validateTypes(args.data);
23596
+ }
23334
23597
  this.parent.isConnectorLineUpdate = true;
23335
23598
  if (!isNullOrUndefined(getValue('violationType', validateObject))) {
23336
23599
  const newArgs = this.validateTaskEvent(args);
@@ -23658,7 +23921,7 @@ class Edit$2 {
23658
23921
  durationDiff = this.parent.dateValidationModule.getDuration(validStartDate, validEndDate, 'minute', true, false);
23659
23922
  }
23660
23923
  for (let i = 0; i < childRecords.length; i++) {
23661
- if (childRecords[i].ganttProperties.isAutoSchedule) {
23924
+ if ((!(this.parent.isUnscheduledTask(childRecords[i].ganttProperties))) && (childRecords[i].ganttProperties.isAutoSchedule)) {
23662
23925
  if (durationDiff > 0) {
23663
23926
  const startDate = isScheduledTask(childRecords[i].ganttProperties) ?
23664
23927
  childRecords[i].ganttProperties.startDate : childRecords[i].ganttProperties.startDate ?
@@ -23686,6 +23949,7 @@ class Edit$2 {
23686
23949
  }
23687
23950
  if (childRecords.length) {
23688
23951
  this.parent.dataOperation.updateParentItems(ganttRecord, true);
23952
+ this.parent.dataOperation.updateGanttData();
23689
23953
  }
23690
23954
  }
23691
23955
  /**
@@ -23764,9 +24028,21 @@ class Edit$2 {
23764
24028
  });
23765
24029
  }
23766
24030
  dmSuccess(e, args) {
23767
- let eLength = e['length'];
24031
+ let eLength;
24032
+ let rec;
24033
+ if (e.changedRecords) {
24034
+ eLength = e.changedRecords['length'];
24035
+ }
24036
+ else {
24037
+ eLength = e['length'];
24038
+ }
23768
24039
  for (let i = 0; i < eLength; i++) {
23769
- let rec = e[i];
24040
+ if (e.changedRecords) {
24041
+ rec = e.changedRecords[i];
24042
+ }
24043
+ else {
24044
+ rec = e[i];
24045
+ }
23770
24046
  let _aLength = Object.keys(rec).length;
23771
24047
  for (let j = 0, _a = Object.keys(rec); j < _aLength; j++) {
23772
24048
  let key = _a[j];
@@ -25416,9 +25692,9 @@ class Edit$2 {
25416
25692
  const crud = data.saveChanges(updatedData, this.parent.taskFields.id, null, query);
25417
25693
  crud.then((e) => {
25418
25694
  if (this.parent.taskFields.id && !isNullOrUndefined(e.addedRecords[0][this.parent.taskFields.id]) &&
25419
- e.addedRecords[0][this.parent.taskFields.id].toString() !== prevID) {
25695
+ e.addedRecords[0][this.parent.taskFields.id].toString() == prevID) {
25420
25696
  this.parent.setRecordValue('taskId', e.addedRecords[0][this.parent.taskFields.id], args.data.ganttProperties, true);
25421
- this.parent.setRecordValue('taskData.' + this.parent.taskFields.id, e.addedRecords[0][this.parent.taskFields.id], args.data);
25697
+ this.parent.setRecordValue('taskData', e.addedRecords[0], args.data);
25422
25698
  this.parent.setRecordValue(this.parent.taskFields.id, e.addedRecords[0][this.parent.taskFields.id], args.data);
25423
25699
  this.parent.setRecordValue('rowUniqueID', e.addedRecords[0][this.parent.taskFields.id].toString(), args.data.ganttProperties, true);
25424
25700
  const idsIndex = this.parent.ids.indexOf(prevID);