Fix duplicate compare modal on repeated clicks (#491)

Co-authored-by: cosminae <cosmin.e@annavas.io>
This commit is contained in:
Cosmin Enache
2026-06-01 15:24:27 +02:00
committed by GitHub
parent 1eff46579a
commit 04fd963394
3 changed files with 9 additions and 0 deletions

View File

@@ -92,7 +92,9 @@ async function toggleMode() {
deactivate(true); deactivate(true);
return false; return false;
} }
if (state._openingSelector) return false;
state._openingSelector = true;
try { try {
const confirmed = await showModelSelector(); const confirmed = await showModelSelector();
if (!confirmed) return false; if (!confirmed) return false;
@@ -104,6 +106,8 @@ async function toggleMode() {
} catch (err) { } catch (err) {
console.error('Compare toggleMode error:', err); console.error('Compare toggleMode error:', err);
return false; return false;
} finally {
state._openingSelector = false;
} }
} }

View File

@@ -2,6 +2,7 @@
const state = { const state = {
API_BASE: '', API_BASE: '',
isActive: false, isActive: false,
_openingSelector: false, // prevents duplicate compare modals on rapid re-clicks
_streaming: false, _streaming: false,
_blindMode: true, _blindMode: true,
_saveOnClose: false, _saveOnClose: false,
@@ -36,6 +37,7 @@ const state = {
/** Reset transient state to defaults — useful for clean restarts. */ /** Reset transient state to defaults — useful for clean restarts. */
export function reset() { export function reset() {
state._openingSelector = false;
state._streaming = false; state._streaming = false;
state._finishOrder = 0; state._finishOrder = 0;
state._paneElapsed = []; state._paneElapsed = [];

View File

@@ -59,6 +59,7 @@ def test_state_reset_preserves_config(node_available):
state.API_BASE = 'http://x'; state.API_BASE = 'http://x';
state._blindMode = true; state._blindMode = true;
state._parallel = false; state._parallel = false;
state._openingSelector = true;
state._streaming = true; state._streaming = true;
state._finishOrder = 7; state._finishOrder = 7;
state._paneSessionIds = ['a','b']; state._paneSessionIds = ['a','b'];
@@ -71,6 +72,7 @@ def test_state_reset_preserves_config(node_available):
api_base_sticky: state.API_BASE, api_base_sticky: state.API_BASE,
blind_sticky: state._blindMode, blind_sticky: state._blindMode,
parallel_sticky: state._parallel, parallel_sticky: state._parallel,
opening_cleared: state._openingSelector,
streaming_cleared: state._streaming, streaming_cleared: state._streaming,
finish_order_cleared: state._finishOrder, finish_order_cleared: state._finishOrder,
session_ids_cleared: state._paneSessionIds.length, session_ids_cleared: state._paneSessionIds.length,
@@ -85,6 +87,7 @@ def test_state_reset_preserves_config(node_available):
"api_base_sticky": "http://x", "api_base_sticky": "http://x",
"blind_sticky": True, "blind_sticky": True,
"parallel_sticky": False, "parallel_sticky": False,
"opening_cleared": False,
"streaming_cleared": False, "streaming_cleared": False,
"finish_order_cleared": 0, "finish_order_cleared": 0,
"session_ids_cleared": 0, "session_ids_cleared": 0,