gantt-lib 0.3.2 → 0.3.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.
package/dist/index.js CHANGED
@@ -1188,8 +1188,8 @@ var TaskRow = import_react3.default.memo(
1188
1188
  }
1189
1189
  const msPerDay = 1e3 * 60 * 60 * 24;
1190
1190
  const duration = taskEnd.getTime() - taskStart.getTime() + msPerDay;
1191
- const elapsedCutoff = taskEnd.getTime() < today.getTime() ? taskEnd.getTime() : today.getTime();
1192
- const elapsed = elapsedCutoff - taskStart.getTime();
1191
+ const elapsedFromToday = today.getTime() - taskStart.getTime();
1192
+ const elapsed = Math.min(Math.max(0, elapsedFromToday), duration);
1193
1193
  const expected = elapsed / duration * 100;
1194
1194
  return actualProgress < expected;
1195
1195
  }, [task.startDate, task.endDate, task.progress, highlightExpiredTasks]);
@@ -2655,18 +2655,26 @@ var GanttChart = (0, import_react12.forwardRef)(({
2655
2655
  const newStart = new Date(updatedTask.startDate);
2656
2656
  const newEnd = new Date(updatedTask.endDate);
2657
2657
  const datesChanged = origStart.getTime() !== newStart.getTime() || origEnd.getTime() !== newEnd.getTime();
2658
- if (!datesChanged || disableConstraints) {
2659
- onChange?.((currentTasks) => currentTasks.map((t) => t.id === updatedTask.id ? updatedTask : t));
2660
- return;
2661
- }
2662
- const cascadedTask = updatedTask;
2663
- const cascadedChain = cascadeByLinks(updatedTask.id, newStart, newEnd, tasks);
2664
- const allCascaded = [cascadedTask, ...cascadedChain];
2665
2658
  const now = /* @__PURE__ */ new Date();
2666
2659
  const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
2667
2660
  const msPerDay = 1e3 * 60 * 60 * 24;
2661
+ let tasksToProcess;
2662
+ let cascadedTasksForCallback = [];
2663
+ if (!datesChanged) {
2664
+ onChange?.((currentTasks) => currentTasks.map((t) => t.id === updatedTask.id ? updatedTask : t));
2665
+ return;
2666
+ }
2667
+ if (disableConstraints) {
2668
+ tasksToProcess = [updatedTask];
2669
+ cascadedTasksForCallback = [updatedTask];
2670
+ } else {
2671
+ const cascadedTask = updatedTask;
2672
+ const cascadedChain = cascadeByLinks(updatedTask.id, newStart, newEnd, tasks);
2673
+ tasksToProcess = [cascadedTask, ...cascadedChain];
2674
+ cascadedTasksForCallback = tasksToProcess;
2675
+ }
2668
2676
  console.log("[GanttChart handleTaskChange] IsExpired calculation:");
2669
- for (const t of allCascaded) {
2677
+ for (const t of tasksToProcess) {
2670
2678
  const taskStart = new Date(t.startDate);
2671
2679
  const taskEnd = new Date(t.endDate);
2672
2680
  const actualProgress = t.progress ?? 0;
@@ -2675,19 +2683,23 @@ var GanttChart = (0, import_react12.forwardRef)(({
2675
2683
  continue;
2676
2684
  }
2677
2685
  const duration = taskEnd.getTime() - taskStart.getTime() + msPerDay;
2678
- const elapsedCutoff = taskEnd.getTime() < today.getTime() ? taskEnd.getTime() : today.getTime();
2679
- const elapsed = elapsedCutoff - taskStart.getTime();
2686
+ const elapsedFromToday = today.getTime() - taskStart.getTime();
2687
+ const elapsed = Math.min(Math.max(0, elapsedFromToday), duration);
2680
2688
  const expectedProgress = Math.min(100, Math.max(0, elapsed / duration * 100));
2681
2689
  const isExpired = actualProgress < expectedProgress;
2682
2690
  const durationDays = Math.round(duration / msPerDay);
2683
2691
  const elapsedDays = Math.round(elapsed / msPerDay);
2684
2692
  console.log(` [${t.id}] START=${t.startDate} END=${t.endDate} TODAY=${today.toISOString().split("T")[0]} PROGRESS=${actualProgress}% DURATION=${durationDays}d ELAPSED=${elapsedDays}d EXPECTED=${expectedProgress.toFixed(1)}% EXPIRED=${isExpired ? "YES" : "NO"}`);
2685
2693
  }
2686
- onChange?.((currentTasks) => {
2687
- const m = new Map(allCascaded.map((t) => [t.id, t]));
2688
- return currentTasks.map((t) => m.get(t.id) ?? t);
2689
- });
2690
- onCascade?.(allCascaded);
2694
+ if (disableConstraints) {
2695
+ onChange?.((currentTasks) => currentTasks.map((t) => t.id === updatedTask.id ? updatedTask : t));
2696
+ } else {
2697
+ onChange?.((currentTasks) => {
2698
+ const m = new Map(cascadedTasksForCallback.map((t) => [t.id, t]));
2699
+ return currentTasks.map((t) => m.get(t.id) ?? t);
2700
+ });
2701
+ onCascade?.(cascadedTasksForCallback);
2702
+ }
2691
2703
  }, [tasks, onChange, disableConstraints, onCascade]);
2692
2704
  const dependencyOverrides = (0, import_react12.useMemo)(() => {
2693
2705
  const map = new Map(cascadeOverrides);