gantt-lib 0.135.0 → 0.135.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.
package/dist/index.mjs CHANGED
@@ -13896,6 +13896,17 @@ var PLAN_FACT_COLUMN_OVERSCAN = 24;
13896
13896
  var PLAN_FACT_COLUMN_WINDOW_STEP = 14;
13897
13897
  var DEFAULT_INITIAL_VIEWPORT_HEIGHT = 768;
13898
13898
  var DEFAULT_PLAN_FACT_COLUMN_WINDOW = PLAN_FACT_COLUMN_OVERSCAN + PLAN_FACT_COLUMN_WINDOW_STEP;
13899
+ function buildControlledScheduleIdentity(tasks) {
13900
+ return tasks.map((task, index) => [
13901
+ String(index),
13902
+ task.id,
13903
+ String(task.startDate),
13904
+ String(task.endDate),
13905
+ task.type ?? "",
13906
+ task.parentId ?? "",
13907
+ JSON.stringify(task.dependencies ?? [])
13908
+ ].join("\0")).join("");
13909
+ }
13899
13910
  function getInitialScrollViewportHeight(containerHeight, headerHeight) {
13900
13911
  if (containerHeight === void 0) {
13901
13912
  return 0;
@@ -14293,11 +14304,17 @@ function TaskGanttChartInner(props, ref) {
14293
14304
  [resolvedRowContentLines, rowHeight]
14294
14305
  );
14295
14306
  const normalizedTasks = useMemo13(() => normalizeHierarchyTasks(tasks), [tasks]);
14307
+ const controlledScheduleIdentity = useMemo13(
14308
+ () => buildControlledScheduleIdentity(normalizedTasks),
14309
+ [normalizedTasks]
14310
+ );
14311
+ const previousControlledScheduleIdentityRef = useRef12(null);
14312
+ const controlledScheduleChanged = previousControlledScheduleIdentityRef.current !== null && previousControlledScheduleIdentityRef.current !== controlledScheduleIdentity;
14296
14313
  const [previewTasksById, setPreviewTasksById] = useState12(/* @__PURE__ */ new Map());
14297
14314
  const previewNormalizedTasks = useMemo13(() => {
14298
- if (previewTasksById.size === 0) return normalizedTasks;
14315
+ if (controlledScheduleChanged || previewTasksById.size === 0) return normalizedTasks;
14299
14316
  return normalizedTasks.map((task) => previewTasksById.get(task.id) ?? task);
14300
- }, [normalizedTasks, previewTasksById]);
14317
+ }, [controlledScheduleChanged, normalizedTasks, previewTasksById]);
14301
14318
  const isCustomWeekend = useMemo13(
14302
14319
  () => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
14303
14320
  [customDays, isWeekend3]
@@ -14566,6 +14583,18 @@ function TaskGanttChartInner(props, ref) {
14566
14583
  }, [effectiveRowHeight, tasks, visibleTasks]);
14567
14584
  const [dragGuideLines, setDragGuideLines] = useState12(null);
14568
14585
  const [draggedTaskOverride, setDraggedTaskOverride] = useState12(null);
14586
+ useEffect10(() => {
14587
+ const previousIdentity = previousControlledScheduleIdentityRef.current;
14588
+ previousControlledScheduleIdentityRef.current = controlledScheduleIdentity;
14589
+ if (previousIdentity === null || previousIdentity === controlledScheduleIdentity) {
14590
+ return;
14591
+ }
14592
+ previewPositionStore.clear();
14593
+ setCascadeOverrides((current) => current.size === 0 ? current : /* @__PURE__ */ new Map());
14594
+ setPreviewTasksById((current) => current.size === 0 ? current : /* @__PURE__ */ new Map());
14595
+ setDraggedTaskOverride((current) => current === null ? current : null);
14596
+ setDragGuideLines((current) => current === null ? current : null);
14597
+ }, [controlledScheduleIdentity, previewPositionStore]);
14569
14598
  useEffect10(() => {
14570
14599
  const result = validateDependencies(tasks);
14571
14600
  setValidationResult(result);
@@ -14767,6 +14796,7 @@ function TaskGanttChartInner(props, ref) {
14767
14796
  onTasksChange?.(normalized);
14768
14797
  }, [onTasksChange, onReorder]);
14769
14798
  const dependencyOverrides = useMemo13(() => {
14799
+ if (controlledScheduleChanged) return /* @__PURE__ */ new Map();
14770
14800
  const map = new Map(cascadeOverrides);
14771
14801
  if (draggedTaskOverride) {
14772
14802
  map.set(draggedTaskOverride.taskId, {
@@ -14775,7 +14805,7 @@ function TaskGanttChartInner(props, ref) {
14775
14805
  });
14776
14806
  }
14777
14807
  return map;
14778
- }, [cascadeOverrides, draggedTaskOverride]);
14808
+ }, [cascadeOverrides, controlledScheduleChanged, draggedTaskOverride]);
14779
14809
  const handleCascadeProgress = useCallback10((overrides, previewTasks = []) => {
14780
14810
  previewPositionStore.setPositions(overrides);
14781
14811
  const renderedTaskIds = renderedTaskIdsRef.current;
@@ -14792,9 +14822,9 @@ function TaskGanttChartInner(props, ref) {
14792
14822
  });
14793
14823
  }, [previewPositionStore]);
14794
14824
  const previewVisibleTasks = useMemo13(() => {
14795
- if (previewTasksById.size === 0) return visibleTasks;
14825
+ if (controlledScheduleChanged || previewTasksById.size === 0) return visibleTasks;
14796
14826
  return visibleTasks.map((task) => previewTasksById.get(task.id) ?? task);
14797
- }, [visibleTasks, previewTasksById]);
14827
+ }, [controlledScheduleChanged, visibleTasks, previewTasksById]);
14798
14828
  const visibleTaskIndexMap = useMemo13(
14799
14829
  () => new Map(visibleTasks.map((task, index) => [task.id, index])),
14800
14830
  [visibleTasks]