gantt-task-react-powern 0.4.96 → 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
@@ -3394,7 +3457,6 @@ function getCriticalPaths(leafTasks) {
3394
3457
  primaryLeaf = taskMap[primaryLeaf].next;
3395
3458
  }
3396
3459
 
3397
- console.debug(taskMap);
3398
3460
  var secondaryLeaf;
3399
3461
  var secondaryDuration = 0;
3400
3462
 
@@ -3421,54 +3483,14 @@ function getCriticalPaths(leafTasks) {
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
3487
 
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
- console.debug(dependency);
3437
- if (!dependency) continue;
3438
-
3439
- switch (dependency.type) {
3440
- case "FS":
3441
- if (taskMap[depID].end > taskMap[taskID].end) {
3442
- taskMap[taskID].next = depID;
3443
- taskMap[taskID].end = taskMap[depID].end;
3444
- }
3445
-
3446
- break;
3447
-
3448
- case "SS":
3449
- if (taskMap[depID].start > start) {
3450
- taskMap[taskID].next = depID;
3451
- start = taskMap[depID].start;
3452
- taskMap[taskID].end = taskMap[depID].end;
3453
- }
3488
+ for (var j = 0; j < dependents.length; j++) {
3489
+ var newDependentEnd = taskMap[dependents[j]].end;
3454
3490
 
3455
- break;
3456
-
3457
- case "FF":
3458
- if (taskMap[depID].end > taskMap[taskID].end) {
3459
- taskMap[taskID].next = depID;
3460
- taskMap[taskID].end = taskMap[depID].end;
3461
- }
3462
-
3463
- break;
3464
-
3465
- case "SF":
3466
- if (taskMap[depID].start > taskMap[taskID].end) {
3467
- taskMap[taskID].next = depID;
3468
- taskMap[taskID].end = taskMap[depID].start;
3469
- }
3470
-
3471
- break;
3491
+ if (newDependentEnd > taskMap[taskID].end) {
3492
+ taskMap[taskID].next = dependents[j];
3493
+ taskMap[taskID].end = newDependentEnd;
3472
3494
  }
3473
3495
  }
3474
3496
  }
@@ -3539,6 +3561,11 @@ function colorPath(path, color, tasks, criticalPathType) {
3539
3561
  _loop(_i7);
3540
3562
  }
3541
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
+ };
3542
3569
 
3543
3570
  exports.Gantt = Gantt;
3544
3571
  exports.getCriticalPaths = getCriticalPaths;