gantt-task-react-powern 0.6.0 → 0.6.2

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.
@@ -1,4 +1,5 @@
1
1
  import React, { useMemo, useRef, useState, useEffect } from 'react';
2
+ import { useVirtualizer } from '@tanstack/react-virtual';
2
3
 
3
4
  function _extends() {
4
5
  _extends = Object.assign || function (target) {
@@ -423,7 +424,8 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
423
424
  _ref$taskLabelRendere = _ref.taskLabelRenderer,
424
425
  taskLabelRenderer = _ref$taskLabelRendere === void 0 ? function (t) {
425
426
  return " " + t.name;
426
- } : _ref$taskLabelRendere;
427
+ } : _ref$taskLabelRendere,
428
+ virtualItems = _ref.virtualItems;
427
429
  var toLocaleDateString = useMemo(function () {
428
430
  return toLocaleDateStringFactory(locale);
429
431
  }, [locale]);
@@ -444,13 +446,25 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
444
446
  return hasSelectedAncestor(parentWbs, selectedSet, allTasks);
445
447
  };
446
448
 
449
+ var itemsToRender = virtualItems || tasks.map(function (_, index) {
450
+ return {
451
+ index: index,
452
+ start: index * rowHeight,
453
+ size: rowHeight,
454
+ key: index,
455
+ end: (index + 1) * rowHeight,
456
+ lane: 0,
457
+ measureElement: function measureElement() {}
458
+ };
459
+ });
447
460
  return React.createElement("div", {
448
461
  className: styles$1.taskListWrapper,
449
462
  style: {
450
463
  fontFamily: fontFamily,
451
464
  fontSize: fontSize
452
465
  }
453
- }, tasks.map(function (t) {
466
+ }, itemsToRender.map(function (vi) {
467
+ var t = tasks[vi.index];
454
468
  var expanderSymbol = "";
455
469
 
456
470
  if (!(leafTaskIds.has(t.id) || t.type === "milestone")) {
@@ -464,6 +478,17 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
464
478
  var isSelected = selectedTasks.includes(t.id);
465
479
  var isAncestorSelected = hasSelectedAncestor(t.id, new Set(selectedTasks), tasks);
466
480
  return React.createElement("div", {
481
+ key: "" + vi.key,
482
+ "data-index": vi.index,
483
+ style: {
484
+ position: "absolute",
485
+ top: 0,
486
+ left: 0,
487
+ width: "100%",
488
+ height: vi.size + "px",
489
+ transform: "translateY(" + vi.start + "px)"
490
+ }
491
+ }, React.createElement("div", {
467
492
  className: t.type === "milestone" ? styles$1.taskListMilestoneRow : scheduleType === "lookAhead" ? styles$1.taskListLookAheadRow : styles$1.taskListTableRow,
468
493
  style: {
469
494
  height: rowHeight
@@ -567,7 +592,7 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
567
592
  }
568
593
  }, React.createElement("div", {
569
594
  className: styles$1.taskListText
570
- }, "\xA0", toLocaleDateString(t.actualEnd, dateTimeOptions))));
595
+ }, "\xA0", toLocaleDateString(t.actualEnd, dateTimeOptions)))));
571
596
  }));
572
597
  };
573
598
 
