gantt-task-react-powern 0.6.28 → 0.6.30

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.
@@ -49,5 +49,6 @@ export declare type TaskListProps = {
49
49
  }>;
50
50
  containerWidth?: number;
51
51
  innerScrollRef?: React.RefObject<HTMLDivElement>;
52
+ horizontalContainerRef?: React.RefObject<HTMLDivElement>;
52
53
  } & EventOption;
53
54
  export declare const TaskList: React.FC<TaskListProps>;
package/dist/index.js CHANGED
@@ -898,8 +898,26 @@ var TaskList = function TaskList(_ref) {
898
898
  taskLabelRenderer = _ref.taskLabelRenderer,
899
899
  onMultiSelect = _ref.onMultiSelect,
900
900
  containerWidth = _ref.containerWidth,
901
- innerScrollRef = _ref.innerScrollRef;
902
- var horizontalContainerRef = React.useRef(null);
901
+ innerScrollRef = _ref.innerScrollRef,
902
+ externalHorizontalContainerRef = _ref.horizontalContainerRef;
903
+ var internalHorizontalContainerRef = React.useRef(null);
904
+ var horizontalContainerRef = externalHorizontalContainerRef != null ? externalHorizontalContainerRef : internalHorizontalContainerRef;
905
+ var headerScrollRef = React.useRef(null);
906
+ React.useEffect(function () {
907
+ var rowsEl = horizontalContainerRef.current;
908
+ if (!rowsEl) return;
909
+
910
+ var onScroll = function onScroll() {
911
+ if (headerScrollRef.current) {
912
+ headerScrollRef.current.scrollLeft = rowsEl.scrollLeft;
913
+ }
914
+ };
915
+
916
+ rowsEl.addEventListener("scroll", onScroll);
917
+ return function () {
918
+ return rowsEl.removeEventListener("scroll", onScroll);
919
+ };
920
+ }, [horizontalContainerRef]);
903
921
 
904
922
  var _useState = React.useState([]),
905
923
  selectedTasks = _useState[0],
@@ -1086,9 +1104,14 @@ var TaskList = function TaskList(_ref) {
1086
1104
  ref: innerScrollRef,
1087
1105
  className: styles$4.hideScrollbar,
1088
1106
  style: {
1089
- overflowX: "auto"
1107
+ overflowX: "hidden"
1090
1108
  }
1091
- }, React__default.createElement(TaskListHeader, Object.assign({}, headerProps)), React__default.createElement("div", {
1109
+ }, React__default.createElement("div", {
1110
+ ref: headerScrollRef,
1111
+ style: {
1112
+ overflow: "hidden"
1113
+ }
1114
+ }, React__default.createElement(TaskListHeader, Object.assign({}, headerProps))), React__default.createElement("div", {
1092
1115
  ref: horizontalContainerRef,
1093
1116
  className: horizontalContainerClass,
1094
1117
  style: ganttHeight ? {
@@ -1356,6 +1379,7 @@ var GridBody = function GridBody(_ref) {
1356
1379
  });
1357
1380
  var rowBackgrounds = [];
1358
1381
  var rowLines = [];
1382
+ var rowOverlays = [];
1359
1383
  rowLines.push(React__default.createElement("line", {
1360
1384
  key: "top-line",
1361
1385
  x1: 0,
@@ -1364,6 +1388,7 @@ var GridBody = function GridBody(_ref) {
1364
1388
  y2: visibleStartY,
1365
1389
  className: styles$5.gridRowLine
1366
1390
  }));
1391
+ var showPerRowOffDays = viewMode !== exports.ViewMode.Month && viewMode !== exports.ViewMode.Quarter;
1367
1392
 
1368
1393
  for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
1369
1394
  var vi = _step.value;
@@ -1388,6 +1413,63 @@ var GridBody = function GridBody(_ref) {
1388
1413
  y2: y + rowHeight,
1389
1414
  className: styles$5.gridRowLine
1390
1415
  }));
1416
+
1417
+ if (showPerRowOffDays) {
1418
+ var rowEven = vi.index % 2 === 1;
1419
+ var rowFill = isMilestone ? "#e6e4e4" : scheduleType === "lookAhead" ? "#fff" : rowEven ? "#f5f5f5" : "#fff";
1420
+ rowOverlays.push(React__default.createElement("rect", {
1421
+ key: "row-clean-" + vi.key,
1422
+ x: 0,
1423
+ y: y,
1424
+ width: svgWidth,
1425
+ height: rowHeight,
1426
+ fill: rowFill
1427
+ }));
1428
+ var cal = task.calendar;
1429
+
1430
+ if (cal) {
1431
+ for (var _i = 0, _x = 0; _i < dates.length; _i++, _x += columnWidth) {
1432
+ var _dates2;
1433
+
1434
+ var _pEnd = (_dates2 = dates[_i + 1]) != null ? _dates2 : addToDate(dates[_i], 1, "day");
1435
+
1436
+ var _periodMs = _pEnd.getTime() - dates[_i].getTime();
1437
+
1438
+ if (_periodMs <= 0) continue;
1439
+
1440
+ var _cursor = new Date(dates[_i]);
1441
+
1442
+ _cursor.setHours(0, 0, 0, 0);
1443
+
1444
+ while (_cursor.getTime() < _pEnd.getTime()) {
1445
+ if (isOffDay(_cursor, cal)) {
1446
+ var _ds = _cursor.getTime() - dates[_i].getTime();
1447
+
1448
+ var _de = _ds + 86400000;
1449
+
1450
+ var _startFrac = Math.max(0, _ds) / _periodMs;
1451
+
1452
+ var _endFrac = Math.min(_periodMs, _de) / _periodMs;
1453
+
1454
+ var _rw = (_endFrac - _startFrac) * columnWidth;
1455
+
1456
+ if (_rw > 0.5) {
1457
+ rowOverlays.push(React__default.createElement("rect", {
1458
+ key: "row-offday-" + vi.key + "-" + _cursor.getTime(),
1459
+ x: rtl ? _x + columnWidth - (_startFrac * columnWidth + _rw) : _x + _startFrac * columnWidth,
1460
+ y: y,
1461
+ width: _rw,
1462
+ height: rowHeight,
1463
+ fill: weekendColor
1464
+ }));
1465
+ }
1466
+ }
1467
+
1468
+ _cursor.setDate(_cursor.getDate() + 1);
1469
+ }
1470
+ }
1471
+ }
1472
+ }
1391
1473
  }
1392
1474
 
1393
1475
  return React__default.createElement("g", {
@@ -1399,6 +1481,8 @@ var GridBody = function GridBody(_ref) {
1399
1481
  }, rowLines), React__default.createElement("g", {
1400
1482
  className: "offdays"
1401
1483
  }, offDayRects), React__default.createElement("g", {
1484
+ className: "rowOverlays"
1485
+ }, rowOverlays), React__default.createElement("g", {
1402
1486
  className: "ticks"
1403
1487
  }, tickLines), React__default.createElement("g", {
1404
1488
  className: "today"
@@ -2123,9 +2207,9 @@ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHei
2123
2207
  var plannedSegments;
2124
2208
  var actualSegments;
2125
2209
 
2126
- if (task.calender && task.start && task.end && task.start.getTime() > 0) {
2210
+ if (task.calendar && task.start && task.end && task.start.getTime() > 0) {
2127
2211
  var planEnd = addToDate(startOfDate(task.end, "day"), 1, "day");
2128
- var intervals = getWorkingIntervals(task.start, planEnd, task.calender);
2212
+ var intervals = getWorkingIntervals(task.start, planEnd, task.calendar);
2129
2213
  var segs = intervals.map(function (iv) {
2130
2214
  return {
2131
2215
  x1: taskXCoordinate(iv.start, dates, columnWidth),
@@ -2137,10 +2221,10 @@ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHei
2137
2221
  if (segs.length > 0) plannedSegments = segs;
2138
2222
  }
2139
2223
 
2140
- if (task.calender && task.actualStart && task.actualEnd && task.actualStart.getTime() > 0) {
2224
+ if (task.calendar && task.actualStart && task.actualEnd && task.actualStart.getTime() > 0) {
2141
2225
  var actEnd = addToDate(startOfDate(task.actualEnd, "day"), 1, "day");
2142
2226
 
2143
- var _intervals = getWorkingIntervals(task.actualStart, actEnd, task.calender);
2227
+ var _intervals = getWorkingIntervals(task.actualStart, actEnd, task.calendar);
2144
2228
 
2145
2229
  var _segs = _intervals.map(function (iv) {
2146
2230
  return {
@@ -3124,8 +3208,8 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3124
3208
 
3125
3209
  var dragType = ganttEvent.type;
3126
3210
 
3127
- if (changedTask.calender && (ganttEvent.action === "end" || ganttEvent.action === "start" || ganttEvent.action === "move")) {
3128
- var cal = finalTask.calender;
3211
+ if (changedTask.calendar && (ganttEvent.action === "end" || ganttEvent.action === "start" || ganttEvent.action === "move")) {
3212
+ var cal = finalTask.calendar;
3129
3213
 
3130
3214
  if (dragType === "actual") {
3131
3215
  if (ganttEvent.action === "end") {
@@ -3246,8 +3330,8 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3246
3330
  var isNotLikeOriginal = originalSelectedTask.start !== newChangedTask.start || originalSelectedTask.end !== newChangedTask.end || originalSelectedTask.actualStart !== newChangedTask.actualStart || originalSelectedTask.actualEnd !== newChangedTask.actualEnd || originalSelectedTask.progress !== newChangedTask.progress;
3247
3331
  var dropType = type;
3248
3332
 
3249
- if (newChangedTask.calender && (action === "move" || action === "end" || action === "start")) {
3250
- var cal = newChangedTask.calender;
3333
+ if (newChangedTask.calendar && (action === "move" || action === "end" || action === "start")) {
3334
+ var cal = newChangedTask.calendar;
3251
3335
 
3252
3336
  if (dropType === "actual") {
3253
3337
  if (action === "end") {
@@ -3544,18 +3628,6 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3544
3628
 
3545
3629
  var lineX = sliderTime !== undefined ? taskXCoordinate(new Date(sliderTime), dates, columnWidth) : null;
3546
3630
  var totalHeight = tasks.length * rowHeight;
3547
- React.useEffect(function () {
3548
- if (sliderTime !== undefined) {
3549
- console.log('Vertical line debug:', {
3550
- sliderTime: new Date(sliderTime).toLocaleString(),
3551
- lineX: lineX,
3552
- totalHeight: totalHeight,
3553
- tasksCount: tasks.length,
3554
- columnWidth: columnWidth,
3555
- datesRange: dates.length > 0 ? dates[0].toLocaleString() + " - " + dates[dates.length - 1].toLocaleString() : 'empty'
3556
- });
3557
- }
3558
- }, [sliderTime, lineX, totalHeight, tasks.length, dates, columnWidth]);
3559
3631
  return React__default.createElement("g", {
3560
3632
  className: "content"
3561
3633
  }, lineX !== null && lineX > 0 && React__default.createElement("line", {
@@ -3563,7 +3635,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3563
3635
  y1: 0,
3564
3636
  x2: lineX,
3565
3637
  y2: totalHeight,
3566
- stroke: "red",
3638
+ stroke: "blue",
3567
3639
  strokeWidth: 2,
3568
3640
  pointerEvents: "none",
3569
3641
  opacity: 0.8
@@ -3733,8 +3805,6 @@ var HorizontalScroll = function HorizontalScroll(_ref) {
3733
3805
  };
3734
3806
 
3735
3807
  var Gantt = function Gantt(_ref) {
3736
- var _tasks$find$calender, _tasks$find;
3737
-
3738
3808
  var tasks = _ref.tasks,
3739
3809
  _ref$leafTasks = _ref.leafTasks,
3740
3810
  leafTasks = _ref$leafTasks === void 0 ? [] : _ref$leafTasks,
@@ -3825,9 +3895,6 @@ var Gantt = function Gantt(_ref) {
3825
3895
  projectCalendar = _ref.projectCalendar,
3826
3896
  onCalendarError = _ref.onCalendarError,
3827
3897
  sliderTime = _ref.sliderTime;
3828
- var effectiveCalendar = (_tasks$find$calender = (_tasks$find = tasks.find(function (t) {
3829
- return t.calender;
3830
- })) === null || _tasks$find === void 0 ? void 0 : _tasks$find.calender) != null ? _tasks$find$calender : projectCalendar;
3831
3898
  var wrapperRef = React.useRef(null);
3832
3899
  var taskListRef = React.useRef(null);
3833
3900
  var isDraggingTable = React.useRef(false);
@@ -3840,6 +3907,7 @@ var Gantt = function Gantt(_ref) {
3840
3907
  setTableContainerWidth = _useState[1];
3841
3908
 
3842
3909
  var tableInnerScrollRef = React.useRef(null);
3910
+ var tableHorizontalContainerRef = React.useRef(null);
3843
3911
  var tableHScrollRef = React.useRef(null);
3844
3912
 
3845
3913
  var _useState2 = React.useState(0),
@@ -3875,18 +3943,20 @@ var Gantt = function Gantt(_ref) {
3875
3943
  setTaskListWidth = _useState5[1];
3876
3944
 
3877
3945
  React.useEffect(function () {
3878
- if (tableInnerScrollRef.current) {
3946
+ if (tableHorizontalContainerRef.current) {
3947
+ setTableScrollableWidth(tableHorizontalContainerRef.current.scrollWidth);
3948
+ } else if (tableInnerScrollRef.current) {
3879
3949
  setTableScrollableWidth(tableInnerScrollRef.current.scrollWidth);
3880
3950
  }
3881
3951
  }, [taskListWidth, listCellWidth]);
3882
3952
 
3883
3953
  var handleTableResizeMouseDown = function handleTableResizeMouseDown(e) {
3884
- var _taskListRef$current$, _taskListRef$current, _tableInnerScrollRef$, _tableInnerScrollRef$2, _wrapperRef$current$o, _wrapperRef$current;
3954
+ var _taskListRef$current$, _taskListRef$current, _ref2, _tableHorizontalConta, _tableHorizontalConta2, _tableInnerScrollRef$, _wrapperRef$current$o, _wrapperRef$current;
3885
3955
 
3886
3956
  isDraggingTable.current = true;
3887
3957
  dragStartX.current = e.clientX;
3888
3958
  dragStartWidth.current = tableContainerWidth != null ? tableContainerWidth : (_taskListRef$current$ = (_taskListRef$current = taskListRef.current) === null || _taskListRef$current === void 0 ? void 0 : _taskListRef$current.offsetWidth) != null ? _taskListRef$current$ : 0;
3889
- dragMaxWidth.current = (_tableInnerScrollRef$ = (_tableInnerScrollRef$2 = tableInnerScrollRef.current) === null || _tableInnerScrollRef$2 === void 0 ? void 0 : _tableInnerScrollRef$2.scrollWidth) != null ? _tableInnerScrollRef$ : Math.max(100, ((_wrapperRef$current$o = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.offsetWidth) != null ? _wrapperRef$current$o : Infinity) - 200);
3959
+ dragMaxWidth.current = (_ref2 = (_tableHorizontalConta = (_tableHorizontalConta2 = tableHorizontalContainerRef.current) === null || _tableHorizontalConta2 === void 0 ? void 0 : _tableHorizontalConta2.scrollWidth) != null ? _tableHorizontalConta : (_tableInnerScrollRef$ = tableInnerScrollRef.current) === null || _tableInnerScrollRef$ === void 0 ? void 0 : _tableInnerScrollRef$.scrollWidth) != null ? _ref2 : Math.max(100, ((_wrapperRef$current$o = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.offsetWidth) != null ? _wrapperRef$current$o : Infinity) - 200);
3890
3960
  e.preventDefault();
3891
3961
  };
3892
3962
 
@@ -4004,13 +4074,13 @@ var Gantt = function Gantt(_ref) {
4004
4074
  }
4005
4075
 
4006
4076
  debounceRef.current = setTimeout(function () {
4007
- var _effectiveCalendar$qu;
4077
+ var _projectCalendar$quar;
4008
4078
 
4009
4079
  var filteredTasks;
4010
4080
  filteredTasks = removeHiddenTasks(tasks);
4011
4081
  filteredTasks = filteredTasks.sort(sortTasks);
4012
4082
 
4013
- var _ganttDateRange2 = ganttDateRange(filteredTasks, viewMode, preStepsCount, (_effectiveCalendar$qu = effectiveCalendar === null || effectiveCalendar === void 0 ? void 0 : effectiveCalendar.quarter_start) != null ? _effectiveCalendar$qu : 0),
4083
+ var _ganttDateRange2 = ganttDateRange(filteredTasks, viewMode, preStepsCount, (_projectCalendar$quar = projectCalendar === null || projectCalendar === void 0 ? void 0 : projectCalendar.quarter_start) != null ? _projectCalendar$quar : 0),
4014
4084
  startDateRange = _ganttDateRange2[0],
4015
4085
  endDateRange = _ganttDateRange2[1];
4016
4086
 
@@ -4049,7 +4119,7 @@ var Gantt = function Gantt(_ref) {
4049
4119
  setBarTasks(convertToBarTasks(filteredTasks, newDates, effectiveColumnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor));
4050
4120
  setIsProcessing(false);
4051
4121
  }, delayToRender);
4052
- }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, shouldNotShowLoadingOverlay, effectiveColumnWidth, effectiveCalendar]);
4122
+ }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, shouldNotShowLoadingOverlay, effectiveColumnWidth, projectCalendar]);
4053
4123
  React.useEffect(function () {
4054
4124
  return function () {
4055
4125
  clearTimeout(debounceRef.current);
@@ -4321,7 +4391,7 @@ var Gantt = function Gantt(_ref) {
4321
4391
  rtl: rtl,
4322
4392
  visibleStartY: visibleStartY,
4323
4393
  visibleEndY: visibleEndY,
4324
- projectCalendar: effectiveCalendar,
4394
+ projectCalendar: projectCalendar,
4325
4395
  viewMode: viewMode
4326
4396
  };
4327
4397
  var calendarProps = {
@@ -4333,7 +4403,7 @@ var Gantt = function Gantt(_ref) {
4333
4403
  fontFamily: fontFamily,
4334
4404
  fontSize: fontSize,
4335
4405
  rtl: rtl,
4336
- projectCalendar: effectiveCalendar
4406
+ projectCalendar: projectCalendar
4337
4407
  };
4338
4408
  var barProps = {
4339
4409
  tasks: barTasks,
@@ -4360,7 +4430,7 @@ var Gantt = function Gantt(_ref) {
4360
4430
  onClick: onClick,
4361
4431
  onDelete: onDelete,
4362
4432
  onCalendarError: onCalendarError,
4363
- projectCalendar: effectiveCalendar,
4433
+ projectCalendar: projectCalendar,
4364
4434
  visibleStartY: visibleStartY,
4365
4435
  visibleEndY: visibleEndY,
4366
4436
  sliderTime: sliderTime
@@ -4393,7 +4463,8 @@ var Gantt = function Gantt(_ref) {
4393
4463
  taskLabelRenderer: taskLabelRenderer,
4394
4464
  onMultiSelect: onMultiSelect,
4395
4465
  containerWidth: tableContainerWidth != null ? tableContainerWidth : undefined,
4396
- innerScrollRef: tableInnerScrollRef
4466
+ innerScrollRef: tableInnerScrollRef,
4467
+ horizontalContainerRef: tableHorizontalContainerRef
4397
4468
  };
4398
4469
  return React__default.createElement("div", {
4399
4470
  style: {
@@ -4489,8 +4560,8 @@ var Gantt = function Gantt(_ref) {
4489
4560
  flexShrink: 0
4490
4561
  },
4491
4562
  onScroll: function onScroll(e) {
4492
- if (tableInnerScrollRef.current) {
4493
- tableInnerScrollRef.current.scrollLeft = e.currentTarget.scrollLeft;
4563
+ if (tableHorizontalContainerRef.current) {
4564
+ tableHorizontalContainerRef.current.scrollLeft = e.currentTarget.scrollLeft;
4494
4565
  }
4495
4566
  }
4496
4567
  }, React__default.createElement("div", {