gantt-task-react-powern 0.6.44 → 0.6.46

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.
package/README.md CHANGED
@@ -72,6 +72,8 @@ npm start
72
72
  | endDate | Date | Project-level end date used for calendar/critical-path bounds. |
73
73
  | projectCalendar | CalendarDefinition | Working calendar (shifts, off days, holidays) applied to scheduling. |
74
74
  | sliderTime | number | Vertical slider time marker (ms) drawn on the chart. |
75
+ | hideActualBeforeSlider | boolean | Draws actual bars transparent until `sliderTime` reaches their actual start day. |
76
+ | plannedInProgressColor | string | Planned bar fill while `sliderTime` is inside the task's `inProgressWindow`. |
75
77
  | [EventOption](#EventOption) | interface | Specifies gantt events. |
76
78
  | [DisplayOption](#DisplayOption) | interface | Specifies view type and display timeline language. |
77
79
  | [StylingOption](#StylingOption) | interface | Specifies chart and global tasks styles |
@@ -159,6 +161,7 @@ npm start
159
161
  | optionalId | string | Optional secondary id (e.g. external system id). |
160
162
  | dependencies | DependencyType[] | Parent dependencies. Each entry is `{ id: string; type: "SS" \| "SF" \| "FS" \| "FF" }`. |
161
163
  | criticalPathArrows | object[] | Arrows on the critical path: `{ taskId: string; arrowColor: string; criticalPathType: string }`. |
164
+ | inProgressWindow | object | `{ start: Date; end?: Date }`: days the planned bar takes `plannedInProgressColor` (open-ended without `end`). |
162
165
  | styles | object | Specifies the taskbar styling settings locally. Object is passed with the following attributes: |
163
166
  | | | - **backgroundColor**: String. Specifies the taskbar background fill color locally. |
164
167
  | | | - **backgroundSelectedColor**: String. Specifies the taskbar background fill color locally on select. |
@@ -28,5 +28,11 @@ export declare type TaskGanttContentProps = {
28
28
  setSelectedTask: (taskId: string) => void;
29
29
  onBarTasksUpdate?: (task: BarTask) => void;
30
30
  sliderTime?: number;
31
+ /** Draw actual bars transparent until sliderTime reaches their actual start day. */
32
+ hideActualBeforeSlider?: boolean;
33
+ /** Planned bar fill while sliderTime is inside the task's `inProgressWindow`. */
34
+ plannedInProgressColor?: string;
35
+ /** Split calendar bars around off days; false in Month/Quarter views. */
36
+ segmentBars?: boolean;
31
37
  } & EventOption;
32
38
  export declare const TaskGanttContent: React.FC<TaskGanttContentProps>;
@@ -1,7 +1,15 @@
1
- import { Task } from "../types/public-types";
1
+ import { CalendarDefinition, Task } from "../types/public-types";
2
2
  import { BarTask } from "../types/bar-task";
3
3
  import { BarMoveAction } from "../types/gantt-task-actions";
4
- export declare const convertToBarTasks: (tasks: Task[], dates: Date[], columnWidth: number, rowHeight: number, taskHeight: number, barCornerRadius: number, handleWidth: number, rtl: boolean, barProgressColor: string, barProgressSelectedColor: string, barBackgroundColor: string, barBackgroundSelectedColor: string, projectProgressColor: string, projectProgressSelectedColor: string, projectBackgroundColor: string, projectBackgroundSelectedColor: string, milestoneBackgroundColor: string, milestoneBackgroundSelectedColor: string) => BarTask[];
4
+ export declare const convertToBarTasks: (tasks: Task[], dates: Date[], columnWidth: number, rowHeight: number, taskHeight: number, barCornerRadius: number, handleWidth: number, rtl: boolean, barProgressColor: string, barProgressSelectedColor: string, barBackgroundColor: string, barBackgroundSelectedColor: string, projectProgressColor: string, projectProgressSelectedColor: string, projectBackgroundColor: string, projectBackgroundSelectedColor: string, milestoneBackgroundColor: string, milestoneBackgroundSelectedColor: string, segmentBars?: boolean) => BarTask[];
5
+ /**
6
+ * x-ranges of the working intervals from `start` through the end of `end`'s
7
+ * day, or undefined when none fall inside the chart.
8
+ */
9
+ export declare const getWorkingSegments: (start: Date, end: Date, calendar: CalendarDefinition, dates: Date[], columnWidth: number) => {
10
+ x1: number;
11
+ x2: number;
12
+ }[] | undefined;
5
13
  export declare const taskXCoordinate: (xDate: Date, dates: Date[], columnWidth: number) => number;
6
14
  export declare const progressWithByParams: (taskX1: number, taskX2: number, progress: number, rtl: boolean) => number[];
7
15
  export declare const progressByProgressWidth: (progressWidth: number, barTask: BarTask) => number;
@@ -3,7 +3,10 @@ import { CalendarDefinition } from "../types/public-types";
3
3
  export declare function parseTimeToMinutes(t: string): number;
4
4
  /** True if the date falls on a calendar holiday. */
5
5
  export declare function isHoliday(date: Date, cal: CalendarDefinition): boolean;
6
- /** True if the date's weekday is in off_days or is a holiday. */
6
+ /**
7
+ * True if the date's weekday is in off_days or is a holiday. Local weekday, to
8
+ * match the local-midnight dates and day loops used everywhere else.
9
+ */
7
10
  export declare function isOffDay(date: Date, cal: CalendarDefinition): boolean;
8
11
  /** Gets the timestamps (Milliseconds - UTC) of all off-days for a calendar between a start and end date*/
9
12
  export declare function getOffDays(calendar: CalendarDefinition, start: Date, end: Date): number[];
@@ -27,4 +27,9 @@ export declare const getLocaleMonth: (date: Date, locale: string) => string;
27
27
  export declare const getLocalDayOfWeek: (date: Date, locale: string, format?: "long" | "short" | "narrow" | undefined) => string;
28
28
  export declare const getWeekNumberISO8601: (date: Date) => string;
29
29
  export declare const getDaysInMonth: (month: number, year: number) => number;
30
+ /**
31
+ * Day-resolution views shade calendar off days and split task bars around
32
+ * them; Month and Quarter columns are too coarse, so they do neither.
33
+ */
34
+ export declare const viewShowsOffDays: (viewMode?: ViewMode | undefined) => boolean;
30
35
  export {};
package/dist/index.js CHANGED
@@ -269,6 +269,9 @@ var getMonday = function getMonday(date) {
269
269
  var diff = date.getDate() - day + (day === 0 ? -6 : 1);
270
270
  return new Date(date.setDate(diff));
271
271
  };
272
+ var viewShowsOffDays = function viewShowsOffDays(viewMode) {
273
+ return viewMode !== exports.ViewMode.Month && viewMode !== exports.ViewMode.Quarter;
274
+ };
272
275
 
273
276
  var styles = {"ganttTable":"_3_ygE","ganttTable_Header":"_1nBOt","ganttTable_HeaderSeparator":"_2eZzQ","ganttTable_HeaderResizeHandle":"_ddPJg","ganttTable_HeaderItem":"_WuQ0f","ganttTable_HeaderItemText":"_2X3fk"};
274
277
 
@@ -402,7 +405,7 @@ function isHoliday(date, cal) {
402
405
  }
403
406
  function isOffDay(date, cal) {
404
407
  if (cal.off_days && cal.off_days.length > 0) {
405
- return cal.off_days.includes(date.getUTCDay()) || isHoliday(date, cal);
408
+ return cal.off_days.includes(date.getDay()) || isHoliday(date, cal);
406
409
  } else {
407
410
  return false;
408
411
  }
@@ -1095,6 +1098,7 @@ var TaskList = function TaskList(_ref) {
1095
1098
  TaskListTable = _ref.TaskListTable,
1096
1099
  taskLabelRenderer = _ref.taskLabelRenderer,
1097
1100
  onMultiSelect = _ref.onMultiSelect,
1101
+ onSelectAll = _ref.onSelectAll,
1098
1102
  containerWidth = _ref.containerWidth,
1099
1103
  containerMaxWidth = _ref.containerMaxWidth,
1100
1104
  onContentWidthChange = _ref.onContentWidthChange,
@@ -1169,9 +1173,13 @@ var TaskList = function TaskList(_ref) {
1169
1173
  onContentWidthChange === null || onContentWidthChange === void 0 ? void 0 : onContentWidthChange(contentWidth);
1170
1174
  }, [contentWidth, onContentWidthChange]);
1171
1175
 
1172
- var _useState3 = React.useState([]),
1173
- pendingTaskSelect = _useState3[0],
1174
- setPendingTaskSelect = _useState3[1];
1176
+ var _useState3 = React.useState(false),
1177
+ selectAllActive = _useState3[0],
1178
+ setSelectAllActive = _useState3[1];
1179
+
1180
+ var _useState4 = React.useState([]),
1181
+ pendingTaskSelect = _useState4[0],
1182
+ setPendingTaskSelect = _useState4[1];
1175
1183
 
1176
1184
  var prevSelectedTasksRef = React.useRef([]);
1177
1185
  var expandedTasks = React.useRef(new Set());
@@ -1280,6 +1288,19 @@ var TaskList = function TaskList(_ref) {
1280
1288
  setSelectedTasks(newSelectedArray);
1281
1289
  }
1282
1290
  }, [tasks.length]);
1291
+ React.useEffect(function () {
1292
+ if (!selectAllActive) return;
1293
+ var selected = new Set(selectedTasks);
1294
+ if (tasks.every(function (task) {
1295
+ return selected.has(task.id);
1296
+ })) return;
1297
+ setPendingTaskSelect(taskIndex.roots.map(function (taskId) {
1298
+ return {
1299
+ taskId: taskId,
1300
+ selected: true
1301
+ };
1302
+ }));
1303
+ }, [tasks, taskIndex, selectAllActive, selectedTasks]);
1283
1304
 
1284
1305
  var getDescendants = function getDescendants(taskId) {
1285
1306
  var _taskIndex$childrenOf;
@@ -1317,6 +1338,11 @@ var TaskList = function TaskList(_ref) {
1317
1338
  };
1318
1339
 
1319
1340
  var handleTaskSelect = function handleTaskSelect(taskId, selected) {
1341
+ if (!selected && selectAllActive) {
1342
+ setSelectAllActive(false);
1343
+ onSelectAll === null || onSelectAll === void 0 ? void 0 : onSelectAll(false);
1344
+ }
1345
+
1320
1346
  setPendingTaskSelect(function (prev) {
1321
1347
  return [].concat(prev, [{
1322
1348
  taskId: taskId,
@@ -1326,6 +1352,9 @@ var TaskList = function TaskList(_ref) {
1326
1352
  };
1327
1353
 
1328
1354
  var handleSelectAll = function handleSelectAll(selected) {
1355
+ setSelectAllActive(selected);
1356
+ onSelectAll === null || onSelectAll === void 0 ? void 0 : onSelectAll(selected);
1357
+
1329
1358
  if (selected) {
1330
1359
  setPendingTaskSelect(taskIndex.roots.map(function (taskId) {
1331
1360
  return {
@@ -1345,7 +1374,7 @@ var TaskList = function TaskList(_ref) {
1345
1374
  fontSize: fontSize,
1346
1375
  rowWidth: rowWidth,
1347
1376
  scheduleType: scheduleType,
1348
- allSelected: tasks.length > 0 && selectedTasks.length === tasks.length,
1377
+ allSelected: selectAllActive || tasks.length > 0 && selectedTasks.length === tasks.length,
1349
1378
  onSelectAll: onMultiSelect ? handleSelectAll : undefined,
1350
1379
  columnWidths: columnWidths,
1351
1380
  onColumnResize: handleColumnResize
@@ -1474,7 +1503,7 @@ var GridBody = function GridBody(_ref) {
1474
1503
  }));
1475
1504
  }
1476
1505
 
1477
- if (viewMode !== exports.ViewMode.Month && viewMode !== exports.ViewMode.Quarter) {
1506
+ if (viewShowsOffDays(viewMode)) {
1478
1507
  var _dates;
1479
1508
 
1480
1509
  var pEnd = (_dates = dates[i + 1]) != null ? _dates : addToDate(dates[i], 1, "day");
@@ -1541,7 +1570,7 @@ var GridBody = function GridBody(_ref) {
1541
1570
  y2: visibleStartY,
1542
1571
  className: styles$5.gridRowLine
1543
1572
  }));
1544
- var showPerRowOffDays = viewMode !== exports.ViewMode.Month && viewMode !== exports.ViewMode.Quarter;
1573
+ var showPerRowOffDays = viewShowsOffDays(viewMode);
1545
1574
 
1546
1575
  for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
1547
1576
  var vi = _step.value;
@@ -2289,9 +2318,13 @@ var drawPathAndTriangle = function drawPathAndTriangle(taskFrom, taskTo, rowHeig
2289
2318
  return [path, trianglePoints];
2290
2319
  };
2291
2320
 
2292
- var convertToBarTasks = function convertToBarTasks(tasks, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
2321
+ var convertToBarTasks = function convertToBarTasks(tasks, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, segmentBars) {
2322
+ if (segmentBars === void 0) {
2323
+ segmentBars = true;
2324
+ }
2325
+
2293
2326
  var barTasks = tasks.map(function (t, i) {
2294
- return convertToBarTask(t, i, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor);
2327
+ return convertToBarTask(t, i, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, segmentBars);
2295
2328
  });
2296
2329
  var indexById = new Map();
2297
2330
 
@@ -2319,7 +2352,7 @@ var convertToBarTasks = function convertToBarTasks(tasks, dates, columnWidth, ro
2319
2352
  return barTasks;
2320
2353
  };
2321
2354
 
2322
- var convertToBarTask = function convertToBarTask(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
2355
+ var convertToBarTask = function convertToBarTask(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, segmentBars) {
2323
2356
  var barTask;
2324
2357
 
2325
2358
  switch (task.type) {
@@ -2328,18 +2361,18 @@ var convertToBarTask = function convertToBarTask(task, index, dates, columnWidth
2328
2361
  break;
2329
2362
 
2330
2363
  case "project":
2331
- barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor);
2364
+ barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, segmentBars);
2332
2365
  break;
2333
2366
 
2334
2367
  default:
2335
- barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor);
2368
+ barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, segmentBars);
2336
2369
  break;
2337
2370
  }
2338
2371
 
2339
2372
  return barTask;
2340
2373
  };
2341
2374
 
2342
- var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor) {
2375
+ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, segmentBars) {
2343
2376
  var x1;
2344
2377
  var x2;
2345
2378
  var actualx1;
@@ -2372,35 +2405,12 @@ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHei
2372
2405
  var plannedSegments;
2373
2406
  var actualSegments;
2374
2407
 
2375
- if (task.calendar && task.start && task.end && task.start.getTime() > 0) {
2376
- var planEnd = addToDate(startOfDate(task.end, "day"), 1, "day");
2377
- var intervals = getWorkingIntervals(task.start, planEnd, task.calendar);
2378
- var segs = intervals.map(function (iv) {
2379
- return {
2380
- x1: taskXCoordinate(iv.start, dates, columnWidth),
2381
- x2: taskXCoordinate(iv.end, dates, columnWidth)
2382
- };
2383
- }).filter(function (s) {
2384
- return s.x2 > s.x1;
2385
- });
2386
- if (segs.length > 0) plannedSegments = segs;
2408
+ if (segmentBars && task.calendar && task.start && task.end && task.start.getTime() > 0) {
2409
+ plannedSegments = getWorkingSegments(task.start, task.end, task.calendar, dates, columnWidth);
2387
2410
  }
2388
2411
 
2389
- if (task.calendar && task.actualStart && task.actualEnd && task.actualStart.getTime() > 0) {
2390
- var actEnd = addToDate(startOfDate(task.actualEnd, "day"), 1, "day");
2391
-
2392
- var _intervals = getWorkingIntervals(task.actualStart, actEnd, task.calendar);
2393
-
2394
- var _segs = _intervals.map(function (iv) {
2395
- return {
2396
- x1: taskXCoordinate(iv.start, dates, columnWidth),
2397
- x2: taskXCoordinate(iv.end, dates, columnWidth)
2398
- };
2399
- }).filter(function (s) {
2400
- return s.x2 > s.x1;
2401
- });
2402
-
2403
- if (_segs.length > 0) actualSegments = _segs;
2412
+ if (segmentBars && task.calendar && task.actualStart && task.actualEnd && task.actualStart.getTime() > 0) {
2413
+ actualSegments = getWorkingSegments(task.actualStart, task.actualEnd, task.calendar, dates, columnWidth);
2404
2414
  }
2405
2415
 
2406
2416
  var styles = _extends({
@@ -2433,6 +2443,18 @@ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHei
2433
2443
  });
2434
2444
  };
2435
2445
 
2446
+ var getWorkingSegments = function getWorkingSegments(start, end, calendar, dates, columnWidth) {
2447
+ var segs = getWorkingIntervals(start, addToDate(startOfDate(end, "day"), 1, "day"), calendar).map(function (iv) {
2448
+ return {
2449
+ x1: taskXCoordinate(iv.start, dates, columnWidth),
2450
+ x2: taskXCoordinate(iv.end, dates, columnWidth)
2451
+ };
2452
+ }).filter(function (s) {
2453
+ return s.x2 > s.x1;
2454
+ });
2455
+ return segs.length > 0 ? segs : undefined;
2456
+ };
2457
+
2436
2458
  var convertToMilestone = function convertToMilestone(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
2437
2459
  var x = task.start && task.end ? taskXCoordinate(task.end, dates, columnWidth) : 0;
2438
2460
  var y = taskYCoordinate(index, rowHeight, taskHeight);
@@ -3326,6 +3348,7 @@ var TaskItem = function TaskItem(props) {
3326
3348
  }, taskItem[1]));
3327
3349
  };
3328
3350
 
3351
+ var HIDDEN_ACTUAL_COLOR = "rgba(0, 0, 0, 0)";
3329
3352
  var TaskGanttContent = function TaskGanttContent(_ref) {
3330
3353
  var _svg$current;
3331
3354
 
@@ -3357,7 +3380,12 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3357
3380
  projectCalendar = _ref.projectCalendar,
3358
3381
  visibleStartY = _ref.visibleStartY,
3359
3382
  visibleEndY = _ref.visibleEndY,
3360
- sliderTime = _ref.sliderTime;
3383
+ sliderTime = _ref.sliderTime,
3384
+ _ref$hideActualBefore = _ref.hideActualBeforeSlider,
3385
+ hideActualBeforeSlider = _ref$hideActualBefore === void 0 ? false : _ref$hideActualBefore,
3386
+ plannedInProgressColor = _ref.plannedInProgressColor,
3387
+ _ref$segmentBars = _ref.segmentBars,
3388
+ segmentBars = _ref$segmentBars === void 0 ? true : _ref$segmentBars;
3361
3389
  var point = svg === null || svg === void 0 ? void 0 : (_svg$current = svg.current) === null || _svg$current === void 0 ? void 0 : _svg$current.createSVGPoint();
3362
3390
 
3363
3391
  var _useState = React.useState(0),
@@ -3424,17 +3452,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3424
3452
  finalTask.actualx2 = taskXCoordinate(finalTask.actualEnd, dates, columnWidth);
3425
3453
  }
3426
3454
 
3427
- var actEnd = addToDate(startOfDate(finalTask.actualEnd, "day"), 1, "day");
3428
- var actIntervals = getWorkingIntervals(finalTask.actualStart, actEnd, cal);
3429
- var actSegs = actIntervals.map(function (iv) {
3430
- return {
3431
- x1: taskXCoordinate(iv.start, dates, columnWidth),
3432
- x2: taskXCoordinate(iv.end, dates, columnWidth)
3433
- };
3434
- }).filter(function (s) {
3435
- return s.x2 > s.x1;
3436
- });
3437
- finalTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
3455
+ finalTask.actualSegments = segmentBars ? getWorkingSegments(finalTask.actualStart, finalTask.actualEnd, cal, dates, columnWidth) : undefined;
3438
3456
  var offTimeDays = finalTask.calendar ? getOffDays(finalTask.calendar, finalTask.actualStart, finalTask.actualEnd) : [];
3439
3457
  var actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)) - offTimeDays.length);
3440
3458
  finalTask.actualDuration = actDays;
@@ -3460,17 +3478,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3460
3478
  finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);
3461
3479
  }
3462
3480
 
3463
- var planEnd = addToDate(startOfDate(finalTask.end, "day"), 1, "day");
3464
- var planIntervals = getWorkingIntervals(finalTask.start, planEnd, cal);
3465
- var planSegs = planIntervals.map(function (iv) {
3466
- return {
3467
- x1: taskXCoordinate(iv.start, dates, columnWidth),
3468
- x2: taskXCoordinate(iv.end, dates, columnWidth)
3469
- };
3470
- }).filter(function (s) {
3471
- return s.x2 > s.x1;
3472
- });
3473
- finalTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
3481
+ finalTask.plannedSegments = segmentBars ? getWorkingSegments(finalTask.start, finalTask.end, cal, dates, columnWidth) : undefined;
3474
3482
 
3475
3483
  var _offTimeDays = finalTask.calendar ? getOffDays(finalTask.calendar, finalTask.start, finalTask.end) : [];
3476
3484
 
@@ -3562,17 +3570,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3562
3570
  newChangedTask.actualx2 = taskXCoordinate(newChangedTask.actualEnd, dates, columnWidth);
3563
3571
  }
3564
3572
 
3565
- var actEnd = addToDate(startOfDate(newChangedTask.actualEnd, "day"), 1, "day");
3566
- var actIntervals = getWorkingIntervals(newChangedTask.actualStart, actEnd, cal);
3567
- var actSegs = actIntervals.map(function (iv) {
3568
- return {
3569
- x1: taskXCoordinate(iv.start, dates, columnWidth),
3570
- x2: taskXCoordinate(iv.end, dates, columnWidth)
3571
- };
3572
- }).filter(function (s) {
3573
- return s.x2 > s.x1;
3574
- });
3575
- newChangedTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
3573
+ newChangedTask.actualSegments = segmentBars ? getWorkingSegments(newChangedTask.actualStart, newChangedTask.actualEnd, cal, dates, columnWidth) : undefined;
3576
3574
  var offTimeDays = newChangedTask.calendar ? getOffDays(newChangedTask.calendar, newChangedTask.actualStart, newChangedTask.actualEnd) : [];
3577
3575
  var actDays = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)) - offTimeDays.length);
3578
3576
  newChangedTask.actualDuration = actDays;
@@ -3610,17 +3608,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3610
3608
  newChangedTask.x2 = taskXCoordinate(newChangedTask.end, dates, columnWidth);
3611
3609
  }
3612
3610
 
3613
- var planEnd = addToDate(startOfDate(newChangedTask.end, "day"), 1, "day");
3614
- var planIntervals = getWorkingIntervals(newChangedTask.start, planEnd, cal);
3615
- var planSegs = planIntervals.map(function (iv) {
3616
- return {
3617
- x1: taskXCoordinate(iv.start, dates, columnWidth),
3618
- x2: taskXCoordinate(iv.end, dates, columnWidth)
3619
- };
3620
- }).filter(function (s) {
3621
- return s.x2 > s.x1;
3622
- });
3623
- newChangedTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
3611
+ newChangedTask.plannedSegments = segmentBars ? getWorkingSegments(newChangedTask.start, newChangedTask.end, cal, dates, columnWidth) : undefined;
3624
3612
 
3625
3613
  var _offTimeDays2 = newChangedTask.calendar ? getOffDays(newChangedTask.calendar, newChangedTask.start, newChangedTask.end) : [];
3626
3614
 
@@ -3697,7 +3685,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3697
3685
  svg.current.addEventListener("mouseup", handleMouseUp);
3698
3686
  setIsMoving(true);
3699
3687
  }
3700
- }, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, setFailedTask, setGanttEvent, onBarTasksUpdate, dates, columnWidth]);
3688
+ }, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, segmentBars, setFailedTask, setGanttEvent, onBarTasksUpdate, dates, columnWidth]);
3701
3689
 