@@ -759,6 +784,16 @@ var TaskList = function TaskList(_ref) {
759
784
 
760
785
  var prevSelectedTasksRef = useRef([]);
761
786
  var expandedTasks = useRef([]);
787
+ var virtualizer = useVirtualizer({
788
+ count: tasks.length,
789
+ getScrollElement: function getScrollElement() {
790
+ return horizontalContainerRef.current;
791
+ },
792
+ estimateSize: function estimateSize() {
793
+ return rowHeight;
794
+ },
795
+ overscan: 5
796
+ });
762
797
  useEffect(function () {
763
798
  if (horizontalContainerRef.current) {
764
799
  horizontalContainerRef.current.scrollTop = scrollY;
@@ -910,8 +945,10 @@ var TaskList = function TaskList(_ref) {
910
945
  onExpanderClick: onExpanderClick,
911
946
  selectedTasks: onMultiSelect ? selectedTasks : undefined,
912
947
  onTaskSelect: onMultiSelect ? handleTaskSelect : undefined,
913
- taskLabelRenderer: taskLabelRenderer
948
+ taskLabelRenderer: taskLabelRenderer,
949
+ virtualItems: virtualizer.getVirtualItems()
914
950
  };
951
+ console.debug(virtualizer.getTotalSize());
915
952
  return React.createElement("div", {
916
953
  ref: taskListRef
917
954
  }, React.createElement(TaskListHeader, Object.assign({}, headerProps)), React.createElement("div", {
@@ -920,7 +957,13 @@ var TaskList = function TaskList(_ref) {
920
957
  style: ganttHeight ? {
921
958
  height: ganttHeight
922
959
  } : {}
923
- }, React.createElement(TaskListTable, Object.assign({}, tableProps))));
960
+ }, React.createElement("div", {
961
+ style: {
962
+ height: virtualizer.getTotalSize() + "px",
963
+ width: "100%",
964
+ position: "relative"
965
+ }
966
+ }, React.createElement(TaskListTable, Object.assign({}, tableProps)))));
924
967
  };
925
968
 
926
969
  var styles$4 = {"gridRow":"_2dZTy","gridRowLookAhead":"_2RRca","gridRowLine":"_3rUKi","gridTick":"_RuwuK","darkerGridRow":"_2M-tt"};
@@ -934,103 +977,123 @@ var GridBody = function GridBody(_ref) {
934
977
  columnWidth = _ref.columnWidth,
935
978
  todayColor = _ref.todayColor,
936
979
  weekendColor = _ref.weekendColor,
937
- rtl = _ref.rtl;
938
- var y = 0;
939
- var gridRows = [];
940
- var rowLines = [React.createElement("line", {
941
- key: "RowLineFirst",
942
- x: "0",
943
- y1: 0,
944
- x2: svgWidth,
945
- y2: 0,
946
- className: styles$4.gridRowLine
947
- })];
948
-
949
- for (var _iterator = _createForOfIteratorHelperLoose(tasks), _step; !(_step = _iterator()).done;) {
950
- var task = _step.value;
951
- var isDarkerRow = task.type === "milestone";
952
- gridRows.push(React.createElement("rect", {
953
- key: "Row" + task.id,
954
- x: "0",
955
- y: y,
956
- width: svgWidth,
957
- height: rowHeight,
958
- className: isDarkerRow ? styles$4.darkerGridRow : scheduleType === "lookAhead" ? styles$4.gridRowLookAhead : styles$4.gridRow
959
- }));
960
- rowLines.push(React.createElement("line", {
961
- key: "RowLine" + task.id,
962
- x: "0",
963
- y1: y + rowHeight,
964
- x2: svgWidth,
965
- y2: y + rowHeight,
966
- className: styles$4.gridRowLine
967
- }));
968
- y += rowHeight;
969
- }
970
-
980
+ rtl = _ref.rtl,
981
+ _ref$virtualItems = _ref.virtualItems,
982
+ virtualItems = _ref$virtualItems === void 0 ? [] : _ref$virtualItems,
983
+ visibleStartY = _ref.visibleStartY,
984
+ visibleEndY = _ref.visibleEndY;
985
+ var visibleHeight = visibleEndY - visibleStartY;
986
+ var items = virtualItems.length > 0 ? virtualItems : tasks.map(function (_, i) {
987
+ return {
988
+ index: i,
989
+ start: i * rowHeight,
990
+ end: (i + 1) * rowHeight,
991
+ size: rowHeight,
992
+ key: i
993
+ };
994
+ });
971
995
  var now = new Date();
972
- var tickX = 0;
973
- var ticks = [];
974
- var today = React.createElement("rect", null);
975
- var weekend = [];
996
+ var x = 0;
997
+ var todayRects = [];
998
+ var weekendRects = [];
976
999
 
977
1000
  for (var i = 0; i < dates.length; i++) {
978
1001
  var date = dates[i];
979
- ticks.push(React.createElement("line", {
980
- key: date.getTime(),
981
- x1: tickX,
982
- y1: 0,
983
- x2: tickX,
984
- y2: y,
985
- className: styles$4.gridTick
986
- }));
1002
+ var isTodayColumn = i + 1 < dates.length && date.getTime() < now.getTime() && dates[i + 1].getTime() >= now.getTime() || i + 1 === dates.length && date.getTime() <= now.getTime() && addToDate(date, date.getTime() - dates[i - 1].getTime(), "millisecond").getTime() > now.getTime();
987
1003
 
988
- if (i + 1 !== dates.length && date.getTime() < now.getTime() && dates[i + 1].getTime() >= now.getTime() || i !== 0 && i + 1 === dates.length && date.getTime() < now.getTime() && addToDate(date, date.getTime() - dates[i - 1].getTime(), "millisecond").getTime() >= now.getTime()) {
989
- today = React.createElement("rect", {
990
- x: tickX,
991
- y: 0,
1004
+ if (isTodayColumn) {
1005
+ todayRects.push(React.createElement("rect", {
1006
+ key: "today-" + i,
1007
+ x: rtl ? x + columnWidth : x,
1008
+ y: visibleStartY,
992
1009
  width: columnWidth,
993
- height: y,
1010
+ height: visibleHeight,
994
1011
  fill: todayColor
995
- });
1012
+ }));
996
1013
  }
997
1014
 
998
- if (date.getDay() === 6 || date.getDay() === 0) {
999
- weekend.push(React.createElement("rect", {
1000
- x: tickX,
1001
- y: 0,
1015
+ if (rtl && i + 1 < dates.length && date.getTime() >= now.getTime() && dates[i + 1].getTime() < now.getTime()) {
1016
+ todayRects.push(React.createElement("rect", {
1017
+ key: "today-rtl-" + i,
1018
+ x: x,
1019
+ y: visibleStartY,
1002
1020
  width: columnWidth,
1003
- height: y,
1004
- fill: weekendColor
1021
+ height: visibleHeight,
1022
+ fill: todayColor
1005
1023
  }));
1006
1024
  }
1007
1025
 
1008
- if (rtl && i + 1 !== dates.length && date.getTime() >= now.getTime() && dates[i + 1].getTime() < now.getTime()) {
1009
- today = React.createElement("rect", {
1010
- x: tickX + columnWidth,
1011
- y: 0,
1026
+ if (date.getDay() === 0 || date.getDay() === 6) {
1027
+ weekendRects.push(React.createElement("rect", {
1028
+ key: "weekend-" + i,
1029
+ x: x,
1030
+ y: visibleStartY,
1012
1031
  width: columnWidth,
1013
- height: y,
1014
- fill: todayColor
1015
- });
1032
+ height: visibleHeight,
1033
+ fill: weekendColor
1034
+ }));
1016
1035
  }
1017
1036
 
1018
- tickX += columnWidth;
1037
+ x += columnWidth;
1019
1038
  }
1020
1039
 
1040
+ x = 0;
1041
+ var tickLines = dates.map(function (_, i) {
1042
+ var line = React.createElement("line", {
1043
+ key: "tick-" + i,
1044
+ x1: x,
1045
+ y1: visibleStartY,
1046
+ x2: x,
1047
+ y2: visibleEndY,
1048
+ className: styles$4.gridTick
1049
+ });
1050
+ x += columnWidth;
1051
+ return line;
1052
+ });
1053
+ var rowBackgrounds = [];
1054
+ var rowLines = [];
1055
+ rowLines.push(React.createElement("line", {
1056
+ key: "top",
1057
+ x1: 0,
1058
+ y1: visibleStartY,
1059
+ x2: svgWidth,
1060
+ y2: visibleStartY,
1061
+ className: styles$4.gridRowLine
1062
+ }));
1063
+ items.forEach(function (vi) {
1064
+ var task = tasks[vi.index];
1065
+ var y = vi.start;
1066
+ var isMilestone = task.type === "milestone";
1067
+ rowBackgrounds.push(React.createElement("rect", {
1068
+ key: "bg-" + vi.key,
1069
+ x: 0,
1070
+ y: y,
1071
+ width: svgWidth,
1072
+ height: rowHeight,
1073
+ className: isMilestone ? styles$4.darkerGridRow : scheduleType === "lookAhead" ? styles$4.gridRowLookAhead : styles$4.gridRow
1074
+ }));
1075
+ rowLines.push(React.createElement("line", {
1076
+ key: "line-" + vi.key,
1077
+ x1: 0,
1078
+ y1: y + rowHeight,
1079
+ x2: svgWidth,
1080
+ y2: y + rowHeight,
1081
+ className: styles$4.gridRowLine
1082
+ }));
1083
+ });
1021
1084
  return React.createElement("g", {
1022
1085
  className: "gridBody"
1023
1086
  }, React.createElement("g", {
1024
1087
  className: "rows"
1025
- }, gridRows), React.createElement("g", {
1088
+ }, rowBackgrounds), React.createElement("g", {
1026
1089
  className: "rowLines"
1027
1090
  }, rowLines), React.createElement("g", {
1028
1091
  className: "ticks"
1029
- }, ticks), scheduleType === "lookAhead" && React.createElement("g", {
1092
+ }, tickLines), scheduleType === "lookAhead" && React.createElement("g", {
1030
1093
  className: "weekend"
1031
- }, weekend), React.createElement("g", {
1094
+ }, weekendRects), React.createElement("g", {
1032
1095
  className: "today"
1033
- }, today));
1096
+ }, todayRects));
1034
1097
  };
1035
1098
 
1036
1099
  var Grid = function Grid(props) {
@@ -2463,6 +2526,10 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2463
2526
  fontFamily = _ref.fontFamily,
2464
2527
  fontSize = _ref.fontSize,
2465
2528
  rtl = _ref.rtl,
2529
+ _ref$virtualItems = _ref.virtualItems,
2530
+ virtualItems = _ref$virtualItems === void 0 ? [] : _ref$virtualItems,
2531
+ ganttHeight = _ref.ganttHeight,
2532
+ scrollY = _ref.scrollY,
2466
2533
  setGanttEvent = _ref.setGanttEvent,
2467
2534
  setFailedTask = _ref.setFailedTask,
2468
2535
  setSelectedTask = _ref.setSelectedTask,
@@ -2678,16 +2745,13 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2678
2745
  };
2679
2746
 
2680
2747
  var getArrows = function getArrows(isCritical, criticalPathType) {
2748
+ var visibleMinY = scrollY - rowHeight * 5;
2749
+ var visibleMaxY = scrollY + ganttHeight + rowHeight * 5;
2681
2750
  return tasks.flatMap(function (_task) {
2682
2751
  var task = _task.start.getTime() > 0 && _task.end.getTime() > 0 ? _task : undefined;
2683
2752
 
2684
2753
  if (!task) {
2685
- return [React.createElement("g", {
2686
- key: _task.id + (isCritical ? "-critical" : "-normal"),
2687
- style: {
2688
- height: taskHeight
2689
- }
2690
- })];
2754
+ return [];
2691
2755
  }
2692
2756
 
2693
2757
  return task.barChildren.map(function (child) {
@@ -2697,6 +2761,15 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2697
2761
  var criticalTask = (_task$criticalPathArr = task.criticalPathArrows) === null || _task$criticalPathArr === void 0 ? void 0 : _task$criticalPathArr.find(function (arrow) {
2698
2762
  return arrow.taskId === tasks[child.index].id && (!!arrow.criticalPathType ? arrow.criticalPathType === criticalPathType : !criticalPathType);
2699
2763
  });
2764
+ var taskTo = tasks[child.index];
2765
+ var yFrom = task.y + taskHeight / 2;
2766
+ var yTo = taskTo.y + taskHeight / 2;
2767
+ var minY = Math.min(yFrom, yTo);
2768
+ var maxY = Math.max(yFrom, yTo);
2769
+
2770
+ if (maxY < visibleMinY || minY > visibleMaxY) {
2771
+ return null;
2772
+ }
2700
2773
 
2701
2774
  if (!!criticalTask === isCritical) {
2702
2775
  return React.createElement(Arrow, {
@@ -2725,34 +2798,44 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2725
2798
  className: "bar",
2726
2799
  fontFamily: fontFamily,
2727
2800
  fontSize: fontSize
2728
- }, tasks.map(function (_task) {
2729
- var task = _task.start.getTime() > 0 && _task.end.getTime() > 0 || _task.actualStart.getTime() > 0 && _task.actualEnd.getTime() > 0 ? _task : undefined;
2801
+ }, virtualItems.map(function (vi) {
2802
+ var _task = tasks[vi.index];
2803
+
2804
+ var task = _extends({}, _task, {
2805
+ y: 0
2806
+ });
2730
2807
 
2731
2808
  if (!task && _task.typeInternal === "milestone") {
2732
- return React.createElement(Milestone, {
2733
- task: _task,
2809
+ return React.createElement("g", {
2810
+ key: _task.id,
2811
+ transform: "translate(0, " + vi.start + ")"
2812
+ }, React.createElement(Milestone, {
2813
+ task: task,
2734
2814
  arrowIndent: arrowIndent,
2735
2815
  taskHeight: taskHeight,
2736
2816
  isProgressChangeable: false,
2737
2817
  isDateChangeable: false,
2738
2818
  isDelete: !_task.isDisabled,
2739
2819
  onEventStart: handleBarEventStart,
2740
- key: _task.id,
2741
2820
  isSelected: !!selectedTask && _task.id === selectedTask.id,
2742
2821
  rtl: rtl
2743
- });
2822
+ }));
2744
2823
  }
2745
2824
 
2746
2825
  if (!task) {
2747
2826
  return React.createElement("g", {
2748
2827
  key: _task.id,
2828
+ transform: "translate(0, " + vi.start + ")",
2749
2829
  style: {
2750
2830
  height: taskHeight
2751
2831
  }
2752
2832
  });
2753
2833
  }
2754
2834
 
2755
- return React.createElement(TaskItem, {
2835
+ return React.createElement("g", {
2836
+ key: task.id,
2837
+ transform: "translate(0, " + vi.start + ")"
2838
+ }, React.createElement(TaskItem, {
2756
2839
  task: task,
2757
2840
  arrowIndent: arrowIndent,
2758
2841
  taskHeight: taskHeight,
@@ -2760,10 +2843,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2760
2843
  isDateChangeable: !!onDateChange && !task.isDisabled,
2761
2844
  isDelete: !task.isDisabled,
2762
2845
  onEventStart: handleBarEventStart,
2763
- key: task.id,
2764
2846
  isSelected: !!selectedTask && task.id === selectedTask.id,
2765
2847
  rtl: rtl
2766
- });
2848
+ }));
2767
2849
  })));
2768
2850
  };
2769
2851
 
@@ -2781,9 +2863,24 @@ var TaskGantt = function TaskGantt(_ref) {
2781
2863
  var verticalGanttContainerRef = useRef(null);
2782
2864
 
2783
2865
  var newBarProps = _extends({}, barProps, {
2784
- svg: ganttSVGRef
2866
+ svg: ganttSVGRef,
2867
+ ganttHeight: ganttHeight,
2868
+ scrollY: scrollY
2785
2869
  });
2786
2870
 
2871
+ var buffer = barProps.rowHeight * 10;
2872
+ var visibleStartY = scrollY - buffer;
2873
+ var visibleEndY = scrollY + ganttHeight + buffer;
2874
+ var virtualizer = useVirtualizer({
2875
+ count: barProps.tasks.length,
2876
+ getScrollElement: function getScrollElement() {
2877
+ return horizontalContainerRef.current;
2878
+ },
2879
+ estimateSize: function estimateSize() {
2880
+ return barProps.rowHeight;
2881
+ },
2882
+ overscan: 20
2883
+ });
2787
2884
  useEffect(function () {
2788
2885
  if (horizontalContainerRef.current) {
2789
2886
  horizontalContainerRef.current.scrollTop = scrollY;
@@ -2815,10 +2912,16 @@ var TaskGantt = function TaskGantt(_ref) {
2815
2912
  }, React.createElement("svg", {
2816
2913
  xmlns: "http://www.w3.org/2000/svg",
2817
2914
  width: gridProps.svgWidth,
2818
- height: barProps.rowHeight * barProps.tasks.length,
2915
+ height: virtualizer.getTotalSize(),
2819
2916
  fontFamily: barProps.fontFamily,
2820
2917
  ref: ganttSVGRef
2821
- }, React.createElement(Grid, Object.assign({}, gridProps)), React.createElement(TaskGanttContent, Object.assign({}, newBarProps)))));
2918
+ }, React.createElement(Grid, Object.assign({}, gridProps, {
2919
+ virtualItems: virtualizer.getVirtualItems(),
2920
+ visibleStartY: visibleStartY,
2921
+ visibleEndY: visibleEndY
2922
+ })), React.createElement(TaskGanttContent, Object.assign({}, newBarProps, {
2923
+ virtualItems: virtualizer.getVirtualItems()
2924
+ })))));
2822
2925
  };
2823
2926
 
2824
2927
  var styles$a = {"scrollWrapper":"_2k9Ys","scroll":"_19jgW"};
@@ -3019,6 +3122,9 @@ var Gantt = function Gantt(_ref) {
3019
3122
  lastTouchY = _useState14[0],
3020
3123
  setLastTouchY = _useState14[1];
3021
3124
 
3125
+ var buffer = rowHeight * 10;
3126
+ var visibleStartY = scrollY - buffer;
3127
+ var visibleEndY = scrollY + ganttHeight + buffer;
3022
3128
  useEffect(function () {
3023
3129
  if (scheduleType === "lookAhead" && startDate && endDate) {
3024
3130
  setDateSetup({
@@ -3075,7 +3181,7 @@ var Gantt = function Gantt(_ref) {
3075
3181
  }
3076
3182
 
3077
3183
  setBarTasks(convertToBarTasks(filteredTasks, newDates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor));
3078
- }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, columnWidth, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, scrollX, onExpanderClick]);
3184
+ }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, columnWidth, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, onExpanderClick]);
3079
3185
  useEffect(function () {
3080
3186
  if (viewMode === dateSetup.viewMode && (viewDate && !currentViewDate || viewDate && (currentViewDate === null || currentViewDate === void 0 ? void 0 : currentViewDate.valueOf()) !== viewDate.valueOf())) {
3081
3187
  var dates = dateSetup.dates;
@@ -3350,7 +3456,9 @@ var Gantt = function Gantt(_ref) {
3350
3456
  dates: dateSetup.dates,
3351
3457
  todayColor: todayColor,
3352
3458
  weekendColor: weekendColor,
3353
- rtl: rtl
3459
+ rtl: rtl,
3460
+ visibleStartY: visibleStartY,
3461
+ visibleEndY: visibleEndY
3354
3462
  };
3355
3463
  var calendarProps = {
3356
3464
  dateSetup: dateSetup,
@@ -3384,7 +3492,9 @@ var Gantt = function Gantt(_ref) {
3384
3492
  onProgressChange: onProgressChange,
3385
3493
  onDoubleClick: onDoubleClick,
3386
3494
  onClick: onClick,
3387
- onDelete: onDelete
3495
+ onDelete: onDelete,
3496
+ ganttHeight: ganttHeight,
3497
+ scrollY: scrollY
3388
3498
  };
3389
3499
  var tableProps = {
3390
3500
  rowHeight: rowHeight,
@@ -3512,6 +3622,14 @@ function getCriticalPaths(leafTasks) {
3512
3622
  }
3513
3623
  }
3514
3624
 
3625
+ var printedList = taskChainList.map(function (elem) {
3626
+ var newElem = _extends({}, elem);
3627
+
3628
+ newElem.duration = Math.round(elem.duration / 86400000);
3629
+ return newElem;
3630
+ });
3631
+ console.debug(printedList);
3632
+
3515
3633
  if (taskChainList.length > 0) {
3516
3634
  taskChainList.sort(function (a, b) {
3517
3635
  return b.duration - a.duration;
@@ -3623,25 +3741,27 @@ function computeCriticalPath(taskID, taskMap) {
3623
3741
  }
3624
3742
  }
3625
3743
 
3626
- var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;
3744
+ if (paths.length === 0) {
3745
+ var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;
3627
3746
 
3628
- if (taskMap[taskID].paths.length < 2) {
3629
- taskMap[taskID].paths.push({
3630
- duration: immediateChildDuration,
3631
- task: dependents[j],
3632
- parent: taskID,
3633
- visited: false
3634
- });
3635
- } else if (immediateChildDuration > taskMap[taskID].paths[0].duration) {
3636
- taskMap[taskID].paths[0].duration = immediateChildDuration;
3637
- taskMap[taskID].paths[0].task = dependents[j];
3638
- taskMap[taskID].paths[0].parent = taskID;
3639
- taskMap[taskID].paths[0].visited = false;
3640
- } else if (immediateChildDuration > taskMap[taskID].paths[1].duration) {
3641
- taskMap[taskID].paths[1].duration = immediateChildDuration;
3642
- taskMap[taskID].paths[1].task = dependents[j];
3643
- taskMap[taskID].paths[1].parent = taskID;
3644
- taskMap[taskID].paths[1].visited = false;
3747
+ if (taskMap[taskID].paths.length < 2) {
3748
+ taskMap[taskID].paths.push({
3749
+ duration: immediateChildDuration,
3750
+ task: dependents[j],
3751
+ parent: taskID,
3752
+ visited: false
3753
+ });
3754
+ } else if (immediateChildDuration > taskMap[taskID].paths[0].duration) {
3755
+ taskMap[taskID].paths[0].duration = immediateChildDuration;
3756
+ taskMap[taskID].paths[0].task = dependents[j];
3757
+ taskMap[taskID].paths[0].parent = taskID;
3758
+ taskMap[taskID].paths[0].visited = false;
3759
+ } else if (immediateChildDuration > taskMap[taskID].paths[1].duration) {
3760
+ taskMap[taskID].paths[1].duration = immediateChildDuration;
3761
+ taskMap[taskID].paths[1].task = dependents[j];
3762
+ taskMap[taskID].paths[1].parent = taskID;
3763
+ taskMap[taskID].paths[1].visited = false;
3764
+ }
3645
3765
  }
3646
3766
  }
3647
3767
  }