feat: restore active chat session on reload
Save activeChatId to sessionStorage so reloading /assistant restores the last conversation. Messages load from backend conversation_messages, task lane restores from sessionStorage (with partial answers intact). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -31,7 +31,10 @@ export default function AssistantChatPage() {
|
||||
const navigate = useNavigate()
|
||||
const { sessionId: urlSessionId } = useParams<{ sessionId?: string }>()
|
||||
const [chats, setChats] = useState<ChatListItem[]>([])
|
||||
const [activeChatId, setActiveChatId] = useState<string | null>(urlSessionId || null)
|
||||
const [activeChatId, setActiveChatId] = useState<string | null>(() => {
|
||||
if (urlSessionId) return urlSessionId
|
||||
try { return sessionStorage.getItem('rf-active-chat-id') } catch { return null }
|
||||
})
|
||||
const [messages, setMessages] = useState<MessageWithMeta[]>([])
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user