From dfe5b2ac7c6b6b91327e12fe26016ffe19ce5e87 Mon Sep 17 00:00:00 2001 From: Ameer Abdallah Date: Mon, 22 Apr 2024 19:33:53 -0700 Subject: [PATCH] add config option for number of decimal places on bitrate blocks for speedtest-tracker --- docs/widgets/services/speedtest-tracker.md | 1 + src/utils/config/service-helpers.js | 13 +++++++++++++ src/widgets/speedtest/component.jsx | 22 ++++++++++++++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/docs/widgets/services/speedtest-tracker.md b/docs/widgets/services/speedtest-tracker.md index 7e2509675..31ad386b4 100644 --- a/docs/widgets/services/speedtest-tracker.md +++ b/docs/widgets/services/speedtest-tracker.md @@ -16,4 +16,5 @@ Allowed fields: `["download", "upload", "ping"]`. widget: type: speedtest url: http://speedtest.host.or.ip + bitrateNumOfDecimalPlaces: 3 # default is 2 ``` diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index fc4d57eb9..7a07fa4bf 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -459,6 +459,9 @@ export function cleanServiceGroups(groups) { // unifi site, + + // speedtest-tracker + bitrateNumOfDecimalPlaces, } = cleanedService.widget; let fieldsList = fields; @@ -588,6 +591,16 @@ export function cleanServiceGroups(groups) { if (type === "healthchecks") { if (uuid !== undefined) cleanedService.widget.uuid = uuid; } + if (type === "speedtest") { + if (bitrateNumOfDecimalPlaces !== undefined) { + // if the result can't be parsed, set to -1 + cleanedService.widget.bitrateNumOfDecimalPlaces = Number.parseInt(bitrateNumOfDecimalPlaces, 10); + if (Number.isNaN(cleanedService.widget.bitrateNumOfDecimalPlaces)) { + // negative values fallback to the default + cleanedService.widget.bitrateNumOfDecimalPlaces = -1; + } + } + } } return cleanedService; diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx index 0102025ba..3965ec7eb 100644 --- a/src/widgets/speedtest/component.jsx +++ b/src/widgets/speedtest/component.jsx @@ -4,6 +4,8 @@ import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; +const DEFAULT_BITRATE_NUM_OF_DECIMAL_PLACES = 2; + export default function Component({ service }) { const { t } = useTranslation(); @@ -11,6 +13,13 @@ export default function Component({ service }) { const { data: speedtestData, error: speedtestError } = useWidgetAPI(widget, "speedtest/latest"); + let bitrateNumOfDecimalPlaces = widget?.bitrateNumOfDecimalPlaces ?? DEFAULT_BITRATE_NUM_OF_DECIMAL_PLACES; // Default is 2 + + // if not a number or negative, set to default + if (bitrateNumOfDecimalPlaces < 0) { + bitrateNumOfDecimalPlaces = DEFAULT_BITRATE_NUM_OF_DECIMAL_PLACES; + } + if (speedtestError) { return ; } @@ -29,9 +38,18 @@ export default function Component({ service }) { + -