Add remap, scale, and suffx to customapi fields.

Remapping may be used to change the raw value to something else (such as a
status string). Scaling can multiply or divide a numeric value. The suffix
allows applying a custom unit to the display.
This commit is contained in:
Greg Look 2023-09-09 23:23:09 -07:00
parent bce43c28d6
commit d0665d309f

View File

@ -27,18 +27,57 @@ function getValue(field, data) {
return value[lastField] ?? null; return value[lastField] ?? null;
} }
function formatValue(t, mapping, value) { function formatValue(t, mapping, rawValue) {
var value = rawValue;
// Remap the value.
const remaps = mapping?.remap ?? [];
for (let i = 0; i < remaps.length; i++) {
let 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 = value * scale;
} else if (typeof scale == 'string') {
let parts = scale.split('/');
let numerator = parts[0] ? parseFloat(parts[0]) : 1;
let denominator = parts[1] ? parseFloat(parts[1]) : 1;
value = value * numerator / denominator;
}
// Format the value using a known type.
switch (mapping?.format) { switch (mapping?.format) {
case 'number': case 'number':
return t("common.number", { value: parseInt(value, 10) }); value = t("common.number", { value: parseInt(value, 10) });
break;
case 'float': case 'float':
return t("common.number", { value }); value = t("common.number", { value });
break;
case 'percent': case 'percent':
return t("common.percent", { value }); value = t("common.percent", { value });
case 'text': break;
default: case 'bytes':
return value; value = t("common.bytes", { value });
break;
case 'bitrate':
value = t("common.bitrate", { value });
break;
} }
// Apply fixed suffix.
const suffix = mapping?.suffix;
if (suffix) {
value = value + ' ' + suffix;
}
return value;
} }
export default function Component({ service }) { export default function Component({ service }) {