From c764d05a0c4f5fb43fa8547258610d9a68dc887f Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sat, 12 Sep 2026 21:49:05 -0700
Subject: [PATCH] Fix: better handle PeaNUT missing data (#7139)
---
src/widgets/peanut/component.jsx | 12 +++++-------
src/widgets/peanut/component.test.jsx | 11 +++++++++++
2 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/src/widgets/peanut/component.jsx b/src/widgets/peanut/component.jsx
index 8ff6b05b5..914b49cb6 100644
--- a/src/widgets/peanut/component.jsx
+++ b/src/widgets/peanut/component.jsx
@@ -41,17 +41,15 @@ export default function Component({ service }) {
status = t("peanut.low_battery");
break;
default:
- status = upsStatus;
+ status = typeof upsStatus === "string" && upsStatus ? upsStatus : "-";
}
+ const percent = (value) => (value === undefined || value === null ? "-" : t("common.percent", { value }));
+
return (
-
-
+
+
);
diff --git a/src/widgets/peanut/component.test.jsx b/src/widgets/peanut/component.test.jsx
index 466cddf9d..177fae34b 100644
--- a/src/widgets/peanut/component.test.jsx
+++ b/src/widgets/peanut/component.test.jsx
@@ -51,4 +51,15 @@ describe("widgets/peanut/component", () => {
expect(screen.getByText("peanut.online")).toBeInTheDocument();
expect(data).toEqual({ "battery.charge": 55, "ups.load": 12, "ups.status": "OL" });
});
+
+ it("renders dashes when readings are missing", () => {
+ useWidgetAPI.mockReturnValue({
+ data: { "device.model": "OR500LCDRM1Ua", "ups.status": 0 },
+ error: undefined,
+ });
+
+ renderWithProviders(, { settings: { hideErrors: false } });
+
+ expect(screen.getAllByText("-")).toHaveLength(3);
+ });
});