fix(chat): 협상 종료 시 목록·init 쿼리 캐시 무효화
- send 응답에서 종료 전이(session_status ≠ 협상중 또는 chat_end) 감지 시 sessions·init 캐시 무효화 - 마감/종료/권한 에러로 목록 복귀할 때도 동일하게 무효화 - /list 복귀 시 staleTime(60s) 과 무관하게 항상 최신 상태 표시, 종료 세션 재진입 시 인디케이터 숨김 즉시 적용 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
482c8ed97c
commit
1f16bec9ee
@ -9,6 +9,7 @@ import {
|
||||
chatKeys,
|
||||
} from '@/apis/chat'
|
||||
import { ErrorCode, getApiErrorMessage, isApiError } from '@/apis/types'
|
||||
import { negotiationKeys, SessionStatus } from '@/apis'
|
||||
import { toast } from '@/lib'
|
||||
import { useChatStore } from '@/features/chat/stores/useChatStore'
|
||||
import { useChatInitStore } from '@/features/chat/stores/useChatInitStore'
|
||||
@ -109,6 +110,12 @@ export function useChatController(sessionId: string) {
|
||||
const s = useChatStore.getState()
|
||||
if (data.message) s.appendMessage(mapMessage(data.message))
|
||||
s.setIsLoading(false)
|
||||
// 협상 종료 전이(완료/거부 등): 목록·init 캐시를 무효화해
|
||||
// /list 복귀 시 최신 상태를, 재진입 시 최신 session_status 를 보장한다.
|
||||
if (data.session_status !== SessionStatus.IN_PROGRESS || data.message?.chat_end) {
|
||||
queryClient.invalidateQueries({ queryKey: negotiationKeys.sessions() })
|
||||
queryClient.invalidateQueries({ queryKey: chatKeys.init(sessionId) })
|
||||
}
|
||||
},
|
||||
onError: (error) => {
|
||||
const s = useChatStore.getState()
|
||||
@ -134,6 +141,9 @@ export function useChatController(sessionId: string) {
|
||||
// 마감/종료/권한 등 더 진행 불가한 상태면 잠시 후 목록으로 복귀
|
||||
if (TERMINAL_CODES.has(code)) {
|
||||
s.bindSend(null) // 입력 잠금(추가 전송 차단)
|
||||
// 서버 기준 세션 상태가 이미 바뀐 것 — 복귀할 목록과 init 캐시를 무효화한다.
|
||||
queryClient.invalidateQueries({ queryKey: negotiationKeys.sessions() })
|
||||
queryClient.invalidateQueries({ queryKey: chatKeys.init(sessionId) })
|
||||
setTimeout(() => navigate('/list'), 1500)
|
||||
}
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user