@syncfusion/ej2-gantt 20.3.60 → 20.4.38

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/.eslintrc.json +16 -1
  2. package/CHANGELOG.md +14 -0
  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 +1422 -476
  7. package/dist/es6/ej2-gantt.es2015.js.map +1 -1
  8. package/dist/es6/ej2-gantt.es5.js +1448 -484
  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 +19 -18
  14. package/src/gantt/actions/chart-scroll.d.ts +5 -1
  15. package/src/gantt/actions/chart-scroll.js +39 -1
  16. package/src/gantt/actions/connector-line-edit.js +2 -0
  17. package/src/gantt/actions/context-menu.js +36 -5
  18. package/src/gantt/actions/critical-path.d.ts +2 -2
  19. package/src/gantt/actions/critical-path.js +23 -16
  20. package/src/gantt/actions/dialog-edit.js +37 -14
  21. package/src/gantt/actions/edit.d.ts +1 -0
  22. package/src/gantt/actions/edit.js +156 -34
  23. package/src/gantt/actions/excel-export.js +13 -0
  24. package/src/gantt/actions/filter.js +3 -0
  25. package/src/gantt/actions/keyboard.js +1 -0
  26. package/src/gantt/actions/pdf-export.js +12 -0
  27. package/src/gantt/actions/rowdragdrop.js +8 -2
  28. package/src/gantt/actions/taskbar-edit.js +140 -43
  29. package/src/gantt/actions/toolbar.js +21 -1
  30. package/src/gantt/base/date-processor.js +5 -1
  31. package/src/gantt/base/gantt-chart.js +38 -4
  32. package/src/gantt/base/gantt-model.d.ts +25 -2
  33. package/src/gantt/base/gantt.d.ts +64 -21
  34. package/src/gantt/base/gantt.js +396 -26
  35. package/src/gantt/base/interface.d.ts +0 -4
  36. package/src/gantt/base/splitter.js +12 -2
  37. package/src/gantt/base/task-processor.js +4 -3
  38. package/src/gantt/base/tree-grid.js +37 -0
  39. package/src/gantt/base/utils.js +1 -0
  40. package/src/gantt/export/pdf-connector-line.js +185 -187
  41. package/src/gantt/models/loading-indicator-model.d.ts +20 -0
  42. package/src/gantt/models/loading-indicator.d.ts +18 -0
  43. package/src/gantt/models/loading-indicator.js +34 -0
  44. package/src/gantt/models/models.d.ts +2 -0
  45. package/src/gantt/models/models.js +1 -0
  46. package/src/gantt/renderer/chart-rows.js +75 -30
  47. package/src/gantt/renderer/connector-line.js +100 -97
  48. package/src/gantt/renderer/edit-tooltip.js +22 -3
  49. package/src/gantt/renderer/event-marker.js +15 -2
  50. package/src/gantt/renderer/nonworking-day.js +4 -2
  51. package/src/gantt/renderer/timeline.js +21 -1
  52. package/src/gantt/renderer/tooltip.js +1 -0
  53. package/styles/bootstrap-dark.css +179 -12
  54. package/styles/bootstrap.css +179 -12
  55. package/styles/bootstrap4.css +178 -10
  56. package/styles/bootstrap5-dark.css +178 -10
  57. package/styles/bootstrap5.css +178 -10
  58. package/styles/fabric-dark.css +179 -12
  59. package/styles/fabric.css +179 -12
  60. package/styles/fluent-dark.css +180 -10
  61. package/styles/fluent.css +180 -10
  62. package/styles/gantt/_bootstrap-dark-definition.scss +6 -2
  63. package/styles/gantt/_bootstrap-definition.scss +6 -3
  64. package/styles/gantt/_bootstrap4-definition.scss +6 -3
  65. package/styles/gantt/_bootstrap5-definition.scss +6 -3
  66. package/styles/gantt/_fabric-dark-definition.scss +6 -3
  67. package/styles/gantt/_fabric-definition.scss +6 -3
  68. package/styles/gantt/_fluent-definition.scss +6 -3
  69. package/styles/gantt/_fusionnew-definition.scss +6 -3
  70. package/styles/gantt/_highcontrast-definition.scss +7 -4
  71. package/styles/gantt/_highcontrast-light-definition.scss +6 -3
  72. package/styles/gantt/_layout.scss +234 -21
  73. package/styles/gantt/_material-dark-definition.scss +6 -3
  74. package/styles/gantt/_material-definition.scss +6 -3
  75. package/styles/gantt/_material3-definition.scss +6 -3
  76. package/styles/gantt/_tailwind-definition.scss +6 -3
  77. package/styles/gantt/_theme.scss +17 -8
  78. package/styles/gantt/bootstrap-dark.css +179 -12
  79. package/styles/gantt/bootstrap.css +179 -12
  80. package/styles/gantt/bootstrap4.css +178 -10
  81. package/styles/gantt/bootstrap5-dark.css +178 -10
  82. package/styles/gantt/bootstrap5.css +178 -10
  83. package/styles/gantt/fabric-dark.css +179 -12
  84. package/styles/gantt/fabric.css +179 -12
  85. package/styles/gantt/fluent-dark.css +180 -10
  86. package/styles/gantt/fluent.css +180 -10
  87. package/styles/gantt/highcontrast-light.css +178 -10
  88. package/styles/gantt/highcontrast.css +179 -12
  89. package/styles/gantt/icons/_bootstrap-dark.scss +1 -1
  90. package/styles/gantt/icons/_bootstrap.scss +1 -1
  91. package/styles/gantt/icons/_fabric-dark.scss +1 -1
  92. package/styles/gantt/icons/_fabric.scss +1 -1
  93. package/styles/gantt/icons/_highcontrast.scss +1 -1
  94. package/styles/gantt/icons/_material-dark.scss +1 -1
  95. package/styles/gantt/icons/_material.scss +1 -1
  96. package/styles/gantt/material-dark.css +177 -12
  97. package/styles/gantt/material.css +179 -12
  98. package/styles/gantt/tailwind-dark.css +178 -10
  99. package/styles/gantt/tailwind.css +178 -10
  100. package/styles/highcontrast-light.css +178 -10
  101. package/styles/highcontrast.css +179 -12
  102. package/styles/material-dark.css +177 -12
  103. package/styles/material.css +179 -12
  104. package/styles/tailwind-dark.css +178 -10
  105. package/styles/tailwind.css +178 -10
@@ -149,6 +149,7 @@ function updateDates(record, parent) {
149
149
  function formatString(str, args) {
150
150
  let regx;
151
151
  for (let i = 0; i < args.length; i++) {
152
+ // eslint-disable-next-line detect-non-literal-regexp
152
153
  regx = new RegExp('\\{' + (i) + '\\}', 'gm');
153
154
  str = str.replace(regx, args[i].toString());
154
155
  }
@@ -413,6 +414,10 @@ class DateProcessor {
413
414
  }
414
415
  }
415
416
  }
417
+ if (ganttProp && ganttProp.baselineStartDate && cloneDate &&
418
+ ganttProp.baselineStartDate.getTime() > cloneDate.getTime()) {
419
+ cloneDate.setDate(cloneDate.getDate() + 1);
420
+ }
416
421
  return cloneDate;
417
422
  }
418
423
  }
@@ -483,7 +488,7 @@ class DateProcessor {
483
488
  tDuration = this.parent.editModule.taskbarEditModule.sumOfDuration(ganttProperties.segments);
484
489
  }
