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 navigate = useNavigate()
|
||||||
const { sessionId: urlSessionId } = useParams<{ sessionId?: string }>()
|
const { sessionId: urlSessionId } = useParams<{ sessionId?: string }>()
|
||||||
const [chats, setChats] = useState<ChatListItem[]>([])
|
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 [messages, setMessages] = useState<MessageWithMeta[]>([])
|
||||||
const [input, setInput] = useState('')
|
const [input, setInput] = useState('')
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
@@ -77,6 +80,14 @@ export default function AssistantChatPage() {
|
|||||||
const dragCounterRef = useRef(0)
|
const dragCounterRef = useRef(0)
|
||||||
const prefillHandledRef = useRef(false)
|
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
|
// Load chat list from ai_sessions
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadChats()
|
loadChats()
|
||||||
@@ -89,6 +100,13 @@ export default function AssistantChatPage() {
|
|||||||
}
|
}
|
||||||
}, [urlSessionId]) // eslint-disable-line react-hooks/exhaustive-deps
|
}, [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
|
// Handle prefill from command palette / dashboard handoff
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const state = location.state as { prefill?: string; uploadIds?: string[] } | null
|
const state = location.state as { prefill?: string; uploadIds?: string[] } | null
|
||||||
|
|||||||
Reference in New Issue
Block a user