diff --git a/frontend/src/pages/AssistantChatPage.tsx b/frontend/src/pages/AssistantChatPage.tsx index 18b7d218..3dcd4c27 100644 --- a/frontend/src/pages/AssistantChatPage.tsx +++ b/frontend/src/pages/AssistantChatPage.tsx @@ -31,7 +31,10 @@ export default function AssistantChatPage() { const navigate = useNavigate() const { sessionId: urlSessionId } = useParams<{ sessionId?: string }>() const [chats, setChats] = useState([]) - const [activeChatId, setActiveChatId] = useState(urlSessionId || null) + const [activeChatId, setActiveChatId] = useState(() => { + if (urlSessionId) return urlSessionId + try { return sessionStorage.getItem('rf-active-chat-id') } catch { return null } + }) const [messages, setMessages] = useState([]) const [input, setInput] = useState('') const [loading, setLoading] = useState(false) @@ -77,6 +80,14 @@ export default function AssistantChatPage() { const dragCounterRef = useRef(0) const prefillHandledRef = useRef(false) + // Persist active chat ID to sessionStorage + useEffect(() => { + try { + if (activeChatId) sessionStorage.setItem('rf-active-chat-id', activeChatId) + else sessionStorage.removeItem('rf-active-chat-id') + } catch { /* ignore */ } + }, [activeChatId]) + // Load chat list from ai_sessions useEffect(() => { loadChats() @@ -89,6 +100,13 @@ export default function AssistantChatPage() { } }, [urlSessionId]) // eslint-disable-line react-hooks/exhaustive-deps + // Restore session from sessionStorage on mount (when URL has no session ID) + useEffect(() => { + if (!urlSessionId && activeChatId) { + selectChat(activeChatId) + } + }, []) // eslint-disable-line react-hooks/exhaustive-deps + // Handle prefill from command palette / dashboard handoff useEffect(() => { const state = location.state as { prefill?: string; uploadIds?: string[] } | null