diff --git a/apps/web/src/components/timeline/TimelineView.tsx b/apps/web/src/components/timeline/TimelineView.tsx index 3e5a399..8767b5b 100644 --- a/apps/web/src/components/timeline/TimelineView.tsx +++ b/apps/web/src/components/timeline/TimelineView.tsx @@ -698,16 +698,16 @@ function TimelineViewContent({ }; }, []); - // Scroll to today the first time the canvas has its full width (after initial data load). - // Depends on totalCanvasWidth so it fires after isInitialLoading → false renders the canvas. + // Scroll to today the first time the canvas is in the DOM (isInitialLoading → false). + // totalCanvasWidth is non-zero before data loads, so it can't be used as the trigger. useLayoutEffect(() => { - if (totalCanvasWidth === 0) return; + if (isInitialLoading) return; if (hasScrolledToTodayOnLoad.current) return; const el = scrollContainerRef.current; if (!el) return; el.scrollLeft = toLeft(today); hasScrolledToTodayOnLoad.current = true; - }, [totalCanvasWidth, toLeft, today]); + }, [isInitialLoading, toLeft, today]); // Apply scroll compensation synchronously after the canvas grows (left-extend or Today button). useLayoutEffect(() => {