fix: Disconnection banner preserves original disconnect time

This commit is contained in:
jamesread 2026-03-09 08:47:26 +00:00
parent a5c102dbf1
commit caf5a4b025
8 changed files with 31 additions and 3 deletions

View File

@ -21,7 +21,9 @@ async function reconnectWebsocket () {
connectionState.reconnecting = true connectionState.reconnecting = true
connectionState.connected = false connectionState.connected = false
connectionState.disconnectedAt = Date.now() if (connectionState.disconnectedAt == null) {
connectionState.disconnectedAt = Date.now()
}
connectionState.nextReconnectAt = null connectionState.nextReconnectAt = null
try { try {
@ -29,9 +31,9 @@ async function reconnectWebsocket () {
const stream = window.client.eventStream() const stream = window.client.eventStream()
connectionState.connected = true connectionState.connected = true
connectionState.reconnecting = false connectionState.reconnecting = false
connectionState.disconnectedAt = null
connectionState.nextReconnectAt = null connectionState.nextReconnectAt = null
for await (const e of stream) { for await (const e of stream) {
connectionState.disconnectedAt = null
handleEvent(e) handleEvent(e)
} }
} catch (err) { } catch (err) {

View File

@ -1,5 +1,8 @@
<template> <template>
<span id="connection-banner" v-if="!connectionState.connected" class="inline-notification critical user-info-connection" role="status">{{ bannerText }}</span> <span id="connection-banner" v-if="!connectionState.connected" class="inline-notification critical user-info-connection">
<span class="connection-banner-sr-only" role="status">{{ staticAnnouncement }}</span>
<span aria-hidden="true">{{ bannerText }}</span>
</span>
</template> </template>
<script setup> <script setup>
@ -44,6 +47,8 @@ onUnmounted(() => {
} }
}) })
const staticAnnouncement = computed(() => t('disconnected-banner-announcement'))
const bannerText = computed(() => { const bannerText = computed(() => {
const at = connectionState.disconnectedAt const at = connectionState.disconnectedAt
const next = connectionState.nextReconnectAt const next = connectionState.nextReconnectAt
@ -65,4 +70,15 @@ const bannerText = computed(() => {
border: 0; border: 0;
margin: 0; margin: 0;
} }
.connection-banner-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
</style> </style>

View File

@ -22,6 +22,7 @@
"diagnostics.where-to-find-help": "Wo Sie Hilfe finden", "diagnostics.where-to-find-help": "Wo Sie Hilfe finden",
"disconnected": "Getrennt", "disconnected": "Getrennt",
"disconnected-banner": "Events-Websocket getrennt seit {disconnectedSince}. Erneuter Verbindungsversuch in {reconnectIn}.", "disconnected-banner": "Events-Websocket getrennt seit {disconnectedSince}. Erneuter Verbindungsversuch in {reconnectIn}.",
"disconnected-banner-announcement": "Events-Websocket getrennt.",
"disconnected-banner-reconnecting": "Events-Websocket getrennt seit {disconnectedSince}. Verbindungsversuch…", "disconnected-banner-reconnecting": "Events-Websocket getrennt seit {disconnectedSince}. Verbindungsversuch…",
"docs": "Dokumentation", "docs": "Dokumentation",
"language-dialog.browser-languages": "Browser-Sprachen", "language-dialog.browser-languages": "Browser-Sprachen",
@ -79,6 +80,7 @@
"diagnostics.where-to-find-help": "Where to find help", "diagnostics.where-to-find-help": "Where to find help",
"disconnected": "Disconnected", "disconnected": "Disconnected",
"disconnected-banner": "Events websocket disconnected since {disconnectedSince}. Trying reconnect in {reconnectIn}.", "disconnected-banner": "Events websocket disconnected since {disconnectedSince}. Trying reconnect in {reconnectIn}.",
"disconnected-banner-announcement": "Events websocket disconnected.",
"disconnected-banner-reconnecting": "Events websocket disconnected since {disconnectedSince}. Trying reconnect…", "disconnected-banner-reconnecting": "Events websocket disconnected since {disconnectedSince}. Trying reconnect…",
"docs": "Documentation", "docs": "Documentation",
"language-dialog.browser-languages": "Browser languages", "language-dialog.browser-languages": "Browser languages",
@ -136,6 +138,7 @@
"diagnostics.where-to-find-help": "Dónde encontrar ayuda", "diagnostics.where-to-find-help": "Dónde encontrar ayuda",
"disconnected": "Desconectado", "disconnected": "Desconectado",
"disconnected-banner": "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión en {reconnectIn}.", "disconnected-banner": "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión en {reconnectIn}.",
"disconnected-banner-announcement": "Websocket de eventos desconectado.",
"disconnected-banner-reconnecting": "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión…", "disconnected-banner-reconnecting": "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión…",
"docs": "Documentación", "docs": "Documentación",
"language-dialog.browser-languages": "Idiomas del navegador", "language-dialog.browser-languages": "Idiomas del navegador",
@ -193,6 +196,7 @@
"diagnostics.where-to-find-help": "Dove trovare aiuto", "diagnostics.where-to-find-help": "Dove trovare aiuto",
"disconnected": "Disconnesso", "disconnected": "Disconnesso",
"disconnected-banner": "Websocket eventi disconnesso dalle {disconnectedSince}. Nuovo tentativo tra {reconnectIn}.", "disconnected-banner": "Websocket eventi disconnesso dalle {disconnectedSince}. Nuovo tentativo tra {reconnectIn}.",
"disconnected-banner-announcement": "Websocket eventi disconnesso.",
"disconnected-banner-reconnecting": "Websocket eventi disconnesso dalle {disconnectedSince}. Tentativo di connessione…", "disconnected-banner-reconnecting": "Websocket eventi disconnesso dalle {disconnectedSince}. Tentativo di connessione…",
"docs": "Documentazione", "docs": "Documentazione",
"language-dialog.browser-languages": "Lingue del browser", "language-dialog.browser-languages": "Lingue del browser",
@ -250,6 +254,7 @@
"diagnostics.where-to-find-help": "在哪里找到帮助", "diagnostics.where-to-find-help": "在哪里找到帮助",
"disconnected": "已断开连接", "disconnected": "已断开连接",
"disconnected-banner": "事件 WebSocket 自 {disconnectedSince} 已断开。{reconnectIn} 后尝试重连。", "disconnected-banner": "事件 WebSocket 自 {disconnectedSince} 已断开。{reconnectIn} 后尝试重连。",
"disconnected-banner-announcement": "事件 WebSocket 已断开。",
"disconnected-banner-reconnecting": "事件 WebSocket 自 {disconnectedSince} 已断开。正在尝试重连…", "disconnected-banner-reconnecting": "事件 WebSocket 自 {disconnectedSince} 已断开。正在尝试重连…",
"docs": "文档", "docs": "文档",
"language-dialog.browser-languages": "浏览器语言", "language-dialog.browser-languages": "浏览器语言",

View File

@ -10,6 +10,7 @@ translations:
reconnecting: Verbinde erneut… reconnecting: Verbinde erneut…
disconnected-banner: "Events-Websocket getrennt seit {disconnectedSince}. Erneuter Verbindungsversuch in {reconnectIn}." disconnected-banner: "Events-Websocket getrennt seit {disconnectedSince}. Erneuter Verbindungsversuch in {reconnectIn}."
disconnected-banner-reconnecting: "Events-Websocket getrennt seit {disconnectedSince}. Verbindungsversuch…" disconnected-banner-reconnecting: "Events-Websocket getrennt seit {disconnectedSince}. Verbindungsversuch…"
disconnected-banner-announcement: Events-Websocket getrennt.
login-button: Login login-button: Login
raise-issue: Ein Problem melden auf GitHub raise-issue: Ein Problem melden auf GitHub
docs: Dokumentation docs: Dokumentation

View File

@ -12,6 +12,7 @@ translations:
reconnecting: Reconnecting… reconnecting: Reconnecting…
disconnected-banner: "Events websocket disconnected since {disconnectedSince}. Trying reconnect in {reconnectIn}." disconnected-banner: "Events websocket disconnected since {disconnectedSince}. Trying reconnect in {reconnectIn}."
disconnected-banner-reconnecting: "Events websocket disconnected since {disconnectedSince}. Trying reconnect…" disconnected-banner-reconnecting: "Events websocket disconnected since {disconnectedSince}. Trying reconnect…"
disconnected-banner-announcement: Events websocket disconnected.
login-button: Login login-button: Login
logs.title: Logs logs.title: Logs
logs.page-description: This is a list of logs from actions that have been executed. You can filter the list by action title. logs.page-description: This is a list of logs from actions that have been executed. You can filter the list by action title.

View File

@ -10,6 +10,7 @@ translations:
reconnecting: Reconectando… reconnecting: Reconectando…
disconnected-banner: "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión en {reconnectIn}." disconnected-banner: "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión en {reconnectIn}."
disconnected-banner-reconnecting: "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión…" disconnected-banner-reconnecting: "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión…"
disconnected-banner-announcement: Websocket de eventos desconectado.
login-button: Iniciar sesión login-button: Iniciar sesión
raise-issue: Reportar un problema en GitHub raise-issue: Reportar un problema en GitHub
docs: Documentación docs: Documentación

View File

@ -11,6 +11,7 @@ translations:
reconnecting: Riconnessione… reconnecting: Riconnessione…
disconnected-banner: "Websocket eventi disconnesso dalle {disconnectedSince}. Nuovo tentativo tra {reconnectIn}." disconnected-banner: "Websocket eventi disconnesso dalle {disconnectedSince}. Nuovo tentativo tra {reconnectIn}."
disconnected-banner-reconnecting: "Websocket eventi disconnesso dalle {disconnectedSince}. Tentativo di connessione…" disconnected-banner-reconnecting: "Websocket eventi disconnesso dalle {disconnectedSince}. Tentativo di connessione…"
disconnected-banner-announcement: Websocket eventi disconnesso.
login-button: Login login-button: Login
raise-issue: Segnala un problema su GitHub raise-issue: Segnala un problema su GitHub
logs.title: Registri logs.title: Registri

View File

@ -10,6 +10,7 @@ translations:
reconnecting: 正在重新连接… reconnecting: 正在重新连接…
disconnected-banner: "事件 WebSocket 自 {disconnectedSince} 已断开。{reconnectIn} 后尝试重连。" disconnected-banner: "事件 WebSocket 自 {disconnectedSince} 已断开。{reconnectIn} 后尝试重连。"
disconnected-banner-reconnecting: "事件 WebSocket 自 {disconnectedSince} 已断开。正在尝试重连…" disconnected-banner-reconnecting: "事件 WebSocket 自 {disconnectedSince} 已断开。正在尝试重连…"
disconnected-banner-announcement: 事件 WebSocket 已断开。
login-button: 登录 login-button: 登录
raise-issue: 在 GitHub 上报告问题 raise-issue: 在 GitHub 上报告问题
docs: 文档 docs: 文档