fix: prevent flash of example panel and animations on page refresh (#482)

- Add isRestored state to track when localStorage restoration completes
- Show example panel only after confirming no saved messages exist
- Skip message animations for restored messages
- Default tool calls and reasoning blocks to collapsed for restored messages
This commit is contained in:
Dayuan Jiang
2026-01-01 15:42:48 +09:00
committed by GitHub
parent 77a2f6f6fa
commit 02527526ba
2 changed files with 36 additions and 7 deletions

View File

@@ -201,6 +201,7 @@ export default function ChatPanel({
// Flag to track if we've restored from localStorage
const hasRestoredRef = useRef(false)
const [isRestored, setIsRestored] = useState(false)
// Ref to track latest chartXML for use in callbacks (avoids stale closure)
const chartXMLRef = useRef(chartXML)
@@ -457,6 +458,8 @@ export default function ChatPanel({
localStorage.removeItem(STORAGE_MESSAGES_KEY)
localStorage.removeItem(STORAGE_XML_SNAPSHOTS_KEY)
toast.error(dict.errors.sessionCorrupted)
} finally {
setIsRestored(true)
}
}, [setMessages])
@@ -1006,6 +1009,7 @@ export default function ChatPanel({
onRegenerate={handleRegenerate}
status={status}
onEditMessage={handleEditMessage}
isRestored={isRestored}
/>
</main>