mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-08-03 17:01:15 +08:00
fix(desktop): swap session in-place when switching workDir on empty session
Instead of close tab → delete session → create session → open tab (which causes visual flicker and tab jumping), create the new session first then replace the tab's sessionId in-place via a new replaceTabSession method. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
211226c7a1
commit
6085447277
@ -531,16 +531,17 @@ export function ChatInput() {
|
|||||||
value={gitInfo?.workDir || activeSession?.workDir || ''}
|
value={gitInfo?.workDir || activeSession?.workDir || ''}
|
||||||
onChange={async (newWorkDir) => {
|
onChange={async (newWorkDir) => {
|
||||||
if (!activeTabId) return
|
if (!activeTabId) return
|
||||||
// Recreate session with new workDir
|
const oldId = activeTabId
|
||||||
const { deleteSession, createSession } = useSessionStore.getState()
|
const { deleteSession, createSession } = useSessionStore.getState()
|
||||||
const { closeTab, openTab } = useTabStore.getState()
|
const { replaceTabSession } = useTabStore.getState()
|
||||||
const { disconnectSession, connectToSession } = useChatStore.getState()
|
const { disconnectSession, connectToSession } = useChatStore.getState()
|
||||||
disconnectSession(activeTabId)
|
// Create new session first, then swap tab in-place
|
||||||
closeTab(activeTabId)
|
|
||||||
await deleteSession(activeTabId)
|
|
||||||
const newId = await createSession(newWorkDir)
|
const newId = await createSession(newWorkDir)
|
||||||
openTab(newId, t('sidebar.newSession'))
|
disconnectSession(oldId)
|
||||||
|
replaceTabSession(oldId, newId)
|
||||||
connectToSession(newId)
|
connectToSession(newId)
|
||||||
|
// Clean up old session in background
|
||||||
|
deleteSession(oldId).catch(() => {})
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -29,6 +29,7 @@ type TabStore = {
|
|||||||
setActiveTab: (sessionId: string) => void
|
setActiveTab: (sessionId: string) => void
|
||||||
updateTabTitle: (sessionId: string, title: string) => void
|
updateTabTitle: (sessionId: string, title: string) => void
|
||||||
updateTabStatus: (sessionId: string, status: Tab['status']) => void
|
updateTabStatus: (sessionId: string, status: Tab['status']) => void
|
||||||
|
replaceTabSession: (oldSessionId: string, newSessionId: string) => void
|
||||||
moveTab: (fromIndex: number, toIndex: number) => void
|
moveTab: (fromIndex: number, toIndex: number) => void
|
||||||
|
|
||||||
saveTabs: () => void
|
saveTabs: () => void
|
||||||
@ -93,6 +94,17 @@ export const useTabStore = create<TabStore>((set, get) => ({
|
|||||||
}))
|
}))
|
||||||
},
|
},
|
||||||
|
|
||||||
|
replaceTabSession: (oldSessionId, newSessionId) => {
|
||||||
|
const { activeTabId } = get()
|
||||||
|
set((s) => ({
|
||||||
|
tabs: s.tabs.map((t) =>
|
||||||
|
t.sessionId === oldSessionId ? { ...t, sessionId: newSessionId } : t,
|
||||||
|
),
|
||||||
|
activeTabId: activeTabId === oldSessionId ? newSessionId : activeTabId,
|
||||||
|
}))
|
||||||
|
get().saveTabs()
|
||||||
|
},
|
||||||
|
|
||||||
moveTab: (fromIndex, toIndex) => {
|
moveTab: (fromIndex, toIndex) => {
|
||||||
if (fromIndex === toIndex) return
|
if (fromIndex === toIndex) return
|
||||||
const { tabs } = get()
|
const { tabs } = get()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user