UNPKG

@seasketch/geoprocessing

Version:

Geoprocessing and reporting framework for SeaSketch 2.0

65 lines (61 loc) 1.9 kB
import { percentWithEdge, roundDecimal } from "../helpers/index.js"; const NumberFormatter = new Intl.NumberFormat("en", { style: "decimal" }); /** Options for formatting a given value. */ export type ValueFormatter = | "value" | "number" | "number1dig" | "number2dig" | "integer" | "percent" | "percent0dig" | "percent1dig" | "percent2dig" | ((value: number | string) => number | string); /** Given a number or string value and the name of a formatter function, returns a formatted value */ export const valueFormatter = ( value: string | number, formatter: ValueFormatter, ) => { if (formatter === "value") return value; if (formatter === "percent0dig") return percentWithEdge( typeof value === "string" ? Number.parseFloat(value) : value, { digits: 0 }, ); if (formatter === "percent") return percentWithEdge( typeof value === "string" ? Number.parseFloat(value) : value, ); if (formatter === "percent1dig") return percentWithEdge( typeof value === "string" ? Number.parseFloat(value) : value, { digits: 1 }, ); if (formatter === "percent2dig") return percentWithEdge( typeof value === "string" ? Number.parseFloat(value) : value, { digits: 2 }, ); if (formatter === "number") return NumberFormatter.format( typeof value === "string" ? Number.parseFloat(value) : value, ); if (formatter === "number1dig") return NumberFormatter.format( roundDecimal( typeof value === "string" ? Number.parseFloat(value) : value, 1, ), ); if (formatter === "number2dig") return NumberFormatter.format( roundDecimal( typeof value === "string" ? Number.parseFloat(value) : value, 2, ), ); if (formatter === "integer") return NumberFormatter.format(Number.parseInt(`${value}`)); return formatter(value); };