From f97d00ab7f944ae9a3f8bc5b5f45322e8193e9ee Mon Sep 17 00:00:00 2001 From: rajch_ales Date: Wed, 5 Aug 2026 18:53:11 +0200 Subject: [PATCH] Add database connection status indicator --- public/app.js | 3 +++ public/app.ts | 3 +++ public/index.html | 5 ++++- public/styles.css | 2 +- src/tailwind.css | 5 +++++ 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/public/app.js b/public/app.js index ca70345..4186ddc 100644 --- a/public/app.js +++ b/public/app.js @@ -44,6 +44,7 @@ const databaseModeInputs = document.querySelectorAll('input[name="databaseMode"] const permissionInputs = document.querySelectorAll("#allowInsertToggle, #allowUpdateToggle, #allowDeleteToggle"); const transactionModeInputs = document.querySelectorAll('input[name="transactionMode"]'); const databaseStatus = document.querySelector("#databaseStatus"); +const databaseStateDot = document.querySelector("#databaseStateDot"); const localDbFields = document.querySelector("#localDbFields"); const localDbInputs = document.querySelectorAll("#localDbFields input"); const testLocalDbButton = document.querySelector("#testLocalDbButton"); @@ -1036,6 +1037,8 @@ function refreshDatabaseStatusLabel() { : (transactionMode === "dry-run" ? "dry-run" : "transaction"); databaseStatus.textContent = `${dbLabel} / ${connectionLabel} / ${accessLabel} / ${executionLabel}`; databaseStatus.classList.toggle("database-error", connectionError); + databaseStateDot.className = `database-state-dot ${databaseConnectionState === "unknown" ? "is-pending" : connectionError ? "is-error" : "is-ready"}`; + databaseStateDot.setAttribute("aria-label", connectionError ? "Database disconnected" : databaseConnectionState === "unknown" ? "Database connection pending" : "Database connected"); } function renderDatabaseModeNote(mode) { databaseModeNote.textContent = mode === "live" diff --git a/public/app.ts b/public/app.ts index f07a13e..892a7ac 100644 --- a/public/app.ts +++ b/public/app.ts @@ -44,6 +44,7 @@ const databaseModeInputs = document.querySelectorAll('input[name="databaseMode"] const permissionInputs = document.querySelectorAll("#allowInsertToggle, #allowUpdateToggle, #allowDeleteToggle"); const transactionModeInputs = document.querySelectorAll('input[name="transactionMode"]'); const databaseStatus = document.querySelector("#databaseStatus"); +const databaseStateDot = document.querySelector("#databaseStateDot"); const localDbFields = document.querySelector("#localDbFields"); const localDbInputs = document.querySelectorAll("#localDbFields input"); const testLocalDbButton = document.querySelector("#testLocalDbButton"); @@ -1134,6 +1135,8 @@ function refreshDatabaseStatusLabel() { : (transactionMode === "dry-run" ? "dry-run" : "transaction"); databaseStatus.textContent = `${dbLabel} / ${connectionLabel} / ${accessLabel} / ${executionLabel}`; databaseStatus.classList.toggle("database-error", connectionError); + databaseStateDot.className = `database-state-dot ${databaseConnectionState === "unknown" ? "is-pending" : connectionError ? "is-error" : "is-ready"}`; + databaseStateDot.setAttribute("aria-label", connectionError ? "Database disconnected" : databaseConnectionState === "unknown" ? "Database connection pending" : "Database connected"); } function renderDatabaseModeNote(mode) { diff --git a/public/index.html b/public/index.html index 8628df3..2437084 100644 --- a/public/index.html +++ b/public/index.html @@ -98,7 +98,10 @@