diff --git a/static/js/emailLibrary.js b/static/js/emailLibrary.js index a42e5c745..6b5b522ff 100644 --- a/static/js/emailLibrary.js +++ b/static/js/emailLibrary.js @@ -1334,6 +1334,15 @@ async function _loadAccounts() { const d = await r.json(); state._libAccounts = d.accounts || []; } catch (_) { state._libAccounts = []; } + // The 'Default' chip is gone — pick an explicit account so the email + // list and any per-email actions (open in new tab, mark read, etc.) + // always carry an account_id and can't desync from the server's + // is_default state. + if (!state._libAccountId && state._libAccounts.length) { + const def = state._libAccounts.find(a => a.is_default) || state._libAccounts[0]; + state._libAccountId = def.id; + _publishActiveAccount(); + } _renderAccountsStrip(); } @@ -1342,10 +1351,11 @@ function _renderAccountsStrip() { if (!strip) return; strip.style.display = 'flex'; const esc = s => String(s || '').replace(/&/g, '&').replace(/Default`; + // The 'Default' chip caused desync bugs (changing the server-side + // default via the dot while still on the cached 'default' view would + // open the wrong account's emails). Each account renders as its own + // chip; the active one is selected explicitly via _loadAccounts. + let html = ''; // 6px dot — matches the sidebar notification-dot size. const _dotFilled = ''; const _dotHollow = '';