gantt-task-react-powern 0.4.95 → 0.4.97

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.
@@ -432,6 +432,18 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
432
432
  return t.id;
433
433
  }));
434
434
  }, [leafTasks]);
435
+
436
+ var hasSelectedAncestor = function hasSelectedAncestor(taskId, selectedSet, allTasks) {
437
+ var task = allTasks.find(function (t) {
438
+ return t.id === taskId;
439
+ });
440
+ if (!task) return false;
441
+ var parentWbs = getParentWbs(task.id);
442
+ if (!parentWbs) return false;
443
+ if (selectedSet.has(parentWbs)) return true;
444
+ return hasSelectedAncestor(parentWbs, selectedSet, allTasks);
445
+ };
446
+
435
447
  return React.createElement("div", {
436
448
  className: styles$1.taskListWrapper,
437
449
  style: {
@@ -450,6 +462,7 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
450
462
  }
451
463
 
452
464
  var isSelected = selectedTasks.includes(t.id);
465
+ var isAncestorSelected = hasSelectedAncestor(t.id, new Set(selectedTasks), tasks);
453
466
  return React.createElement("div", {
454
467
  className: t.type === "milestone" ? styles$1.taskListMilestoneRow : scheduleType === "lookAhead" ? styles$1.taskListLookAheadRow : styles$1.taskListTableRow,
455
468
  style: {
@@ -475,6 +488,7 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
475
488
  }, React.createElement("input", {
476
489
  type: "checkbox",
477
490
  checked: isSelected,
491
+ disabled: isAncestorSelected,
478
492
  onChange: function onChange(e) {
479
493
  return onTaskSelect(t.id, e.target.checked);
480
494
  }
@@ -755,15 +769,54 @@ var TaskList = function TaskList(_ref) {
755
769
  }
756
770
  }, [selectedTasks, tasks, onMultiSelect]);
757
771
 
772
+ var getDescendants = function getDescendants(taskId, allTasks) {
773
+ var task = allTasks.find(function (t) {
774
+ return t.id === taskId;
775
+ });
776
+ if (!task) return [];
777
+ var children = allTasks.filter(function (t) {
778
+ return getParentWbs(t.id) === taskId;
779
+ });
780
+ return children.flatMap(function (child) {
781
+ return [child.id].concat(getDescendants(child.id, allTasks));
782
+ });
783
+ };
784
+
785
+ var recursiveOpen = function recursiveOpen(taskId, allTasks) {
786
+ var task = allTasks.find(function (t) {
787
+ return t.id === taskId;
788
+ });
789
+ if (!task) return;
790
+
791
+ if (task.hideChildren === true) {
792
+ onExpanderClick(task);
793
+ }
794
+
795
+ var children = allTasks.filter(function (t) {
796
+ return getParentWbs(t.id) === taskId;
797
+ });
798
+ children.forEach(function (c) {
799
+ return recursiveOpen(c.id, allTasks);
800
+ });
801
+ };
802
+
758
803
  var handleTaskSelect = function handleTaskSelect(taskId, selected) {
804
+ var descendants = getDescendants(taskId, tasks);
805
+
759
806
  if (selected) {
760
807
  setSelectedTasks(function (prev) {
761
- return [].concat(prev, [taskId]);
808
+ var newSelected = new Set(prev);
809
+ newSelected.add(taskId);
810
+ descendants.forEach(function (d) {
811
+ return newSelected.add(d);
812
+ });
813
+ return Array.from(newSelected);
762
814
  });
815
+ recursiveOpen(taskId, tasks);
763
816
  } else {
764
817
  setSelectedTasks(function (prev) {
765
818
  return prev.filter(function (id) {
766
- return id !== taskId;
819
+ return id !== taskId && !descendants.includes(id);
767
820
  });
768
821
  });
769
822
  }
@@ -771,9 +824,19 @@ var TaskList = function TaskList(_ref) {
771
824
 
772
825
  var handleSelectAll = function handleSelectAll(selected) {
773
826
  if (selected) {
774
- setSelectedTasks(tasks.map(function (task) {
775
- return task.id;
776
- }));
827
+ var topLevelTasks = tasks.filter(function (task) {
828
+ return !getParentWbs(task.id);
829
+ });
830
+ var newSelected = new Set();
831
+ topLevelTasks.forEach(function (task) {
832
+ newSelected.add(task.id);
833
+ var descendants = getDescendants(task.id, tasks);
834
+ descendants.forEach(function (d) {
835
+ return newSelected.add(d);
836
+ });
837
+ recursiveOpen(task.id, tasks);
838
+ });
839
+ setSelectedTasks(Array.from(newSelected));
777
840
  } else {
778
841
  setSelectedTasks([]);
779
842
  }
@@ -2019,7 +2082,7 @@ var Bar = function Bar(_ref) {
2019
2082
  var handleHeight = task.height / 2 - 1;
2020
2083
 
2021
2084
  if (type == "planned") {
2022
- if ((task === null || task === void 0 ? void 0 : task.x1) >= 0 && (task === null || task === void 0 ? void 0 : task.x2) > 0) return React.createElement("g", {
2085
+ if ((task === null || task === void 0 ? void 0 : task.x1) >= 0 && (task === null || task === void 0 ? void 0 : task.x2) >= 0) return React.createElement("g", {
2023
2086
  className: styles$6.barWrapper,
2024
2087
  tabIndex: 0
2025
2088
  }, React.createElement(BarDisplay, {
@@ -2067,7 +2130,7 @@ var Bar = function Bar(_ref) {
2067
2130
  className: styles$6.barWrapper,
2068
2131
  tabIndex: 0
2069
2132
  });
2070
- } else if ((task === null || task === void 0 ? void 0 : task.actualx1) >= 0 && (task === null || task === void 0 ? void 0 : task.actualx2) > 0) {
2133
+ } else if ((task === null || task === void 0 ? void 0 : task.actualx1) >= 0 && (task === null || task === void 0 ? void 0 : task.actualx2) >= 0) {
2071
2134
  return React.createElement("g", {
2072
2135
  className: styles$6.barWrapper,
2073
2136
  tabIndex: 0
@@ -2959,8 +3022,8 @@ var Gantt = function Gantt(_ref) {
2959
3022
  if (leafTasks.length > 0 && primaryPath.length === 0 && secondaryPath.length === 0) {
2960
3023
  setHasCircularDeps(true);
2961
3024
  } else {
2962
- if (hasCircularDeps && localStorage.getItem("hideCircularDepsAlert") === "true") {
2963
- localStorage.removeItem("hideCircularDepsAlert");
3025
+ if (hasCircularDeps && localStorage.getItem('hideCircularDepsAlert') === 'true') {
3026
+ localStorage.removeItem('hideCircularDepsAlert');
2964
3027
  }
2965
3028
 
2966
3029
  setHasCircularDeps(false);
@@ -3112,7 +3175,7 @@ var Gantt = function Gantt(_ref) {
3112
3175
  var alert = document.getElementById("alert-container");
3113
3176
 
3114
3177
  if (checkbox.checked) {
3115
- localStorage.setItem("hideCircularDepsAlert", "true");
3178
+ localStorage.setItem('hideCircularDepsAlert', 'true');
3116
3179
  alert.style.display = "None";
3117
3180
  }
3118
3181
  };
@@ -3265,7 +3328,7 @@ var Gantt = function Gantt(_ref) {
3265
3328
  taskLabelRenderer: taskLabelRenderer,
3266
3329
  onMultiSelect: onMultiSelect
3267
3330
  };
3268
- return React.createElement("div", null, hasCircularDeps && localStorage.getItem("hideCircularDepsAlert") !== "true" && React.createElement("div", {
3331
+ return React.createElement("div", null, hasCircularDeps && localStorage.getItem('hideCircularDepsAlert') !== 'true' && React.createElement("div", {
3269
3332
  id: "alert-container",
3270
3333
  className: styles$9.alertContainer + " " + styles$9.warning
3271
3334
  }, React.createElement("input", {
@@ -3414,59 +3477,19 @@ function getCriticalPaths(leafTasks) {
3414
3477
  secondaryLeaf = taskMap[secondaryLeaf].next;
3415
3478
  }
3416
3479
 
3417
- console.debug([primaryPath, secondaryPath]);
3418
3480
  return [primaryPath, secondaryPath];
3419
3481
  }
3420
3482
  function computeCriticalPath(taskID, taskMap) {
3421
3483
  var task = taskMap[taskID].task;
3422
3484
  var dependents = taskMap[taskID].dependents;
3423
- taskMap[taskID].start = task.start.getTime();
3424
3485
  taskMap[taskID].end = task.end.getTime();
3425
- var start = taskMap[taskID].start;
3426
-
3427
- for (var _iterator = _createForOfIteratorHelperLoose(dependents), _step; !(_step = _iterator()).done;) {
3428
- var _dependentTask$depend;
3429
-
3430
- var depID = _step.value;
3431
- var dependentTask = taskMap[depID].task;
3432
- var dependency = (_dependentTask$depend = dependentTask.dependencies) === null || _dependentTask$depend === void 0 ? void 0 : _dependentTask$depend.find(function (d) {
3433
- return d.id === taskID;
3434
- });
3435
- if (!dependency) continue;
3436
-
3437
- switch (dependency.type) {
3438
- case "FS":
3439
- if (taskMap[depID].end > taskMap[taskID].end) {
3440
- taskMap[taskID].next = depID;
3441
- taskMap[taskID].end = taskMap[depID].end;
3442
- }
3443
-
3444
- break;
3445
3486
 
3446
- case "SS":
3447
- if (taskMap[depID].start > start) {
3448
- taskMap[taskID].next = depID;
3449
- start = taskMap[depID].start;
3450
- taskMap[taskID].end = taskMap[depID].end;
3451
- }
3452
-
3453
- break;
3487
+ for (var j = 0; j < dependents.length; j++) {
3488
+ var newDependentEnd = taskMap[dependents[j]].end;
3454
3489
 
3455
- case "FF":
3456
- if (taskMap[depID].end > taskMap[taskID].end) {
3457
- taskMap[taskID].next = depID;
3458
- taskMap[taskID].end = taskMap[depID].end;
3459
- }
3460
-
3461
- break;
3462
-
3463
- case "SF":
3464
- if (taskMap[depID].start > taskMap[taskID].end) {
3465
- taskMap[taskID].next = depID;
3466
- taskMap[taskID].end = taskMap[depID].start;
3467
- }
3468
-
3469
- break;
3490
+ if (newDependentEnd > taskMap[taskID].end) {
3491
+ taskMap[taskID].next = dependents[j];
3492
+ taskMap[taskID].end = newDependentEnd;
3470
3493
  }
3471
3494
  }
3472
3495
  }
@@ -3537,6 +3560,11 @@ function colorPath(path, color, tasks, criticalPathType) {
3537
3560
  _loop(_i7);
3538
3561
  }
3539
3562
  }
3563
+ var getParentWbs = function getParentWbs(wbs) {
3564
+ var segments = wbs.split('.');
3565
+ if (segments.length <= 1) return undefined;
3566
+ return segments.slice(0, -1).join('.');
3567
+ };
3540
3568
 
3541
3569
  export { Gantt, ViewMode, getCriticalPaths };
3542
3570
  //# sourceMappingURL=index.modern.js.map