From e8f5ac94f335112aa38680aab5c0c6aa7c2f6871 Mon Sep 17 00:00:00 2001 From: Saqeb Akhter Date: Wed, 1 Jul 2026 11:21:38 +0000 Subject: [PATCH] fix: COD-153 preserve matched case selection --- src/web/public/panels-ui.js | 10 ++++++++++ test/command-palette-ui.test.ts | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/web/public/panels-ui.js b/src/web/public/panels-ui.js index 5f936605..5c75a0e3 100644 --- a/src/web/public/panels-ui.js +++ b/src/web/public/panels-ui.js @@ -475,6 +475,16 @@ Object.assign(CodemanApp.prototype, { if (item.type === 'new-session') { const caseSelect = document.getElementById('quickStartCase'); if (caseSelect && item.caseName) { + if ( + caseSelect.tagName === 'SELECT' && + typeof caseSelect.appendChild === 'function' && + !Array.from(caseSelect.options || []).some((option) => option.value === item.caseName) + ) { + const option = document.createElement('option'); + option.value = item.caseName; + option.textContent = item.caseName; + caseSelect.appendChild(option); + } caseSelect.value = item.caseName; } await this.run(); diff --git a/test/command-palette-ui.test.ts b/test/command-palette-ui.test.ts index d1363dd2..cd8da07a 100644 --- a/test/command-palette-ui.test.ts +++ b/test/command-palette-ui.test.ts @@ -51,6 +51,11 @@ function loadPaletteHarness(overrides: Record = {}) { CodemanApp, document: { getElementById: (id: string) => elements[id] ?? null, + createElement: (tagName: string) => ({ + tagName: tagName.toUpperCase(), + value: '', + textContent: '', + }), }, console, escapeHtml: (value: string) => @@ -200,6 +205,33 @@ describe('Command-K session palette', () => { expect(app.run).toHaveBeenCalledTimes(1); }); + it('adds the matched case option before selecting it for a new session', async () => { + const { app, elements } = loadPaletteHarness(); + const options = [{ value: 'plex-previews' }]; + elements.quickStartCase = { + tagName: 'SELECT', + options, + appendChild: vi.fn((option: any) => options.push(option)), + get value() { + return this._value || ''; + }, + set value(next: string) { + this._value = options.some((option) => option.value === next) ? next : ''; + }, + }; + elements.quickStartCase.value = 'plex-previews'; + + const newSession = app.buildCommandPaletteItems('flux').find((item: any) => item.type === 'new-session'); + app.commandPaletteItems = [newSession]; + app.commandPaletteActiveIndex = 0; + + await app.activateCommandPaletteItem(); + + expect(elements.quickStartCase.appendChild).toHaveBeenCalledTimes(1); + expect(elements.quickStartCase.value).toBe('flux-player'); + expect(app.run).toHaveBeenCalledTimes(1); + }); + it('activates the highlighted session result', async () => { const { app } = loadPaletteHarness(); app.openCommandPalette();