diff --git a/apps/web/src/store.test.ts b/apps/web/src/store.test.ts index 176a6a73fc0d93a11d81b8586c58abe5750291b0..eb8662dd97a4b034c6989397a176ca382649164c 100644 --- a/apps/web/src/store.test.ts +++ b/apps/web/src/store.test.ts @@ -287,7 +287,7 @@ describe("store reducer thread continuity", () => { ]); }); - it("closes the final terminal and hides the drawer", () => { + it("closes the final terminal and keeps the drawer visibility unchanged", () => { const state = makeState( makeThread({ terminalOpen: true, @@ -300,14 +300,14 @@ describe("store reducer thread continuity", () => { terminalId: DEFAULT_THREAD_TERMINAL_ID, }); - expect(next.threads[0]?.terminalOpen).toBe(false); - expect(next.threads[0]?.terminalIds).toEqual([DEFAULT_THREAD_TERMINAL_ID]); + expect(next.threads[0]?.terminalOpen).toBe(true); + expect(next.threads[0]?.terminalIds).toEqual([`${DEFAULT_THREAD_TERMINAL_ID}-next`]); expect(next.threads[0]?.runningTerminalIds).toEqual([]); - expect(next.threads[0]?.activeTerminalId).toBe(DEFAULT_THREAD_TERMINAL_ID); + expect(next.threads[0]?.activeTerminalId).toBe(`${DEFAULT_THREAD_TERMINAL_ID}-next`); expect(next.threads[0]?.terminalGroups).toEqual([ { - id: `group-${DEFAULT_THREAD_TERMINAL_ID}`, - terminalIds: [DEFAULT_THREAD_TERMINAL_ID], + id: `group-${DEFAULT_THREAD_TERMINAL_ID}-next`, + terminalIds: [`${DEFAULT_THREAD_TERMINAL_ID}-next`], }, ]); }); diff --git a/apps/web/src/store.ts b/apps/web/src/store.ts index eb21350551b692d9f6fa21eca2c2106c012cd7ef..ad5564979925498869039e3f3aec325f5e1f856b 100644 --- a/apps/web/src/store.ts +++ b/apps/web/src/store.ts @@ -164,6 +164,13 @@ function fallbackGroupId(terminalId: string): string { return `group-${terminalId}`; } +function replacementTerminalId(closedTerminalId: string): string { + const normalizedId = closedTerminalId.trim(); + return normalizedId === DEFAULT_THREAD_TERMINAL_ID + ? `${DEFAULT_THREAD_TERMINAL_ID}-next` + : DEFAULT_THREAD_TERMINAL_ID; +} + function assignUniqueGroupId(groupId: string, usedGroupIds: Set): string { if (!usedGroupIds.has(groupId)) { usedGroupIds.add(groupId); @@ -269,19 +276,20 @@ function closeThreadTerminal(thread: Thread, terminalId: string): Thread { const remainingTerminalIds = thread.terminalIds.filter((id) => id !== terminalId); if (remainingTerminalIds.length === 0) { + const nextTerminalId = replacementTerminalId(terminalId); + const nextTerminalGroupId = fallbackGroupId(nextTerminalId); return normalizeThreadTerminals({ ...thread, - terminalOpen: false, - terminalIds: [DEFAULT_THREAD_TERMINAL_ID], + terminalIds: [nextTerminalId], runningTerminalIds: [], - activeTerminalId: DEFAULT_THREAD_TERMINAL_ID, + activeTerminalId: nextTerminalId, terminalGroups: [ { - id: fallbackGroupId(DEFAULT_THREAD_TERMINAL_ID), - terminalIds: [DEFAULT_THREAD_TERMINAL_ID], + id: nextTerminalGroupId, + terminalIds: [nextTerminalId], }, ], - activeTerminalGroupId: fallbackGroupId(DEFAULT_THREAD_TERMINAL_ID), + activeTerminalGroupId: nextTerminalGroupId, }); }