485
490
  else {
486
- if (!isNullOrUndefined(ganttProperties.startDate) && !isNullOrUndefined(ganttProperties.endDate) &&
491
+ if ((!isNullOrUndefined(this.parent.taskFields.milestone)) && (!isNullOrUndefined(ganttProperties.startDate)) && !isNullOrUndefined(ganttProperties.endDate) &&
487
492
  (ganttProperties.startDate).getTime() === (ganttProperties.endDate).getTime() && !isNullOrUndefined(ganttData.taskData[this.parent.taskFields.milestone])) {
488
493
  tDuration = 1;
489
494
  }
@@ -1846,7 +1851,6 @@ class TaskProcessor extends DateProcessor {
1846
1851
  this.parent.setRecordValue('parentId', data[taskSettings.parentID], ganttProperties, true);
1847
1852
  }
1848
1853
  this.addCustomFieldValue(data, ganttData);
1849
- ganttData.checkboxState = 'uncheck';
1850
1854
  this.parent.setRecordValue('isAutoSchedule', autoSchedule, ganttProperties, true);
1851
1855
  this.parent.setRecordValue('resourceInfo', this.setResourceInfo(data), ganttProperties, true);
1852
1856
  this.parent.setRecordValue('isMilestone', false, ganttProperties, true);
@@ -2037,8 +2041,10 @@ class TaskProcessor extends DateProcessor {
2037
2041
  taskData.push(this.setSegmentTaskData(segment, segments[i]));
2038
2042
  }
2039
2043
  this.parent.setRecordValue('duration', sumOfDuration, data.ganttProperties, true);
2040
- this.parent.setRecordValue('endDate', ganttSegments[ganttSegments.length - 1].endDate, data.ganttProperties, true);
2041
- if (!isNullOrUndefined(taskSettings.endDate)) {
2044
+ if (!isNullOrUndefined(ganttSegments[ganttSegments.length - 1])) {
2045
+ this.parent.setRecordValue('endDate', ganttSegments[ganttSegments.length - 1].endDate, data.ganttProperties, true);
2046
+ }
2047
+ if (!isNullOrUndefined(taskSettings.endDate) && !isNullOrUndefined(ganttSegments[ganttSegments.length - 1])) {
2042
2048
  this.parent.setRecordValue(this.parent.taskFields.endDate, ganttSegments[ganttSegments.length - 1].endDate, data, true);
2043
2049
  }
2044
2050
  this.parent.setRecordValue('taskData.' + this.parent.taskFields.segments, taskData, data);
@@ -3955,6 +3961,8 @@ class ChartScroll {
3955
3961
  addEventListeners() {
3956
3962
  this.parent.on('grid-scroll', this.gridScrollHandler, this);
3957
3963
  EventHandler.add(this.element, 'scroll', this.onScroll, this);
3964
+ this.parent.treeGrid.grid.on('showGanttShimmer', this.updateShimmer, this);
3965
+ this.parent.treeGrid.grid.on('removeGanttShimmer', this.removeShimmer, this);
3958
3966
  }
3959
3967
  /**
3960
3968
  * Unbind events
@@ -3964,6 +3972,8 @@ class ChartScroll {
3964
3972
  removeEventListeners() {
3965
3973
  EventHandler.remove(this.element, 'scroll', this.onScroll);
3966
3974
  this.parent.off('grid-scroll', this.gridScrollHandler);
3975
+ this.parent.treeGrid.grid.off('showGanttShimmer', this.updateShimmer);
3976
+ this.parent.treeGrid.grid.off('removeGanttShimmer', this.removeShimmer);
3967
3977
  }
3968
3978
  /**
3969
3979
  *
@@ -4009,6 +4019,27 @@ class ChartScroll {
4009
4019
  this.parent.chartVerticalLineContainer.style.top = formatUnit(scrollTop);
4010
4020
  }
4011
4021
  }
4022
+ removeShimmer() {
4023
+ let parent = this.parent;
4024
+ setTimeout(function () {
4025
+ parent.hideMaskRow();
4026
+ }, 0);
4027
+ }
4028
+ ;
4029
+ updateShimmer() {
4030
+ let parent = this.parent;
4031
+ setTimeout(function () {
4032
+ parent.showMaskRow();
4033
+ }, 0);
4034
+ }
4035
+ updateSpinner() {
4036
+ let parent = this.parent;
4037
+ this.parent.showSpinner();
4038
+ window.clearTimeout(this.isScrolling);
4039
+ this.isScrolling = setTimeout(function () {
4040
+ parent.hideSpinner();
4041
+ }, 200);
4042
+ }
4012
4043
  /**
4013
4044
  * Scroll event handler
4014
4045
  *
@@ -4034,6 +4065,16 @@ class ChartScroll {
4034
4065
  scrollArgs.scrollDirection = 'Horizontal';
4035
4066
  scrollArgs.action = 'HorizontalScroll';
4036
4067
  }
4068
+ if ((scrollArgs.scrollDirection != 'Horizontal' && !isNullOrUndefined(scrollArgs.scrollDirection)) && this.parent.enableVirtualization === true && (this.parent.isToolBarClick
4069
+ || isNullOrUndefined(this.parent.isToolBarClick))) {
4070
+ this.parent.isVirtualScroll = true;
4071
+ if (this.parent.showIndicator || isNullOrUndefined(this.parent.showIndicator)) {
4072
+ if (!this.parent.enableVirtualMaskRow && this.parent.enableVirtualization && this.parent.loadingIndicator.indicatorType === "Spinner") {
4073
+ this.updateSpinner();
4074
+ }
4075
+ }
4076
+ }
4077
+ this.parent.isToolBarClick = true;
4037
4078
  scrollArgs.requestType = 'scroll';
4038
4079
  this.parent.trigger('actionComplete', scrollArgs);
4039
4080
  }
@@ -4074,7 +4115,10 @@ class ChartScroll {
4074
4115
  * @param {number} scrollLeft - To set scroll left for scroll container
4075
4116
  * @returns {void} .
4076
4117
  */
4077
- setScrollLeft(scrollLeft) {
4118
+ setScrollLeft(scrollLeft, leftSign) {
4119
+ if (leftSign) {
4120
+ scrollLeft = leftSign == -1 && this.parent.enableRtl ? -scrollLeft : scrollLeft;
4121
+ }
4078
4122
  this.element.scrollLeft = scrollLeft;
4079
4123
  this.parent.ganttChartModule.chartTimelineContainer.scrollLeft = this.element.scrollLeft;
4080
4124
  this.previousScroll.left = this.element.scrollLeft;
@@ -4221,6 +4265,21 @@ class GanttChart {
4221
4265
  this.parent.predecessorModule.createConnectorLinesCollection();
4222
4266
  }
4223
4267
  this.parent.connectorLineModule.renderConnectorLines(this.parent.updatedConnectorLineCollection);
4268
+ for (let i = 0; i < this.parent.chartRowsModule.ganttChartTableBody.children.length; i++) {
4269
+ if (this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[4]) {
4270
+ this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[1].setAttribute('tabindex', '-1');
4271
+ this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[2].setAttribute('tabindex', '-1');
4272
+ this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[4].setAttribute('tabindex', '-1');
4273
+ }
4274
+ else {
4275
+ if (this.parent.viewType === 'ProjectView') {
4276
+ this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[1].setAttribute('tabindex', '-1');
4277
+ }
4278
+ else if (this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[0]) {
4279
+ this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[0].setAttribute('tabindex', '-1');
4280
+ }
4281
+ }
4282
+ }
4224
4283
  if (this.parent.enableCriticalPath) {
4225
4284
  let crtiticalModule = this.parent.criticalPathModule;
4226
4285
  this.parent.criticalPathModule.criticalConnectorLine(crtiticalModule.criticalPathCollection, crtiticalModule.detailPredecessorCollection, this.parent.enableCriticalPath, crtiticalModule.predecessorCollectionTaskIds);
@@ -4284,13 +4343,15 @@ class GanttChart {
4284
4343
  for (let i = 0; i < rangeCollection.length; i++) {
4285
4344
  const height = this.getRangeHeight(currentRecord);
4286
4345
  const leftDiv = createElement('div', {
4287
- className: rangeChildContainer + ' ' + 'e-leftarc', styles: `left:${rangeCollection[i].left}px;
4346
+ className: rangeChildContainer + ' ' + 'e-leftarc', styles: (this.parent.enableRtl ? 'right:' : 'left:') +
4347
+ `${(this.parent.enableRtl ? rangeCollection[i].left + rangeCollection[i].width - 5 : rangeCollection[i].left)}px;
4288
4348
  top: ${Math.floor((this.parent.rowHeight - this.parent.chartRowsModule.taskBarHeight) / 2)}px;
4289
4349
  height: ${height + 1}px; border-right: 0px`
4290
4350
  });
4291
4351
  const rightDiv = createElement('div', {
4292
4352
  className: rangeChildContainer + ' ' + 'e-rightarc',
4293
- styles: `left:${rangeCollection[i].left + rangeCollection[i].width - 5}px;
4353
+ styles: (this.parent.enableRtl ? 'right:' : 'left:') + `${(this.parent.enableRtl ? rangeCollection[i].left :
4354
+ rangeCollection[i].left + rangeCollection[i].width - 5)}px;
4294
4355
  top: ${Math.floor((this.parent.rowHeight - this.parent.chartRowsModule.taskBarHeight) / 2)}px; height: ${height + 1}px;
4295
4356
  border-left: 0px`
4296
4357
  });
@@ -4307,6 +4368,10 @@ class GanttChart {
4307
4368
  renderTimelineContainer() {
4308
4369
  this.chartTimelineContainer =
4309
4370
  createElement('div', { className: timelineHeaderContainer });
4371
+ if (this.parent.enableRtl) {
4372
+ this.chartTimelineContainer.style.borderLeftWidth = '1px';
4373
+ this.chartTimelineContainer.style.borderRightWidth = '0px';
4374
+ }
4310
4375
  this.chartTimelineContainer.setAttribute("role", "presentation");
4311
4376
  this.chartElement.appendChild(this.chartTimelineContainer);
4312
4377
  }
@@ -4479,7 +4544,7 @@ class GanttChart {
4479
4544
  scrollLeft = this.scrollElement.scrollWidth <= scrollLeft ? this.scrollElement.scrollWidth : scrollLeft;
4480
4545
  if ((this.scrollElement.offsetWidth + this.parent.ganttChartModule.scrollElement.scrollLeft) < scrollLeft
4481
4546
  || (this.scrollElement.scrollLeft > scrollLeft)) {
4482
- this.scrollObject.setScrollLeft(scrollLeft - 50);
4547
+ this.scrollObject.setScrollLeft(scrollLeft - 50, this.parent.enableRtl ? -1 : 0);
4483
4548
  }
4484
4549
  // this.parent.ganttChartModule.scrollObject.updateLeftPosition();
4485
4550
  }
@@ -4514,6 +4579,12 @@ class GanttChart {
4514
4579
  */
4515
4580
  documentMouseUp(e) {
4516
4581
  this.isGanttElement = true;
4582
+ if (e.target.classList.contains('e-treegridexpand') ||
4583
+ e.target.classList.contains('e-treegridcollapse')) {
4584
+ if (getValue('isEditCollapse', this.parent.treeGrid) === true) {
4585
+ setValue('isEditCollapse', false, this.parent.treeGrid);
4586
+ }
4587
+ }
4517
4588
  if (this.parent.allowRowDragAndDrop) {
4518
4589
  const ganttDragElemet = this.parent.element.querySelector('.e-ganttdrag');
4519
4590
  if (ganttDragElemet) {
@@ -4531,6 +4602,13 @@ class GanttChart {
4531
4602
  }
4532
4603
  this.parent.notify('chartMouseUp', e);
4533
4604
  if (this.parent.showActiveElement) {
4605
+ this.parent.showIndicator = true;
4606
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
4607
+ this.parent.hideMaskRow();
4608
+ }
4609
+ else {
4610
+ this.parent.hideSpinner();
4611
+ }
4534
4612
  if (this.focusedElement && !e.target.classList.contains('e-split-bar')) {
4535
4613
  this.focusedElement.tabIndex = this.focusedElement.tabIndex === 0 ? -1 : this.focusedElement.tabIndex;
4536
4614
  removeClass([this.focusedElement], 'e-active-container');
@@ -4777,7 +4855,7 @@ class GanttChart {
4777
4855
  this.parent.predecessorModule.createConnectorLinesCollection();
4778
4856
  this.parent.connectorLineModule.renderConnectorLines(this.parent.updatedConnectorLineCollection);
4779
4857
  if (this.parent.enableCriticalPath && this.parent.criticalPathModule) {
4780
- let criticalModule = this.parent.criticalPathModule;
4858
+ const criticalModule = this.parent.criticalPathModule;
4781
4859
  criticalModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);
4782
4860
  }
4783
4861
  }
@@ -5536,6 +5614,12 @@ class Timeline {
5536
5614
  cancel: false
5537
5615
  };
5538
5616
  this.parent.trigger('actionBegin', args);
5617
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
5618
+ this.parent.showMaskRow();
5619
+ }
5620
+ else {
5621
+ this.parent.showSpinner();
5622
+ }
5539
5623
  if (!args.cancel) {
5540
5624
  newTimeline = args.timeline;
5541
5625
  this.changeTimelineSettings(newTimeline);
@@ -5576,6 +5660,12 @@ class Timeline {
5576
5660
  timeline: this.parent.currentZoomingLevel
5577
5661
  };
5578
5662
  this.parent.trigger('actionComplete', args);
5663
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
5664
+ this.parent.hideMaskRow();
5665
+ }
5666
+ else {
5667
+ this.parent.hideSpinner();
5668
+ }
5579
5669
  }
5580
5670
  }
5581
5671
  /**
@@ -5641,6 +5731,12 @@ class Timeline {
5641
5731
  this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomin', this.parent.controlId + '_zoomout'], true);
5642
5732
  }
5643
5733
  this.parent.trigger('actionBegin', args);
5734
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
5735
+ this.parent.showMaskRow();
5736
+ }
5737
+ else {
5738
+ this.parent.showSpinner();
5739
+ }
5644
5740
  this.changeTimelineSettings(newTimeline);
5645
5741
  }
5646
5742
  bottomTierCellWidthCalc(mode, zoomLevel, date) {
@@ -6747,7 +6843,9 @@ class Timeline {
6747
6843
  const validStartLeft = this.parent.dataOperation.getTaskLeft(validStartDate, false);
6748
6844
  const validEndLeft = this.parent.dataOperation.getTaskLeft(validEndDate, false);
6749
6845
  let isChanged;
6750
- if (!isNullOrUndefined(maxStartLeft) && ((minStartDate < this.timelineStartDate) || (!isNullOrUndefined(this.parent.editModule.taskbarEditModule)) && (!isNullOrUndefined(this.parent.editModule.taskbarEditModule.taskBarEditAction))) && (maxStartLeft < this.bottomTierCellWidth || maxStartLeft <= validStartLeft)) {
6846
+ if (!isNullOrUndefined(maxStartLeft) && ((minStartDate < this.timelineStartDate) ||
6847
+ (!isNullOrUndefined(this.parent.editModule.taskbarEditModule)) &&
6848
+ (!isNullOrUndefined(this.parent.editModule.taskbarEditModule.taskBarEditAction))) && (maxStartLeft < this.bottomTierCellWidth || maxStartLeft <= validStartLeft)) {
6751
6849
  isChanged = 'prevTimeSpan';
6752
6850
  minStartDate = minStartDate > this.timelineStartDate ? this.timelineStartDate : minStartDate;
6753
6851
  }
@@ -6986,9 +7084,12 @@ class GanttTreeGrid {
6986
7084
  this.parent.treeGrid.showColumnMenu = this.parent.showColumnMenu;
6987
7085
  this.parent.treeGrid.enableCollapseAll = this.parent.collapseAllParentTasks;
6988
7086
  this.parent.treeGrid.columnMenuItems = this.parent.columnMenuItems;
7087
+ this.parent.treeGrid.enableRtl = this.parent.enableRtl;
6989
7088
  this.parent.treeGrid.childMapping = isNullOrUndefined(this.parent.taskFields.child) ? '' : this.parent.taskFields.child;
6990
7089
  this.parent.treeGrid.treeColumnIndex = this.parent.treeColumnIndex;
6991
7090
  this.parent.treeGrid.columns = this.treeGridColumns;
7091
+ this.parent.treeGrid.loadingIndicator = this.parent.loadingIndicator;
7092
+ this.parent.treeGrid.enableVirtualMaskRow = this.parent.enableVirtualMaskRow;
6992
7093
  if (this.parent.dataSource instanceof Object && isCountRequired(this.parent)) {
6993
7094
  // In order to bind the observable data at load time, hasChildMapping is necessary to be mapped.
6994
7095
  this.parent.treeGrid.hasChildMapping = 'isParent';
@@ -7082,6 +7183,14 @@ class GanttTreeGrid {
7082
7183
  dataBound(args) {
7083
7184
  this.ensureScrollBar();
7084
7185
  this.parent.treeDataBound(args);
7186
+ if (this.parent.isVirtualScroll) {
7187
+ if ((this.parent.enableVirtualMaskRow && this.parent.enableVirtualization) ||
7188
+ (this.parent.enableVirtualization && !this.parent.enableVirtualMaskRow && this.parent.loadingIndicator.indicatorType === "Shimmer") ||
7189
+ (this.parent.loadingIndicator.indicatorType === "Shimmer")) {
7190
+ this.parent.hideMaskRow();
7191
+ }
7192
+ this.parent.isVirtualScroll = false;
7193
+ }
7085
7194
  this.prevCurrentView = extend([], [], this.parent.currentViewData, true);
7086
7195
  }
7087
7196
  dataStateChange(args) {
@@ -7116,6 +7225,12 @@ class GanttTreeGrid {
7116
7225
  const collapsedArgs = this.createExpandCollapseArgs(args);
7117
7226
  this.parent.ganttChartModule.collapsedGanttRow(collapsedArgs);
7118
7227
  }
7228
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
7229
+ this.parent.hideMaskRow();
7230
+ }
7231
+ else {
7232
+ this.parent.hideSpinner();
7233
+ }
7119
7234
  }
7120
7235
  expanded(args) {
7121
7236
  if (!this.parent.ganttChartModule.isExpandCollapseFromChart && !this.parent.isExpandCollapseLevelMethod) {
@@ -7124,6 +7239,12 @@ class GanttTreeGrid {
7124
7239
  this.parent.ganttChartModule.expandedGanttRow(expandedArgs);
7125
7240
  }
7126
7241
  }
7242
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
7243
+ this.parent.hideMaskRow();
7244
+ }
7245
+ else {
7246
+ this.parent.hideSpinner();
7247
+ }
7127
7248
  }
7128
7249
  actionBegin(args) {
7129
7250
  this.parent.notify('actionBegin', args);
@@ -7132,6 +7253,14 @@ class GanttTreeGrid {
7132
7253
  setValue('doubleClickTarget', null, this.parent.treeGrid.editModule);
7133
7254
  }
7134
7255
  this.parent.trigger('actionBegin', args);
7256
+ if (args.requestType != "virtualscroll" && args.type != "edit" && args.requestType != "beginEdit") {
7257
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
7258
+ this.parent.showMaskRow();
7259
+ }
7260
+ else {
7261
+ this.parent.showSpinner();
7262
+ }
7263
+ }
7135
7264
  } // eslint-disable-next-line
7136
7265
  created(args) {
7137
7266
  this.updateKeyConfigSettings();
@@ -7200,6 +7329,12 @@ class GanttTreeGrid {
7200
7329
  this.parent.addDeleteRecord = false;
7201
7330
  }
7202
7331
  this.parent.trigger('actionComplete', updatedArgs);
7332
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
7333
+ this.parent.hideMaskRow();
7334
+ }
7335
+ else {
7336
+ this.parent.hideSpinner();
7337
+ }
7203
7338
  }
7204
7339
  updateKeyConfigSettings() {
7205
7340
  delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.delete;
@@ -7469,7 +7604,7 @@ class GanttTreeGrid {
7469
7604
  */
7470
7605
  composeIDColumn(column) {
7471
7606
  const isProjectView = this.parent.viewType === 'ProjectView';
7472
- let lengthDataSource = this.parent.dataSource['length'];
7607
+ const lengthDataSource = this.parent.dataSource['length'];
7473
7608
  let taskIDName;
7474
7609
  column.isPrimaryKey = isProjectView ? true : false;
7475
7610
  column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('id');
@@ -8082,6 +8217,21 @@ __decorate$16([
8082
8217
  Property(null)
8083
8218
  ], ResourceFields.prototype, "group", void 0);
8084
8219
 
8220
+ var __decorate$17 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
8221
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8222
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8223
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8224
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
8225
+ };
8226
+ /**
8227
+ * Configures the Loading Indicator of the Gantt.
8228
+ */
8229
+ class LoadingIndicator extends ChildProperty {
8230
+ }
8231
+ __decorate$17([
8232
+ Property('Spinner')
8233
+ ], LoadingIndicator.prototype, "indicatorType", void 0);
8234
+
8085
8235
  /**
8086
8236
  * Export all generated models for complex settings
8087
8237
  */
@@ -8180,7 +8330,7 @@ class ChartRows extends DateProcessor {
8180
8330
  getIndicatorNode(indicator) {
8181
8331
  const templateString = '<label class="' + label + ' ' + taskIndicatorDiv + '"style="line-height:'
8182
8332
  + (this.parent.rowHeight) + 'px;' +
8183
- 'left:' + this.getIndicatorleft(indicator.date) + 'px;"><i class="' + indicator.iconClass + '"></i> </label>';
8333
+ (this.parent.enableRtl ? 'right:' : 'left:') + this.getIndicatorleft(indicator.date) + 'px;"><i class="' + indicator.iconClass + '"></i> </label>';
8184
8334
  return this.createDivElement(templateString);
8185
8335
  }
8186
8336
  /**
@@ -8206,6 +8356,13 @@ class ChartRows extends DateProcessor {
8206
8356
  getChildTaskbarNode(i, rootElement) {
8207
8357
  let childTaskbarNode = null;
8208
8358
  const data = this.templateData;
8359
+ let direction;
8360
+ if (this.parent.enableRtl) {
8361
+ direction = 'right:';
8362
+ }
8363
+ else {
8364
+ direction = 'left:';
8365
+ }
8209
8366
  if (this.childTaskbarTemplateFunction) {
8210
8367
  childTaskbarNode = this.childTaskbarTemplateFunction(extend({ index: i }, data), this.parent, 'TaskbarTemplate', this.getTemplateID('TaskbarTemplate'), false, undefined, rootElement[0], this.parent.treeGrid['root']);
8211
8368
  }
@@ -8248,14 +8405,15 @@ class ChartRows extends DateProcessor {
8248
8405
  }
8249
8406
  if (isNaN(parseInt(labelString))) {
8250
8407
  taskLabel$$1 = '<span class="' + taskLabel + '" style="line-height:' +
8251
- (this.taskBarHeight - 1) + 'px; text-align: left;' +
8408
+ (this.taskBarHeight - 1) + 'px; text-align:' + (this.parent.enableRtl ? 'right;' : 'left;') +
8252
8409
  'display:' + 'inline-block;' +
8253
8410
  'width:' + (data.ganttProperties.width - 10) + 'px; height:' +
8254
8411
  this.taskBarHeight + 'px;">' + labelString + '</span>';
8255
8412
  }
8256
8413
  else {
8257
8414
  taskLabel$$1 = '<span class="' + taskLabel + '" style="line-height:' +
8258
- (this.taskBarHeight - 1) + 'px;' + (this.parent.viewType === 'ResourceView' ? 'text-align: left;' : '') +
8415
+ (this.taskBarHeight - 1) + 'px;' + (this.parent.viewType === 'ResourceView' ? ('text-align:' +
8416
+ (this.parent.enableRtl ? 'right;' : 'left;')) : '') +
8259
8417
  +(this.parent.viewType === 'ResourceView' ? 'display:inline-flex;' : '') +
8260
8418
  +(this.parent.viewType === 'ResourceView' ? (data.ganttProperties.width - 10) : '') + 'px; height:' +
8261
8419
  this.taskBarHeight + 'px;">' + labelString + '</span>';
@@ -8267,17 +8425,17 @@ class ChartRows extends DateProcessor {
8267
8425
  (data.ganttProperties.startDate && !data.ganttProperties.endDate && !data.ganttProperties.duration) ? ('<div class="' + childProgressBarInnerDiv + ' ' + traceChildTaskBar + ' ' +
8268
8426
  unscheduledTaskbarLeft + ' ' + (data.ganttProperties.isAutoSchedule ?
8269
8427
  '' : manualChildTaskBar) + '"' +
8270
- 'style="left:' + data.ganttProperties.left + 'px; height:' + this.taskBarHeight + 'px;"></div>') :
8428
+ 'style="' + direction + data.ganttProperties.left + 'px; height:' + this.taskBarHeight + 'px;"></div>') :
8271
8429
  (data.ganttProperties.endDate && !data.ganttProperties.startDate && !data.ganttProperties.duration) ?
8272
8430
  ('<div class="' + childProgressBarInnerDiv + ' ' + traceChildTaskBar + ' ' +
8273
8431
  unscheduledTaskbarRight + ' ' + (data.ganttProperties.isAutoSchedule ?
8274
8432
  '' : manualChildTaskBar) + '"' +
8275
- 'style="left:' + data.ganttProperties.left + 'px; height:' + this.taskBarHeight + 'px;"></div>') :
8433
+ 'style="' + direction + data.ganttProperties.left + 'px; height:' + this.taskBarHeight + 'px;"></div>') :
8276
8434
  (data.ganttProperties.duration && !data.ganttProperties.startDate && !data.ganttProperties.endDate) ?
8277
8435
  ('<div class="' + childProgressBarInnerDiv + ' ' + traceChildTaskBar + ' ' +
8278
8436
  unscheduledTaskbar + ' ' + (data.ganttProperties.isAutoSchedule ?
8279
8437
  '' : manualChildTaskBar) + '"' +
8280
- 'style="left:' + data.ganttProperties.left + 'px; width:' + data.ganttProperties.width + 'px;' +
8438
+ 'style="' + direction + data.ganttProperties.left + 'px; width:' + data.ganttProperties.width + 'px;' +
8281
8439
  ' height:' + this.taskBarHeight + 'px;"></div>') : '';
8282
8440
  if (data.ganttProperties.startDate && data.ganttProperties.endDate && data.ganttProperties.duration &&
8283
8441
  (isNullOrUndefined(data.ganttProperties.segments) || (!isNullOrUndefined(data.ganttProperties.segments) &&
@@ -8305,6 +8463,13 @@ class ChartRows extends DateProcessor {
8305
8463
  childTaskbarNode = this.createDivElement(template);
8306
8464
  }
8307
8465
  }
8466
+ if (this.parent.enableRtl && childTaskbarNode[0] && childTaskbarNode[0].querySelector('.e-task-label')) {
8467
+ childTaskbarNode[0].querySelector('.e-task-label').style.marginLeft = '15px';
8468
+ childTaskbarNode[0].querySelector('.e-task-label').style.marginRight = '8px';
8469
+ if (childTaskbarNode[0].querySelector('.e-gantt-child-progressbar')) {
8470
+ childTaskbarNode[0].querySelector('.e-gantt-child-progressbar').style.textAlign = 'left';
8471
+ }
8472
+ }
8308
8473
  return childTaskbarNode;
8309
8474
  }
8310
8475
  splitTaskbar(data, labelString) {
@@ -8324,7 +8489,7 @@ class ChartRows extends DateProcessor {
8324
8489
  //split taskbar
8325
8490
  '<div class="' + childTaskBarInnerDiv + ' ' + segmentPosition + ' ' + traceChildTaskBar + ' ' +
8326
8491
  ' e-segmented-taskbar' +
8327
- '"style="width:' + segment.width + 'px;position: absolute; left:' + segment.left + 'px;height:' +
8492
+ '"style="width:' + segment.width + 'px;position: absolute;' + (this.parent.enableRtl ? 'right:' : 'left:') + segment.left + 'px;height:' +
8328
8493
  (this.taskBarHeight) + 'px; overflow:' + progressBarVisible + ';" data-segment-index = "' + i + '" aria-label = "' +
8329
8494
  this.generateSpiltTaskAriaLabel(segment, data.ganttProperties) + '"> ' +
8330
8495
  this.getSplitTaskbarLeftResizerNode() +
@@ -8332,7 +8497,7 @@ class ChartRows extends DateProcessor {
8332
8497
  '<div class="' + childProgressBarInnerDiv + ' ' + traceChildProgressBar + ' ' +
8333
8498
  '" style="border-style:' + (segment.progressWidth ? 'solid;' : 'none;') +
8334
8499
  'display:' + (segment.progressWidth >= 0 ? 'block;' : 'none;') +
8335
- 'width:' + segment.progressWidth + 'px;height:100%;' +
8500
+ 'width:' + segment.progressWidth + 'px;height:100%;' + 'text-align:' + (this.parent.enableRtl ? 'left;' : 'right;') +
8336
8501
  'border-top-right-radius:' + this.getSplitTaskBorderRadius(segment) + 'px;' +
8337
8502
  'border-bottom-right-radius:' + this.getSplitTaskBorderRadius(segment) + 'px;">' +
8338
8503
  // progress label
@@ -8349,19 +8514,20 @@ class ChartRows extends DateProcessor {
8349
8514
  getSplitTaskbarLeftResizerNode() {
8350
8515
  const lResizerLeft = -(this.parent.isAdaptive ? 12 : 2);
8351
8516
  const template = '<div class="' + taskBarLeftResizer + ' ' + icon + '"' +
8352
- ' style="left:' + lResizerLeft + 'px;height:' + (this.taskBarHeight) + 'px;"></div>';
8517
+ ' style="' + (this.parent.enableRtl ? 'right:' : 'left:') + lResizerLeft + 'px;height:' + (this.taskBarHeight) + 'px;"></div>';
8353
8518
  return template;
8354
8519
  }
8355
8520
  getSplitTaskbarRightResizerNode(segment) {
8356
8521
  const rResizerLeft = this.parent.isAdaptive ? -2 : -10;
8357
8522
  const template = '<div class="' + taskBarRightResizer + ' ' + icon + '"' +
8358
- ' style="left:' + (segment.width + rResizerLeft) + 'px;' +
8523
+ ' style="' + (this.parent.enableRtl ? 'right:' : 'left:') + (segment.width + rResizerLeft) + 'px;' +
8359
8524
  'height:' + (this.taskBarHeight) + 'px;"></div>';
8360
8525
  return template;
8361
8526
  }
8362
8527
  getSplitProgressResizerNode(segment) {
8528
+ let width = this.parent.enableRtl ? (segment.progressWidth + 8) : (segment.progressWidth - 6);
8363
8529
  const template = '<div class="' + childProgressResizer + '"' +
8364
- ' style="left:' + (segment.progressWidth - 6) + 'px;margin-top:' +
8530
+ ' style="' + (this.parent.enableRtl ? 'right:' : 'left:') + width + 'px;margin-top:' +
8365
8531
  (this.taskBarHeight - 4) + 'px;"><div class="' + progressBarHandler + '"' +
8366
8532
  '><div class="' + progressHandlerElement + '"></div>' +
8367
8533
  '<div class="' + progressBarHandlerAfter + '"></div></div>';
@@ -8491,6 +8657,12 @@ class ChartRows extends DateProcessor {
8491
8657
  }
8492
8658
  }
8493
8659
  this.parent.trigger('actionComplete', args);
8660
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
8661
+ this.parent.hideMaskRow();
8662
+ }
8663
+ else {
8664
+ this.parent.hideSpinner();
8665
+ }
8494
8666
  setValue('isEdit', false, this.parent.contextMenuModule);
8495
8667
  setValue('isEdit', false, this.parent);
8496
8668
  }
@@ -8695,7 +8867,7 @@ class ChartRows extends DateProcessor {
8695
8867
  getTaskBaselineNode() {
8696
8868
  const data = this.templateData;
8697
8869
  const template = '<div class="' + baselineBar + ' ' + '" role="term" style="margin-top:' + this.baselineTop +
8698
- 'px;left:' + data.ganttProperties.baselineLeft + 'px;' +
8870
+ 'px;' + (this.parent.enableRtl ? 'right:' : 'left:') + data.ganttProperties.baselineLeft + 'px;' +
8699
8871
  'width:' + data.ganttProperties.baselineWidth + 'px;height:' +
8700
8872
  this.baselineHeight + 'px;' + (this.baselineColor ? 'background-color: ' + this.baselineColor + ';' : '') + '"></div>';
8701
8873
  return this.createDivElement(template);
@@ -8710,7 +8882,7 @@ class ChartRows extends DateProcessor {
8710
8882
  const data = this.templateData;
8711
8883
  let baselineMilestoneHeight = this.parent.renderBaseline ? 5 : 2;
8712
8884
  const template = '<div class="' + baselineMilestoneContainer + ' ' + '" style="' +
8713
- 'left:' + (data.ganttProperties.baselineLeft - this.milesStoneRadius) + 'px;' +
8885
+ (this.parent.enableRtl ? 'right:' : 'left:') + (data.ganttProperties.baselineLeft - this.milesStoneRadius) + 'px;' +
8714
8886
  'margin-top:' + (-Math.floor(this.parent.rowHeight - this.milestoneMarginTop) + baselineMilestoneHeight) +
8715
8887
  'px">' + '<div class="' + baselineMilestoneDiv + '">' + '<div class="' + baselineMilestoneDiv +
8716
8888
  ' ' + baselineMilestoneTop + '" ' +
@@ -8760,6 +8932,10 @@ class ChartRows extends DateProcessor {
8760
8932
  }
8761
8933
  leftLabelNode[0].appendChild([].slice.call(leftLabelTemplateNode)[0]);
8762
8934
  }
8935
+ if (this.parent.enableRtl) {
8936
+ leftLabelNode[0].style.paddingLeft = '25px';
8937
+ leftLabelNode[0].style.paddingRight = '0px';
8938
+ }
8763
8939
  return leftLabelNode;
8764
8940
  }
8765
8941
  getLableText(labelString, labelDiv) {
@@ -8806,6 +8982,10 @@ class ChartRows extends DateProcessor {
8806
8982
  }
8807
8983
  rightLabelNode[0].appendChild([].slice.call(rightLabelTemplateNode)[0]);
8808
8984
  }
8985
+ if (this.parent.enableRtl) {
8986
+ rightLabelNode[0].style.marginLeft = '0px';
8987
+ rightLabelNode[0].style.paddingRight = '25px';
8988
+ }
8809
8989
  return rightLabelNode;
8810
8990
  }
8811
8991
  getManualTaskbar() {
@@ -8825,17 +9005,18 @@ class ChartRows extends DateProcessor {
8825
9005
  taskbarHeight * 2 + 'px;border-left-width:' + taskbarHeight / 5 +
8826
9006
  'px; border-bottom:' + taskbarHeight / 5 + 'px solid transparent;"></div>');
8827
9007
  const template = '<div class="' + manualParentMainContainer + '"' +
8828
- 'style=left:' + (data.ganttProperties.left - data.ganttProperties.autoLeft) + 'px;' +
9008
+ 'style=' + (this.parent.enableRtl ? 'right:' : 'left:') + (data.ganttProperties.left - data.ganttProperties.autoLeft) + 'px;' +
8829
9009
  'width:' + data.ganttProperties.width + 'px;' +
8830
9010
  'height:' + taskbarHeight + 'px;>' + innerDiv + ((data.ganttProperties.startDate && data.ganttProperties.endDate &&
8831
9011
  data.ganttProperties.duration) || data.ganttProperties.duration ? '<div class="e-gantt-manualparenttaskbar-left" style=' +
8832
- '"height:' + taskbarHeight + 'px;border-left-width:' + taskbarHeight / 5 +
9012
+ (this.parent.enableRtl ? 'margin-right:0px;' : '') + '"height:' + taskbarHeight + 'px;border-left-width:' + taskbarHeight / 5 +
8833
9013
  'px; border-bottom:' + taskbarHeight / 5 + 'px solid transparent;"></div>' +
8834
- '<div class="e-gantt-manualparenttaskbar-right" style=' +
8835
- 'left:' + (data.ganttProperties.width - taskbarHeight / 5) + 'px;height:' +
9014
+ '<div class="e-gantt-manualparenttaskbar-right" style=' + (this.parent.enableRtl ? 'margin-right:-8px;' : '') +
9015
+ (this.parent.enableRtl ? 'right:' : 'left:') + (data.ganttProperties.width - taskbarHeight / 5) + 'px;height:' +
8836
9016
  (taskbarHeight) + 'px;border-right-width:' + taskbarHeight / 5 + 'px;border-bottom:' +
8837
9017
  taskbarHeight / 5 + 'px solid transparent;>' + '</div></div>' : '');
8838
- const milestoneTemplate = '<div class="' + manualParentMilestone + '" style="position:absolute;left:' +
9018
+ const milestoneTemplate = '<div class="' + manualParentMilestone + '" style="position:absolute;' +
9019
+ (this.parent.enableRtl ? 'right:' : 'left:') +
8839
9020
  (data.ganttProperties.left - data.ganttProperties.autoLeft - (this.milestoneHeight / 2)) +
8840
9021
  'px;width:' + (this.milesStoneRadius * 2) +
8841
9022
  'px;">' + '<div class="' + manualParentMilestoneTop + '" style="border-right-width:' +
@@ -8896,7 +9077,7 @@ class ChartRows extends DateProcessor {
8896
9077
  }
8897
9078
  if (isNaN(parseInt(labelString))) {
8898
9079
  labelDiv = '<span class="' + taskLabel + '" style="line-height:' +
8899
- (this.taskBarHeight - 1) + 'px; text-align: left;' +
9080
+ (this.taskBarHeight - 1) + 'px; text-align:' + (this.parent.enableRtl ? 'right;' : 'left;') +
8900
9081
  'display:' + 'inline-block;' +
8901
9082
  'width:' + (data.ganttProperties.width - 10) + 'px; height:' +
8902
9083
  this.taskBarHeight + 'px;">' + labelString + '</span>';
@@ -8934,6 +9115,13 @@ class ChartRows extends DateProcessor {
8934
9115
  parentTaskbarNode = data.ganttProperties.isMilestone ?
8935
9116
  this.createDivElement(data.ganttProperties.isAutoSchedule ? milestoneTemplate : '') : template;
8936
9117
  }
9118
+ if (this.parent.enableRtl && parentTaskbarNode[0] && parentTaskbarNode[0].querySelector('.e-task-label')) {
9119
+ parentTaskbarNode[0].querySelector('.e-task-label').style.marginLeft = '15px';
9120
+ parentTaskbarNode[0].querySelector('.e-task-label').style.marginRight = '8px';
9121
+ if (parentTaskbarNode[0].querySelector('.e-gantt-parent-progressbar')) {
9122
+ parentTaskbarNode[0].querySelector('.e-gantt-parent-progressbar').style.textAlign = 'left';
9123
+ }
9124
+ }
8937
9125
  return parentTaskbarNode;
8938
9126
  }
8939
9127
  /**
@@ -9029,35 +9217,36 @@ class ChartRows extends DateProcessor {
9029
9217
  ((data.ganttProperties.cssClass) ? data.ganttProperties.cssClass : '') + '" ' +
9030
9218
  ' tabindex="-1" role="term" style="' + ((data.ganttProperties.isMilestone && !manualParent) ?
9031
9219
  ('width:' + this.milestoneHeight + 'px;height:' +
9032
- this.milestoneHeight + 'px;margin-top:' + this.milestoneMarginTop + 'px;left:' + (data.ganttProperties.left -
9220
+ this.milestoneHeight + 'px;margin-top:' + this.milestoneMarginTop + 'px;' + (this.parent.enableRtl ? 'right:' : 'left:') + (data.ganttProperties.left -
9033
9221
  (this.milestoneHeight / 2)) + 'px;') : ('width:' + data.ganttProperties.width +
9034
- 'px;margin-top:' + this.taskBarMarginTop + 'px;left:' + (!data.hasChildRecords || data.ganttProperties.isAutoSchedule ?
9222
+ 'px;margin-top:' + this.taskBarMarginTop + 'px;' + (this.parent.enableRtl ? 'right:' : 'left:') + (!data.hasChildRecords || data.ganttProperties.isAutoSchedule ?
9035
9223
  data.ganttProperties.left : data.ganttProperties.autoLeft) + 'px;height:' +
9036
9224
  this.taskBarHeight + 'px;cursor:' + (data.ganttProperties.isAutoSchedule ? 'move;' : 'auto;'))) + '"></div>';
9037
9225
  return this.createDivElement(template);
9038
9226
  }
9039
9227
  rightLabelContainer() {
9040
9228
  const template = '<div class="' + ((this.rightTaskLabelTemplateFunction) ? rightLabelTempContainer :
9041
- rightLabelContainer) + '" ' + ' tabindex="-1" role="term" style="left:' + this.getRightLabelLeft(this.templateData) + 'px; height:'
9229
+ rightLabelContainer) + '" ' + ' tabindex="-1" role="term" style="' + (this.parent.enableRtl ? 'right:' : 'left:') + this.getRightLabelLeft(this.templateData) + 'px; height:'
9042
9230
  + (this.parent.rowHeight - 2) + 'px;"></div>';
9043
9231
  return this.createDivElement(template);
9044
9232
  }
9045
9233
  childTaskbarLeftResizer() {
9046
9234
  const lResizerLeft = -(this.parent.isAdaptive ? 12 : 2);
9047
9235
  const template = '<div class="' + taskBarLeftResizer + ' ' + icon + '"' +
9048
- 'style="left:' + lResizerLeft + 'px;height:' + (this.taskBarHeight) + 'px;"></div>';
9236
+ 'style="' + (this.parent.enableRtl ? 'right:' : 'left:') + lResizerLeft + 'px;height:' + (this.taskBarHeight) + 'px;"></div>';
9049
9237
  return this.createDivElement(template);
9050
9238
  }
9051
9239
  childTaskbarRightResizer() {
9052
9240
  const rResizerLeft = this.parent.isAdaptive ? -2 : -10;
9053
9241
  const template = '<div class="' + taskBarRightResizer + ' ' + icon + '"' +
9054
- 'style="left:' + (this.templateData.ganttProperties.width + rResizerLeft) + 'px;' +
9242
+ 'style="' + (this.parent.enableRtl ? 'right:' : 'left:') + (this.templateData.ganttProperties.width + rResizerLeft) + 'px;' +
9055
9243
  'height:' + (this.taskBarHeight) + 'px;"></div>';
9056
9244
  return this.createDivElement(template);
9057
9245
  }
9058
9246
  childTaskbarProgressResizer() {
9247
+ let width = this.parent.enableRtl ? (this.templateData.ganttProperties.progressWidth + 8) : (this.templateData.ganttProperties.progressWidth - 6);
9059
9248
  const template = '<div class="' + childProgressResizer + '"' +
9060
- 'style="left:' + (this.templateData.ganttProperties.progressWidth - 6) + 'px;margin-top:' +
9249
+ 'style="' + (this.parent.enableRtl ? 'right:' : 'left:') + width + 'px;margin-top:' +
9061
9250
  (this.taskBarHeight - 4) + 'px;"><div class="' + progressBarHandler + '"' +
9062
9251
  '><div class="' + progressHandlerElement + '"></div>' +
9063
9252
  '<div class="' + progressBarHandlerAfter + '"></div></div>';
@@ -9079,7 +9268,7 @@ class ChartRows extends DateProcessor {
9079
9268
  ((data.ganttProperties.isMilestone) ? ('margin-top:' + pointerTop + 'px;left:' + mileStoneLeft +
9080
9269
  'px;') : (marginTop + ';left:' + pointerLeft + 'px;')) + '">' +
9081
9270
  '<div class="' + connectorPointLeft + ' ' + this.parent.getUnscheduledTaskClass(data.ganttProperties) +
9082
- '" style="width: ' + this.connectorPointWidth + 'px;' +
9271
+ '" style="width: ' + this.connectorPointWidth + 'px;' + (this.parent.enableRtl ? 'margin-right:2px;' : '') +
9083
9272
  'height: ' + this.connectorPointWidth + 'px;">' + this.touchLeftConnectorpoint + '</div></div>';
9084
9273
  return this.createDivElement(template);
9085
9274
  }
@@ -9352,8 +9541,14 @@ class ChartRows extends DateProcessor {
9352
9541
  else {
9353
9542
  for (let i = 0; i < this.parent.currentViewData.length; i++) {
9354
9543
  const tempTemplateData = this.parent.currentViewData[i];
9355
- if (this.parent.viewType === 'ResourceView' && !tempTemplateData.expanded && this.parent.enableMultiTaskbar) {
9356
- collapsedResourceRecord.push(tempTemplateData);
9544
+ if (this.parent.viewType === 'ResourceView') {
9545
+ if (this.parent.editModule && this.parent.editModule.isResourceTaskDeleted) {
9546
+ this.parent.initialChartRowElements = this.parent.ganttChartModule.getChartRows();
9547
+ this.parent.editModule.isResourceTaskDeleted = false;
9548
+ }
9549
+ if (!tempTemplateData.expanded && this.parent.enableMultiTaskbar) {
9550
+ collapsedResourceRecord.push(tempTemplateData);
9551
+ }
9357
9552
  }
9358
9553
  const tRow = this.getGanttChartRow(i, tempTemplateData);
9359
9554
  this.ganttChartTableBody.appendChild(tRow);
@@ -9397,7 +9592,7 @@ class ChartRows extends DateProcessor {
9397
9592
  taskbarContainerNode[0].setAttribute('aria-label', this.generateAriaLabel(this.templateData));
9398
9593
  taskbarContainerNode[0].setAttribute('rowUniqueId', this.templateData.ganttProperties.rowUniqueID);
9399
9594
  const connectorLineLeftNode = this.getLeftPointNode();
9400
- if ((this.templateData.ganttProperties.isAutoSchedule && this.parent.viewType == 'ProjectView') || !this.templateData.hasChildRecords) {
9595
+ if ((this.templateData.ganttProperties.isAutoSchedule && this.parent.viewType === 'ProjectView') || !this.templateData.hasChildRecords) {
9401
9596
  taskbarContainerNode[0].appendChild([].slice.call(connectorLineLeftNode)[0]);
9402
9597
  }
9403
9598
  if (this.templateData.hasChildRecords) {
@@ -9481,7 +9676,7 @@ class ChartRows extends DateProcessor {
9481
9676
  ? this.getMilestoneBaselineNode() : this.getTaskBaselineNode();
9482
9677
  }
9483
9678
  }
9484
- if ((this.templateData.ganttProperties.isAutoSchedule && this.parent.viewType == 'ProjectView') || !this.templateData.hasChildRecords) {
9679
+ if ((this.templateData.ganttProperties.isAutoSchedule && this.parent.viewType === 'ProjectView') || !this.templateData.hasChildRecords) {
9485
9680
  const connectorLineRightNode = this.getRightPointNode();
9486
9681
  taskbarContainerNode[0].appendChild([].slice.call(connectorLineRightNode)[0]);
9487
9682
  }
@@ -10767,19 +10962,8 @@ class ConnectorLine {
10767
10962
  */
10768
10963
  createConnectorLineObject(parentGanttData, childGanttData, predecessor) {
10769
10964
  const connectorObj = {};
10770
- let updatedRecords;
10771
- if (this.parent.pdfExportModule && this.parent.pdfExportModule.isPdfExport) {
10772
- if (this.parent.pdfExportModule['helper']['exportProps'].exportType &&
10773
- this.parent.pdfExportModule['helper']['exportProps'].exportType === 'CurrentViewData') {
10774
- updatedRecords = this.expandedRecords;
10775
- }
10776
- else {
10777
- updatedRecords = this.parent.flatData;
10778
- }
10779
- }
10780
- else {
10781
- updatedRecords = this.expandedRecords;
10782
- }
10965
+ const updatedRecords = this.parent.pdfExportModule && this.parent.pdfExportModule.isPdfExport ?
10966
+ this.parent.flatData : this.expandedRecords;
10783
10967
  const parentIndex = updatedRecords.indexOf(parentGanttData);
10784
10968
  const childIndex = updatedRecords.indexOf(childGanttData);
10785
10969
  const parentGanttRecord = parentGanttData.ganttProperties;
@@ -10845,6 +11029,9 @@ class ConnectorLine {
10845
11029
  }
10846
11030
  }
10847
11031
  this.parent.ganttChartModule.chartBodyContent.appendChild(this.dependencyViewContainer);
11032
+ for (let i = 0; i < this.dependencyViewContainer.children.length; i++) {
11033
+ this.dependencyViewContainer.children[i].children[0].setAttribute('tabindex', '-1');
11034
+ }
10848
11035
  }
10849
11036
  /**
10850
11037
  * To get parent position.
@@ -11163,85 +11350,96 @@ class ConnectorLine {
11163
11350
  connectorContainer = '<div id="ConnectorLine' + data.connectorLineId + '" style="background-color:black">';
11164
11351
  let div = '<div class="' + connectorLineContainer +
11165
11352
  '" tabindex="-1" style="';
11353
+ let direction = this.parent.enableRtl ? 'right:' : 'left:';
11166
11354
  const eLine = '<div class="' + connectorLine + '" style="' +
11167
11355
  (!isNullOrUndefined(this.lineColor) ? 'outline-color:' + this.lineColor + ';' : '');
11168
- const rightArrow = '<div class="' + connectorLineRightArrow + '" style="' +
11169
- (!isNullOrUndefined(this.lineColor) ? 'outline-color:' + this.lineColor + ';' : '');
11170
- const leftArrow = '<div class="' + connectorLineLeftArrow + '" style="' +
11171
- (!isNullOrUndefined(this.lineColor) ? 'outline-color:' + this.lineColor + ';' : '');
11172
- const duplicateStingOne = leftArrow + (isMilestone ? 'left:0px;' : '') +
11173
- this.getBorderStyles('right', 10) +
11356
+ let rightArrow;
11357
+ let leftArrow;
11358
+ if (this.parent.enableRtl) {
11359
+ leftArrow = '<div class="' + connectorLineRightArrow + '" style="' +
11360
+ (!isNullOrUndefined(this.lineColor) ? 'outline-color:' + this.lineColor + ';' : '');
11361
+ rightArrow = '<div class="' + connectorLineLeftArrow + '" style="' +
11362
+ (!isNullOrUndefined(this.lineColor) ? 'outline-color:' + this.lineColor + ';' : '');
11363
+ }
11364
+ else {
11365
+ rightArrow = '<div class="' + connectorLineRightArrow + '" style="' +
11366
+ (!isNullOrUndefined(this.lineColor) ? 'outline-color:' + this.lineColor + ';' : '');
11367
+ leftArrow = '<div class="' + connectorLineLeftArrow + '" style="' +
11368
+ (!isNullOrUndefined(this.lineColor) ? 'outline-color:' + this.lineColor + ';' : '');
11369
+ }
11370
+ const duplicateStingOne = leftArrow + (isMilestone ? (this.parent.enableRtl ? 'right:0px;' : 'left:0px;') : '') +
11371
+ this.getBorderStyles((this.parent.enableRtl ? 'left' : 'right'), 10) +
11174
11372
  'top:' + (-5 - this.lineStroke + (this.lineStroke - 1)) + 'px;border-bottom-width:' + (5 + this.lineStroke) + 'px;' +
11175
11373
  'border-top-width:' + (5 + this.lineStroke) + 'px;width:0;height:0;position:relative;"></div>';
11176
- const duplicateStingTwo = this.getBorderStyles('left', 10) +
11374
+ const duplicateStingTwo = this.getBorderStyles((this.parent.enableRtl ? 'right' : 'left'), 10) +
11177
11375
  'top:' + (-6) + 'px;border-bottom-width:' + (5 + this.lineStroke) + 'px;' +
11178
11376
  'border-top-width:' + (5 + this.lineStroke) + 'px;width:0;height:0;position:relative;"></div>';
11179
11377
  const duplicateStingThree = this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>' + eLine +
11180
11378
  'top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;width:0px;' + this.getBorderStyles('left', this.lineStroke) +
11181
11379
  this.getBorderStyles('top', (heightValue + borderTopWidth - (this.lineStroke - 1))) + 'position:relative;"></div>';
11182
- const duplicateStingFour = leftArrow + 'left:' +
11380
+ const duplicateStingFour = leftArrow + (this.parent.enableRtl ? 'right:' : 'left:') +
11183
11381
  (((data.childLeft + data.childWidth) - (data.parentLeft)) + 10) + 'px;' +
11184
- this.getBorderStyles('right', 10);
11382
+ this.getBorderStyles((this.parent.enableRtl ? 'left' : 'right'), 10);
11185
11383
  const duplicateStingFive = 'top:' + (-(6 + (5 + this.lineStroke) + (this.lineStroke / 2))) + 'px;' +
11186
11384
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11187
11385
  if (this.getParentPosition(data) === 'FSType1') {
11188
- div = div + 'left:' + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11386
+ div = div + direction + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11189
11387
  ((data.parentIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11190
11388
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FSType1">';
11191
11389
  div = div + eLine;
11192
- div = div + 'left:' + (isMilestoneParent ? -1 : 0) + 'px;width:' + (isMilestoneParent ?
11390
+ div = div + direction + (isMilestoneParent ? -1 : 0) + 'px;width:' + (isMilestoneParent ?
11193
11391
  ((((data.childLeft - (data.parentLeft + data.parentWidth + 10)) + this.lineStroke) - 10) + 1) :
11194
11392
  (((data.childLeft - (data.parentLeft + data.parentWidth + 10)) + this.lineStroke) - 10)) + 'px;' +
11195
11393
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11196
11394
  div = div + eLine;
11197
- div = div + 'left:' + ((data.childLeft - (data.parentLeft + data.parentWidth + 10)) - 10) + 'px;' +
11395
+ div = div + direction + ((data.childLeft - (data.parentLeft + data.parentWidth + 10)) - 10) + 'px;' +
11198
11396
  'width:0px;' + this.getBorderStyles('right', this.lineStroke) +
11199
11397
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.lineStroke)) + 'position:relative;"></div>';
11200
11398
  div = div + eLine;
11201
- div = div + 'left:' + ((data.childLeft - (data.parentLeft + data.parentWidth + 10)) - 10) + 'px;width:10px;' +
11399
+ div = div + direction + ((data.childLeft - (data.parentLeft + data.parentWidth + 10)) - 10) + 'px;width:10px;' +
11202
11400
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11203
11401
  div = div + rightArrow;
11204
- div = div + 'left:' + (data.childLeft - (data.parentLeft + data.parentWidth + 10)) + 'px;' +
11205
- this.getBorderStyles('left', 10) + 'top:' + (-6 - this.lineStroke) + 'px;border-bottom-width:' + (5 + this.lineStroke) +
11402
+ div = div + direction + (data.childLeft - (data.parentLeft + data.parentWidth + 10)) + 'px;' +
11403
+ this.getBorderStyles((this.parent.enableRtl ? 'right' : 'left'), 10) + 'top:' + (-6 - this.lineStroke) + 'px;border-bottom-width:' + (5 + this.lineStroke) +
11206
11404
  'px;border-top-width:' + (5 + this.lineStroke) + 'px;width:0;height:0;position:relative;"></div></div>';
11207
11405
  }
11208
11406
  if (this.getParentPosition(data) === 'FSType2') {
11209
- div = div + 'left:' + data.parentLeft + 'px;top:' + (isVirtual ? connectorLine$$1.top : ((data.parentIndex * data.rowHeight) + addTop +
11407
+ div = div + direction + data.parentLeft + 'px;top:' + (isVirtual ? connectorLine$$1.top : ((data.parentIndex * data.rowHeight) + addTop +
11210
11408
  this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11211
11409
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FSType2">';
11212
11410
  div = div + eLine;
11213
- div = div + 'left:' + (isMilestoneParent ? data.parentWidth - 1 : data.parentWidth) + 'px;width:' +
11411
+ div = div + direction + (isMilestoneParent ? data.parentWidth - 1 : data.parentWidth) + 'px;width:' +
11214
11412
  (isMilestoneParent ? 11 : 10) + 'px;' +
11215
11413
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11216
11414
  div = div + eLine;
11217
- div = div + 'left:' + (data.parentWidth + 10 - this.lineStroke) + 'px;' +
11415
+ div = div + direction + (data.parentWidth + 10 - this.lineStroke) + 'px;' +
11218
11416
  this.getBorderStyles('left', this.lineStroke) + 'width:0px;' +
11219
11417
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.getconnectorLineGap(data) - this.lineStroke)) + 'position:relative;"></div>';
11220
11418
  div = div + eLine;
11221
- div = div + 'left:' + (data.parentWidth - (((data.parentLeft + data.parentWidth) - data.childLeft) + 20)) + 'px;' +
11419
+ div = div + direction + (data.parentWidth - (((data.parentLeft + data.parentWidth) - data.childLeft) + 20)) + 'px;' +
11222
11420
  'width:' + (((data.parentLeft + data.parentWidth) - data.childLeft) + 30) + 'px;' +
11223
11421
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11224
11422
  div = div + eLine;
11225
- div = div + 'left:' + (data.parentWidth - (((data.parentLeft +
11423
+ div = div + direction + (data.parentWidth - (((data.parentLeft +
11226
11424
  data.parentWidth) - data.childLeft) + 20)) + 'px;width:0px;' +
11227
11425
  this.getBorderStyles('top', (this.getconnectorLineGap(data) - this.lineStroke)) +
11228
11426
  this.getBorderStyles('left', this.lineStroke) + 'position:relative;"></div>';
11229
11427
  div = div + eLine;
11230
- div = div + 'left:' + (data.parentWidth - (((data.parentLeft +
11428
+ div = div + direction + (data.parentWidth - (((data.parentLeft +
11231
11429
  data.parentWidth) - data.childLeft) + 20)) + 'px;width:10px;' +
11232
11430
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11233
11431
  div = div + rightArrow;
11234
- div = div + 'left:' + (data.parentWidth - (((data.parentLeft + data.parentWidth) - data.childLeft) + 10)) + 'px;' +
11235
- this.getBorderStyles('left', 10) + 'border-bottom-width:' + (5 + this.lineStroke) + 'px;' +
11432
+ div = div + direction + (data.parentWidth - (((data.parentLeft + data.parentWidth) - data.childLeft) + 10)) + 'px;' +
11433
+ this.getBorderStyles((this.parent.enableRtl ? 'right' : 'left'), 10) + 'border-bottom-width:' + (5 + this.lineStroke) + 'px;' +
11236
11434
  'border-top-width:' + (5 + this.lineStroke) + 'px;top:' + (-6 - this.lineStroke) +
11237
11435
  'px;width:0;height:0;position:relative;"></div></div>';
11238
11436
  }
11239
11437
  if (this.getParentPosition(data) === 'FSType3') {
11240
- div = div + 'left:' + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11438
+ div = div + direction + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11241
11439
  ((data.childIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11242
11440
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FSType3">';
11243
11441
  div = div + rightArrow;
11244
- div = div + 'left:10px;' + this.getBorderStyles('left', 10) +
11442
+ div = div + direction + '10px;' + this.getBorderStyles((this.parent.enableRtl ? 'right' : 'left'), 10) +
11245
11443
  'border-bottom-width:' + (5 + this.lineStroke) + 'px;border-top-width:' + (5 + this.lineStroke) + 'px;' +
11246
11444
  'top:' + (-6) + 'px;width:0;height:0;position:relative;"></div>';
11247
11445
  div = div + eLine;
@@ -11255,49 +11453,49 @@ class ConnectorLine {
11255
11453
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;top:' +
11256
11454
  (-(13 + ((this.lineStroke - 1) * 2))) + 'px;"></div>';
11257
11455
  div = div + eLine;
11258
- div = div + 'left:' + (((data.parentLeft + data.parentWidth) - data.childLeft) + (30 - this.lineStroke)) +
11456
+ div = div + direction + (((data.parentLeft + data.parentWidth) - data.childLeft) + (30 - this.lineStroke)) +
11259
11457
  'px;width:0px;' + 'height:' + (this.getconnectorLineGap(data) - this.lineStroke) + 'px;' +
11260
11458
  this.getBorderStyles('left', this.lineStroke) + 'position:relative;' +
11261
11459
  'top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;"></div>';
11262
11460
  div = div + eLine;
11263
- div = div + (isMilestoneParent ? 'left:' + (((data.parentLeft +
11264
- data.parentWidth) - data.childLeft) + (18 - this.lineStroke)) + 'px;width:' + (12 + this.lineStroke) + 'px;' : 'left:' +
11461
+ div = div + (isMilestoneParent ? direction + (((data.parentLeft +
11462
+ data.parentWidth) - data.childLeft) + (18 - this.lineStroke)) + 'px;width:' + (12 + this.lineStroke) + 'px;' : direction +
11265
11463
  (((data.parentLeft + data.parentWidth) - data.childLeft) + 20) + 'px;width:10px;') +
11266
11464
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;top:' +
11267
11465
  (-(13 + ((this.lineStroke - 1) * 2))) + 'px;"></div></div>';
11268
11466
  }
11269
11467
  if (this.getParentPosition(data) === 'FSType4') {
11270
- div = div + 'left:' + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11468
+ div = div + direction + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11271
11469
  ((data.childIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11272
11470
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FSType4">';
11273
11471
  div = div + rightArrow;
11274
- div = div + 'left:' + (data.childLeft - (data.parentLeft + data.parentWidth + 10)) + 'px;' +
11275
- this.getBorderStyles('left', 10) + 'top:' + (-6) + 'px;' +
11472
+ div = div + direction + (data.childLeft - (data.parentLeft + data.parentWidth + 10)) + 'px;' +
11473
+ this.getBorderStyles((this.parent.enableRtl ? 'right' : 'left'), 10) + 'top:' + (-6) + 'px;' +
11276
11474
  'border-bottom-width:' + (5 + this.lineStroke) + 'px;border-top-width:' +
11277
11475
  (5 + this.lineStroke) + 'px;width:0;height:0;position:relative;"></div>';
11278
11476
  div = div + eLine;
11279
- div = div + 'left:' + (data.childLeft - (data.parentLeft + data.parentWidth) - 20) +
11477
+ div = div + direction + (data.childLeft - (data.parentLeft + data.parentWidth) - 20) +
11280
11478
  'px;top:' + (-(6 + (5 + this.lineStroke) + Math.round(this.lineStroke / 2))) + 'px;width:10px;' +
11281
11479
  this.getBorderStyles('top', this.lineStroke) +
11282
11480
  'position:relative;"></div>';
11283
11481
  div = div + eLine;
11284
- div = div + 'top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;left:' +
11482
+ div = div + 'top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;' + direction +
11285
11483
  (data.childLeft - (data.parentLeft + data.parentWidth) - 20) + 'px;width:0px;' +
11286
11484
  this.getBorderStyles('left', this.lineStroke) +
11287
11485
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.lineStroke + 1)) + 'position:relative;"></div>';
11288
11486
  div = div + eLine;
11289
- div = div + (isMilestoneParent ? 'left:-1px;' : '') + 'top:' +
11487
+ div = div + (isMilestoneParent ? direction + '-1px;' : '') + 'top:' +
11290
11488
  (-(13 + ((this.lineStroke - 1) * 2))) + 'px;width:' +
11291
11489
  (isMilestoneParent ? ((data.childLeft - (data.parentLeft + data.parentWidth + 20) + 1) + this.lineStroke) :
11292
11490
  ((data.childLeft - (data.parentLeft + data.parentWidth + 20)) + this.lineStroke)) + 'px;' +
11293
11491
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div></div>';
11294
11492
  }
11295
11493
  if (this.getParentPosition(data) === 'SSType4') {
11296
- div = div + 'left:' + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11494
+ div = div + direction + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11297
11495
  ((data.childIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11298
11496
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SSType4">';
11299
11497
  div = div + rightArrow;
11300
- div = div + 'left:' + (data.childLeft - data.parentLeft) + 'px;' + duplicateStingTwo;
11498
+ div = div + direction + (data.childLeft - data.parentLeft) + 'px;' + duplicateStingTwo;
11301
11499
  div = div + eLine;
11302
11500
  div = div + 'top:' + (-(6 + (5 + this.lineStroke) + (this.lineStroke / 2))) + 'px;width:' +
11303
11501
  (data.childLeft - data.parentLeft) + 'px;' + duplicateStingThree;
@@ -11306,11 +11504,11 @@ class ConnectorLine {
11306
11504
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div></div>';
11307
11505
  }
11308
11506
  if (this.getParentPosition(data) === 'SSType3') {
11309
- div = div + 'left:' + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11507
+ div = div + direction + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11310
11508
  ((data.childIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11311
11509
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SSType3">';
11312
11510
  div = div + rightArrow;
11313
- div = div + 'left:10px;' + duplicateStingTwo;
11511
+ div = div + direction + '10px;' + duplicateStingTwo;
11314
11512
  div = div + eLine;
11315
11513
  div = div + 'top:' + (-(6 + (5 + this.lineStroke) + (this.lineStroke / 2))) + 'px;width:10px;' + duplicateStingThree;
11316
11514
  div = div + eLine;
@@ -11319,7 +11517,7 @@ class ConnectorLine {
11319
11517
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div></div>';
11320
11518
  }
11321
11519
  if (this.getParentPosition(data) === 'SSType2') {
11322
- div = div + 'left:' + setInnerElementLeftSSType2 + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11520
+ div = div + direction + setInnerElementLeftSSType2 + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11323
11521
  ((data.parentIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11324
11522
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SSType2">';
11325
11523
  div = div + eLine;
@@ -11332,14 +11530,14 @@ class ConnectorLine {
11332
11530
  div = div + 'width:' + setInnerElementWidthSSType2 + 'px;' +
11333
11531
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11334
11532
  div = div + rightArrow;
11335
- div = div + 'left:' + setInnerElementWidthSSType2 + 'px;' +
11336
- this.getBorderStyles('left', 10) + 'top:' + (-6 - this.lineStroke) + 'px;' +
11533
+ div = div + direction + setInnerElementWidthSSType2 + 'px;' +
11534
+ this.getBorderStyles((this.parent.enableRtl ? 'right' : 'left'), 10) + 'top:' + (-6 - this.lineStroke) + 'px;' +
11337
11535
  'border-bottom-width:' + (5 + this.lineStroke) + 'px;border-top-width:' +
11338
11536
  (5 + this.lineStroke) + 'px;width:0;' +
11339
11537
  'height:0;position:relative;"></div></div>';
11340
11538
  }
11341
11539
  if (this.getParentPosition(data) === 'SSType1') {
11342
- div = div + 'left:' + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11540
+ div = div + direction + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11343
11541
  ((data.parentIndex * data.rowHeight) + addTop +
11344
11542
  this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11345
11543
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SSType1">';
@@ -11352,114 +11550,114 @@ class ConnectorLine {
11352
11550
  div = div + eLine;
11353
11551
  div = div + 'width:10px;' + this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11354
11552
  div = div + rightArrow;
11355
- div = div + 'left:10px;' + this.getBorderStyles('left', 10) +
11553
+ div = div + direction + '10px;' + this.getBorderStyles((this.parent.enableRtl ? 'right' : 'left'), 10) +
11356
11554
  'top:' + (-6 - this.lineStroke) + 'px;border-bottom-width:' + (5 + this.lineStroke) + 'px;' +
11357
11555
  'border-top-width:' + (5 + this.lineStroke) + 'px;width:0;height:0;position:relative;"></div></div>';
11358
11556
  }
11359
11557
  if (this.getParentPosition(data) === 'FFType1') {
11360
- div = div + 'left:' + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11558
+ div = div + direction + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11361
11559
  ((data.parentIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11362
11560
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FFType1">';
11363
11561
  div = div + eLine;
11364
- div = div + 'left:' + (isMilestoneParent ? (((data.parentLeft + data.parentWidth) -
11562
+ div = div + direction + (isMilestoneParent ? (((data.parentLeft + data.parentWidth) -
11365
11563
  (data.childLeft + data.childWidth)) - 1) : ((data.parentLeft + data.parentWidth) -
11366
11564
  (data.childLeft + data.childWidth))) + 'px;' +
11367
11565
  'width:' + (isMilestoneParent ? (21 + this.lineStroke) : (20 + this.lineStroke)) + 'px;' +
11368
11566
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11369
11567
  div = div + eLine;
11370
- div = div + 'left:' + (((data.parentLeft + data.parentWidth) -
11568
+ div = div + direction + (((data.parentLeft + data.parentWidth) -
11371
11569
  (data.childLeft + data.childWidth)) + 20) + 'px;width:0px;' + this.getBorderStyles('left', this.lineStroke) +
11372
11570
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.lineStroke)) + 'position:relative;"></div>';
11373
11571
  div = div + eLine;
11374
- div = div + 'left:' + (isMilestone ? 4 : 10) + 'px;width:' + (isMilestone ?
11572
+ div = div + direction + (isMilestone ? 4 : 10) + 'px;width:' + (isMilestone ?
11375
11573
  (((data.parentLeft + data.parentWidth) - (data.childLeft + data.childWidth)) + (16 + this.lineStroke)) :
11376
11574
  (((data.parentLeft + data.parentWidth) - (data.childLeft + data.childWidth)) + (10 + this.lineStroke))) + 'px;' +
11377
11575
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11378
11576
  div = div + leftArrow;
11379
- div = div + (isMilestone ? 'left:0px;' : '') + this.getBorderStyles('right', 10) +
11577
+ div = div + (isMilestone ? direction + '0px;' : '') + this.getBorderStyles((!this.parent.enableRtl ? 'right' : 'left'), 10) +
11380
11578
  'top:' + (-6 - this.lineStroke) + 'px;border-bottom-width:' + (5 + this.lineStroke) + 'px;' +
11381
11579
  'border-top-width:' + (5 + this.lineStroke) + 'px;width:0;height:0;position:relative;"></div></div>';
11382
11580
  }
11383
11581
  if (this.getParentPosition(data) === 'FFType2') {
11384
- div = div + 'left:' + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11582
+ div = div + direction + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11385
11583
  ((data.parentIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11386
11584
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FFType2">';
11387
11585
  div = div + eLine;
11388
- div = div + (isMilestoneParent ? 'left:-1px;' : '') + 'width:' +
11586
+ div = div + (isMilestoneParent ? direction + '-1px;' : '') + 'width:' +
11389
11587
  (isMilestoneParent ? (((data.childLeft + data.childWidth) - (data.parentLeft + data.parentWidth)) +
11390
11588
  (21 + this.lineStroke)) : (((data.childLeft + data.childWidth) -
11391
11589
  (data.parentLeft + data.parentWidth)) + (20 + this.lineStroke))) + 'px;' +
11392
11590
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11393
11591
  div = div + eLine;
11394
- div = div + 'left:' + (((data.childLeft + data.childWidth) - (data.parentLeft + data.parentWidth)) + 20) +
11592
+ div = div + direction + (((data.childLeft + data.childWidth) - (data.parentLeft + data.parentWidth)) + 20) +
11395
11593
  'px;width:0px;' + this.getBorderStyles('left', this.lineStroke) +
11396
11594
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.lineStroke)) +
11397
11595
  'position:relative;"></div>';
11398
11596
  div = div + eLine;
11399
- div = div + 'left:' + (isMilestone ? (((data.childLeft + data.childWidth) - (data.parentLeft + data.parentWidth)) + 4) :
11597
+ div = div + direction + (isMilestone ? (((data.childLeft + data.childWidth) - (data.parentLeft + data.parentWidth)) + 4) :
11400
11598
  (((data.childLeft + data.childWidth) - (data.parentLeft + data.parentWidth)) + 10)) + 'px;' +
11401
11599
  'width:' + (isMilestone ? (16 + this.lineStroke) : (10 + this.lineStroke)) + 'px;' +
11402
11600
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11403
11601
  div = div + leftArrow;
11404
- div = div + 'left:' + ((data.childLeft + data.childWidth) - (data.parentLeft + data.parentWidth)) + 'px;' +
11405
- this.getBorderStyles('right', 10) + 'top:' + (-6 - this.lineStroke) + 'px;' +
11602
+ div = div + direction + ((data.childLeft + data.childWidth) - (data.parentLeft + data.parentWidth)) + 'px;' +
11603
+ this.getBorderStyles((!this.parent.enableRtl ? 'right' : 'left'), 10) + 'top:' + (-6 - this.lineStroke) + 'px;' +
11406
11604
  'border-bottom-width:' + (5 + this.lineStroke) + 'px;border-top-width:' + (5 + this.lineStroke) +
11407
11605
  'px;width:0;height:0;position:relative;"></div></div>';
11408
11606
  }
11409
11607
  if (this.getParentPosition(data) === 'FFType3') {
11410
- div = div + 'left:' + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11608
+ div = div + direction + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11411
11609
  ((data.childIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11412
11610
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FFType3">';
11413
11611
  div = div + duplicateStingOne;
11414
11612
  div = div + eLine;
11415
- div = div + (isMilestone ? ('left:4px;width:' +
11613
+ div = div + (isMilestone ? (direction + '4px;width:' +
11416
11614
  (((data.parentLeft + data.parentWidth) - (data.childLeft + data.childWidth)) + 16)) :
11417
- ('left:10px;width:' + (((data.parentLeft + data.parentWidth) -
11615
+ (direction + '10px;width:' + (((data.parentLeft + data.parentWidth) -
11418
11616
  (data.childLeft + data.childWidth)) + 10))) + 'px;top:' + (-(6 + (5 + this.lineStroke) +
11419
11617
  (this.lineStroke / 2))) + 'px;' + this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11420
11618
  div = div + eLine;
11421
- div = div + 'left:' + (((data.parentLeft + data.parentWidth) - (data.childLeft + data.childWidth)) + 20) +
11619
+ div = div + direction + (((data.parentLeft + data.parentWidth) - (data.childLeft + data.childWidth)) + 20) +
11422
11620
  'px;top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;' +
11423
11621
  'width:0px;' + this.getBorderStyles('left', this.lineStroke) +
11424
11622
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.lineStroke + 1)) + 'position:relative;"></div>';
11425
11623
  div = div + eLine;
11426
- div = div + (isMilestoneParent ? ('left:' + (((data.parentLeft + data.parentWidth) -
11427
- (data.childLeft + data.childWidth)) - 1) + 'px;width:21') : ('left:' + ((data.parentLeft + data.parentWidth) -
11624
+ div = div + (isMilestoneParent ? (direction + (((data.parentLeft + data.parentWidth) -
11625
+ (data.childLeft + data.childWidth)) - 1) + 'px;width:21') : (direction + ((data.parentLeft + data.parentWidth) -
11428
11626
  (data.childLeft + data.childWidth)) + 'px;width:20')) +
11429
11627
  'px;top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;' +
11430
11628
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div></div>';
11431
11629
  }
11432
11630
  if (this.getParentPosition(data) === 'FFType4') {
11433
- div = div + 'left:' + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11631
+ div = div + direction + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11434
11632
  ((data.childIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11435
11633
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FFType4">';
11436
11634
  div = div + leftArrow;
11437
- div = div + ('left:' + ((data.childLeft + data.childWidth) -
11635
+ div = div + (direction + ((data.childLeft + data.childWidth) -
11438
11636
  (data.parentLeft + data.parentWidth))) + 'px;' +
11439
- this.getBorderStyles('right', 10) + 'top:' + (-5 - this.lineStroke + (this.lineStroke - 1)) + 'px;' +
11637
+ this.getBorderStyles((!this.parent.enableRtl ? 'right' : 'left'), 10) + 'top:' + (-5 - this.lineStroke + (this.lineStroke - 1)) + 'px;' +
11440
11638
  'border-bottom-width:' + (5 + this.lineStroke) +
11441
11639
  'px;border-top-width:' + (5 + this.lineStroke) + 'px;width:0;height:0;' +
11442
11640
  'position:relative;"></div>';
11443
11641
  div = div + eLine;
11444
- div = div + (isMilestone ? ('left:' + (((data.childLeft + data.childWidth) -
11642
+ div = div + (isMilestone ? (direction + (((data.childLeft + data.childWidth) -
11445
11643
  (data.parentLeft + data.parentWidth)) + 4) +
11446
- 'px;width:' + (16 + this.lineStroke)) : ('left:' + (((data.childLeft + data.childWidth) -
11644
+ 'px;width:' + (16 + this.lineStroke)) : (direction + (((data.childLeft + data.childWidth) -
11447
11645
  (data.parentLeft + data.parentWidth)) + 10) + 'px;width:' + (10 + this.lineStroke))) +
11448
11646
  'px;' + duplicateStingFive;
11449
11647
  div = div + eLine;
11450
- div = div + 'left:' + (((data.childLeft + data.childWidth) -
11648
+ div = div + direction + (((data.childLeft + data.childWidth) -
11451
11649
  (data.parentLeft + data.parentWidth)) + 20) + 'px;top:' + (-(13 + ((this.lineStroke - 1) * 2))) +
11452
11650
  'px;width:0px;' + this.getBorderStyles('left', this.lineStroke) +
11453
11651
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.lineStroke + 1)) + 'position:relative;"></div>';
11454
11652
  div = div + eLine;
11455
- div = div + (isMilestoneParent ? ('left:-1px;width:' + (((data.childLeft + data.childWidth) -
11653
+ div = div + (isMilestoneParent ? (direction + '-1px;width:' + (((data.childLeft + data.childWidth) -
11456
11654
  (data.parentLeft + data.parentWidth)) + (21 + this.lineStroke))) : ('width:' + (((data.childLeft + data.childWidth) -
11457
11655
  (data.parentLeft + data.parentWidth)) + (20 + this.lineStroke)))) + 'px;top:' +
11458
11656
  (-(13 + ((this.lineStroke - 1) * 2))) + 'px;' +
11459
11657
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div></div>';
11460
11658
  }
11461
11659
  if (this.getParentPosition(data) === 'SFType4') {
11462
- div = div + 'left:' + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11660
+ div = div + direction + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11463
11661
  ((data.childIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;width:1px;' +
11464
11662
  'height:' + heightValue + 'px;position:absolute" data-connectortype="SFType4">';
11465
11663
  div = div + duplicateStingFour + 'top:' + (-5 - this.lineStroke + (this.lineStroke - 1)) + 'px;' +
@@ -11467,11 +11665,11 @@ class ConnectorLine {
11467
11665
  'px;border-top-width:' + (5 + this.lineStroke) + 'px;width:0;height:0;' +
11468
11666
  'position:relative;"></div>';
11469
11667
  div = div + eLine;
11470
- div = div + 'left:' + (isMilestone ? ((((data.childLeft + data.childWidth) - (data.parentLeft)) + (14 + this.lineStroke)) +
11668
+ div = div + direction + (isMilestone ? ((((data.childLeft + data.childWidth) - (data.parentLeft)) + (14 + this.lineStroke)) +
11471
11669
  'px;width:16') : ((((data.childLeft + data.childWidth) - (data.parentLeft)) + 20) + 'px;width:' +
11472
11670
  (10 + this.lineStroke))) + 'px;' + duplicateStingFive;
11473
11671
  div = div + eLine;
11474
- div = div + 'left:' + (((data.childLeft + data.childWidth) - (data.parentLeft)) + 30) + 'px;top:' +
11672
+ div = div + direction + (((data.childLeft + data.childWidth) - (data.parentLeft)) + 30) + 'px;top:' +
11475
11673
  (-(13 + ((this.lineStroke - 1) * 2))) + 'px;width:0px;' + this.getBorderStyles('left', this.lineStroke) +
11476
11674
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.getconnectorLineGap(data) - (this.lineStroke - 1))) + 'position:relative;"></div>';
11477
11675
  div = div + eLine;
@@ -11487,25 +11685,25 @@ class ConnectorLine {
11487
11685
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div></div>';
11488
11686
  }
11489
11687
  if (this.getParentPosition(data) === 'SFType3') {
11490
- div = div + 'left:' + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11688
+ div = div + direction + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11491
11689
  ((data.childIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11492
11690
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SFType3">';
11493
11691
  div = div + duplicateStingOne;
11494
11692
  div = div + eLine;
11495
- div = div + (isMilestone ? 'left:4px;width:' + (16 + this.lineStroke) : 'left:10px;width:' +
11693
+ div = div + (isMilestone ? direction + '4px;width:' + (16 + this.lineStroke) : direction + '10px;width:' +
11496
11694
  (10 + this.lineStroke)) + 'px;top:' + (-(13 + ((this.lineStroke - 1) * 2) - 1)) + 'px;' +
11497
11695
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11498
11696
  div = div + eLine;
11499
- div = div + 'left:20px;top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;width:0px;' +
11697
+ div = div + direction + '20px;top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;width:0px;' +
11500
11698
  this.getBorderStyles('left', this.lineStroke) +
11501
11699
  this.getBorderStyles('top', (heightValue + borderTopWidth - (this.lineStroke - 1))) + 'position:relative;"></div>';
11502
11700
  div = div + eLine;
11503
- div = div + 'left:20px;top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;width:' +
11701
+ div = div + direction + '20px;top:' + (-(13 + ((this.lineStroke - 1) * 2))) + 'px;width:' +
11504
11702
  ((data.parentLeft - (data.childLeft + data.childWidth + 20)) + this.lineStroke) + 'px;' +
11505
11703
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div></div>';
11506
11704
  }
11507
11705
  if (this.getParentPosition(data) === 'SFType1') {
11508
- div = div + 'left:' + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11706
+ div = div + direction + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11509
11707
  ((data.parentIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11510
11708
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SFType1">';
11511
11709
  div = div + eLine;
@@ -11517,12 +11715,12 @@ class ConnectorLine {
11517
11715
  div = div + 'width:' + (((data.childLeft + data.childWidth) - (data.parentLeft)) + (30 + this.lineStroke)) + 'px;' +
11518
11716
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11519
11717
  div = div + eLine;
11520
- div = div + 'left:' + (((data.childLeft + data.childWidth) - (data.parentLeft)) + 30) +
11718
+ div = div + direction + (((data.childLeft + data.childWidth) - (data.parentLeft)) + 30) +
11521
11719
  'px;width:0px;' + this.getBorderStyles('left', this.lineStroke) +
11522
11720
  this.getBorderStyles('top', (this.getconnectorLineGap(data) - this.lineStroke)) + 'position:relative;"></div>';
11523
11721
  div = div + eLine;
11524
- div = div + (isMilestone ? ('left:' + (((data.childLeft + data.childWidth) -
11525
- (data.parentLeft)) + 15) + 'px;width:' + (15 + this.lineStroke)) : ('left:' +
11722
+ div = div + (isMilestone ? (direction + (((data.childLeft + data.childWidth) -
11723
+ (data.parentLeft)) + 15) + 'px;width:' + (15 + this.lineStroke)) : (direction +
11526
11724
  (((data.childLeft + data.childWidth) - (data.parentLeft)) + 20) + 'px;width:' + (10 + this.lineStroke))) + 'px;' +
11527
11725
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11528
11726
  div = div + duplicateStingFour + 'top:' + (-6 - this.lineStroke) + 'px;' +
@@ -11530,23 +11728,23 @@ class ConnectorLine {
11530
11728
  (5 + this.lineStroke) + 'px;position:relative;"></div></div>';
11531
11729
  }
11532
11730
  if (this.getParentPosition(data) === 'SFType2') {
11533
- div = div + 'left:' + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11731
+ div = div + direction + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11534
11732
  ((data.parentIndex * data.rowHeight) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11535
11733
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SFType2">';
11536
11734
  div = div + eLine;
11537
- div = div + 'left:' + (((data.parentLeft) - (data.childLeft + data.childWidth)) - 10) +
11735
+ div = div + direction + (((data.parentLeft) - (data.childLeft + data.childWidth)) - 10) +
11538
11736
  'px;width:11px;' + this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11539
11737
  div = div + eLine;
11540
- div = div + 'left:' + (((data.parentLeft) - (data.childLeft + data.childWidth)) - 10) +
11738
+ div = div + direction + (((data.parentLeft) - (data.childLeft + data.childWidth)) - 10) +
11541
11739
  'px;width:0px;' + this.getBorderStyles('left', this.lineStroke) +
11542
11740
  this.getBorderStyles('top', (heightValue + borderTopWidth - this.lineStroke)) + 'position:relative;"></div>';
11543
11741
  div = div + eLine;
11544
- div = div + (isMilestone ? ('left:4px;width:' + (((data.parentLeft) - (data.childLeft + data.childWidth))
11545
- - (14 - this.lineStroke))) : ('left:10px;width:' + (((data.parentLeft) -
11742
+ div = div + (isMilestone ? (direction + '4px;width:' + (((data.parentLeft) - (data.childLeft + data.childWidth))
11743
+ - (14 - this.lineStroke))) : (direction + '10px;width:' + (((data.parentLeft) -
11546
11744
  (data.childLeft + data.childWidth)) - (20 - this.lineStroke)))) +
11547
11745
  'px;' + this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
11548
11746
  div = div + leftArrow;
11549
- div = div + 'left:0px;' + this.getBorderStyles('right', 10) +
11747
+ div = div + direction + '0px;' + this.getBorderStyles((this.parent.enableRtl ? 'right' : 'left'), 10) +
11550
11748
  'top:' + (-6 - this.lineStroke) + 'px;border-bottom-width:' + (5 + this.lineStroke) +
11551
11749
  'px;border-top-width:' + (5 + this.lineStroke) + 'px;width:0;height:0;position:relative;"></div></div>';
11552
11750
  }
@@ -11733,12 +11931,19 @@ class Splitter$1 {
11733
11931
  this.parent.splitterElement = createElement('div', { className: splitter });
11734
11932
  this.parent.treeGridPane = createElement('div', { className: treeGridPane });
11735
11933
  this.parent.chartPane = createElement('div', { className: ganttChartPane });
11736
- this.parent.splitterElement.appendChild(this.parent.treeGridPane);
11737
- this.parent.splitterElement.appendChild(this.parent.chartPane);
11934
+ if (this.parent.enableRtl) {
11935
+ this.parent.splitterElement.appendChild(this.parent.chartPane);
11936
+ this.parent.splitterElement.appendChild(this.parent.treeGridPane);
11937
+ }
11938
+ else {
11939
+ this.parent.splitterElement.appendChild(this.parent.treeGridPane);
11940
+ this.parent.splitterElement.appendChild(this.parent.chartPane);
11941
+ }
11738
11942
  this.splitterObject = new Splitter({
11739
11943
  height: null,
11740
11944
  width: this.parent.ganttWidth.toString(),
11741
11945
  enablePersistence: this.parent.enablePersistence,
11946
+ enableRtl: this.parent.enableRtl,
11742
11947
  separatorSize: this.parent.splitterSettings.separatorSize,
11743
11948
  paneSettings: [
11744
11949
  {
@@ -11752,6 +11957,9 @@ class Splitter$1 {
11752
11957
  ],
11753
11958
  orientation: 'Horizontal',
11754
11959
  resizeStart: (args) => {
11960
+ if (this.parent.contextMenuModule && this.parent.contextMenuModule.isOpen) {
11961
+ this.parent.contextMenuModule.contextMenu.close();
11962
+ }
11755
11963
  const leftPane = args.pane[0];
11756
11964
  const rightPane = args.pane[1];
11757
11965
  this.splitterPreviousPositionGrid = leftPane.scrollWidth + 1 + 'px';
@@ -11913,6 +12121,7 @@ class Tooltip$1 {
11913
12121
  '.e-taskbar-left-resizer, .e-taskbar-right-resizer, .e-baseline-gantt-milestone, .e-gantt-manualparenttaskbar';
11914
12122
  this.toolTipObj.position = 'BottomCenter';
11915
12123
  this.toolTipObj.openDelay = 700;
12124
+ this.toolTipObj.enableRtl = this.parent.enableRtl;
11916
12125
  this.toolTipObj.enableHtmlSanitizer = false;
11917
12126
  this.toolTipObj.cssClass = ganttTooltip;
11918
12127
  this.toolTipObj.animation = { open: { effect: 'None', delay: 0 }, close: { effect: 'None', delay: 0 } };
@@ -12552,6 +12761,7 @@ class FocusModule {
12552
12761
  const top = containerPosition.top + (containerPosition.height / 2);
12553
12762
  const left = containerPosition.left + (containerPosition.width / 2);
12554
12763
  this.setActiveElement(e.target);
12764
+ // eslint-disable-next-line security/detect-non-literal-fs-filename
12555
12765
  contextMenu.open(top, left);
12556
12766
  e.preventDefault();
12557
12767
  break;
@@ -12641,6 +12851,8 @@ var __decorate = (undefined && undefined.__decorate) || function (decorators, ta
12641
12851
  let Gantt = class Gantt extends Component {
12642
12852
  constructor(options, element) {
12643
12853
  super(options, element);
12854
+ this.showIndicator = true;
12855
+ this.singleTier = 0;
12644
12856
  /** @hidden */
12645
12857
  this.isCancelled = false;
12646
12858
  /** @hidden */
@@ -12835,7 +13047,7 @@ let Gantt = class Gantt extends Component {
12835
13047
  /**
12836
13048
  * To check whether the date is in DST.
12837
13049
  *
12838
- * @param {Date} date .
13050
+ * @param {Date} date - Defines the date to check whether it is DST.
12839
13051
  * @returns {boolean} .
12840
13052
  * @private
12841
13053
  */
@@ -12926,9 +13138,348 @@ let Gantt = class Gantt extends Component {
12926
13138
  }
12927
13139
  this.splitterModule.renderSplitter();
12928
13140
  this.notify('renderPanels', null);
12929
- this.showSpinner();
13141
+ if (!isNullOrUndefined(this.loadingIndicator) && this.loadingIndicator.indicatorType === "Shimmer") {
13142
+ this.showMaskRow();
13143
+ }
13144
+ else {
13145
+ this.showSpinner();
13146
+ }
12930
13147
  this.dataOperation.checkDataBinding();
12931
13148
  }
13149
+ hideMaskRow() {
13150
+ let isTablePresent = this.element.querySelectorAll('.e-masked-table').length;
13151
+ if (!isNullOrUndefined(this.contentMaskTable) && isTablePresent != 0) {
13152
+ const maskTable = this.contentMaskTable;
13153
+ remove(maskTable);
13154
+ this.contentMaskTable = null;
13155
+ }
13156
+ isTablePresent = this.element.querySelectorAll('.e-masked-table').length;
13157
+ if (!isNullOrUndefined(this.headerMaskTable) && isTablePresent != 0) {
13158
+ const maskTable = this.headerMaskTable;
13159
+ remove(maskTable);
13160
+ this.headerMaskTable = null;
13161
+ }
13162
+ while ((this.element.querySelectorAll('.e-table-background')).length != 0) {
13163
+ this.element.querySelectorAll('.e-table-background')[0].remove();
13164
+ }
13165
+ while ((this.element.querySelectorAll('.e-temp-timeline')).length != 0) {
13166
+ this.element.querySelectorAll('.e-temp-timeline')[0].remove();
13167
+ }
13168
+ if (this.element.querySelectorAll('.' + timelineHeaderTableContainer).length != 0) {
13169
+ for (var i = 0; i < this.singleTier; i++) {
13170
+ if (!isNullOrUndefined(this.element.querySelectorAll('.' + timelineHeaderTableContainer)[i])) {
13171
+ this.element.querySelectorAll('.' + timelineHeaderTableContainer)[i]['style'].visibility = "visible";
13172
+ }
13173
+ }
13174
+ }
13175
+ if (!isNullOrUndefined(this.element.querySelector('.' + timelineHeaderContainer))) {
13176
+ this.element.querySelector('.' + timelineHeaderContainer)['style'].position = "relative";
13177
+ }
13178
+ if (!isNullOrUndefined(this.element.getElementsByClassName(chartBodyContent)[0])) {
13179
+ this.element.getElementsByClassName(chartBodyContent)[0]['style'].visibility = "visible";
13180
+ }
13181
+ }
13182
+ showMaskRow() {
13183
+ const ganttHeader = this.chartPane.childNodes[0].childNodes[0];
13184
+ this.scrollLeftValue = this.chartPane.childNodes[0].childNodes[0]['scrollLeft'];
13185
+ const ganttContent = this.chartPane.childNodes[0].childNodes[1];
13186
+ if (!this.contentMaskTable) {
13187
+ if (ganttContent) {
13188
+ let content$$1 = ganttContent;
13189
+ this.renderBackGround(content$$1);
13190
+ if (this.element.querySelectorAll('.' + timelineHeaderTableContainer).length != 0) {
13191
+ this.singleTier = this.timelineModule.isSingleTier ? 1 : 2;
13192
+ for (var i = 0; i < this.singleTier; i++) {
13193
+ this.element.querySelectorAll('.' + timelineHeaderTableContainer)[i]['style'].visibility = "hidden";
13194
+ }
13195
+ }
13196
+ if (this.singleTier === 0) {
13197
+ this.singleTier = 2;
13198
+ }
13199
+ this.element.getElementsByClassName(chartBodyContent)[0]['style'].visibility = "hidden";
13200
+ this.contentMaskTable = this.contentMaskTable = this.createMaskTable(content$$1);
13201
+ }
13202
+ if (ganttHeader) {
13203
+ this.element.querySelector('.' + timelineHeaderContainer)['style'].position = "static";
13204
+ let content$$1 = ganttHeader;
13205
+ this.renderHeaderBackground(content$$1);
13206
+ this.headerMaskTable = this.headerMaskTable = this.createMaskTable(content$$1);
13207
+ }
13208
+ }
13209
+ }
13210
+ renderHeaderBackground(element) {
13211
+ const parentElement = element;
13212
+ const timelineHeight = element.getBoundingClientRect().height;
13213
+ const header = closest(parentElement, '.' + timelineHeaderContainer) ? true : false;
13214
+ if (header) {
13215
+ const div = this.createElement('div', { className: 'e-table-background' });
13216
+ const tempRow = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {
13217
+ style: 'height: ' + timelineHeight + 'px;'
13218
+ } });
13219
+ let backgroundLines = 0;
13220
+ let containerWidth = Math.round(element.getBoundingClientRect().width);
13221
+ for (let i = 0; i < 3; i++) {
13222
+ if (this.enableRtl) {
13223
+ div.appendChild(this.createElement('div', { className: 'e-div-background', attrs: {
13224
+ style: 'left: ' + (containerWidth -= ((160))) + 'px; top:0px;'
13225
+ } }));
13226
+ }
13227
+ else {
13228
+ div.appendChild(this.createElement('div', { className: 'e-div-background', attrs: {
13229
+ style: 'left: ' + (backgroundLines += ((160))) + 'px; top:0px;'
13230
+ } }));
13231
+ }
13232
+ }
13233
+ parentElement.insertBefore(div, parentElement.firstChild);
13234
+ }
13235
+ }
13236
+ renderBackGround(element) {
13237
+ const parentElement = element;
13238
+ const timelineHeight = element.getBoundingClientRect().height;
13239
+ const content$$1 = closest(parentElement, '.' + chartBodyContainer) ? true : false;
13240
+ if (content$$1) {
13241
+ const div = this.createElement('div', { className: 'e-table-background' });
13242
+ const tempRow = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {
13243
+ style: 'height: ' + timelineHeight + 'px;'
13244
+ } });
13245
+ let backgroundLines = 0;
13246
+ let containerWidth = Math.round(element.getBoundingClientRect().width);
13247
+ for (let i = 0; i < 3; i++) {
13248
+ if (this.enableRtl) {
13249
+ div.appendChild(this.createElement('div', { className: 'e-div-background', attrs: {
13250
+ style: 'left: ' + (containerWidth -= (160)) + 'px;z-index:1;'
13251
+ } }));
13252
+ }
13253
+ else {
13254
+ div.appendChild(this.createElement('div', { className: 'e-div-background', attrs: {
13255
+ style: 'left: ' + (backgroundLines += (160)) + 'px;z-index:1;'
13256
+ } }));
13257
+ }
13258
+ }
13259
+ parentElement.insertBefore(div, parentElement.firstChild);
13260
+ }
13261
+ }
13262
+ createMaskTable(element) {
13263
+ const parentElement = element;
13264
+ const shimmerContainerHeight = element.getBoundingClientRect().height;
13265
+ const header = closest(parentElement, '.' + timelineHeaderContainer) ? true : false;
13266
+ let maskTable;
13267
+ if (header) {
13268
+ maskTable = this.createEmptyTimeLineTable(shimmerContainerHeight);
13269
+ maskTable.style.position = 'sticky';
13270
+ maskTable.style.left = 0 + 'px';
13271
+ if (this.enableRtl) {
13272
+ maskTable.style.removeProperty('left');
13273
+ }
13274
+ }
13275
+ else {
13276
+ maskTable = this.createEmptyMaskTable(shimmerContainerHeight);
13277
+ maskTable.style.position = 'absolute';
13278
+ maskTable.style.zIndex = 1;
13279
+ }
13280
+ if (!header) {
13281
+ maskTable.style.height = element.getBoundingClientRect().height + 'px';
13282
+ parentElement.insertBefore(maskTable, parentElement.firstChild);
13283
+ }
13284
+ else {
13285
+ maskTable.style.height = element.getBoundingClientRect().height + 'px';
13286
+ let div = this.createElement('div', { className: 'e-temp-timeline' });
13287
+ div.style.width = 614 + 'px';
13288
+ div.style.position = 'sticky';
13289
+ if (this.enableRtl) {
13290
+ div.style['margin-right'] = Math.abs(this.scrollLeftValue) + 'px';
13291
+ }
13292
+ else {
13293
+ div.style['margin-left'] = this.scrollLeftValue + 'px';
13294
+ }
13295
+ div.appendChild(maskTable);
13296
+ parentElement.insertBefore(div, parentElement.firstChild);
13297
+ }
13298
+ return maskTable;
13299
+ }
13300
+ createEmptyTimeLineTable(timelineHeight) {
13301
+ const table = this.createElement('table', { className: 'e-table e-masked-table' });
13302
+ const tbody = this.createElement('tbody', { className: 'e-masked-tbody' });
13303
+ let row = [];
13304
+ const duplicateRow = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {
13305
+ style: 'height: ' + timelineHeight / 2 + 'px;'
13306
+ } });
13307
+ for (let i = 0; i < this.singleTier; i++) {
13308
+ row.push(duplicateRow.cloneNode(true));
13309
+ }
13310
+ this.topBottomHeader = 0;
13311
+ for (let i = 0; i < row.length; i++) {
13312
+ tbody.appendChild(this.applyTimelineMaskRow(row[i]));
13313
+ this.topBottomHeader = this.topBottomHeader + 1;
13314
+ }
13315
+ table.appendChild(tbody);
13316
+ table.style.width = 100 + '%';
13317
+ return table;
13318
+ }
13319
+ applyTimelineMaskRow(row) {
13320
+ const maskRow = row;
13321
+ maskRow.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));
13322
+ maskRow.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));
13323
+ maskRow.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));
13324
+ maskRow.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));
13325
+ for (let i = 0; i < maskRow.childNodes.length - 1; i++) {
13326
+ maskRow.childNodes[i]['style']['width'] = 166 + 'px';
13327
+ }
13328
+ const maskCells = [].slice.call(maskRow.childNodes);
13329
+ for (let i = 0; i < maskCells.length; i++) {
13330
+ const maskCell = maskCells[i];
13331
+ switch (this.topBottomHeader) {
13332
+ case 0:
13333
+ if (this.enableRtl) {
13334
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-timelineHeader"></span>';
13335
+ maskCell.children[0]['style'].left = -20 + 'px';
13336
+ }
13337
+ else {
13338
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-timelineHeader"></span>';
13339
+ }
13340
+ break;
13341
+ case 1:
13342
+ maskCell.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));
13343
+ maskCell.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));
13344
+ maskCell.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));
13345
+ const innerMaskCells = [].slice.call(maskCell.childNodes);
13346
+ for (let i = 0; i < innerMaskCells.length; i++) {
13347
+ const htmlInner = innerMaskCells[i];
13348
+ if (i === 0) {
13349
+ if (this.enableRtl) {
13350
+ htmlInner.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-innerHTML"></span>';
13351
+ htmlInner.children[0]['style'].left = -14 + 'px';
13352
+ }
13353
+ else {
13354
+ htmlInner.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-innerHTML"></span>';
13355
+ }
13356
+ }
13357
+ else if (i === 1) {
13358
+ if (this.enableRtl) {
13359
+ htmlInner.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-innerHTML1"></span>';
13360
+ htmlInner.children[0]['style'].left = -30 + 'px';
13361
+ }
13362
+ else {
13363
+ htmlInner.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-innerHTML1"></span>';
13364
+ }
13365
+ }
13366
+ else {
13367
+ if (this.enableRtl) {
13368
+ htmlInner.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-innerHTML2"></span>';
13369
+ htmlInner.children[0]['style'].left = -60 + 'px';
13370
+ }
13371
+ else {
13372
+ htmlInner.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-innerHTML2"></span>';
13373
+ }
13374
+ }
13375
+ }
13376
+ break;
13377
+ }
13378
+ }
13379
+ return maskRow;
13380
+ }
13381
+ createEmptyMaskTable(timelineHeight) {
13382
+ const table = this.createElement('table', { className: 'e-table e-masked-table' });
13383
+ const tbody = this.createElement('tbody', { className: 'e-masked-tbody' });
13384
+ let row = [];
13385
+ const duplicateRow = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {
13386
+ style: 'height: ' + timelineHeight / 7 + 'px;'
13387
+ } });
13388
+ this.columnLoop = 0;
13389
+ for (let i = 0; i < 6; i++) {
13390
+ row.push(duplicateRow.cloneNode(true));
13391
+ }
13392
+ for (let j = 0; j < row.length; j++) {
13393
+ if (this.columnLoop < 4) {
13394
+ this.columnLoop = this.columnLoop + 1;
13395
+ }
13396
+ else if (this.columnLoop === 4) {
13397
+ this.columnLoop = 1;
13398
+ }
13399
+ tbody.appendChild(this.applyMaskRow(row[j]));
13400
+ }
13401
+ table.appendChild(tbody);
13402
+ table.style.width = 100 + '%';
13403
+ let div = this.createElement('div', { className: 'e-temp-container' });
13404
+ div.style.width = 'calc(100% - ' + 17 + 'px)';
13405
+ div.style.overflow = 'hidden';
13406
+ div.appendChild(table);
13407
+ return div;
13408
+ }
13409
+ applyMaskRow(row) {
13410
+ const maskRow = row;
13411
+ if (this.columnLoop < 4) {
13412
+ maskRow.appendChild(this.createElement('td', { className: 'e-masked-cell e-rowcell' }));
13413
+ maskRow.appendChild(this.createElement('td', { className: 'e-masked-cell e-rowcell' }));
13414
+ }
13415
+ else {
13416
+ maskRow.appendChild(this.createElement('td', { className: 'e-masked-cell e-rowcell' }));
13417
+ }
13418
+ const maskCells = [].slice.call(maskRow.childNodes);
13419
+ for (let i = 0; i < maskCells.length; i++) {
13420
+ const maskCell = maskCells[i];
13421
+ switch (this.columnLoop) {
13422
+ case 1:
13423
+ if (i === 0) {
13424
+ if (this.enableRtl) {
13425
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell01"></span>';
13426
+ maskCell.children[0]['style'].left = -14 + 'px';
13427
+ }
13428
+ else {
13429
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell01"></span>';
13430
+ }
13431
+ }
13432
+ else {
13433
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell02"></span>';
13434
+ }
13435
+ break;
13436
+ case 2:
13437
+ if (i === 0) {
13438
+ if (this.enableRtl) {
13439
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell03"></span>';
13440
+ maskCell.children[0]['style'].left = -14 + 'px';
13441
+ }
13442
+ else {
13443
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell03"></span>';
13444
+ }
13445
+ }
13446
+ else {
13447
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell04"></span>';
13448
+ }
13449
+ break;
13450
+ case 3:
13451
+ if (i === 0) {
13452
+ if (this.enableRtl) {
13453
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell05"></span>';
13454
+ maskCell.children[0]['style'].left = -64 + 'px';
13455
+ }
13456
+ else {
13457
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell05"></span>';
13458
+ }
13459
+ }
13460
+ else {
13461
+ if (this.enableRtl) {
13462
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell06"></span>';
13463
+ maskCell.children[0]['style'].left = -192 + 'px';
13464
+ }
13465
+ else {
13466
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell06"></span>';
13467
+ }
13468
+ }
13469
+ break;
13470
+ case 4:
13471
+ if (this.enableRtl) {
13472
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell07"></span>';
13473
+ maskCell.children[0]['style'].left = -388 + 'px';
13474
+ }
13475
+ else {
13476
+ maskCell.innerHTML = '<span class="e-mask e-skeleton e-skeleton-text e-shimmer-wave e-maskcell07"></span>';
13477
+ }
13478
+ break;
13479
+ }
13480
+ }
13481
+ return maskRow;
13482
+ }
12932
13483
  /**
12933
13484
  * Method used to show spinner.
12934
13485
  *
@@ -12954,7 +13505,7 @@ let Gantt = class Gantt extends Component {
12954
13505
  this.timelineModule.calculateZoomingLevelsPerDayWidth(); // To calculate the perDaywidth
12955
13506
  }
12956
13507
  /**
12957
- * @param {boolean} isChange .
13508
+ * @param {boolean} isChange -Defines whether task data is changed.
12958
13509
  * @returns {void} .
12959
13510
  * @private
12960
13511
  */
