From eb2b37063fcf6e0f05fafdc7fb6caafecc451723 Mon Sep 17 00:00:00 2001 From: Greg Look Date: Thu, 14 Sep 2023 23:50:54 -0700 Subject: [PATCH] Enhancement: add remap, scale, and suffx to customapi fields (#1958) --- src/widgets/customapi/component.jsx | 52 ++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx index 7de3cac22..34312a942 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -27,18 +27,60 @@ function getValue(field, data) { return value[lastField] ?? null; } -function formatValue(t, mapping, value) { +function formatValue(t, mapping, rawValue) { + let value = rawValue; + + // Remap the value. + const remaps = mapping?.remap ?? []; + for (let i = 0; i < remaps.length; i += 1) { + const remap = remaps[i]; + if (remap?.any || remap?.value === value) { + value = remap.to; + break; + } + } + + // Scale the value. Accepts either a number to multiply by or a string + // like "12/345". + const scale = mapping?.scale; + if (typeof scale === 'number') { + value *= scale; + } else if (typeof scale === 'string') { + const parts = scale.split('/'); + const numerator = parts[0] ? parseFloat(parts[0]) : 1; + const denominator = parts[1] ? parseFloat(parts[1]) : 1; + value = value * numerator / denominator; + } + + // Format the value using a known type. switch (mapping?.format) { case 'number': - return t("common.number", { value: parseInt(value, 10) }); + value = t("common.number", { value: parseInt(value, 10) }); + break; case 'float': - return t("common.number", { value }); + value = t("common.number", { value }); + break; case 'percent': - return t("common.percent", { value }); + value = t("common.percent", { value }); + break; + case 'bytes': + value = t("common.bytes", { value }); + break; + case 'bitrate': + value = t("common.bitrate", { value }); + break; case 'text': default: - return value; + // nothing } + + // Apply fixed suffix. + const suffix = mapping?.suffix; + if (suffix) { + value = `${value} ${suffix}`; + } + + return value; } export default function Component({ service }) {