diff --git a/src/__tests__/renderer/utils/tabHelpers.test.ts b/src/__tests__/renderer/utils/tabHelpers.test.ts index 4b13ff1b..deab62eb 100644 --- a/src/__tests__/renderer/utils/tabHelpers.test.ts +++ b/src/__tests__/renderer/utils/tabHelpers.test.ts @@ -72,6 +72,9 @@ function createMockSession(overrides: Partial = {}): Session { aiTabs: [], activeTabId: '', closedTabHistory: [], + filePreviewTabs: [], + activeFileTabId: null, + unifiedTabOrder: [], ...overrides, }; } @@ -578,6 +581,22 @@ describe('tabHelpers', () => { expect(result!.session.activeTabId).toBe('tab-2'); expect(result!.tab).toBe(tab2); }); + + it('clears activeFileTabId when selecting an AI tab', () => { + const tab = createMockTab({ id: 'tab-1' }); + const session = createMockSession({ + aiTabs: [tab], + activeTabId: 'tab-1', + activeFileTabId: 'file-tab-1', // A file tab was active + }); + + const result = setActiveTab(session, 'tab-1'); + + // Should return a new session with activeFileTabId cleared + expect(result!.session).not.toBe(session); + expect(result!.session.activeFileTabId).toBeNull(); + expect(result!.session.activeTabId).toBe('tab-1'); + }); }); describe('getWriteModeTab', () => { diff --git a/src/renderer/utils/tabHelpers.ts b/src/renderer/utils/tabHelpers.ts index 8ee55ba8..07dbbeed 100644 --- a/src/renderer/utils/tabHelpers.ts +++ b/src/renderer/utils/tabHelpers.ts @@ -440,19 +440,22 @@ export function setActiveTab(session: Session, tabId: string): SetActiveTabResul return null; } - // If already active, return current state (no mutation needed) - if (session.activeTabId === tabId) { + // If already active and no file tab is selected, return current state (no mutation needed) + if (session.activeTabId === tabId && session.activeFileTabId === null) { return { tab: targetTab, session, }; } + // When selecting an AI tab, deselect any active file preview tab + // This ensures only one tab type (AI or file) is active at a time return { tab: targetTab, session: { ...session, activeTabId: tabId, + activeFileTabId: null, }, }; }