Skip to content
This repository was archived by the owner on Apr 15, 2026. It is now read-only.

Commit c2e040e

Browse files
authored
Merge pull request #111 from everpcpc/toronto-w3rz42d6
Fix collapse-all trigger causing newly mounted items to auto-collapse
2 parents 08c3d59 + 7d268f5 commit c2e040e

4 files changed

Lines changed: 15 additions & 11 deletions

File tree

packages/ui/src/components/panels/timeline/InlineDiffViewer.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useMemo, useState, useEffect } from 'react';
1+
import { useMemo, useState, useEffect, useRef } from 'react';
22
import { Eye, EyeOff, ChevronDown, ChevronRight } from 'lucide-react';
33
import './InlineDiffViewer.css';
44
import { MarkdownPreview } from '../diff/MarkdownPreview';
@@ -201,10 +201,11 @@ export function InlineDiffViewer({
201201
}
202202
}, [storageKey, hasBeenViewed]);
203203

204-
// Listen to global collapse all trigger
204+
// Listen to global collapse all trigger (only react to triggers after mount)
205205
const collapseContext = useDiffCollapseHook?.();
206+
const initialCollapseTrigger = useRef(collapseContext?.collapseAllTrigger ?? 0);
206207
useEffect(() => {
207-
if (collapseContext && collapseContext.collapseAllTrigger > 0) {
208+
if (collapseContext && collapseContext.collapseAllTrigger > initialCollapseTrigger.current) {
208209
setIsExpanded(false);
209210
}
210211
}, [collapseContext?.collapseAllTrigger]);

packages/ui/src/components/panels/timeline/ThinkingMessage.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useState } from 'react';
1+
import { useEffect, useRef, useState } from 'react';
22
import { Brain, ChevronDown, ChevronRight, Circle, Square } from 'lucide-react';
33
import './ThinkingMessage.css';
44

@@ -26,10 +26,11 @@ export function ThinkingMessage({ content, timestamp, isStreaming }: ThinkingMes
2626
else setExpanded(false);
2727
}, [isStreaming, userToggled]);
2828

29-
// Listen to global collapse all trigger
29+
// Listen to global collapse all trigger (only react to triggers after mount)
3030
const collapseContext = useThinkingCollapseHook?.();
31+
const initialCollapseTrigger = useRef(collapseContext?.collapseAllTrigger ?? 0);
3132
useEffect(() => {
32-
if (collapseContext && collapseContext.collapseAllTrigger > 0) {
33+
if (collapseContext && collapseContext.collapseAllTrigger > initialCollapseTrigger.current) {
3334
setExpanded(false);
3435
}
3536
}, [collapseContext?.collapseAllTrigger]);

packages/ui/src/components/panels/timeline/TimelineView.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -675,10 +675,11 @@ const AgentResponse: React.FC<{
675675
const [expandedCommands, setExpandedCommands] = useState<Set<string>>(new Set());
676676
const agentLabel = useMemo(() => getAgentModelLabelFromCommands(commands), [commands]);
677677

678-
// Listen to global collapse all trigger
678+
// Listen to global collapse all trigger (only react to triggers after mount)
679679
const toolCollapseContext = useContext(ToolCollapseContext);
680+
const initialToolCollapseTrigger = useRef(toolCollapseContext?.collapseAllTrigger ?? 0);
680681
useEffect(() => {
681-
if (toolCollapseContext && toolCollapseContext.collapseAllTrigger > 0) {
682+
if (toolCollapseContext && toolCollapseContext.collapseAllTrigger > initialToolCollapseTrigger.current) {
682683
setShowCommands(false);
683684
setExpandedOutputs(new Set());
684685
setExpandedCommands(new Set());

packages/ui/src/components/panels/timeline/ToolCallMessage.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable react-refresh/only-export-components */
2-
import { useState, useEffect } from 'react';
2+
import { useState, useEffect, useRef } from 'react';
33
import {
44
ChevronDown,
55
ChevronRight,
@@ -122,10 +122,11 @@ export function ToolCallMessage({
122122
}: ToolCallMessageProps) {
123123
const [expanded, setExpanded] = useState(false);
124124

125-
// Listen to global tool collapse trigger
125+
// Listen to global tool collapse trigger (only react to triggers after mount)
126126
const toolCollapseContext = useToolCollapseHook?.();
127+
const initialToolCollapseTrigger = useRef(toolCollapseContext?.collapseAllTrigger ?? 0);
127128
useEffect(() => {
128-
if (toolCollapseContext && toolCollapseContext.collapseAllTrigger > 0) {
129+
if (toolCollapseContext && toolCollapseContext.collapseAllTrigger > initialToolCollapseTrigger.current) {
129130
setExpanded(false);
130131
}
131132
}, [toolCollapseContext?.collapseAllTrigger]);

0 commit comments

Comments
 (0)