3702
3690
  var handleBarEventStart = function handleBarEventStart(action, task, event, type) {
3703
3691
  try {
@@ -3852,6 +3840,17 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3852
3840
 
3853
3841
  var lineX = sliderTime !== undefined ? taskXCoordinate(new Date(sliderTime), dates, columnWidth) : null;
3854
3842
  var totalHeight = tasks.length * rowHeight;
3843
+ var sliderDate = sliderTime != null ? new Date(sliderTime) : null;
3844
+
3845
+ var isActualBeforeSlider = function isActualBeforeSlider(task) {
3846
+ return hideActualBeforeSlider && !!sliderDate && !!task.actualStart && startOfDate(task.actualStart, "day") > sliderDate;
3847
+ };
3848
+
3849
+ var isInProgressAtSlider = function isInProgressAtSlider(_ref2) {
3850
+ var w = _ref2.inProgressWindow;
3851
+ return !!plannedInProgressColor && !!sliderDate && !!w && startOfDate(w.start, "day") <= sliderDate && (!w.end || addToDate(startOfDate(w.end, "day"), 1, "day") > sliderDate);
3852
+ };
3853
+
3855
3854
  return React__default.createElement("g", {
3856
3855
  className: "content"
3857
3856
  }, lineX !== null && lineX > 0 && React__default.createElement("line", {
@@ -3877,6 +3876,19 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3877
3876
  y: 0
3878
3877
  });
3879
3878
 
3879
+ if (isActualBeforeSlider(task)) {
3880
+ task.styles = _extends({}, task.styles, {
3881
+ taskProgressColor: HIDDEN_ACTUAL_COLOR
3882
+ });
3883
+ }
3884
+
3885
+ if (isInProgressAtSlider(task)) {
3886
+ task.styles = _extends({}, task.styles, {
3887
+ backgroundColor: plannedInProgressColor,
3888
+ backgroundSelectedColor: plannedInProgressColor
3889
+ });
3890
+ }
3891
+
3880
3892
  if (!task && _task.typeInternal === "milestone") {
3881
3893
  return React__default.createElement("g", {
3882
3894
  key: _task.id,
@@ -4029,6 +4041,8 @@ var HorizontalScroll = function HorizontalScroll(_ref) {
4029
4041
  };
4030
4042
 
4031
4043
  var GANTT_MIN_WIDTH_RATIO = 0.4;
4044
+ var PRIMARY_PATH_COLOR = "#AA00FF";
4045
+ var SECONDARY_PATH_COLOR = "#ff82e4";
4032
4046
  var TABLE_GANTT_DIVIDER_WIDTH = 20;
4033
4047
  var Gantt = function Gantt(_ref) {
4034
4048
  var _ref3;
@@ -4116,6 +4130,7 @@ var Gantt = function Gantt(_ref) {
4116
4130
  onSelect = _ref.onSelect,
4117
4131
  onExpanderClick = _ref.onExpanderClick,
4118
4132
  onMultiSelect = _ref.onMultiSelect,
4133
+ onSelectAll = _ref.onSelectAll,
4119
4134
  taskLabelRenderer = _ref.taskLabelRenderer,
4120
4135
  _ref$delayToRender = _ref.delayToRender,
4121
4136
  delayToRender = _ref$delayToRender === void 0 ? 500 : _ref$delayToRender,
@@ -4123,7 +4138,10 @@ var Gantt = function Gantt(_ref) {
4123
4138
  shouldNotShowLoadingOverlay = _ref$shouldNotShowLoa === void 0 ? true : _ref$shouldNotShowLoa,
4124
4139
  projectCalendar = _ref.projectCalendar,
4125
4140
  onCalendarError = _ref.onCalendarError,
4126
- sliderTime = _ref.sliderTime;
4141
+ sliderTime = _ref.sliderTime,
4142
+ _ref$hideActualBefore = _ref.hideActualBeforeSlider,
4143
+ hideActualBeforeSlider = _ref$hideActualBefore === void 0 ? false : _ref$hideActualBefore,
4144
+ plannedInProgressColor = _ref.plannedInProgressColor;
4127
4145
  var wrapperRef = React.useRef(null);
4128
4146
  var taskListRef = React.useRef(null);
4129
4147
  var isDraggingTable = React.useRef(false);
@@ -4399,11 +4417,11 @@ var Gantt = function Gantt(_ref) {
4399
4417
  uncolorAll(tasks);
4400
4418
 
4401
4419
  if (scheduleType !== "lookAhead") {
4402
- colorPath(secondaryPath, "#00ff00", tasks, "secondary");
4403
- colorPath(primaryPath, "#ff0000", tasks, "primary");
4420
+ colorPath(secondaryPath, SECONDARY_PATH_COLOR, tasks, "secondary");
4421
+ colorPath(primaryPath, PRIMARY_PATH_COLOR, tasks, "primary");
4404
4422
  }
4405
4423
 
4406
- setBarTasks(convertToBarTasks(filteredTasks, newDates, effectiveColumnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor));
4424
+ setBarTasks(convertToBarTasks(filteredTasks, newDates, effectiveColumnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, viewShowsOffDays(viewMode)));
4407
4425
  setIsProcessing(false);
4408
4426
  }, delayToRender);
4409
4427
  }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, shouldNotShowLoadingOverlay, effectiveColumnWidth, projectCalendar]);
@@ -4758,7 +4776,10 @@ var Gantt = function Gantt(_ref) {
4758
4776
  projectCalendar: projectCalendar,
4759
4777
  visibleStartY: visibleStartY,
4760
4778
  visibleEndY: visibleEndY,
4761
- sliderTime: sliderTime
4779
+ sliderTime: sliderTime,
4780
+ hideActualBeforeSlider: hideActualBeforeSlider,
4781
+ plannedInProgressColor: plannedInProgressColor,
4782
+ segmentBars: viewShowsOffDays(viewMode)
4762
4783
  };
4763
4784
  var tableTasks = React.useMemo(function () {
4764
4785
  return ganttEvent.changedTask ? barTasks.map(function (t) {
@@ -4787,6 +4808,7 @@ var Gantt = function Gantt(_ref) {
4787
4808
  TaskListTable: TaskListTable,
4788
4809
  taskLabelRenderer: taskLabelRenderer,
4789
4810
  onMultiSelect: onMultiSelect,
4811
+ onSelectAll: onSelectAll,
4790
4812
  containerWidth: userResizedRef.current && tableContainerWidth != null ? Math.min(tableContainerWidth, tableCap) : undefined,
4791
4813
  containerMaxWidth: tableCap === Infinity ? undefined : tableCap,
4792
4814
  onContentWidthChange: setTableContentWidth,