fix(shell): stale tabs now know the gateway was updated
Recurring confusion all day: the SPA lives in an open tab until reload, so after a gateway rebuild/update users kept seeing (and benchmarking with!) an old interface — "where is the feature", "why are the test ids old". The meta endpoint now carries the process start timestamp; the existing 20s health poll compares it, and when the gateway has restarted the tab shows a fixed banner: "The gateway was updated — this page is running an older interface" with a one-click Reload. 2 strings in all 7 languages.
This commit is contained in:
Vendored
+18
@@ -256,12 +256,30 @@ function showLogin() {
|
||||
mount(document.getElementById("app"), renderLogin(boot));
|
||||
}
|
||||
|
||||
let staleNotified = false;
|
||||
async function checkUiFresh() {
|
||||
// the SPA lives in the tab until reload; if the gateway restarted (dev
|
||||
// rebuild, update, config restart) the embedded UI may have changed —
|
||||
// tell the user instead of letting them stare at stale views
|
||||
try {
|
||||
const m = await api.meta();
|
||||
if (appState.meta?.started && m.started && m.started !== appState.meta.started && !staleNotified) {
|
||||
staleNotified = true;
|
||||
const bar = h("div", { class: "callout warn", style: "position:fixed; left:50%; transform:translateX(-50%); bottom:18px; z-index:99; box-shadow:0 8px 24px rgba(0,0,0,.35)" },
|
||||
h("span", {}, "🔄 " + t("shell.uiStale")), " ",
|
||||
h("button", { class: "btn sm primary", onClick: () => location.reload() }, t("shell.reload")));
|
||||
document.body.append(bar);
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
|
||||
async function refreshHealth() {
|
||||
try {
|
||||
appState.health = await api.health();
|
||||
} catch {
|
||||
appState.health = null;
|
||||
}
|
||||
checkUiFresh();
|
||||
// re-render topbar only if shell present
|
||||
const route = currentRoute();
|
||||
const main = document.querySelector(".main");
|
||||
|
||||
Reference in New Issue
Block a user