@@ -13054,7 +13605,7 @@ let Gantt = class Gantt extends Component {
13054
13605
  /**
13055
13606
  * Method for updating row height value in connector line collections
13056
13607
  *
13057
- * @param {IConnectorLineObject[]} collection .
13608
+ * @param {IConnectorLineObject[]} collection -Defines the CollectorLine collection.
13058
13609
  * @returns {void} .
13059
13610
  * @private
13060
13611
  */
@@ -13090,7 +13641,7 @@ let Gantt = class Gantt extends Component {
13090
13641
  this.currentViewData = this.treeGrid.getCurrentViewRecords().slice();
13091
13642
  }
13092
13643
  /**
13093
- * @param {IGanttData} records .
13644
+ * @param {IGanttData} records -Defines the delete record collections.
13094
13645
  * @returns {IGanttData} .
13095
13646
  * @private
13096
13647
  */
@@ -13102,7 +13653,7 @@ let Gantt = class Gantt extends Component {
13102
13653
  return updatedRecord;
13103
13654
  }
13104
13655
  /**
13105
- * @param {object} args .
13656
+ * @param {object} args -Update the gantt element content height.
13106
13657
  * @returns {void} .
13107
13658
  * @private
13108
13659
  */
@@ -13453,7 +14004,12 @@ let Gantt = class Gantt extends Component {
13453
14004
  this.treeGrid.height = '100%';
13454
14005
  this.notify('tree-grid-created', {});
13455
14006
  this.createGanttPopUpElement();
13456
- this.hideSpinner();
14007
+ if (!isNullOrUndefined(this.loadingIndicator) && this.loadingIndicator.indicatorType === "Shimmer") {
14008
+ this.hideMaskRow();
14009
+ }
14010
+ else {
14011
+ this.hideSpinner();
14012
+ }
13457
14013
  setValue('isGanttCreated', true, args);
13458
14014
  this.renderComplete();
13459
14015
  }
@@ -13465,6 +14021,11 @@ let Gantt = class Gantt extends Component {
13465
14021
  this.criticalPathModule.showCriticalPath(this.enableCriticalPath);
13466
14022
  }
13467
14023
  this.notify('recordsUpdated', {});
14024
+ for (let i = 0; i < document.getElementsByClassName('e-timeline-header-table-container').length; i++) {
14025
+ for (let j = 0; j < document.getElementsByClassName('e-timeline-header-table-container')[i].children[0].children[0].children.length; j++) {
14026
+ document.getElementsByClassName('e-timeline-header-table-container')[i].children[0].children[0].children[j].children[0].setAttribute('tabindex', '-1');
14027
+ }
14028
+ }
13468
14029
  if (this.enableCriticalPath && this.criticalPathModule) {
13469
14030
  let criticalModule = this.criticalPathModule;
13470
14031
  this.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);
@@ -13496,8 +14057,8 @@ let Gantt = class Gantt extends Component {
13496
14057
  /**
13497
14058
  * Called internally, if any of the property value changed.
13498
14059
  *
13499
- * @param {GanttModel} newProp .
13500
- * @param {GanttModel} oldProp .
14060
+ * @param {GanttModel} newProp - Defines the New GanttModel.
14061
+ * @param {GanttModel} oldProp - Defines the old GanttModel.
13501
14062
  * @returns {void} .
13502
14063
  * @private
13503
14064
  */
@@ -13559,6 +14120,12 @@ let Gantt = class Gantt extends Component {
13559
14120
  this.dataOperation.checkDataBinding(true);
13560
14121
  break;
13561
14122
  case 'enableCriticalPath':
14123
+ if (!isNullOrUndefined(this.loadingIndicator) && this.loadingIndicator.indicatorType === "Shimmer") {
14124
+ this.hideMaskRow();
14125
+ }
14126
+ else {
14127
+ this.hideSpinner();
14128
+ }
13562
14129
  if (this.enableCriticalPath && this.criticalPathModule) {
13563
14130
  this.criticalPathModule.showCriticalPath(this.enableCriticalPath);
13564
14131
  let criticalModule = this.criticalPathModule;
@@ -14105,7 +14672,7 @@ let Gantt = class Gantt extends Component {
14105
14672
  thWidth = thElements[n].style.width;
14106
14673
  const divElement = createElement('div', {
14107
14674
  className: 'e-line-container-cell',
14108
- styles: 'left:' + leftPos + 'px'
14675
+ styles: (this.enableRtl ? 'right:' + (leftPos + 1) : 'left:' + leftPos) + 'px'
14109
14676
  });
14110
14677
  containerDiv.appendChild(divElement);
14111
14678
  }
@@ -14240,12 +14807,18 @@ let Gantt = class Gantt extends Component {
14240
14807
  }
14241
14808
  /**
14242
14809
  *
14243
- * @param {object} args .
14810
+ * @param {object} args -Defines the edited event args.
14244
14811
  * @returns {void} .
14245
14812
  * @private
14246
14813
  */
14247
14814
  actionBeginTask(args) {
14248
14815
  this.trigger('actionBegin', args);
14816
+ if (!isNullOrUndefined(this.loadingIndicator) && this.loadingIndicator.indicatorType === "Shimmer") {
14817
+ this.showMaskRow();
14818
+ }
14819
+ else {
14820
+ this.showSpinner();
14821
+ }
14249
14822
  }
14250
14823
  /**
14251
14824
  * To move horizontal scroll bar of Gantt to specific date.
@@ -14281,7 +14854,7 @@ let Gantt = class Gantt extends Component {
14281
14854
  if (!isNullOrUndefined(left)) {
14282
14855
  left = this.ganttChartModule.scrollElement.scrollWidth <= left ?
14283
14856
  this.ganttChartModule.scrollElement.scrollWidth : left;
14284
- this.ganttChartModule.scrollObject.setScrollLeft(left);
14857
+ this.ganttChartModule.scrollObject.setScrollLeft(left, this.enableRtl ? -1 : 0);
14285
14858
  }
14286
14859
  if (!isNullOrUndefined(top)) {
14287
14860
  top = this.ganttChartModule.scrollElement.scrollHeight <= top ? this.ganttChartModule.scrollElement.scrollHeight : top;
@@ -14314,8 +14887,8 @@ let Gantt = class Gantt extends Component {
14314
14887
  /**
14315
14888
  * Get parent task by clone parent item.
14316
14889
  *
14317
- * @param {IGanttData} ganttRecord .
14318
- * @param {number} level .
14890
+ * @param {IGanttData} ganttRecord -Defines the Gantt record.
14891
+ * @param {number} level -Defines the selected record level.
14319
14892
  * @returns {IGanttData} .
14320
14893
  * @hidden
14321
14894
  */
@@ -14428,7 +15001,7 @@ let Gantt = class Gantt extends Component {
14428
15001
  /**
14429
15002
  * To update timeline at start point with one unit.
14430
15003
  *
14431
- * @param {string} mode .
15004
+ * @param {string} mode - Render previous span of Timeline.
14432
15005
  * @returns {void} .
14433
15006
  * @public
14434
15007
  */
@@ -14438,7 +15011,7 @@ let Gantt = class Gantt extends Component {
14438
15011
  /**
14439
15012
  * To update timeline at end point with one unit.
14440
15013
  *
14441
- * @param {string} mode .
15014
+ * @param {string} mode - Render next span of Timeline.
14442
15015
  * @returns {void} .
14443
15016
  * @public
14444
15017
  */
@@ -14512,7 +15085,7 @@ let Gantt = class Gantt extends Component {
14512
15085
  /**
14513
15086
  * Method to clear edited collections in gantt set edit flag value
14514
15087
  *
14515
- * @param {boolean} isStart .
15088
+ * @param {boolean} isStart -Defines whether to initiate edit action.
14516
15089
  * @returns {void} .
14517
15090
  * @private
14518
15091
  */
@@ -14785,8 +15358,8 @@ let Gantt = class Gantt extends Component {
14785
15358
  /**
14786
15359
  * To update existing taskId with new unique Id.
14787
15360
  *
14788
- * @param {number | string} currentId .
14789
- * @param {number | string} newId .
15361
+ * @param {number | string} currentId - Defines the current Id of the record.
15362
+ * @param {number | string} newId - Defines the new Id of the record.
14790
15363
  * @returns {void} .
14791
15364
  */
14792
15365
  updateTaskId(currentId, newId) {
@@ -14888,9 +15461,9 @@ let Gantt = class Gantt extends Component {
14888
15461
  /**
14889
15462
  * Reorder the rows based on given indexes and position
14890
15463
  *
14891
- * @param {number[]} fromIndexes .
14892
- * @param {number} toIndex .
14893
- * @param {string} position .
15464
+ * @param {number[]} fromIndexes - Defines the Dragged record index.
15465
+ * @param {number} toIndex - Defines the Dropped record index.
15466
+ * @param {string} position -Defines the position of the dropped row.
14894
15467
  * @returns {void} .
14895
15468
  */
14896
15469
  reorderRows(fromIndexes, toIndex, position) {
@@ -15065,7 +15638,7 @@ let Gantt = class Gantt extends Component {
15065
15638
  /**
15066
15639
  * Method to get class name for unscheduled tasks
15067
15640
  *
15068
- * @param {ITaskData} ganttProp .
15641
+ * @param {ITaskData} ganttProp -Defines the Gantt propertie.
15069
15642
  * @returns {boolean} .
15070
15643
  * @private
15071
15644
  */
@@ -15139,7 +15712,7 @@ let Gantt = class Gantt extends Component {
15139
15712
  const clientTop = document.documentElement.clientTop || document.body.clientTop || 0;
15140
15713
  const clientLeft = document.documentElement.clientLeft || document.body.clientLeft || 0;
15141
15714
  const top = box.top + scrollTop - clientTop;
15142
- const left = box.left + scrollLeft - clientLeft;
15715
+ const left = this.enableRtl ? box.right + scrollLeft - clientLeft : box.left + scrollLeft - clientLeft;
15143
15716
  return { top: Math.round(top), left: Math.round(left), width: box.width, height: box.height };
15144
15717
  }
15145
15718
  /**
@@ -15411,7 +15984,7 @@ let Gantt = class Gantt extends Component {
15411
15984
  /**
15412
15985
  * To change the mode of a record.
15413
15986
  *
15414
- * @param {object} data .
15987
+ * @param {object} data - Use to change the TaskMode either manual, auto or custom.
15415
15988
  * @returns {void} .
15416
15989
  */
15417
15990
  changeTaskMode(data) {
@@ -15483,6 +16056,12 @@ __decorate([
15483
16056
  __decorate([
15484
16057
  Property(true)
15485
16058
  ], Gantt.prototype, "disableHtmlEncode", void 0);
16059
+ __decorate([
16060
+ Complex({}, LoadingIndicator)
16061
+ ], Gantt.prototype, "loadingIndicator", void 0);
16062
+ __decorate([
16063
+ Property(true)
16064
+ ], Gantt.prototype, "enableVirtualMaskRow", void 0);
15486
16065
  __decorate([
15487
16066
  Property(true)
15488
16067
  ], Gantt.prototype, "autoFocusTasks", void 0);
@@ -16508,6 +17087,7 @@ class EditTooltip {
16508
17087
  this.toolTipObj = new Tooltip({
16509
17088
  opensOn: opensOn,
16510
17089
  position: 'TopRight',
17090
+ enableRtl: this.parent.enableRtl,
16511
17091
  mouseTrail: mouseTrail,
16512
17092
  cssClass: ganttTooltip,
16513
17093
  target: target ? target : null,
@@ -16557,12 +17137,15 @@ class EditTooltip {
16557
17137
  this.parent.tooltipModule.toolTipObj.close();
16558
17138
  this.updateTooltip(segmentIndex);
16559
17139
  if (this.taskbarEdit.connectorSecondAction === 'ConnectorPointLeftDrag') {
17140
+ // eslint-disable-next-line security/detect-non-literal-fs-filename
16560
17141
  this.toolTipObj.open(this.taskbarEdit.connectorSecondElement.querySelector('.' + connectorPointLeft));
16561
17142
  }
16562
17143
  else if (this.taskbarEdit.connectorSecondAction === 'ConnectorPointRightDrag') {
17144
+ // eslint-disable-next-line security/detect-non-literal-fs-filename
16563
17145
  this.toolTipObj.open(this.taskbarEdit.connectorSecondElement.querySelector('.' + connectorPointRight));
16564
17146
  }
16565
17147
  else {
17148
+ // eslint-disable-next-line security/detect-non-literal-fs-filename
16566
17149
  this.toolTipObj.open(this.taskbarEdit.taskBarEditElement);
16567
17150
  }
16568
17151
  }
@@ -16595,14 +17178,29 @@ class EditTooltip {
16595
17178
  this.toolTipObj.content = this.getTooltipText(segmentIndex);
16596
17179
  this.toolTipObj.refresh(this.taskbarEdit.taskBarEditElement);
16597
17180
  if (this.taskbarEdit.taskBarEditAction === 'LeftResizing') {
16598
- this.toolTipObj.offsetX = -taskWidth;
17181
+ if (this.parent.enableRtl) {
17182
+ this.toolTipObj.offsetX = 0;
17183
+ }
17184
+ else {
17185
+ this.toolTipObj.offsetX = -taskWidth;
17186
+ }
16599
17187
  }
16600
17188
  else if (this.taskbarEdit.taskBarEditAction === 'RightResizing' ||
16601
17189
  this.taskbarEdit.taskBarEditAction === 'ParentResizing') {
16602
- this.toolTipObj.offsetX = 0;
17190
+ if (this.parent.enableRtl) {
17191
+ this.toolTipObj.offsetX = -taskWidth;
17192
+ }
17193
+ else {
17194
+ this.toolTipObj.offsetX = 0;
17195
+ }
16603
17196
  }
16604
17197
  else if (this.taskbarEdit.taskBarEditAction === 'ProgressResizing') {
16605
- this.toolTipObj.offsetX = -(taskWidth - progressWidth);
17198
+ if (this.parent.enableRtl) {
17199
+ this.toolTipObj.offsetX = -(progressWidth);
17200
+ }
17201
+ else {
17202
+ this.toolTipObj.offsetX = -(taskWidth - progressWidth);
17203
+ }
16606
17204
  }
16607
17205
  else if (this.taskbarEdit.taskBarEditAction === 'MilestoneDrag') {
16608
17206
  this.toolTipObj.offsetX = -(this.parent.chartRowsModule.milestoneHeight / 2);
@@ -17108,8 +17706,14 @@ class TaskbarEdit extends DateProcessor {
17108
17706
  const e = this.getCoordinate(event);
17109
17707
  if (e.pageX || e.pageY) {
17110
17708
  const containerPosition = this.parent.getOffsetRect(this.parent.ganttChartModule.chartBodyContainer);
17111
- this.mouseDownX = (e.pageX - containerPosition.left) +
17112
- this.parent.ganttChartModule.scrollObject.previousScroll.left;
17709
+ if (this.parent.enableRtl) {
17710
+ this.mouseDownX = Math.abs(e.pageX - (containerPosition.left +
17711
+ Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left)));
17712
+ }
17713
+ else {
17714
+ this.mouseDownX = (e.pageX - containerPosition.left) +
17715
+ this.parent.ganttChartModule.scrollObject.previousScroll.left;
17716
+ }
17113
17717
  this.tooltipPositionX = this.mouseDownX;
17114
17718
  this.mouseDownY = e.pageY - containerPosition.top +
17115
17719
  this.parent.ganttChartModule.scrollObject.previousScroll.top;
@@ -17153,8 +17757,14 @@ class TaskbarEdit extends DateProcessor {
17153
17757
  }
17154
17758
  const containerPosition = this.parent.getOffsetRect(this.parent.ganttChartModule.chartBodyContainer);
17155
17759
  const e = this.getCoordinate(event);
17156
- this.mouseMoveX = e.pageX - containerPosition.left +
17157
- this.parent.ganttChartModule.scrollObject.previousScroll.left;
17760
+ if (this.parent.enableRtl) {
17761
+ this.mouseMoveX = Math.abs(e.pageX - (containerPosition.left +
17762
+ Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left)));
17763
+ }
17764
+ else {
17765
+ this.mouseMoveX = e.pageX - containerPosition.left +
17766
+ this.parent.ganttChartModule.scrollObject.previousScroll.left;
17767
+ }
17158
17768
  this.mouseMoveY = e.pageY - containerPosition.top +
17159
17769
  this.parent.ganttChartModule.scrollObject.previousScroll.top;
17160
17770
  this.dragMouseLeave = false;
@@ -17170,6 +17780,17 @@ class TaskbarEdit extends DateProcessor {
17170
17780
  args.requestType = 'mergeSegment';
17171
17781
  }
17172
17782
  this.parent.trigger('actionBegin', args, (arg) => {
17783
+ if (args.taskBarEditAction === "ConnectorPointRightDrag" || args.taskBarEditAction === "ConnectorPointLeftDrag"
17784
+ || args.taskBarEditAction === "LeftResizing" || args.taskBarEditAction === "RightResizing"
17785
+ || args.taskBarEditAction === "ProgressResizing" || args.taskBarEditAction === "ChildDrag" || args.taskBarEditAction === "ParentDrag" || args.taskBarEditAction === "MilestoneDrag" || args.taskBarEditAction === "ManualParentDrag") {
17786
+ this.parent.showIndicator = false;
17787
+ }
17788
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer" && this.parent.showIndicator) {
17789
+ this.parent.showMaskRow();
17790
+ }
17791
+ else if (this.parent.showIndicator) {
17792
+ this.parent.showSpinner();
17793
+ }
17173
17794
  if (arg.cancel === false) {
17174
17795
  this.taskBarEditingAction(event, false);
17175
17796
  }
@@ -17251,8 +17872,14 @@ class TaskbarEdit extends DateProcessor {
17251
17872
  const containerPosition = this.parent.getOffsetRect(this.parent.ganttChartModule.chartBodyContainer);
17252
17873
  const e = this.getCoordinate(event);
17253
17874
  if (e.pageX || e.pageY) {
17254
- this.mouseMoveX = e.pageX - containerPosition.left +
17255
- this.parent.ganttChartModule.scrollObject.previousScroll.left;
17875
+ if (this.parent.enableRtl) {
17876
+ this.mouseMoveX = Math.abs(e.pageX - (containerPosition.left +
17877
+ Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left)));
17878
+ }
17879
+ else {
17880
+ this.mouseMoveX = e.pageX - containerPosition.left +
17881
+ this.parent.ganttChartModule.scrollObject.previousScroll.left;
17882
+ }
17256
17883
  this.tooltipPositionX = this.mouseMoveX;
17257
17884
  this.mouseMoveY = e.pageY - containerPosition.top +
17258
17885
  this.parent.ganttChartModule.scrollObject.previousScroll.top;
@@ -17263,8 +17890,15 @@ class TaskbarEdit extends DateProcessor {
17263
17890
  if ((this.taskBarEditRecord.ganttProperties.width > 3 && !(this.taskBarEditAction === 'ProgressResizing' &&
17264
17891
  (this.taskBarEditRecord.ganttProperties.progress === 0 || this.taskBarEditRecord.ganttProperties.progress === 100))) ||
17265
17892
  isConnectorLineEdit) {
17266
- const mouseX = this.mouseMoveX - this.parent.ganttChartModule.scrollObject.previousScroll.left +
17267
- containerPosition.left;
17893
+ let mouseX = 0;
17894
+ if (this.parent.enableRtl) {
17895
+ mouseX = Math.abs(Math.abs(this.mouseMoveX) - Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left) +
17896
+ containerPosition.left);
17897
+ }
17898
+ else {
17899
+ mouseX = this.mouseMoveX - this.parent.ganttChartModule.scrollObject.previousScroll.left +
17900
+ containerPosition.left;
17901
+ }
17268
17902
  const mouseY = this.mouseMoveY - this.parent.ganttChartModule.scrollObject.previousScroll.top +
17269
17903
  containerPosition.top;
17270
17904
  if ((mouseX + 20) >
@@ -17272,6 +17906,12 @@ class TaskbarEdit extends DateProcessor {
17272
17906
  this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.left;
17273
17907
  this.startScrollTimer('right');
17274
17908
  }
17909
+ else if ((mouseX + 40) >
17910
+ containerPosition.left + this.parent.ganttChartModule.chartBodyContainer.offsetWidth && this.parent.enableRtl && this.parent.ganttChartModule.scrollObject.previousScroll.left == 0) {
17911
+ this.parent.ganttChartModule.scrollObject.previousScroll.left = -1;
17912
+ this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.left;
17913
+ this.startScrollTimer('right');
17914
+ }
17275
17915
  else if ((mouseX - 20) < containerPosition.left) {
17276
17916
  this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.left;
17277
17917
  this.startScrollTimer('left');
@@ -17302,7 +17942,12 @@ class TaskbarEdit extends DateProcessor {
17302
17942
  */
17303
17943
  startScrollTimer(direction) {
17304
17944
  this.stopScrollTimer();
17945
+ let leftSign = 0;
17305
17946
  this.scrollTimer = window.setInterval(() => {
17947
+ if (Math.sign(this.timerCount) == -1) {
17948
+ leftSign = -1;
17949
+ this.timerCount = Math.abs(this.timerCount);
17950
+ }
17306
17951
  if (direction === 'right') {
17307
17952
  this.timerCount = (this.timerCount + 1) >= this.parent.timelineModule.totalTimelineWidth ?
17308
17953
  this.parent.timelineModule.totalTimelineWidth : (this.timerCount + 1);
@@ -17317,7 +17962,7 @@ class TaskbarEdit extends DateProcessor {
17317
17962
  this.parent.ganttChartModule.scrollObject.setScrollTop(this.timerCount);
17318
17963
  }
17319
17964
  else {
17320
- this.parent.ganttChartModule.scrollObject.setScrollLeft(this.timerCount);
17965
+ this.parent.ganttChartModule.scrollObject.setScrollLeft(this.timerCount, leftSign);
17321
17966
  }
17322
17967
  if (this.taskBarEditAction === 'ConnectorPointLeftDrag'
17323
17968
  || this.taskBarEditAction === 'ConnectorPointRightDrag') {
@@ -18013,6 +18658,7 @@ class TaskbarEdit extends DateProcessor {
18013
18658
  */
18014
18659
  setItemPosition() {
18015
18660
  const item = this.taskBarEditRecord.ganttProperties;
18661
+ let position = this.parent.enableRtl ? "right" : "left";
18016
18662
  const segment = !isNullOrUndefined(item.segments) ? item.segments[this.segmentIndex] : null;
18017
18663
  const width = this.taskBarEditAction === 'MilestoneDrag' || item.isMilestone ?
18018
18664
  this.parent.chartRowsModule.milestoneHeight : item.width;
@@ -18044,11 +18690,16 @@ class TaskbarEdit extends DateProcessor {
18044
18690
  if (segmentedTaskBarContainer && !isNullOrUndefined(item.segments)
18045
18691
  && (this.taskBarEditAction === 'RightResizing' || this.segmentIndex !== 0)) {
18046
18692
  this.taskBarEditElement.style.width = (segment.width) + 'px';
18047
- this.taskBarEditElement.style.left = (segment.left) + 'px';
18693
+ if (this.parent.enableRtl) {
18694
+ this.taskBarEditElement.style.right = (segment.left) + 'px';
18695
+ }
18696
+ else {
18697
+ this.taskBarEditElement.style.left = (segment.left) + 'px';
18698
+ }
18048
18699
  }
18049
18700
  taskBarMainContainer$$1.style.width = (width) + 'px';
18050
- taskBarMainContainer$$1.style.left = (item.left) + 'px';
18051
18701
  leftLabelContainer$$1.style.width = (item.left) + 'px';
18702
+ taskBarMainContainer$$1.style.setProperty(position, (item.left) + 'px');
18052
18703
  if (this.taskBarEditAction === 'LeftResizing' && this.segmentIndex === 0) {
18053
18704
  const parent = this.taskBarEditElement.parentElement;
18054
18705
  const segmentedTasks = parent.getElementsByClassName('e-segmented-taskbar');
@@ -18056,31 +18707,42 @@ class TaskbarEdit extends DateProcessor {
18056
18707
  const segment = item.segments[i];
18057
18708
  const segmentElement = segmentedTasks[i];
18058
18709
  segmentElement.style.width = (segment.width) + 'px';
18059
- segmentElement.style.left = (segment.left) + 'px';
18710
+ if (this.parent.enableRtl) {
18711
+ segmentElement.style.right = (segment.left) + 'px';
18712
+ }
18713
+ else {
18714
+ segmentElement.style.left = (segment.left) + 'px';
18715
+ }
18060
18716
  }
18061
18717
  }
18062
18718
  if (!isNullOrUndefined(rightLabelContainer$$1)) {
18063
- rightLabelContainer$$1.style.left = (item.left + width) + 'px';
18719
+ rightLabelContainer$$1.style.setProperty(position, (item.left + width) + 'px');
18064
18720
  }
18065
18721
  }
18066
18722
  if (traceConnectorPointRight) {
18067
- traceConnectorPointRight.style.left = (this.parent.isAdaptive ? (width + 10) : (width + 2)) + 'px';
18723
+ if (this.parent.enableRtl) {
18724
+ traceConnectorPointRight.style.left = (this.parent.isAdaptive ? (width + 10) : (width - 2)) + 'px';
18725
+ }
18726
+ else {
18727
+ traceConnectorPointRight.style.left = (this.parent.isAdaptive ? (width + 10) : (width + 2)) + 'px';
18728
+ }
18068
18729
  }
18069
18730
  if (this.taskBarEditAction === 'MilestoneDrag' || item.isMilestone) {
18070
- taskBarMainContainer$$1.style.left = (item.left - (width / 2)) + 'px';
18731
+ taskBarMainContainer$$1.style.setProperty(position, (item.left - (width / 2)) + 'px');
18071
18732
  leftLabelContainer$$1.style.width = (item.left - (width / 2)) + 'px';
18072
18733
  if (!isNullOrUndefined(rightLabelContainer$$1)) {
18073
- rightLabelContainer$$1.style.left = (item.left + (width / 2)) + 'px';
18734
+ rightLabelContainer$$1.style.setProperty(position, (item.left + (width / 2)) + 'px');
18074
18735
  }
18075
18736
  }
18076
18737
  else if (this.taskBarEditAction === 'ProgressResizing') {
18077
18738
  if (this.segmentIndex === -1) {
18078
- traceChildTaskBar$$1.style.left = (item.left + item.progressWidth - 10) + 'px';
18739
+ traceChildTaskBar$$1.style.setProperty(position, (item.left + item.progressWidth - 10) + 'px');
18079
18740
  if (!isNullOrUndefined(traceChildProgressBar$$1)) {
18080
18741
  traceChildProgressBar$$1.style.width = item.progressWidth + 'px';
18081
18742
  traceChildProgressBar$$1.style.borderBottomRightRadius = this.progressBorderRadius + 'px';
18082
18743
  traceChildProgressBar$$1.style.borderTopRightRadius = this.progressBorderRadius + 'px';
18083
- childProgressResizer$$1.style.left = item.progressWidth - 8 + 'px';
18744
+ const width = this.parent.enableRtl ? item.progressWidth + 8 : item.progressWidth - 8;
18745
+ childProgressResizer$$1.style.setProperty(position, width + 'px');
18084
18746
  }
18085
18747
  }
18086
18748
  else {
@@ -18088,16 +18750,17 @@ class TaskbarEdit extends DateProcessor {
18088
18750
  traceChildProgressBar$$1.style.width = item.segments[this.segmentIndex].progressWidth + 'px';
18089
18751
  traceChildProgressBar$$1.style.borderBottomRightRadius = this.progressBorderRadius + 'px';
18090
18752
  traceChildProgressBar$$1.style.borderTopRightRadius = this.progressBorderRadius + 'px';
18091
- childProgressResizer$$1.style.left = item.segments[this.segmentIndex].progressWidth - 8 + 'px';
18753
+ const width = this.parent.enableRtl ? item.segments[this.segmentIndex].progressWidth + 8 : item.segments[this.segmentIndex].progressWidth - 8;
18754
+ childProgressResizer$$1.style.setProperty(position, width + 'px');
18092
18755
  }
18093
18756
  }
18094
18757
  else if (this.taskBarEditAction === 'RightResizing' && !isNullOrUndefined(traceChildTaskBar$$1)) {
18095
18758
  traceChildTaskBar$$1.style.width = (width) + 'px';
18096
18759
  if (!isNullOrUndefined(traceChildProgressBar$$1)) {
18097
18760
  traceChildProgressBar$$1.style.width = (item.progressWidth) + 'px';
18098
- taskBarRightResizer$$1.style.left = rightResizer + 'px';
18761
+ taskBarRightResizer$$1.style.setProperty(position, rightResizer + 'px');
18099
18762
  if (!isNullOrUndefined(childProgressResizer$$1)) {
18100
- childProgressResizer$$1.style.left = (item.progressWidth - 10) + 'px';
18763
+ childProgressResizer$$1.style.setProperty(position, item.progressWidth - 10 + 'px');
18101
18764
  }
18102
18765
  }
18103
18766
  }
@@ -18111,27 +18774,27 @@ class TaskbarEdit extends DateProcessor {
18111
18774
  }
18112
18775
  else if (this.taskBarEditAction === 'ParentResizing') {
18113
18776
  manualParentTaskbar.style.width = manualTaskbar.style.width = (item.width) + 'px';
18114
- manualParentRight.style.left = (item.width - manualParentLeft.offsetLeft) + 'px';
18777
+ manualParentRight.style.setProperty(position, item.width - manualParentLeft.offsetLeft + 'px');
18115
18778
  }
18116
18779
  else if (this.taskBarEditAction === 'ManualParentDrag') {
18117
- manualParentTaskbar.style.left = (item.left - item.autoLeft) + 'px';
18780
+ manualParentTaskbar.style.setProperty(position, item.left - item.autoLeft + 'px');
18118
18781
  }
18119
18782
  else {
18120
18783
  if (!isNullOrUndefined(traceChildTaskBar$$1) && !segmentedTaskBarContainer) {
18121
18784
  traceChildTaskBar$$1.style.width = (width) + 'px';
18122
18785
  }
18123
18786
  if (!isNullOrUndefined(traceChildProgressBar$$1)) {
18124
- taskBarRightResizer$$1.style.left = rightResizer + 'px';
18787
+ taskBarRightResizer$$1.style.setProperty(position, rightResizer + 'px');
18125
18788
  traceChildProgressBar$$1.style.width = (item.progressWidth) + 'px';
18126
18789
  if (!isNullOrUndefined(childProgressResizer$$1)) {
18127
- childProgressResizer$$1.style.left = item.progressWidth - 10 + 'px';
18790
+ childProgressResizer$$1.style.setProperty(position, item.progressWidth - 10 + 'px');
18128
18791
  }
18129
18792
  }
18130
18793
  if (segmentedTaskBarContainer) {
18131
- taskBarRightResizer$$1.style.left = rightResizer + 'px';
18794
+ taskBarRightResizer$$1.style.setProperty(position, rightResizer + 'px');
18132
18795
  traceChildProgressBar$$1.style.width = (segment.progressWidth) + 'px';
18133
18796
  if (!isNullOrUndefined(childProgressResizer$$1)) {
18134
- childProgressResizer$$1.style.left = segment.progressWidth - 10 + 'px';
18797
+ childProgressResizer$$1.style.setProperty(position, segment.progressWidth - 10 + 'px');
18135
18798
  }
18136
18799
  }
18137
18800
  }
@@ -18353,25 +19016,51 @@ class TaskbarEdit extends DateProcessor {
18353
19016
  const y2 = this.mouseMoveY;
18354
19017
  const length = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
18355
19018
  const angle = Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;
18356
- const transform = 'rotate(' + angle + 'deg)';
19019
+ const transform = 'rotate(' + (this.parent.enableRtl ? -angle : angle) + 'deg)';
18357
19020
  let left;
19021
+ let width = 0;
19022
+ if (!isNullOrUndefined(document.querySelectorAll(".e-chart-row")[0])) {
19023
+ width = document.querySelectorAll(".e-chart-row")[0].offsetWidth;
19024
+ }
18358
19025
  if (this.taskBarEditAction === 'ConnectorPointLeftDrag') {
18359
- left = (this.elementOffsetLeft - (this.parent.chartRowsModule.connectorPointWidth / 2)) -
18360
- this.parent.ganttChartModule.scrollObject.previousScroll.left;
19026
+ if (this.parent.enableRtl) {
19027
+ left = ((width - (this.elementOffsetLeft + (this.parent.chartRowsModule.connectorPointWidth / 2)))) -
19028
+ Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left);
19029
+ }
19030
+ else {
19031
+ left = (this.elementOffsetLeft - (this.parent.chartRowsModule.connectorPointWidth / 2)) -
19032
+ this.parent.ganttChartModule.scrollObject.previousScroll.left;
19033
+ }
18361
19034
  }
18362
19035
  if (this.taskBarEditAction === 'ConnectorPointRightDrag') {
18363
- left = (this.elementOffsetLeft + this.elementOffsetWidth) +
18364
- (this.parent.chartRowsModule.connectorPointWidth / 2) - this.parent.ganttChartModule.scrollObject.previousScroll.left;
19036
+ if (this.parent.enableRtl) {
19037
+ left = (width - (this.elementOffsetLeft + this.elementOffsetWidth +
19038
+ (this.parent.chartRowsModule.connectorPointWidth / 2))) - Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left);
19039
+ }
19040
+ else {
19041
+ left = (this.elementOffsetLeft + this.elementOffsetWidth) +
19042
+ (this.parent.chartRowsModule.connectorPointWidth / 2) - Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left);
19043
+ }
18365
19044
  }
18366
19045
  const top = ((this.elementOffsetTop) + (this.elementOffsetHeight / 2) +
18367
19046
  this.parent.ganttChartModule.chartBodyContainer.offsetTop) - this.parent.ganttChartModule.scrollObject.previousScroll.top;
18368
19047
  this.removeFalseLine(false);
18369
19048
  this.falseLine = createElement('div', {
18370
19049
  className: falseLine, id: 'ganttfalseline' + this.parent.element.id,
18371
- styles: 'transform-origin: 0% 100%;right: auto;position: absolute;transform:' + transform + ';' +
19050
+ styles: 'position: absolute;transform:' + transform + ';' +
18372
19051
  'border-top-width: 1px;border-top-style: dashed;z-index: 5;width:' + (length - 3) + 'px;' +
18373
- 'left:' + left + 'px;top:' + top + 'px;'
19052
+ 'top:' + top + 'px;'
18374
19053
  });
19054
+ if (this.parent.enableRtl) {
19055
+ this.falseLine.style.left = 'auto';
19056
+ this.falseLine.style.right = left + 'px';
19057
+ this.falseLine.style.transformOrigin = '100% 0%';
19058
+ }
19059
+ else {
19060
+ this.falseLine.style.right = 'auto';
19061
+ this.falseLine.style.left = left + 'px';
19062
+ this.falseLine.style.transformOrigin = '0% 100%';
19063
+ }
18375
19064
  this.parent.ganttChartModule.chartBodyContainer.appendChild(this.falseLine);
18376
19065
  }
18377
19066
  /**
@@ -18456,19 +19145,19 @@ class TaskbarEdit extends DateProcessor {
18456
19145
  const element = target;
18457
19146
  const uniqueId = this.parent.viewType === 'ResourceView' ? fromItem.taskId : fromItem.rowUniqueID;
18458
19147
  if (this.taskBarEditAction === 'ConnectorPointLeftDrag') {
18459
- predecessor = uniqueId + 'S';
19148
+ predecessor = uniqueId + (this.parent.enableRtl ? 'F' : 'S');
18460
19149
  }
18461
19150
  else if (this.taskBarEditAction === 'ConnectorPointRightDrag') {
18462
- predecessor = uniqueId + 'F';
19151
+ predecessor = uniqueId + (this.parent.enableRtl ? 'S' : 'F');
18463
19152
  }
18464
19153
  if (this.connectorSecondAction) {
18465
19154
  if (this.connectorSecondAction === 'ConnectorPointLeftDrag') {
18466
- predecessor += 'S';
18467
- currentTarget = 'start';
19155
+ predecessor += this.parent.enableRtl ? 'F' : 'S';
19156
+ currentTarget = this.parent.enableRtl ? 'finish' : 'start';
18468
19157
  }
18469
19158
  else if (this.connectorSecondAction === 'ConnectorPointRightDrag') {
18470
- predecessor += 'F';
18471
- currentTarget = 'finish';
19159
+ predecessor += this.parent.enableRtl ? 'S' : 'F';
19160
+ currentTarget = this.parent.enableRtl ? 'start' : 'finish';
18472
19161
  }
18473
19162
  }
18474
19163
  if (isNullOrUndefined(toItem)) {
@@ -18492,6 +19181,12 @@ class TaskbarEdit extends DateProcessor {
18492
19181
  args.isValidLink = isValidLink;
18493
19182
  args.requestType = 'ValidateDependency';
18494
19183
  this.parent.trigger('actionBegin', args);
19184
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer" && args.requestType != "ValidateDependency") {
19185
+ this.parent.showMaskRow();
19186
+ }
19187
+ else if (args.requestType != "ValidateDependency") {
19188
+ this.parent.showSpinner();
19189
+ }
18495
19190
  args.isValidLink = !isValidLink && args.isValidLink ? false : args.isValidLink;
18496
19191
  if (args.isValidLink) {
18497
19192
  if (!this.editTooltip.toolTipObj && !this.parent.isAdaptive) {
@@ -18885,18 +19580,18 @@ class DialogEdit {
18885
19580
  if (!isNullOrUndefined(taskId)) {
18886
19581
  if (!isNullOrUndefined(taskId['ganttProperties'])) {
18887
19582
  if (typeof taskId['ganttProperties']['taskId'] === 'string') {
18888
- this.numericOrString = "stringedit";
19583
+ this.numericOrString = 'stringedit';
18889
19584
  }
18890
19585
  else {
18891
- this.numericOrString = "numericedit";
19586
+ this.numericOrString = 'numericedit';
18892
19587
  }
18893
19588
  }
18894
19589
  if (isNullOrUndefined(taskId['ganttProperties']) && !isNullOrUndefined(taskId)) {
18895
19590
  if (isNaN(Number(taskId)) || this.parent.columnByField[this.parent.taskFields.id].editType === "stringedit") {
18896
- this.numericOrString = "stringedit";
19591
+ this.numericOrString = 'stringedit';
18897
19592
  }
18898
19593
  else {
18899
- this.numericOrString = "numericedit";
19594
+ this.numericOrString = 'numericedit';
18900
19595
  }
18901
19596
  }
18902
19597
  }
@@ -18938,6 +19633,7 @@ class DialogEdit {
18938
19633
  dialogModel.animationSettings = { effect: 'None' };
18939
19634
  dialogModel.header = this.localeObj.getConstant(this.isEdit ? 'editDialogTitle' : 'addDialogTitle');
18940
19635
  dialogModel.isModal = true;
19636
+ dialogModel.enableRtl = this.parent.enableRtl;
18941
19637
  dialogModel.allowDragging = this.parent.isAdaptive ? false : true;
18942
19638
  dialogModel.showCloseIcon = true;
18943
19639
  const position = this.parent.isAdaptive ? { X: 'top', Y: 'left' } : { X: 'center', Y: 'center' };
@@ -18948,8 +19644,8 @@ class DialogEdit {
18948
19644
  dialogModel.close = this.dialogClose.bind(this);
18949
19645
  dialogModel.closeOnEscape = true;
18950
19646
  dialogModel.beforeClose = function (args) {
18951
- if (args.closedBy == "escape") {
18952
- if (args.event.name == "key-pressed" && args.event.target.nodeName == 'INPUT') {
19647
+ if (args.closedBy === "escape") {
19648
+ if (args.event.name === "key-pressed" && args.event.target.nodeName === 'INPUT') {
18953
19649
  args.cancel = true;
18954
19650
  }
18955
19651
  }
@@ -19119,6 +19815,7 @@ class DialogEdit {
19119
19815
  const length = dialogSettings.length;
19120
19816
  tabModel.items = tabItems;
19121
19817
  tabModel.locale = this.parent.locale;
19818
+ tabModel.enableRtl = this.parent.enableRtl;
19122
19819
  this.beforeOpenArgs.tabModel = tabModel;
19123
19820
  let index = 0;
19124
19821
  if (length > 0) {
@@ -19198,6 +19895,12 @@ class DialogEdit {
19198
19895
  cancel: this.beforeOpenArgs.cancel
19199
19896
  };
19200
19897
  this.parent.trigger('actionBegin', this.beforeOpenArgs, (arg) => {
19898
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
19899
+ this.parent.showMaskRow();
19900
+ }
19901
+ else {
19902
+ this.parent.showSpinner();
19903
+ }
19201
19904
  this.renderTabItems();
19202
19905
  if (!arg.cancel) {
19203
19906
  tabModel.selected = this.tabSelectedEvent.bind(this);
@@ -19220,6 +19923,12 @@ class DialogEdit {
19220
19923
  cancel: false
19221
19924
  };
19222
19925
  this.parent.trigger('actionComplete', actionCompleteArgs, (actionCompleteArg) => {
19926
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
19927
+ this.parent.hideMaskRow();
19928
+ }
19929
+ else {
19930
+ this.parent.hideSpinner();
19931
+ }
19223
19932
  if (actionCompleteArg.cancel) {
19224
19933
  this.resetValues();
19225
19934
  }
@@ -19302,7 +20011,8 @@ class DialogEdit {
19302
20011
  {
19303
20012
  const checkboxModel = {
19304
20013
  label: column.headerText,
19305
- locale: locale
20014
+ locale: locale,
20015
+ enableRtl: this.parent.enableRtl
19306
20016
  };
19307
20017
  fieldsModel[column.field] = checkboxModel;
19308
20018
  break;
@@ -19311,6 +20021,7 @@ class DialogEdit {
19311
20021
  case 'stringedit':
19312
20022
  {
19313
20023
  const textBox = common;
20024
+ textBox.enableRtl = this.parent.enableRtl;
19314
20025
  if (column.field === ganttObj.columnMapping.duration || column.field === ganttObj.columnMapping.id || column.field === ganttObj.columnMapping.startDate ||
19315
20026
  column.field === ganttObj.columnMapping.endDate) {
19316
20027
  textBox.change = (args) => {
@@ -19323,6 +20034,7 @@ class DialogEdit {
19323
20034
  case 'numericedit':
19324
20035
  {
19325
20036
  const numeric = common;
20037
+ numeric.enableRtl = this.parent.enableRtl;
19326
20038
  if (taskSettings.progress === column.field) {
19327
20039
  numeric.min = 0;
19328
20040
  numeric.max = 100;
@@ -19339,6 +20051,7 @@ class DialogEdit {
19339
20051
  {
19340
20052
  const datePickerObj = common;
19341
20053
  datePickerObj.format = this.parent.getDateFormat();
20054
+ datePickerObj.enableRtl = this.parent.enableRtl;
19342
20055
  datePickerObj.strictMode = true;
19343
20056
  datePickerObj.firstDayOfWeek = ganttObj.timelineModule.customTimelineSettings.weekStartDay;
19344
20057
  if (column.field === ganttObj.columnMapping.startDate ||
@@ -19355,6 +20068,7 @@ class DialogEdit {
19355
20068
  {
19356
20069
  const dateTimePickerObj = common;
19357
20070
  dateTimePickerObj.format = this.parent.getDateFormat();
20071
+ dateTimePickerObj.enableRtl = this.parent.enableRtl;
19358
20072
  dateTimePickerObj.strictMode = true;
19359
20073
  dateTimePickerObj.firstDayOfWeek = ganttObj.timelineModule.customTimelineSettings.weekStartDay;
19360
20074
  if (column.field === ganttObj.columnMapping.startDate ||
@@ -19377,6 +20091,7 @@ class DialogEdit {
19377
20091
  common[dataKey] = types;
19378
20092
  common[fieldsKey] = { value: 'Value' };
19379
20093
  const dropDownListObj = common;
20094
+ dropDownListObj.enableRtl = this.parent.enableRtl;
19380
20095
  dropDownListObj.change = (args) => {
19381
20096
  if (column.field === taskSettings.manual) {
19382
20097
  this.editedRecord.ganttProperties.isAutoSchedule = !args.value;
@@ -19748,8 +20463,8 @@ class DialogEdit {
19748
20463
  break;
19749
20464
  case 'duration':
19750
20465
  gridColumn = {
19751
- field: fields[i], headerText: this.localeObj.getConstant(fields[i]), editType: 'stringedit', width: '100px',
19752
- edit: {
20466
+ field: fields[i], headerText: this.localeObj.getConstant(fields[i]), editType: 'stringedit',
20467
+ width: '100px', edit: {
19753
20468
  write: (args) => {
19754
20469
  let inputTextModel;
19755
20470
  if (!isNullOrUndefined(this.beforeOpenArgs[generalTabString])) {
@@ -19810,7 +20525,7 @@ class DialogEdit {
19810
20525
  inputValue = dialog.querySelector('#' + ganttId + 'SegmentsTabContainer' + columnName)
19811
20526
  .ej2_instances[0];
19812
20527
  }
19813
- if (inputValue.value.toString() !== tempValue.toString()) {
20528
+ if ((!isNullOrUndefined(inputValue.value)) && (inputValue.value.toString() !== tempValue.toString())) {
19814
20529
  inputValue.value = tempValue;
19815
20530
  inputValue.dataBind();
19816
20531
  }
@@ -20144,7 +20859,7 @@ class DialogEdit {
20144
20859
  break;
20145
20860
  }
20146
20861
  }
20147
- if (typeof (stringOrNumber) === "string") {
20862
+ if (typeof (stringOrNumber) === 'string') {
20148
20863
  disabled = false;
20149
20864
  }
20150
20865
  else {
@@ -20159,7 +20874,7 @@ class DialogEdit {
20159
20874
  }
20160
20875
  if (this.editedRecord.hasChildRecords) {
20161
20876
  if ((column.field === this.parent.taskFields.endDate && ((!isNullOrUndefined(this.editedRecord['isManual']) &&
20162
- this.editedRecord['isManual'] == false) || this.parent.taskMode == 'Auto')) || column.field === this.parent.taskFields.duration ||
20877
+ this.editedRecord['isManual'] === false) || this.parent.taskMode === 'Auto')) || column.field === this.parent.taskFields.duration ||
20163
20878
  column.field === this.parent.taskFields.progress || column.field === this.parent.taskFields.work ||
20164
20879
  column.field === this.parent.taskFields.type) {
20165
20880
  disabled = true;
@@ -20214,6 +20929,7 @@ class DialogEdit {
20214
20929
  dataSource: new DataManager(this.idCollection),
20215
20930
  popupHeight: '180px',
20216
20931
  allowCustom: false,
20932
+ enableRtl: this.parent.enableRtl,
20217
20933
  fields: { value: 'text' },
20218
20934
  value: args.rowData[field],
20219
20935
  change: (arg) => {
@@ -20481,7 +21197,7 @@ class DialogEdit {
20481
21197
  do {
20482
21198
  if (currentFlatData.parentItem) {
20483
21199
  currentFlatData = this.parent.flatData[this.parent.ids.indexOf(currentFlatData.parentItem.taskId)];
20484
- if (currentFlatData.uniqueID == this.beforeOpenArgs.rowData['uniqueID']) {
21200
+ if (currentFlatData.uniqueID === this.beforeOpenArgs.rowData['uniqueID']) {
20485
21201
  this.isValidData = false;
20486
21202
  break;
20487
21203
  }
@@ -20733,7 +21449,9 @@ class DialogEdit {
20733
21449
  }
20734
21450
  }
20735
21451
  if (this.isEdit) {
20736
- this.updateScheduleProperties(this.editedRecord, this.rowData);
21452
+ if (!isCustom) {
21453
+ this.updateScheduleProperties(this.editedRecord, this.rowData);
21454
+ }
20737
21455
  ganttObj.editModule.validateUpdateValues(tasksData, this.rowData, true);
20738
21456
  }
20739
21457
  }
@@ -21388,6 +22106,7 @@ class ConnectorLineEdit {
21388
22106
  const validationDialog = new Dialog({
21389
22107
  header: 'Validate Editing',
21390
22108
  isModal: true,
22109
+ enableRtl: this.parent.enableRtl,
21391
22110
  visible: false,
21392
22111
  width: '50%',
21393
22112
  showCloseIcon: true,
@@ -21759,6 +22478,7 @@ class ConnectorLineEdit {
21759
22478
  this.confirmPredecessorDialog = new Dialog({
21760
22479
  width: '320px',
21761
22480
  isModal: true,
22481
+ enableRtl: this.parent.enableRtl,
21762
22482
  content: this.parent.localeObj.getConstant('confirmPredecessorDelete'),
21763
22483
  buttons: [
21764
22484
  {
@@ -21806,6 +22526,7 @@ class Edit$2 {
21806
22526
  this.taskbarMoved = false;
21807
22527
  this.predecessorUpdated = false;
21808
22528
  this.isBreakLoop = false;
22529
+ this.isResourceTaskDeleted = false;
21809
22530
  /**
21810
22531
  * @private
21811
22532
  */
@@ -21880,6 +22601,7 @@ class Edit$2 {
21880
22601
  const editParam = {
21881
22602
  min: 0,
21882
22603
  decimals: 0,
22604
+ enableRtl: this.parent.enableRtl,
21883
22605
  validateDecimalOnType: true,
21884
22606
  format: 'n0',
21885
22607
  showSpinButton: false
@@ -21895,6 +22617,7 @@ class Edit$2 {
21895
22617
  updateProgessColumnEditParams(column) {
21896
22618
  const editParam = {
21897
22619
  min: 0,
22620
+ enableRtl: this.parent.enableRtl,
21898
22621
  decimals: 0,
21899
22622
  validateDecimalOnType: true,
21900
22623
  max: 100,
@@ -21952,6 +22675,7 @@ class Edit$2 {
21952
22675
  editor = new MultiSelect({
21953
22676
  dataSource: new DataManager(this.parent.resources),
21954
22677
  fields: { text: resourceSettings.name, value: resourceSettings.id },
22678
+ enableRtl: this.parent.enableRtl,
21955
22679
  mode: 'CheckBox',
21956
22680
  showDropDownIcon: true,
21957
22681
  popupHeight: '350px',
@@ -22012,6 +22736,7 @@ class Edit$2 {
22012
22736
  this.parent.treeGridModule.currentEditRow = {};
22013
22737
  editor = new DropDownList({
22014
22738
  dataSource: new DataManager(types),
22739
+ enableRtl: this.parent.enableRtl,
22015
22740
  fields: { value: 'Value' },
22016
22741
  popupHeight: '350px',
22017
22742
  value: getValue('taskType', args.rowData.ganttProperties)
@@ -22896,7 +23621,6 @@ class Edit$2 {
22896
23621
  * @private
22897
23622
  */
22898
23623
  initiateSaveAction(args) {
22899
- this.parent.showSpinner();
22900
23624
  let eventArgs = {};
22901
23625
  eventArgs.requestType = 'beforeSave';
22902
23626
  eventArgs.data = args.data;
@@ -22910,6 +23634,12 @@ class Edit$2 {
22910
23634
  eventArgs.action = 'DrawConnectorLine';
22911
23635
  }
22912
23636
  this.parent.trigger('actionBegin', eventArgs, (eventArg) => {
23637
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
23638
+ this.parent.showMaskRow();
23639
+ }
23640
+ else {
23641
+ this.parent.showSpinner();
23642
+ }
22913
23643
  if (eventArg.cancel) {
22914
23644
  this.reUpdatePreviousRecords();
22915
23645
  this.parent.chartRowsModule.refreshRecords([args.data]);
@@ -22943,6 +23673,52 @@ class Edit$2 {
22943
23673
  });
22944
23674
  }
22945
23675
  dmSuccess(e, args) {
23676
+ let eLength = e['length'];
23677
+ for (let i = 0; i < eLength; i++) {
23678
+ let rec = e[i];
23679
+ let _aLength = Object.keys(rec).length;
23680
+ for (let j = 0, _a = Object.keys(rec); j < _aLength; j++) {
23681
+ let key = _a[j];
23682
+ this.parent.editedRecords[i][key] = rec[key];
23683
+ this.parent.editedRecords[i].taskData[key] = rec[key];
23684
+ }
23685
+ if (this.parent.taskFields.id !== null) {
23686
+ this.parent.editedRecords[i].ganttProperties["taskId"] = rec[this.parent.taskFields.id];
23687
+ }
23688
+ if (this.parent.taskFields.name !== null) {
23689
+ this.parent.editedRecords[i].ganttProperties["taskName"] = rec[this.parent.taskFields.name];
23690
+ }
23691
+ if (this.parent.taskFields.startDate !== null) {
23692
+ this.parent.editedRecords[i].ganttProperties["startDate"] = rec[this.parent.taskFields.startDate];
23693
+ }
23694
+ if (this.parent.taskFields.endDate !== null) {
23695
+ this.parent.editedRecords[i].ganttProperties["endDate"] = rec[this.parent.taskFields.endDate];
23696
+ }
23697
+ if (this.parent.taskFields.duration !== null) {
23698
+ this.parent.editedRecords[i].ganttProperties["duration"] = parseInt(rec[this.parent.taskFields.duration]);
23699
+ }
23700
+ if (this.parent.taskFields.durationUnit !== null) {
23701
+ this.parent.editedRecords[i].ganttProperties["durationUnit"] = rec[this.parent.taskFields.durationUnit];
23702
+ }
23703
+ if (this.parent.taskFields.progress !== null) {
23704
+ this.parent.editedRecords[i].ganttProperties["progress"] = rec[this.parent.taskFields.progress];
23705
+ }
23706
+ if (this.parent.taskFields.dependency !== null) {
23707
+ this.parent.editedRecords[i].ganttProperties["dependency"] = rec[this.parent.taskFields.dependency];
23708
+ }
23709
+ if (this.parent.taskFields.parentID !== null) {
23710
+ this.parent.editedRecords[i].ganttProperties["parentID"] = rec[this.parent.taskFields.parentID];
23711
+ }
23712
+ if (this.parent.taskFields.baselineEndDate !== null) {
23713
+ this.parent.editedRecords[i].ganttProperties["baselineEndDate"] = rec[this.parent.taskFields.baselineEndDate];
23714
+ }
23715
+ if (this.parent.taskFields.baselineStartDate !== null) {
23716
+ this.parent.editedRecords[i].ganttProperties["baselineStartDate"] = rec[this.parent.taskFields.baselineStartDate];
23717
+ }
23718
+ if (this.parent.taskFields.resourceInfo !== null) {
23719
+ this.parent.editedRecords[i].ganttProperties["resources"] = rec[this.parent.taskFields.resourceInfo];
23720
+ }
23721
+ }
22946
23722
  this.saveSuccess(args);
22947
23723
  }
22948
23724
  dmFailure(e, args) {
@@ -22961,7 +23737,7 @@ class Edit$2 {
22961
23737
  const ids = data.ganttProperties.sharedTaskUniqueIds;
22962
23738
  for (let i = 0; i < ids.length; i++) {
22963
23739
  const editRecord = this.parent.flatData[this.parent.ids.indexOf(ids[i].toString())];
22964
- if (editRecord.uniqueID !== data.uniqueID) {
23740
+ if (editRecord && editRecord.uniqueID !== data.uniqueID) {
22965
23741
  this.updateGanttProperties(data, editRecord);
22966
23742
  this.parent.setRecordValue('taskData', data.taskData, editRecord, true);
22967
23743
  this.parent.dataOperation.updateTaskData(editRecord);
@@ -23035,6 +23811,12 @@ class Edit$2 {
23035
23811
  criticalModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);
23036
23812
  }
23037
23813
  this.parent.trigger('actionComplete', eventArgs);
23814
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
23815
+ this.parent.hideMaskRow();
23816
+ }
23817
+ else {
23818
+ this.parent.hideSpinner();
23819
+ }
23038
23820
  }
23039
23821
  else {
23040
23822
  this.taskbarEditModule.dependencyCancel = false;
@@ -23056,12 +23838,12 @@ class Edit$2 {
23056
23838
  for (let index = 0; index < currentLength; index++) {
23057
23839
  const recordIndex = [];
23058
23840
  let resourceID = parseInt(currentResource[index][this.parent.resourceFields.id], 10).toString();
23059
- if (resourceID === "NaN") {
23841
+ if (resourceID === 'NaN') {
23060
23842
  resourceID = currentResource[index][this.parent.resourceFields.id];
23061
23843
  }
23062
23844
  for (let i = 0; i < prevResource.length; i++) {
23063
23845
  let prevResourceID = parseInt(prevResource[i][this.parent.resourceFields.id], 10).toString();
23064
- if (prevResourceID === "NaN") {
23846
+ if (prevResourceID === 'NaN') {
23065
23847
  prevResourceID = prevResource[i][this.parent.resourceFields.id];
23066
23848
  }
23067
23849
  if (prevResourceID === resourceID) {
@@ -23122,12 +23904,6 @@ class Edit$2 {
23122
23904
  }
23123
23905
  if (!isNullOrUndefined(unassignedTasks)) {
23124
23906
  this.addNewRecord(updateRecord, unassignedTasks);
23125
- const updatedData = this.parent.currentViewData.filter((data) => {
23126
- return (data.ganttProperties.taskId === updateRecord.ganttProperties.taskId &&
23127
- (data.hasChildRecords === updateRecord.hasChildRecords));
23128
- })[0];
23129
- updateRecord.parentItem = updatedData.parentItem;
23130
- updateRecord.parentUniqueID = updatedData.parentUniqueID;
23131
23907
  }
23132
23908
  else {
23133
23909
  // Block for create the unassigned task.
@@ -23142,6 +23918,12 @@ class Edit$2 {
23142
23918
  const parentRecord = this.parent.flatData[this.parent.flatData.length - 1];
23143
23919
  this.addNewRecord(updateRecord, parentRecord);
23144
23920
  }
23921
+ const updatedData = this.parent.currentViewData.filter((data) => {
23922
+ return (data.ganttProperties.taskId === updateRecord.ganttProperties.taskId &&
23923
+ (data.hasChildRecords === updateRecord.hasChildRecords));
23924
+ })[0];
23925
+ updateRecord.parentItem = updatedData.parentItem;
23926
+ updateRecord.parentUniqueID = updatedData.parentUniqueID;
23145
23927
  }
23146
23928
  addRecordAsBottom(cAddedRecord) {
23147
23929
  const recordIndex1 = this.parent.flatData.length;
@@ -23348,6 +24130,7 @@ class Edit$2 {
23348
24130
  width: '320px',
23349
24131
  isModal: true,
23350
24132
  visible: false,
24133
+ enableRtl: this.parent.enableRtl,
23351
24134
  content: this.parent.localeObj.getConstant('confirmDelete'),
23352
24135
  buttons: [
23353
24136
  {
@@ -23400,15 +24183,17 @@ class Edit$2 {
23400
24183
  const deleteRecords = [];
23401
24184
  for (let i = 0; i < selectedRecords.length; i++) {
23402
24185
  if (selectedRecords[i].parentItem) {
23403
- const data = selectedRecords[i];
23404
- const ids = data.ganttProperties.sharedTaskUniqueIds;
23405
- for (let j = 0; j < ids.length; j++) {
23406
- if (this.parent.ids.indexOf(ids[j].toString()) !== -1) {
23407
- deleteRecords.push(this.parent.flatData[this.parent.ids.indexOf(ids[j].toString())]);
24186
+ if (selectedRecords[i].ganttProperties.sharedTaskUniqueIds.length === 1) {
24187
+ const data = selectedRecords[i];
24188
+ const ids = data.ganttProperties.sharedTaskUniqueIds;
24189
+ for (let j = 0; j < ids.length; j++) {
24190
+ if (this.parent.ids.indexOf(ids[j].toString()) !== -1) {
24191
+ deleteRecords.push(this.parent.flatData[this.parent.ids.indexOf(ids[j].toString())]);
24192
+ }
24193
+ }
24194
+ if (this.parent.ids.indexOf(data.ganttProperties.rowUniqueID) !== -1) {
24195
+ deleteRecords.push(this.parent.flatData[this.parent.ids.indexOf(data.ganttProperties.rowUniqueID)]);
23408
24196
  }
23409
- }
23410
- if (this.parent.ids.indexOf(data.ganttProperties.rowUniqueID) !== -1) {
23411
- deleteRecords.push(this.parent.flatData[this.parent.ids.indexOf(data.ganttProperties.rowUniqueID)]);
23412
24197
  }
23413
24198
  }
23414
24199
  else {
@@ -23534,8 +24319,9 @@ class Edit$2 {
23534
24319
  if (this.deletedTaskDetails.indexOf(deleteRecord) !== -1) {
23535
24320
  continue;
23536
24321
  }
24322
+ const parentTask = this.parent.getParentTask(deleteRecord.parentItem);
23537
24323
  if (deleteRecord.parentItem) {
23538
- const childRecord = this.parent.getParentTask(deleteRecord.parentItem).childRecords;
24324
+ const childRecord = parentTask.childRecords;
23539
24325
  const filteredRecord = childRecord.length === 1 ?
23540
24326
  childRecord : childRecord.filter((data) => {
23541
24327
  return !data.isDelete;
@@ -23545,7 +24331,12 @@ class Edit$2 {
23545
24331
  }
23546
24332
  }
23547
24333
  const predecessor = deleteRecord.ganttProperties.predecessor;
23548
- if (predecessor && predecessor.length) {
24334
+ let canDeletePredecessor = true;
24335
+ if (this.parent.viewType === 'ResourceView' && parentTask && parentTask.ganttProperties.taskName !==
24336
+ this.parent.localeObj.getConstant('unassignedTask')) {
24337
+ canDeletePredecessor = false;
24338
+ }
24339
+ if (predecessor && predecessor.length && canDeletePredecessor) {
23549
24340
  this.removePredecessorOnDelete(deleteRecord);
23550
24341
  }
23551
24342
  this.deletedTaskDetails.push(deleteRecord);
@@ -23694,7 +24485,13 @@ class Edit$2 {
23694
24485
  continue;
23695
24486
  }
23696
24487
  const predecessor = childRecord.ganttProperties.predecessor;
23697
- if (predecessor && predecessor.length) {
24488
+ let canDeletePredecessor = true;
24489
+ const parentTask = this.parent.getParentTask(childRecord.parentItem);
24490
+ if (this.parent.viewType === 'ResourceView' && parentTask && parentTask.ganttProperties.taskName !==
24491
+ this.parent.localeObj.getConstant('unassignedTask')) {
24492
+ canDeletePredecessor = false;
24493
+ }
24494
+ if (predecessor && predecessor.length && canDeletePredecessor) {
23698
24495
  this.removePredecessorOnDelete(childRecord);
23699
24496
  }
23700
24497
  this.deletedTaskDetails.push(childRecord);
@@ -23745,6 +24542,12 @@ class Edit$2 {
23745
24542
  eventArgs.modifiedRecords = args.updatedRecordCollection;
23746
24543
  eventArgs.modifiedTaskData = getTaskData(args.updatedRecordCollection, null, null, this.parent);
23747
24544
  this.parent.trigger('actionBegin', eventArgs, (eventArg) => {
24545
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
24546
+ this.parent.showMaskRow();
24547
+ }
24548
+ else {
24549
+ this.parent.showSpinner();
24550
+ }
23748
24551
  if (eventArg.cancel) {
23749
24552
  const deleteRecords = this.deletedTaskDetails;
23750
24553
  for (let d = 0; d < deleteRecords.length; d++) {
@@ -23823,6 +24626,14 @@ class Edit$2 {
23823
24626
  this.parent.ids.splice(flatIndex, 1);
23824
24627
  if (this.parent.viewType === 'ResourceView') {
23825
24628
  this.parent.getTaskIds().splice(flatIndex, 1);
24629
+ this.isResourceTaskDeleted = true;
24630
+ if (!deleteRecord.hasChildRecords) {
24631
+ deleteRecord.ganttProperties.resourceInfo = null;
24632
+ delete deleteRecord.ganttProperties.resourceNames;
24633
+ deleteRecord[this.parent.taskFields.resourceInfo] = null;
24634
+ deleteRecord.ganttProperties.sharedTaskUniqueIds = [];
24635
+ delete deleteRecord.taskData[this.parent.taskFields.resourceInfo];
24636
+ }
23826
24637
  }
23827
24638
  }
23828
24639
  if (deleteRecord.level === 0 && treeGridParentIndex !== -1) {
@@ -23871,9 +24682,12 @@ class Edit$2 {
23871
24682
  const unassignedTask = this.parent.flatData.filter((data) => {
23872
24683
  return data.ganttProperties.taskName === this.parent.localeObj.getConstant('unassignedTask');
23873
24684
  })[0];
23874
- const isDuplicate = unassignedTask.childRecords.filter((data) => {
23875
- return data.ganttProperties.taskId === updateUnAssignedResources[i].ganttProperties.taskId;
23876
- });
24685
+ let isDuplicate = [];
24686
+ if (unassignedTask) {
24687
+ isDuplicate = unassignedTask.childRecords.filter((data) => {
24688
+ return data.ganttProperties.taskId === updateUnAssignedResources[i].ganttProperties.taskId;
24689
+ });
24690
+ }
23877
24691
  const parentTask = this.parent.getParentTask(updateUnAssignedResources[i].parentItem);
23878
24692
  if (parentTask && parentTask.ganttProperties.taskName !==
23879
24693
  this.parent.localeObj.getConstant('unassignedTask') && isDuplicate.length === 0) {
@@ -23882,9 +24696,9 @@ class Edit$2 {
23882
24696
  this.parent.dataOperation.updateParentItems(updateUnAssignedResources[i].parentItem);
23883
24697
  }
23884
24698
  }
23885
- else if (!parentTask && isDuplicate.length === 0) {
24699
+ else if (!parentTask && (!isDuplicate || isDuplicate.length === 0)) {
23886
24700
  this.checkWithUnassignedTask(updateUnAssignedResources[i]);
23887
- if (updateUnAssignedResources[i].parentItem) {
24701
+ if (updateUnAssignedResources[i].parentItem && unassignedTask) {
23888
24702
  this.parent.dataOperation.updateParentItems(updateUnAssignedResources[i].parentItem);
23889
24703
  }
23890
24704
  }
@@ -23893,7 +24707,12 @@ class Edit$2 {
23893
24707
  this.parent.trigger('actionComplete', eventArgs);
23894
24708
  this.deletedTaskDetails = [];
23895
24709
  this.parent.initiateEditAction(false);
23896
- this.parent.hideSpinner();
24710
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
24711
+ this.parent.hideMaskRow();
24712
+ }
24713
+ else {
24714
+ this.parent.hideSpinner();
24715
+ }
23897
24716
  }
23898
24717
  /**
23899
24718
  *
@@ -24347,9 +25166,9 @@ class Edit$2 {
24347
25166
  for (let i = 0; i < this.parent.modifiedRecords.length; i++) {
24348
25167
  const originalData = this.parent.modifiedRecords[i];
24349
25168
  let treeIndex = this.parent.allowRowDragAndDrop ? 1 : 0;
24350
- let uniqueTaskID = this.parent.taskFields.id;
24351
- var originalIndex = this.parent.currentViewData.findIndex((data) => {
24352
- return (data[uniqueTaskID] == originalData[uniqueTaskID]);
25169
+ const uniqueTaskID = this.parent.taskFields.id;
25170
+ let originalIndex = this.parent.currentViewData.findIndex((data) => {
25171
+ return (data[uniqueTaskID] === originalData[uniqueTaskID]);
24353
25172
  });
24354
25173
  if (this.parent.treeGrid.getRows()[originalIndex]) {
24355
25174
  this.parent.treeGrid.renderModule.cellRender({
@@ -24469,8 +25288,13 @@ class Edit$2 {
24469
25288
  }
24470
25289
  let args = {};
24471
25290
  args = this.constructTaskAddedEventArgs(cAddedRecord, this.parent.editedRecords, 'beforeAdd');
24472
- this.parent.showSpinner();
24473
25291
  this.parent.trigger('actionBegin', args, (args) => {
25292
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
25293
+ this.parent.showMaskRow();
25294
+ }
25295
+ else {
25296
+ this.parent.showSpinner();
25297
+ }
24474
25298
  if (!isNullOrUndefined(args.data[tempTaskID])) {
24475
25299
  if (args.data[tempTaskID] != args.data['ganttProperties']['taskId']) {
24476
25300
  args.data['ganttProperties']['taskId'] = args.data[tempTaskID];
@@ -24674,7 +25498,7 @@ class Edit$2 {
24674
25498
  switch (rowPosition) {
24675
25499
  case 'Top':
24676
25500
  case 'Bottom':
24677
- if (this.parent.viewType === "ResourceView") {
25501
+ if (this.parent.viewType === 'ResourceView') {
24678
25502
  level = 1;
24679
25503
  }
24680
25504
  else {
@@ -24757,6 +25581,12 @@ class Edit$2 {
24757
25581
  this.parent.dataOperation.updateWorkWithDuration(cAddedRecord[0]);
24758
25582
  }
24759
25583
  this.parent.trigger('actionComplete', args);
25584
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
25585
+ this.parent.hideMaskRow();
25586
+ }
25587
+ else {
25588
+ this.parent.hideSpinner();
25589
+ }
24760
25590
  if (this.dialogModule.dialog && !this.dialogModule.dialogObj.isDestroyed) {
24761
25591
  this.dialogModule.dialogObj.hide();
24762
25592
  }
@@ -24915,6 +25745,12 @@ class Edit$2 {
24915
25745
  cancel: false
24916
25746
  };
24917
25747
  this.parent.trigger('actionBegin', actionArgs, (actionArg) => {
25748
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
25749
+ this.parent.showMaskRow();
25750
+ }
25751
+ else {
25752
+ this.parent.showSpinner();
25753
+ }
24918
25754
  if (!actionArg.cancel) {
24919
25755
  this.reArrangeRows(args, isByMethod);
24920
25756
  }
@@ -25086,6 +25922,12 @@ class Edit$2 {
25086
25922
  }
25087
25923
  }
25088
25924
  this.parent.trigger('actionComplete', args);
25925
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
25926
+ this.parent.hideMaskRow();
25927
+ }
25928
+ else {
25929
+ this.parent.hideSpinner();
25930
+ }
25089
25931
  this.parent.editedRecords = [];
25090
25932
  }
25091
25933
  refreshDataSource() {
@@ -25597,6 +26439,7 @@ class Filter$1 {
25597
26439
  const flValInput = createElement('input', { className: 'flm-input' });
25598
26440
  args.target.appendChild(flValInput);
25599
26441
  dropDateInstance = new DatePicker({ placeholder: this.parent.localeObj.getConstant('enterValue'), format: format });
26442
+ dropDateInstance.enableRtl = this.parent.enableRtl;
25600
26443
  dropDateInstance.appendTo(flValInput);
25601
26444
  },
25602
26445
  write: (args) => {
@@ -25619,6 +26462,7 @@ class Filter$1 {
25619
26462
  const flValInput = createElement('input', { className: 'flm-input' });
25620
26463
  args.target.appendChild(flValInput);
25621
26464
  dropInstance = new DateTimePicker({ placeholder: this.parent.localeObj.getConstant('enterValue'), format: format });
26465
+ dropInstance.enableRtl = this.parent.enableRtl;
25622
26466
  dropInstance.appendTo(flValInput);
25623
26467
  },
25624
26468
  write: (args) => {
@@ -25640,6 +26484,7 @@ class Filter$1 {
25640
26484
  flValInput.setAttribute('placeholder', this.parent.localeObj.getConstant('enterValue'));
25641
26485
  args.target.appendChild(flValInput);
25642
26486
  textBoxInstance = new TextBox();
26487
+ textBoxInstance.enableRtl = this.parent.enableRtl;
25643
26488
  textBoxInstance.appendTo(flValInput);
25644
26489
  },
25645
26490
  write: (args) => {
@@ -26428,6 +27273,14 @@ class Toolbar$3 {
26428
27273
  this.parent.localeObj.getConstant('tasks') : ''),
26429
27274
  align: this.parent.isAdaptive ? 'Right' : 'Left'
26430
27275
  };
27276
+ if (this.parent.enableRtl) {
27277
+ if (item === 'PrevTimeSpan') {
27278
+ this.predefinedItems[item].prefixIcon = 'e-nexttimespan';
27279
+ }
27280
+ if (item === 'NextTimeSpan') {
27281
+ this.predefinedItems[item].prefixIcon = 'e-prevtimespan';
27282
+ }
27283
+ }
26431
27284
  }
26432
27285
  const searchLocalText = this.parent.localeObj.getConstant('search');
26433
27286
  if (this.parent.isAdaptive) {
@@ -26459,6 +27312,7 @@ class Toolbar$3 {
26459
27312
  const items = this.getItems();
26460
27313
  this.toolbar = new Toolbar$1({
26461
27314
  items: items,
27315
+ enableRtl: this.parent.enableRtl,
26462
27316
  clicked: this.toolbarClickHandler.bind(this),
26463
27317
  height: this.parent.isAdaptive ? 48 : 'auto'
26464
27318
  });
@@ -26477,6 +27331,7 @@ class Toolbar$3 {
26477
27331
  this.searchElement = this.element.querySelector('#' + this.parent.element.id + '_searchbar');
26478
27332
  const textObj = new TextBox({
26479
27333
  placeholder: this.parent.localeObj.getConstant('search'),
27334
+ enableRtl: this.parent.enableRtl,
26480
27335
  floatLabelType: 'Never',
26481
27336
  showClearButton: true
26482
27337
  });
@@ -26592,7 +27447,16 @@ class Toolbar$3 {
26592
27447
  toolbarClickHandler(arg) {
26593
27448
  const gObj = this.parent;
26594
27449
  const gID = this.id;
27450
+ this.parent.isToolBarClick = false;
26595
27451
  extend(arg, { cancel: false });
27452
+ if (arg.item['properties'].id === this.parent.element.id + "_pdfexport" || arg.item['properties'].id === this.parent.element.id + "_critical-path") {
27453
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
27454
+ this.parent.showMaskRow();
27455
+ }
27456
+ else {
27457
+ this.parent.showSpinner();
27458
+ }
27459
+ }
26596
27460
  gObj.trigger(toolbarClick, arg, (args) => {
26597
27461
  if (args.cancel) {
26598
27462
  return;
@@ -26794,7 +27658,8 @@ class Toolbar$3 {
26794
27658
  else {
26795
27659
  disableItems.push(gID + '_update', gID + '_cancel');
26796
27660
  for (let t = 0; t < toolbarItems.length; t++) {
26797
- if (enableItems.indexOf(toolbarItems[t].id) === -1 && disableItems.indexOf(toolbarItems[t].id) === -1) {
27661
+ if (enableItems.indexOf(toolbarItems[t].id) === -1 &&
27662
+ disableItems.indexOf(toolbarItems[t].id) === -1) {
26798
27663
  enableItems.push(toolbarItems[t].id);
26799
27664
  }
26800
27665
  }
@@ -26949,8 +27814,9 @@ class NonWorkingDay {
26949
27814
  const width = (this.parent.holidays[i].from && this.parent.holidays[i].to) ?
26950
27815
  this.parent.dataOperation.getTaskWidth(fromDate, toDate) : this.parent.perDayWidth;
26951
27816
  const left = this.parent.dataOperation.getTaskLeft(fromDate, false);
27817
+ const align = this.parent.enableRtl ? `right:${left}px;` : `left:${left}px;`;
26952
27818
  const holidayDiv = createElement('div', {
26953
- className: holidayElement, styles: `left:${left}px; width:${width}px; height:100%;`
27819
+ className: holidayElement, styles: `${align} width:${width}px; height:100%;`
26954
27820
  });
26955
27821
  const spanTop = (viewportHeight < height) ? viewportHeight / 2 : height / 2;
26956
27822
  const spanElement = createElement('span', {
@@ -27019,8 +27885,9 @@ class NonWorkingDay {
27019
27885
  this.weekendWidthUpdated = true;
27020
27886
  }
27021
27887
  }
27888
+ const align = this.parent.enableRtl ? `right:${left}px;` : `left:${left}px;`;
27022
27889
  const weekendDiv = createElement('div', {
27023
- className: weekend, styles: `left:${left}px;width:${width}px;height:100%;`
27890
+ className: weekend, styles: `${align} width:${width}px;height:100%;`
27024
27891
  });
27025
27892
  container.appendChild(weekendDiv);
27026
27893
  }
@@ -27092,7 +27959,7 @@ class EventMarker$1 {
27092
27959
  this.eventMarkersContainer = createElement('div', {
27093
27960
  className: eventMarkersContainer
27094
27961
  });
27095
- this.eventMarkersContainer.setAttribute("role", "term");
27962
+ this.eventMarkersContainer.setAttribute('role', 'term');
27096
27963
  this.parent.ganttChartModule.chartBodyContent.appendChild(this.eventMarkersContainer);
27097
27964
  }
27098
27965
  this.eventMarkersContainer.innerHTML = '';
@@ -27125,8 +27992,15 @@ class EventMarker$1 {
27125
27992
  let rightArrow;
27126
27993
  for (let i = 0; i < this.parent.eventMarkers.length; i++) {
27127
27994
  left = this.parent.dataOperation.getTaskLeft(this.parent.dateValidationModule.getDateFromFormat(this.parent.eventMarkers[i].day, true), false);
27995
+ let align;
27996
+ if (this.parent.enableRtl) {
27997
+ align = `right:${left}px;`;
27998
+ }
27999
+ else {
28000
+ align = `left:${left}px;`;
28001
+ }
27128
28002
  eventMarkerElement = createElement('div', {
27129
- className: eventMarkersChild, styles: `left:${left}px; height:100%;`,
28003
+ className: eventMarkersChild, styles: `${align} height:100%;`,
27130
28004
  id: 'stripline' + i
27131
28005
  });
27132
28006
  if (this.parent.eventMarkers[i].label) {
@@ -27135,6 +28009,12 @@ class EventMarker$1 {
27135
28009
  });
27136
28010
  const property = this.parent.disableHtmlEncode ? 'textContent' : 'innerHTML';
27137
28011
  spanElement[property] = this.parent.eventMarkers[i].label;
28012
+ if (this.parent.enableRtl) {
28013
+ spanElement.style.right = '5px';
28014
+ }
28015
+ else {
28016
+ spanElement.style.left = '5px';
28017
+ }
27138
28018
  eventMarkerElement.appendChild(spanElement);
27139
28019
  rightArrow = createElement('div', {
27140
28020
  className: 'e-gantt-right-arrow'
@@ -27311,8 +28191,8 @@ class CriticalPath {
27311
28191
  predecessorIndex = modelIds.indexOf(checkBeyondEnddate[k].toString());
27312
28192
  }
27313
28193
  else {
27314
- let currentRecords = this.parent.currentViewData.filter((data) => {
27315
- return parseInt(data.ganttProperties.taskId) == checkBeyondEnddate[k];
28194
+ const currentRecords = this.parent.currentViewData.filter((data) => {
28195
+ return parseInt(data.ganttProperties.taskId) === checkBeyondEnddate[k];
27316
28196
  });
27317
28197
  for (let i = 0; i < currentRecords.length; i++) {
27318
28198
  if (!currentRecords[i].hasChildRecords && currentRecords[i].ganttProperties.endDate >= this.maxEndDate) {
@@ -27345,10 +28225,10 @@ class CriticalPath {
27345
28225
  const individualPredecessorLength = totalPredecessorsCollection[x].ganttProperties.predecessor.length;
27346
28226
  const taskid = ((totalPredecessorsCollection[x].ganttProperties.taskId));
27347
28227
  for (let y = 0; y < individualPredecessorLength; y++) {
27348
- if (!isNaN(Number(predecessor[y].from)) && typeof (taskid) != "string") {
28228
+ if (!isNaN(Number(predecessor[y].from)) && typeof (taskid) != 'string') {
27349
28229
  tempTaskId = parseInt((predecessor[y].from), 10);
27350
28230
  }
27351
- else if (!isNaN(Number(predecessor[y].from)) && typeof (taskid) === "string") {
28231
+ else if (!isNaN(Number(predecessor[y].from)) && typeof (taskid) === 'string') {
27352
28232
  tempTaskId = predecessor[y].from;
27353
28233
  }
27354
28234
  else {
@@ -27371,15 +28251,16 @@ class CriticalPath {
27371
28251
  toPredecessor = toPredecessor + ',' + predecessor[y].type;
27372
28252
  }
27373
28253
  else {
27374
- to = to + ',' + predecessor[y].to + ':' + predecessor[y].offset + predecessor[y].offsetUnit;
28254
+ to = to + ',' + predecessor[y].to + ':' + predecessor[y].offset +
28255
+ predecessor[y].offsetUnit;
27375
28256
  toPredecessor = toPredecessor + ',' + predecessor[y].type;
27376
28257
  }
27377
28258
  }
27378
28259
  }
27379
- if (!isNaN(Number(predecessor[y].to)) && typeof (taskid) != "string") {
28260
+ if (!isNaN(Number(predecessor[y].to)) && typeof (taskid) != 'string') {
27380
28261
  tempTaskId = parseInt((predecessor[y].to), 10);
27381
28262
  }
27382
- else if (!isNaN(Number(predecessor[y].to)) && typeof (taskid) === "string") {
28263
+ else if (!isNaN(Number(predecessor[y].to)) && typeof (taskid) === 'string') {
27383
28264
  tempTaskId = predecessor[y].to;
27384
28265
  }
27385
28266
  else {
@@ -27392,7 +28273,8 @@ class CriticalPath {
27392
28273
  fromPredecessor = predecessor[y].type;
27393
28274
  }
27394
28275
  else {
27395
- from = predecessor[y].from + ':' + predecessor[y].offset + predecessor[y].offsetUnit;
28276
+ from = predecessor[y].from + ':' + predecessor[y].offset +
28277
+ predecessor[y].offsetUnit;
27396
28278
  fromPredecessor = predecessor[y].type;
27397
28279
  }
27398
28280
  }
@@ -27402,7 +28284,8 @@ class CriticalPath {
27402
28284
  fromPredecessor = fromPredecessor + ',' + predecessor[y].type;
27403
28285
  }
27404
28286
  else {
27405
- from = from + ',' + predecessor[y].from + ':' + predecessor[y].offset + predecessor[y].offsetUnit;
28287
+ from = from + ',' + predecessor[y].from + ':' + predecessor[y].offset +
28288
+ predecessor[y].offsetUnit;
27406
28289
  fromPredecessor = fromPredecessor + ',' + predecessor[y].type;
27407
28290
  }
27408
28291
  }
@@ -27529,7 +28412,8 @@ class CriticalPath {
27529
28412
  }
27530
28413
  }
27531
28414
  // execute if the current calculated slack value is less than the previous slack value.
27532
- else if (collection[fromTaskIdIndex]['slack'] > dateDifference && collection[fromTaskIdIndex]['slack'] !== 0) {
28415
+ else if (collection[fromTaskIdIndex]['slack'] > dateDifference &&
28416
+ collection[fromTaskIdIndex]['slack'] !== 0) {
27533
28417
  // execute if the offset value is not given.
27534
28418
  if (fromDateArray1.length <= 1) {
27535
28419
  if (collection[totaskId]['slack'] + dateDifference < 0) {
@@ -27579,7 +28463,8 @@ class CriticalPath {
27579
28463
  }
27580
28464
  }
27581
28465
  //It execute while already the slack value is set and it is higher than the datedifference.
27582
- else if (collection[fromTaskIdIndex]['slack'] > dateDifference && collection[fromTaskIdIndex]['slack'] !== 0) {
28466
+ else if (collection[fromTaskIdIndex]['slack'] > dateDifference &&
28467
+ collection[fromTaskIdIndex]['slack'] !== 0) {
27583
28468
  if (fromDateArray1.length <= 1) {
27584
28469
  if (collection[totaskId]['slack'] + dateDifference < 0) {
27585
28470
  collection[fromTaskIdIndex]['slack'] = 0;
@@ -27607,7 +28492,8 @@ class CriticalPath {
27607
28492
  if (isNullOrUndefined(collection[fromTaskIdIndex]['slack'])) {
27608
28493
  collection[fromTaskIdIndex]['slack'] = dateDifference;
27609
28494
  }
27610
- else if (collection[fromTaskIdIndex]['slack'] > dateDifference && collection[fromTaskIdIndex]['slack'] !== 0) {
28495
+ else if (collection[fromTaskIdIndex]['slack'] > dateDifference &&
28496
+ collection[fromTaskIdIndex]['slack'] !== 0) {
27611
28497
  collection[fromTaskIdIndex]['slack'] = dateDifference;
27612
28498
  }
27613
28499
  }
@@ -27618,7 +28504,8 @@ class CriticalPath {
27618
28504
  // calculate slack value for the task contains predecessor connection in "finish to finish".
27619
28505
  if (fromDataPredecessor[i] === 'FF') {
27620
28506
  // execute if the previous task is from finish to start or finish to finish state.
27621
- if (collection[totaskId]['fs'] === 1 || collection[totaskId]['ff'] === 1 || collection[totaskId]['fs'] === -1) {
28507
+ if (collection[totaskId]['fs'] === 1 || collection[totaskId]['ff'] === 1 ||
28508
+ collection[totaskId]['fs'] === -1) {
27622
28509
  if (collection[totaskId]['fs'] === 1 || collection[totaskId]['ff'] === 1) {
27623
28510
  prevTaskEnddate = toIdFlatData.endDate;
27624
28511
  ffslack = collection[totaskId]['slack'];
@@ -27921,7 +28808,7 @@ class CriticalPath {
27921
28808
  }
27922
28809
  else {
27923
28810
  let currentRecords = this.parent.currentViewData.filter((data) => {
27924
- return (data.ganttProperties.taskId).toString() == criticalPathIds[i].toString();
28811
+ return (data.ganttProperties.taskId).toString() === criticalPathIds[i].toString();
27925
28812
  });
27926
28813
  for (let i = 0; i < currentRecords.length; i++) {
27927
28814
  if (currentRecords[i].ganttProperties.isCritical || currentRecords[i].ganttProperties.endDate >= this.maxEndDate) {
@@ -27935,13 +28822,13 @@ class CriticalPath {
27935
28822
  const columnFields = this.parent.taskFields;
27936
28823
  if (criticalData.parentItem) {
27937
28824
  const parentRecord = this.parent.currentViewData.filter((data) => {
27938
- return criticalData.parentItem.uniqueID == data.uniqueID;
28825
+ return criticalData.parentItem.uniqueID === data.uniqueID;
27939
28826
  });
27940
28827
  const parentIndex = this.parent.currentViewData.indexOf(parentRecord[0]);
27941
28828
  const parentElement = this.parent.getRowByIndex(parentIndex);
27942
28829
  let parentTaskbarElement = parentElement.querySelectorAll('.e-taskbar-main-container');
27943
28830
  for (let i = 0; i < parentTaskbarElement.length; i++) {
27944
- if (parentTaskbarElement[i].getAttribute('rowuniqueid') == criticalData['rowUniqueID']) {
28831
+ if (parentTaskbarElement[i].getAttribute('rowuniqueid') === criticalData['rowUniqueID']) {
27945
28832
  addClass(parentTaskbarElement[i].querySelectorAll('.e-gantt-child-taskbar-inner-div'), criticalChildTaskBarInnerDiv);
27946
28833
  }
27947
28834
  }
@@ -28087,6 +28974,7 @@ class ContextMenu$2 {
28087
28974
  this.contextMenu = new ContextMenu$1({
28088
28975
  items: this.getMenuItems(),
28089
28976
  locale: this.parent.locale,
28977
+ enableRtl: this.parent.enableRtl,
28090
28978
  target: target,
28091
28979
  animationSettings: { effect: 'None' },
28092
28980
  select: this.contextMenuItemClick.bind(this),
@@ -28227,6 +29115,12 @@ class ContextMenu$2 {
28227
29115
  };
28228
29116
  // eslint-disable-next-line
28229
29117
  this.parent.trigger('actionBegin', eventArgs, (eventArgs) => {
29118
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
29119
+ this.parent.showMaskRow();
29120
+ }
29121
+ else {
29122
+ this.parent.showSpinner();
29123
+ }
28230
29124
  this.parent.chartRowsModule.splitTask(this.rowData[taskSettings.id], currentClickedDate);
28231
29125
  });
28232
29126
  }
@@ -28247,6 +29141,12 @@ class ContextMenu$2 {
28247
29141
  target: this.targetElement
28248
29142
  };
28249
29143
  this.parent.trigger('actionBegin', eventArgs, (eventArgs) => {
29144
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
29145
+ this.parent.showMaskRow();
29146
+ }
29147
+ else {
29148
+ this.parent.showSpinner();
29149
+ }
28250
29150
  if (eventArgs.cancel === false) {
28251
29151
  this.parent.chartRowsModule.mergeTask(this.rowData[taskSettings.id], segmentIndexes);
28252
29152
  }
@@ -28255,12 +29155,30 @@ class ContextMenu$2 {
28255
29155
  // eslint-disable-next-line
28256
29156
  getClickedDate(element) {
28257
29157
  // context menu click position
28258
- const ganttElementPosition = this.parent.getOffsetRect(this.parent.element);
29158
+ let ganttElementPositionLeft;
28259
29159
  // task left position
28260
- const pageLeft = ganttElementPosition.left + this.parent.ganttChartModule.chartElement.offsetLeft +
28261
- this.rowData.ganttProperties.left - this.parent.ganttChartModule.scrollElement.scrollLeft;
28262
- // difference from task start date to current click position.
28263
- const currentTaskDifference = this.clickedPosition - pageLeft;
29160
+ if (this.parent.enableRtl) {
29161
+ const box = this.parent.element.getBoundingClientRect();
29162
+ const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft ||
29163
+ document.body.scrollLeft;
29164
+ const clientLeft = document.documentElement.clientLeft || document.body.clientLeft || 0;
29165
+ ganttElementPositionLeft = box.left + scrollLeft - clientLeft;
29166
+ }
29167
+ else {
29168
+ ganttElementPositionLeft = this.parent.getOffsetRect(this.parent.element).left;
29169
+ }
29170
+ let pageLeft;
29171
+ let currentTaskDifference;
29172
+ if (this.parent.enableRtl) {
29173
+ pageLeft = Math.abs(ganttElementPositionLeft + this.parent.ganttChartModule.chartElement.offsetWidth -
29174
+ this.rowData.ganttProperties.left - this.parent.ganttChartModule.scrollElement.scrollLeft);
29175
+ currentTaskDifference = Math.abs(this.clickedPosition - pageLeft);
29176
+ }
29177
+ else {
29178
+ pageLeft = ganttElementPositionLeft + this.parent.ganttChartModule.chartElement.offsetLeft +
29179
+ this.rowData.ganttProperties.left - this.parent.ganttChartModule.scrollElement.scrollLeft;
29180
+ currentTaskDifference = this.clickedPosition - pageLeft;
29181
+ }
28264
29182
  let splitTaskDuration = Math.ceil(currentTaskDifference / this.parent.perDayWidth);
28265
29183
  const startDate = this.rowData.ganttProperties.startDate;
28266
29184
  if (!isNullOrUndefined(this.parent.timelineSettings.bottomTier) && this.parent.timelineSettings.bottomTier.unit === 'Hour') {
@@ -28770,6 +29688,12 @@ class ExcelExport$1 {
28770
29688
  bindEvents() {
28771
29689
  this.parent.treeGrid.beforeExcelExport = (args) => {
28772
29690
  this.parent.trigger('beforeExcelExport', args);
29691
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
29692
+ this.parent.showMaskRow();
29693
+ }
29694
+ else {
29695
+ this.parent.showSpinner();
29696
+ }
28773
29697
  };
28774
29698
  this.parent.treeGrid.excelQueryCellInfo = (args) => {
28775
29699
  this.parent.trigger('excelQueryCellInfo', args);
@@ -28779,6 +29703,12 @@ class ExcelExport$1 {
28779
29703
  };
28780
29704
  this.parent.treeGrid.excelExportComplete = (args) => {
28781
29705
  this.parent.trigger('excelExportComplete', args);
29706
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
29707
+ this.parent.hideMaskRow();
29708
+ }
29709
+ else {
29710
+ this.parent.hideSpinner();
29711
+ }
28782
29712
  };
28783
29713
  }
28784
29714
  }
@@ -28961,6 +29891,12 @@ class RowDD$1 {
28961
29891
  if (!args.cancel) {
28962
29892
  args.requestType = 'beforeDrop';
28963
29893
  this.parent.trigger('actionBegin', args);
29894
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
29895
+ this.parent.showMaskRow();
29896
+ }
29897
+ else {
29898
+ this.parent.showSpinner();
29899
+ }
28964
29900
  if (!args.cancel) {
28965
29901
  this.dropRows(args, true); // method to update the data collections based on drop action
28966
29902
  args.cancel = true;
@@ -29058,15 +29994,15 @@ class RowDD$1 {
29058
29994
  }
29059
29995
  }
29060
29996
  if (!this.parent.enableVirtualization) {
29061
- let data = gObj.flatData;
29997
+ const data = gObj.flatData;
29062
29998
  let startIndex;
29063
29999
  let endIndex;
29064
- let ganttData = this.parent.dataSource;
29065
- let uniqueTaskID = this.parent.taskFields.id;
30000
+ const ganttData = this.parent.dataSource;
30001
+ const uniqueTaskID = this.parent.taskFields.id;
29066
30002
  if (draggedRecord.index < droppedRecord.index) {
29067
30003
  startIndex = draggedRecord.index;
29068
30004
  for (let i = 0; i < ganttData.length; i++) {
29069
- let currentData = this.parent.currentViewData.filter(function (e) {
30005
+ const currentData = this.parent.currentViewData.filter(function (e) {
29070
30006
  return e[uniqueTaskID] === ganttData[i][uniqueTaskID];
29071
30007
  })[0];
29072
30008
  if (currentData && currentData.index > droppedRecord.index) {
@@ -29078,7 +30014,7 @@ class RowDD$1 {
29078
30014
  else {
29079
30015
  startIndex = droppedRecord.index;
29080
30016
  for (let i = 0; i < ganttData.length; i++) {
29081
- let currentData = this.parent.currentViewData.filter(function (e) {
30017
+ const currentData = this.parent.currentViewData.filter(function (e) {
29082
30018
  return e[uniqueTaskID] === ganttData[i][uniqueTaskID];
29083
30019
  })[0];
29084
30020
  if (currentData && currentData.index > draggedRecord.index) {
@@ -29091,7 +30027,7 @@ class RowDD$1 {
29091
30027
  if (!isNullOrUndefined(data[i])) {
29092
30028
  data[i].index = i;
29093
30029
  if (!isNullOrUndefined(data[i].parentItem)) {
29094
- let updatedParent = data.filter((e) => {
30030
+ const updatedParent = data.filter((e) => {
29095
30031
  return e.uniqueID === data[i].parentUniqueID;
29096
30032
  })[0];
29097
30033
  data[i].parentItem.index = updatedParent.index;
@@ -29169,7 +30105,7 @@ class RowDD$1 {
29169
30105
  }
29170
30106
  let validateRecords;
29171
30107
  if (toParent.uniqueID === draggedParent.uniqueID || (draggedParent.parentItem &&
29172
- toParent.uniqueID == this.parent.flatData[this.parent.ids.indexOf(draggedParent.parentItem.taskId)].uniqueID)) {
30108
+ toParent.uniqueID === this.parent.flatData[this.parent.ids.indexOf(draggedParent.parentItem.taskId)].uniqueID)) {
29173
30109
  validateRecords = this.parent.currentViewData.filter((data) => {
29174
30110
  if ((data.ganttProperties.predecessor && data.ganttProperties.predecessor.length > 0)) {
29175
30111
  for (let i = 0; i < data.ganttProperties.predecessor.length; i++) {
@@ -29587,7 +30523,7 @@ class RowDD$1 {
29587
30523
  }
29588
30524
  let idx;
29589
30525
  const ganttData = dataSource.length > 0 && this.parent.viewType !== 'ResourceView' ?
29590
- dataSource : this.parent.flatData;
30526
+ dataSource : this.parent.updatedRecords;
29591
30527
  for (let i = 0; i < ganttData.length; i++) {
29592
30528
  if (this.parent.viewType === 'ResourceView') {
29593
30529
  if (ganttData[i].ganttProperties.rowUniqueID === deletedRow.ganttProperties.rowUniqueID) {
@@ -32936,217 +33872,215 @@ class PdfGanttPredecessor {
32936
33872
  let childPageData;
32937
33873
  let parentY = 0;
32938
33874
  let childY = 0;
32939
- if (childTask && parentTask) {
32940
- switch (this.type) {
32941
- case 'FS':
32942
- if (childTask.startPage > -1 && parentTask.endPage > -1) {
32943
- startPage = pages[parentTask.endPage];
32944
- endPage = pages[childTask.startPage];
32945
- parentPageData = pdfGantt.pdfPageDetail[parentTask.endPage - pdfGantt.chartPageIndex];
32946
- childPageData = pdfGantt.pdfPageDetail[childTask.startPage - pdfGantt.chartPageIndex];
32947
- if (this.parentIndex < this.childIndex) {
32948
- if (this.parentLeft < this.childLeft && this.childLeft > (this.parentLeft + this.parentWidth + 25)) {
32949
- predecessorType = 'FSType1';
32950
- }
32951
- else {
32952
- predecessorType = 'FSType2';
32953
- }
33875
+ switch (this.type) {
33876
+ case 'FS':
33877
+ if (childTask.startPage > -1 && parentTask.endPage > -1) {
33878
+ startPage = pages[parentTask.endPage];
33879
+ endPage = pages[childTask.startPage];
33880
+ parentPageData = pdfGantt.pdfPageDetail[parentTask.endPage - pdfGantt.chartPageIndex];
33881
+ childPageData = pdfGantt.pdfPageDetail[childTask.startPage - pdfGantt.chartPageIndex];
33882
+ if (this.parentIndex < this.childIndex) {
33883
+ if (this.parentLeft < this.childLeft && this.childLeft > (this.parentLeft + this.parentWidth + 25)) {
33884
+ predecessorType = 'FSType1';
32954
33885
  }
32955
33886
  else {
32956
- if (this.parentLeft < this.childLeft && this.childLeft > (this.parentLeft + this.parentWidth + 25)) {
32957
- predecessorType = 'FSType3';
32958
- }
32959
- else {
32960
- predecessorType = 'FSType4';
32961
- }
33887
+ predecessorType = 'FSType2';
32962
33888
  }
32963
33889
  }
32964
33890
  else {
32965
- return;
33891
+ if (this.parentLeft < this.childLeft && this.childLeft > (this.parentLeft + this.parentWidth + 25)) {
33892
+ predecessorType = 'FSType3';
33893
+ }
33894
+ else {
33895
+ predecessorType = 'FSType4';
33896
+ }
32966
33897
  }
32967
- break;
32968
- case 'SF':
32969
- if (childTask.endPage > -1 && parentTask.startPage > -1) {
32970
- startPage = pages[parentTask.startPage];
32971
- endPage = pages[childTask.endPage];
32972
- parentPageData = pdfGantt.pdfPageDetail[parentTask.endPage - pdfGantt.chartPageIndex];
32973
- childPageData = pdfGantt.pdfPageDetail[childTask.startPage - pdfGantt.chartPageIndex];
32974
- if (this.parentIndex < this.childIndex) {
32975
- if (this.parentLeft > this.childLeft + this.childWidth) {
32976
- predecessorType = 'SFType1';
32977
- }
32978
- else {
32979
- predecessorType = 'SFType2';
32980
- }
33898
+ }
33899
+ else {
33900
+ return;
33901
+ }
33902
+ break;
33903
+ case 'SF':
33904
+ if (childTask.endPage > -1 && parentTask.startPage > -1) {
33905
+ startPage = pages[parentTask.startPage];
33906
+ endPage = pages[childTask.endPage];
33907
+ parentPageData = pdfGantt.pdfPageDetail[parentTask.endPage - pdfGantt.chartPageIndex];
33908
+ childPageData = pdfGantt.pdfPageDetail[childTask.startPage - pdfGantt.chartPageIndex];
33909
+ if (this.parentIndex < this.childIndex) {
33910
+ if (this.parentLeft > this.childLeft + this.childWidth) {
33911
+ predecessorType = 'SFType1';
32981
33912
  }
32982
33913
  else {
32983
- if (this.parentLeft > this.childLeft + this.childWidth) {
32984
- predecessorType = 'SFType3';
32985
- }
32986
- else {
32987
- predecessorType = 'SFType4';
32988
- }
33914
+ predecessorType = 'SFType2';
32989
33915
  }
32990
33916
  }
32991
33917
  else {
32992
- return;
33918
+ if (this.parentLeft > this.childLeft + this.childWidth) {
33919
+ predecessorType = 'SFType3';
33920
+ }
33921
+ else {
33922
+ predecessorType = 'SFType4';
33923
+ }
32993
33924
  }
32994
- break;
32995
- case 'FF':
32996
- if (childTask.endPage > -1 && parentTask.endPage > -1) {
32997
- startPage = pages[parentTask.endPage];
32998
- endPage = pages[childTask.endPage];
32999
- parentPageData = pdfGantt.pdfPageDetail[parentTask.endPage - pdfGantt.chartPageIndex];
33000
- childPageData = pdfGantt.pdfPageDetail[childTask.endPage - pdfGantt.chartPageIndex];
33001
- if (this.parentIndex < this.childIndex) {
33002
- if ((this.childLeft + this.childWidth) >= (this.parentLeft + this.parentWidth)) {
33003
- predecessorType = 'FFType1';
33004
- }
33005
- else {
33006
- predecessorType = 'FFType2';
33007
- }
33925
+ }
33926
+ else {
33927
+ return;
33928
+ }
33929
+ break;
33930
+ case 'FF':
33931
+ if (childTask.endPage > -1 && parentTask.endPage > -1) {
33932
+ startPage = pages[parentTask.endPage];
33933
+ endPage = pages[childTask.endPage];
33934
+ parentPageData = pdfGantt.pdfPageDetail[parentTask.endPage - pdfGantt.chartPageIndex];
33935
+ childPageData = pdfGantt.pdfPageDetail[childTask.endPage - pdfGantt.chartPageIndex];
33936
+ if (this.parentIndex < this.childIndex) {
33937
+ if ((this.childLeft + this.childWidth) >= (this.parentLeft + this.parentWidth)) {
33938
+ predecessorType = 'FFType1';
33008
33939
  }
33009
33940
  else {
33010
- if ((this.childLeft + this.childWidth) >= (this.parentLeft + this.parentWidth)) {
33011
- predecessorType = 'FFType3';
33012
- }
33013
- else {
33014
- predecessorType = 'FFType4';
33015
- }
33941
+ predecessorType = 'FFType2';
33016
33942
  }
33017
33943
  }
33018
33944
  else {
33019
- return;
33945
+ if ((this.childLeft + this.childWidth) >= (this.parentLeft + this.parentWidth)) {
33946
+ predecessorType = 'FFType3';
33947
+ }
33948
+ else {
33949
+ predecessorType = 'FFType4';
33950
+ }
33020
33951
  }
33021
- break;
33022
- case 'SS':
33023
- if (childTask.startPage > -1 && parentTask.startPage > -1) {
33024
- startPage = pages[parentTask.startPage];
33025
- endPage = pages[childTask.startPage];
33026
- parentPageData = pdfGantt.pdfPageDetail[parentTask.startPage - pdfGantt.chartPageIndex];
33027
- childPageData = pdfGantt.pdfPageDetail[childTask.startPage - pdfGantt.chartPageIndex];
33028
- if (this.parentIndex < this.childIndex) {
33029
- if (this.parentLeft >= this.childLeft) {
33030
- predecessorType = 'SSType1';
33031
- }
33032
- else {
33033
- predecessorType = 'SSType2';
33034
- }
33952
+ }
33953
+ else {
33954
+ return;
33955
+ }
33956
+ break;
33957
+ case 'SS':
33958
+ if (childTask.startPage > -1 && parentTask.startPage > -1) {
33959
+ startPage = pages[parentTask.startPage];
33960
+ endPage = pages[childTask.startPage];
33961
+ parentPageData = pdfGantt.pdfPageDetail[parentTask.startPage - pdfGantt.chartPageIndex];
33962
+ childPageData = pdfGantt.pdfPageDetail[childTask.startPage - pdfGantt.chartPageIndex];
33963
+ if (this.parentIndex < this.childIndex) {
33964
+ if (this.parentLeft >= this.childLeft) {
33965
+ predecessorType = 'SSType1';
33035
33966
  }
33036
33967
  else {
33037
- if (this.parentLeft >= this.childLeft) {
33038
- predecessorType = 'SSType3';
33039
- }
33040
- else {
33041
- predecessorType = 'SSType4';
33042
- }
33968
+ predecessorType = 'SSType2';
33043
33969
  }
33044
33970
  }
33045
33971
  else {
33046
- return;
33972
+ if (this.parentLeft >= this.childLeft) {
33973
+ predecessorType = 'SSType3';
33974
+ }
33975
+ else {
33976
+ predecessorType = 'SSType4';
33977
+ }
33047
33978
  }
33048
- break;
33049
- }
33050
- let midPoint = Math.round((this.parent.rowHeight - 1) / 2.0);
33051
- midPoint = pixelToPoint(midPoint);
33052
- /* eslint-disable-next-line */
33053
- let point1, point2, point3, point4, point5, point6;
33054
- point1 = point2 = point3 = point4 = point5 = point6 = new PointF();
33055
- const parentTaskpoint = Object.assign({}, parentTask.taskStartPoint);
33056
- const childTaskpoint = Object.assign({}, childTask.taskStartPoint);
33057
- parentY = parentTaskpoint.y + parentPageData.startPoint.y;
33058
- childY = childTaskpoint.y + childPageData.startPoint.y;
33059
- const ffpoint1 = new PointF(pixelToPoint(this.parentLeft + this.parentWidth), parentY + midPoint);
33060
- const sspoint1 = new PointF(pixelToPoint(this.parentLeft) - 1, parentY + midPoint);
33061
- const ffpoint3 = new PointF(pixelToPoint(this.childLeft - 20), childY + midPoint);
33062
- const ffpoint4 = new PointF(pixelToPoint(this.childLeft - 6 - this.lineWidth) - 1, childY + midPoint);
33063
- const sspoint4 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 6 + this.lineWidth) + 1, childY + midPoint);
33064
- switch (predecessorType) {
33065
- case 'FSType1':
33066
- case 'FSType3':
33067
- point1 = ffpoint1;
33068
- point2 = new PointF(pixelToPoint(this.childLeft - 20), parentY + midPoint);
33069
- point3 = ffpoint3;
33070
- point4 = ffpoint4;
33071
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
33072
- break;
33073
- case 'FSType2':
33074
- point1 = ffpoint1;
33075
- point2 = new PointF(point1.x + 10, parentY + midPoint);
33076
- point3 = new PointF(point1.x + 10, childY + 2);
33077
- point4 = new PointF(pixelToPoint(this.childLeft - 20), childY + 2);
33078
- point5 = ffpoint3;
33079
- point6 = ffpoint4;
33080
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint, point5, point6);
33081
- break;
33082
- case 'FSType4':
33083
- point1 = ffpoint1;
33084
- point2 = new PointF(point1.x + 10, parentY + midPoint);
33085
- point3 = new PointF(point1.x + 10, parentY + 2);
33086
- point4 = new PointF(pixelToPoint(this.childLeft - 20), parentY + 2);
33087
- point5 = ffpoint3;
33088
- point6 = ffpoint4;
33089
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint, point5, point6);
33090
- break;
33091
- case 'FFType1':
33092
- case 'FFType3':
33093
- point1 = new PointF(pixelToPoint(this.parentLeft + this.parentWidth) + 1, parentY + midPoint);
33094
- point2 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 20), parentY + midPoint);
33095
- point3 = new PointF(point2.x, childY + midPoint);
33096
- point4 = sspoint4;
33097
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
33098
- break;
33099
- case 'FFType2':
33100
- case 'FFType4':
33101
- point1 = new PointF(pixelToPoint(this.parentLeft + this.parentWidth) + 1, parentY + midPoint);
33102
- point2 = new PointF(pixelToPoint(this.parentLeft + this.parentWidth + 20), parentY + midPoint);
33103
- point3 = new PointF(point2.x, childY + midPoint);
33104
- point4 = sspoint4;
33105
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
33106
- break;
33107
- case 'SSType1':
33108
- case 'SSType3':
33109
- point1 = sspoint1;
33110
- point2 = new PointF(pixelToPoint(this.childLeft - 20), parentY + midPoint);
33111
- point3 = new PointF(point2.x, childY + midPoint);
33112
- point4 = ffpoint4;
33113
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
33114
- break;
33115
- case 'SSType2':
33116
- case 'SSType4':
33117
- point1 = sspoint1;
33118
- point2 = new PointF(pixelToPoint(this.parentLeft - 20), parentY + midPoint);
33119
- point3 = new PointF(point2.x, childY + midPoint);
33120
- point4 = ffpoint4;
33121
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
33122
- break;
33123
- case 'SFType1':
33124
- case 'SFType3':
33125
- point1 = sspoint1;
33126
- point2 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 20), parentY + midPoint);
33127
- point3 = new PointF(point2.x, childY + midPoint);
33128
- point4 = sspoint4;
33129
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
33130
- break;
33131
- case 'SFType2':
33132
- point1 = sspoint1;
33133
- point2 = new PointF(pixelToPoint(this.parentLeft - 20), parentY + midPoint);
33134
- point3 = new PointF(point2.x, childY + 2);
33135
- point4 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 20), childY + 2);
33136
- point5 = new PointF(point4.x, childY + midPoint);
33137
- point6 = sspoint4;
33138
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint, point5, point6);
33139
- break;
33140
- case 'SFType4':
33141
- point1 = sspoint1;
33142
- point2 = new PointF(pixelToPoint(this.parentLeft - 20), parentY + midPoint);
33143
- point3 = new PointF(point2.x, parentY + 2);
33144
- point4 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 20), parentY + 2);
33145
- point5 = new PointF(point4.x, childY + midPoint);
33146
- point6 = sspoint4;
33147
- this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint, point5, point6);
33148
- break;
33149
- }
33979
+ }
33980
+ else {
33981
+ return;
33982
+ }
33983
+ break;
33984
+ }
33985
+ let midPoint = Math.round((this.parent.rowHeight - 1) / 2.0);
33986
+ midPoint = pixelToPoint(midPoint);
33987
+ /* eslint-disable-next-line */
33988
+ let point1, point2, point3, point4, point5, point6;
33989
+ point1 = point2 = point3 = point4 = point5 = point6 = new PointF();
33990
+ const parentTaskpoint = Object.assign({}, parentTask.taskStartPoint);
33991
+ const childTaskpoint = Object.assign({}, childTask.taskStartPoint);
33992
+ parentY = parentTaskpoint.y + parentPageData.startPoint.y;
33993
+ childY = childTaskpoint.y + childPageData.startPoint.y;
33994
+ const ffpoint1 = new PointF(pixelToPoint(this.parentLeft + this.parentWidth), parentY + midPoint);
33995
+ const sspoint1 = new PointF(pixelToPoint(this.parentLeft) - 1, parentY + midPoint);
33996
+ const ffpoint3 = new PointF(pixelToPoint(this.childLeft - 20), childY + midPoint);
33997
+ const ffpoint4 = new PointF(pixelToPoint(this.childLeft - 6 - this.lineWidth) - 1, childY + midPoint);
33998
+ const sspoint4 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 6 + this.lineWidth) + 1, childY + midPoint);
33999
+ switch (predecessorType) {
34000
+ case 'FSType1':
34001
+ case 'FSType3':
34002
+ point1 = ffpoint1;
34003
+ point2 = new PointF(pixelToPoint(this.childLeft - 20), parentY + midPoint);
34004
+ point3 = ffpoint3;
34005
+ point4 = ffpoint4;
34006
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
34007
+ break;
34008
+ case 'FSType2':
34009
+ point1 = ffpoint1;
34010
+ point2 = new PointF(point1.x + 10, parentY + midPoint);
34011
+ point3 = new PointF(point1.x + 10, childY + 2);
34012
+ point4 = new PointF(pixelToPoint(this.childLeft - 20), childY + 2);
34013
+ point5 = ffpoint3;
34014
+ point6 = ffpoint4;
34015
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint, point5, point6);
34016
+ break;
34017
+ case 'FSType4':
34018
+ point1 = ffpoint1;
34019
+ point2 = new PointF(point1.x + 10, parentY + midPoint);
34020
+ point3 = new PointF(point1.x + 10, parentY + 2);
34021
+ point4 = new PointF(pixelToPoint(this.childLeft - 20), parentY + 2);
34022
+ point5 = ffpoint3;
34023
+ point6 = ffpoint4;
34024
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint, point5, point6);
34025
+ break;
34026
+ case 'FFType1':
34027
+ case 'FFType3':
34028
+ point1 = new PointF(pixelToPoint(this.parentLeft + this.parentWidth) + 1, parentY + midPoint);
34029
+ point2 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 20), parentY + midPoint);
34030
+ point3 = new PointF(point2.x, childY + midPoint);
34031
+ point4 = sspoint4;
34032
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
34033
+ break;
34034
+ case 'FFType2':
34035
+ case 'FFType4':
34036
+ point1 = new PointF(pixelToPoint(this.parentLeft + this.parentWidth) + 1, parentY + midPoint);
34037
+ point2 = new PointF(pixelToPoint(this.parentLeft + this.parentWidth + 20), parentY + midPoint);
34038
+ point3 = new PointF(point2.x, childY + midPoint);
34039
+ point4 = sspoint4;
34040
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
34041
+ break;
34042
+ case 'SSType1':
34043
+ case 'SSType3':
34044
+ point1 = sspoint1;
34045
+ point2 = new PointF(pixelToPoint(this.childLeft - 20), parentY + midPoint);
34046
+ point3 = new PointF(point2.x, childY + midPoint);
34047
+ point4 = ffpoint4;
34048
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
34049
+ break;
34050
+ case 'SSType2':
34051
+ case 'SSType4':
34052
+ point1 = sspoint1;
34053
+ point2 = new PointF(pixelToPoint(this.parentLeft - 20), parentY + midPoint);
34054
+ point3 = new PointF(point2.x, childY + midPoint);
34055
+ point4 = ffpoint4;
34056
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
34057
+ break;
34058
+ case 'SFType1':
34059
+ case 'SFType3':
34060
+ point1 = sspoint1;
34061
+ point2 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 20), parentY + midPoint);
34062
+ point3 = new PointF(point2.x, childY + midPoint);
34063
+ point4 = sspoint4;
34064
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint);
34065
+ break;
34066
+ case 'SFType2':
34067
+ point1 = sspoint1;
34068
+ point2 = new PointF(pixelToPoint(this.parentLeft - 20), parentY + midPoint);
34069
+ point3 = new PointF(point2.x, childY + 2);
34070
+ point4 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 20), childY + 2);
34071
+ point5 = new PointF(point4.x, childY + midPoint);
34072
+ point6 = sspoint4;
34073
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint, point5, point6);
34074
+ break;
34075
+ case 'SFType4':
34076
+ point1 = sspoint1;
34077
+ point2 = new PointF(pixelToPoint(this.parentLeft - 20), parentY + midPoint);
34078
+ point3 = new PointF(point2.x, parentY + 2);
34079
+ point4 = new PointF(pixelToPoint(this.childLeft + this.childWidth + 20), parentY + 2);
34080
+ point5 = new PointF(point4.x, childY + midPoint);
34081
+ point6 = sspoint4;
34082
+ this.connectLines(startPage, endPage, point1, point2, point3, point4, childTask, midPoint, point5, point6);
34083
+ break;
33150
34084
  }
33151
34085
  }
33152
34086
  /**
@@ -33629,6 +34563,12 @@ class PdfExport {
33629
34563
  cancel: false
33630
34564
  };
33631
34565
  this.parent.trigger('beforePdfExport', args);
34566
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
34567
+ this.parent.showMaskRow();
34568
+ }
34569
+ else {
34570
+ this.parent.showSpinner();
34571
+ }
33632
34572
  if (getValue('cancel', args)) {
33633
34573
  /* eslint-disable-next-line */
33634
34574
  return new Promise((resolve, reject) => {
@@ -33660,6 +34600,12 @@ class PdfExport {
33660
34600
  }
33661
34601
  this.processExport(data, pdfExportProperties, isMultipleExport).then(() => {
33662
34602
  this.parent.trigger('pdfExportComplete', {});
34603
+ if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === "Shimmer") {
34604
+ this.parent.hideMaskRow();
34605
+ }
34606
+ else {
34607
+ this.parent.hideSpinner();
34608
+ }
33663
34609
  resolve(this.pdfDocument);
33664
34610
  });
33665
34611
  }
@@ -33847,5 +34793,5 @@ class VirtualScroll$1 {
33847
34793
  * Gantt index file
33848
34794
  */
33849
34795
 
33850
- export { Gantt, PdfHorizontalOverflowType, parentsUntil$1 as parentsUntil, isScheduledTask, isCountRequired, getSwapKey, isRemoteData, getTaskData, updateDates, formatString, getIndex, pixelToPoint, pointToPixel, getUid$1 as getUid, load, rowDataBound, queryCellInfo, toolbarClick, keyPressed, Edit$2 as Edit, Reorder$1 as Reorder, Resize$1 as Resize, Filter$1 as Filter, Sort$1 as Sort, Dependency, Selection$1 as Selection, Toolbar$3 as Toolbar, DayMarkers, CriticalPath, ContextMenu$2 as ContextMenu, ExcelExport$1 as ExcelExport, ColumnMenu$1 as ColumnMenu, RowDD$1 as RowDD, PdfExport, VirtualScroll$1 as VirtualScroll, Column, DayWorkingTime, AddDialogFieldSettings, EditDialogFieldSettings, EditSettings, EventMarker, FilterSettings, SearchSettings, Holiday, LabelSettings, SelectionSettings, SplitterSettings, TaskFields, TimelineTierSettings, TimelineSettings, TooltipSettings, SortDescriptor, SortSettings, ResourceFields };
34796
+ export { Gantt, PdfHorizontalOverflowType, parentsUntil$1 as parentsUntil, isScheduledTask, isCountRequired, getSwapKey, isRemoteData, getTaskData, updateDates, formatString, getIndex, pixelToPoint, pointToPixel, getUid$1 as getUid, load, rowDataBound, queryCellInfo, toolbarClick, keyPressed, Edit$2 as Edit, Reorder$1 as Reorder, Resize$1 as Resize, Filter$1 as Filter, Sort$1 as Sort, Dependency, Selection$1 as Selection, Toolbar$3 as Toolbar, DayMarkers, CriticalPath, ContextMenu$2 as ContextMenu, ExcelExport$1 as ExcelExport, ColumnMenu$1 as ColumnMenu, RowDD$1 as RowDD, PdfExport, VirtualScroll$1 as VirtualScroll, Column, DayWorkingTime, AddDialogFieldSettings, EditDialogFieldSettings, EditSettings, EventMarker, FilterSettings, SearchSettings, Holiday, LabelSettings, SelectionSettings, SplitterSettings, TaskFields, TimelineTierSettings, TimelineSettings, TooltipSettings, SortDescriptor, SortSettings, ResourceFields, LoadingIndicator };
33851
34797
  //# sourceMappingURL=ej2-gantt.es2015.js.map