Skip to content

Commit 7b0d5e8

Browse files
committed
fix(web): preserve scroll when collapsing large changed-files trees
1 parent 6d76865 commit 7b0d5e8

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

apps/web/src/components/chat/ChangedFilesTree.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export const ChangedFilesTree = memo(function ChangedFilesTree(props: {
5050
<div key={`dir:${node.path}`}>
5151
<button
5252
type="button"
53+
data-scroll-anchor-ignore
5354
className="group flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left hover:bg-background/80"
5455
style={{ paddingLeft: `${leftPadding}px` }}
5556
onClick={() => toggleDirectory(node.path, depth === 0)}

apps/web/src/components/chat/MessagesTimeline.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,14 @@ export const MessagesTimeline = memo(function MessagesTimeline({
245245
rowVirtualizer.measure();
246246
}, [rowVirtualizer, timelineWidthPx]);
247247
useEffect(() => {
248-
rowVirtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) => {
248+
rowVirtualizer.shouldAdjustScrollPositionOnItemSizeChange = (item, _delta, instance) => {
249249
const viewportHeight = instance.scrollRect?.height ?? 0;
250250
const scrollOffset = instance.scrollOffset ?? 0;
251+
const itemIntersectsViewport =
252+
item.end > scrollOffset && item.start < scrollOffset + viewportHeight;
253+
if (itemIntersectsViewport) {
254+
return false;
255+
}
251256
const remainingDistance = instance.getTotalSize() - (scrollOffset + viewportHeight);
252257
return remainingDistance > AUTO_SCROLL_BOTTOM_THRESHOLD_PX;
253258
};
@@ -458,6 +463,7 @@ export const MessagesTimeline = memo(function MessagesTimeline({
458463
type="button"
459464
size="xs"
460465
variant="outline"
466+
data-scroll-anchor-ignore
461467
onClick={() => onToggleAllDirectories(turnSummary.turnId)}
462468
>
463469
{allDirectoriesExpanded ? "Collapse all" : "Expand all"}

0 commit comments

Comments
 (0)