gantt-task-react-powern 0.4.98 → 0.5.3

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
  }
@@ -739,7 +753,12 @@ var TaskList = function TaskList(_ref) {
739
753
  selectedTasks = _useState[0],
740
754
  setSelectedTasks = _useState[1];
741
755
 
756
+ var _useState2 = useState([]),
757
+ pendingTaskSelect = _useState2[0],
758
+ setPendingTaskSelect = _useState2[1];
759
+
742
760
  var prevSelectedTasksRef = useRef([]);
761
+ var expandedTasks = useRef([]);
743
762
  useEffect(function () {
744
763
  if (horizontalContainerRef.current) {
745
764
  horizontalContainerRef.current.scrollTop = scrollY;
@@ -754,28 +773,116 @@ var TaskList = function TaskList(_ref) {
754
773
  onMultiSelect(selectedTaskObjects);
755
774
  }
756
775
  }, [selectedTasks, tasks, onMultiSelect]);
776
+ useEffect(function () {
777
+ if (pendingTaskSelect.length === 0) return;
778
+ var newSelected = new Set(selectedTasks);
779
+ pendingTaskSelect.forEach(function (_ref2) {
780
+ var taskId = _ref2.taskId,
781
+ selected = _ref2.selected;
782
+
783
+ if (selected) {
784
+ recursiveOpen(taskId, tasks);
785
+ var descendants = getDescendants(taskId, tasks);
786
+ newSelected.add(taskId);
787
+ descendants.forEach(function (d) {
788
+ return newSelected.add(d);
789
+ });
790
+ } else {
791
+ var _descendants = getDescendants(taskId, tasks);
757
792
 
758
- var handleTaskSelect = function handleTaskSelect(taskId, selected) {
759
- if (selected) {
760
- setSelectedTasks(function (prev) {
761
- return [].concat(prev, [taskId]);
762
- });
763
- } else {
764
- setSelectedTasks(function (prev) {
765
- return prev.filter(function (id) {
766
- return id !== taskId;
793
+ newSelected["delete"](taskId);
794
+
795
+ _descendants.forEach(function (d) {
796
+ return newSelected["delete"](d);
767
797
  });
798
+ }
799
+ });
800
+ setSelectedTasks(Array.from(newSelected));
801
+ setPendingTaskSelect([]);
802
+ }, [pendingTaskSelect]);
803
+ useEffect(function () {
804
+ expandedTasks.current = expandedTasks.current.filter(function (id) {
805
+ var t = tasks.find(function (task) {
806
+ return task.id === id;
768
807
  });
808
+ return t && !t.hideChildren;
809
+ });
810
+ if (selectedTasks.length === 0) return;
811
+ var newSelected = new Set();
812
+ selectedTasks.forEach(function (taskId) {
813
+ if (tasks.find(function (t) {
814
+ return t.id === taskId;
815
+ })) {
816
+ recursiveOpen(taskId, tasks);
817
+ newSelected.add(taskId);
818
+ var descendants = getDescendants(taskId, tasks);
819
+ descendants.forEach(function (d) {
820
+ return newSelected.add(d);
821
+ });
822
+ }
823
+ });
824
+ var newSelectedArray = Array.from(newSelected);
825
+
826
+ if (JSON.stringify(newSelectedArray) !== JSON.stringify(selectedTasks)) {
827
+ setSelectedTasks(newSelectedArray);
769
828
  }
829
+ }, [tasks.length]);
830
+
831
+ var getDescendants = function getDescendants(taskId, allTasks) {
832
+ var task = allTasks.find(function (t) {
833
+ return t.id === taskId;
834
+ });
835
+ if (!task) return [];
836
+ var children = allTasks.filter(function (t) {
837
+ return getParentWbs(t.id) === taskId;
838
+ });
839
+ return children.flatMap(function (child) {
840
+ return [child.id].concat(getDescendants(child.id, allTasks));
841
+ });
842
+ };
843
+
844
+ var recursiveOpen = function recursiveOpen(taskId, allTasks) {
845
+ var task = allTasks.find(function (t) {
846
+ return t.id === taskId;
847
+ });
848
+ if (!task) return;
849
+
850
+ if (!expandedTasks.current.includes(taskId) && task.hideChildren) {
851
+ onExpanderClick(task);
852
+ expandedTasks.current = [].concat(expandedTasks.current, [taskId]);
853
+ }
854
+
855
+ var children = allTasks.filter(function (t) {
856
+ return getParentWbs(t.id) === taskId;
857
+ });
858
+ children.forEach(function (c) {
859
+ return recursiveOpen(c.id, allTasks);
860
+ });
861
+ };
862
+
863
+ var handleTaskSelect = function handleTaskSelect(taskId, selected) {
864
+ setPendingTaskSelect(function (prev) {
865
+ return [].concat(prev, [{
866
+ taskId: taskId,
867
+ selected: selected
868
+ }]);
869
+ });
770
870
  };
771
871
 
772
872
  var handleSelectAll = function handleSelectAll(selected) {
773
873
  if (selected) {
774
- setSelectedTasks(tasks.map(function (task) {
775
- return task.id;
874
+ var topLevelTasks = tasks.filter(function (task) {
875
+ return !getParentWbs(task.id);
876
+ });
877
+ setPendingTaskSelect(topLevelTasks.map(function (task) {
878
+ return {
879
+ taskId: task.id,
880
+ selected: true
881
+ };
776
882
  }));
777
883
  } else {
778
884
  setSelectedTasks([]);
885
+ setPendingTaskSelect([]);
779
886
  }
780
887
  };
781
888
 
@@ -3497,6 +3604,11 @@ function colorPath(path, color, tasks, criticalPathType) {
3497
3604
  _loop(_i7);
3498
3605
  }
3499
3606
  }
3607
+ var getParentWbs = function getParentWbs(wbs) {
3608
+ var segments = wbs.split('.');
3609
+ if (segments.length <= 1) return undefined;
3610
+ return segments.slice(0, -1).join('.');
3611
+ };
3500
3612
 
3501
3613
  export { Gantt, ViewMode, getCriticalPaths };
3502
3614
  //# sourceMappingURL=index.modern.js.map