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