From f011a40748599c82d9075e535a6aeb5ff9ec16be Mon Sep 17 00:00:00 2001
From: 2GT-Rich <107219997+2GT-Rich@users.noreply.github.com>
Date: Sun, 23 Aug 2026 20:39:46 -0700
Subject: [PATCH] fix(dashboard): render the snooze button, and cap the
things-to-handle list (v0.23.15-beta)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Three faults in the same card, all layout.
**Snooze rendered as an unreadable sliver.** The row is a three-column grid —
severity bar, text, action — but carried four children once the snooze button
was added in v0.23.10. The fourth wrapped onto an implicit second row and landed
in column one, which is 3px wide, so the button was squeezed to nothing. The two
buttons now share the third column in a flex wrapper, which is what the grid
always assumed.
Only the rendering was broken: the dismiss round-trip was verified end to end
against the running instance — POST returns 201, the item leaves the list, the
snoozed count rises, and DELETE restores it.
**A long backlog pushed the rest of the dashboard off the page.** The list grew
without bound, so a fleet with real problems displaced everything below it. It
now caps at min(52vh, 460px) and scrolls, keeping the card a fixed part of the
page. The snoozed-count footer stays outside the scroll area so it remains
visible.
**The card rendered at 57% width with dead space beside it.** It was the only
child of a two-column grid left behind when quick actions moved to the header
(#104) — the comment above it already claimed full width, which it had not been
since. The empty column and its wrapper are gone.
Co-Authored-By: Claude Opus 5
---
README.md | 2 +-
backend/package.json | 2 +-
frontend/package.json | 2 +-
frontend/src/pages/DashboardPage.tsx | 75 ++++++++++++++++------------
frontend/src/version.ts | 2 +-
5 files changed, 46 insertions(+), 37 deletions(-)
diff --git a/README.md b/README.md
index e0cd2a0..0aacf07 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
-
+
diff --git a/backend/package.json b/backend/package.json
index 75a9c62..1e2d59f 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "mikrotik-manager-backend",
- "version": "0.23.14-beta",
+ "version": "0.23.15-beta",
"description": "Mikrotik Network Management Platform - Backend API",
"main": "dist/index.js",
"scripts": {
diff --git a/frontend/package.json b/frontend/package.json
index 15fa436..e3ee6e6 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "mikrotik-manager-frontend",
- "version": "0.23.14-beta",
+ "version": "0.23.15-beta",
"private": true,
"type": "module",
"scripts": {
diff --git a/frontend/src/pages/DashboardPage.tsx b/frontend/src/pages/DashboardPage.tsx
index 59cbd54..e25f768 100644
--- a/frontend/src/pages/DashboardPage.tsx
+++ b/frontend/src/pages/DashboardPage.tsx
@@ -804,10 +804,10 @@ function OperationsView({
)}
- {/* Things to handle — full width now that quick actions live in the header */}
-
- {/* Things to handle */}
-
+ {/* Things to handle — genuinely full width. It previously sat as the only
+ child of a two-column grid left behind when quick actions moved to the
+ header (#104), so it rendered at 57% with an empty column beside it. */}
+
+ {/* A fleet with a real backlog can generate dozens of these. Capping the
+ list and scrolling keeps the card a fixed part of the page instead of
+ something that grows without bound and displaces everything below. */}
+
-
- {/* "Not now" rather than "never": an item that is genuinely resolved
- stops being generated, so a dismissal is time-boxed (#102). */}
- {item.fingerprint && (
+ {/* Both buttons share the grid's third column. Placed as siblings
+ they made four children in a three-column grid, which wrapped
+ Snooze onto an implicit second row inside the 3px severity
+ column — where it rendered as an unreadable sliver. */}
+
- )}
+ {/* "Not now" rather than "never": an item that is genuinely resolved
+ stops being generated, so a dismissal is time-boxed (#102). */}
+ {item.fingerprint && (
+
+ )}
+
)) : (
@@ -870,13 +880,12 @@ function OperationsView({
Nothing needs attention
)}
- {(insights?.dismissedCount ?? 0) > 0 && (
-
- {insights!.dismissedCount} snoozed — they return automatically if still true.
-
- )}
-
-
+
+ {(insights?.dismissedCount ?? 0) > 0 && (
+
+ {insights!.dismissedCount} snoozed — they return automatically if still true.
+