dbl-utils
Version:
Utilities for dbl, adba and others projects
49 lines (48 loc) • 2.01 kB
JavaScript
import moment from "moment";
import numeral from "numeral";
import t, { formatDate, formatNumber, formatNumberCompact, formatCurrency, formatTime, formatDateTime, getLang } from "./i18n";
/**
* Formats a value based on the provided configuration.
*
* @param value - The value to format
* @param conf - Configuration options for formatting
* @returns The formatted value or the original value if the format is not specified
*/
export default function formatValue(value, conf) {
if (!(conf === null || conf === void 0 ? void 0 : conf.format))
return value;
switch (conf.format) {
case 'number-compact':
case 'numbercompact': {
//TODO: mover a i18n
numeral.locale(getLang());
return numeral(value).format(conf.formatConf || formatNumberCompact(conf.context));
}
case 'number': {
return typeof value === 'boolean' ? Number(value)
: value.toLocaleString(getLang(), conf.formatConf || formatNumber(conf.context));
}
case 'currency': {
const globalConf = (conf.formatConf || formatCurrency(conf.context));
if (typeof globalConf === 'string')
throw new Error("currency format must have formatConf as an Intl.NumberFormatOptions");
return value.toLocaleString(getLang(), Object.assign(Object.assign({}, globalConf), { style: "currency", currency: conf.currency || globalConf.currency }));
}
case 'dictionary': {
return t(value, conf.context);
}
case 'date': {
return moment(value).format(conf.formatConf || formatDate(conf.context));
}
case 'time': {
return moment(value).format(conf.formatConf || formatTime(conf.context));
}
case 'date-time':
case 'datetime': {
return moment(value).format(conf.formatConf || formatDateTime(conf.context));
}
default: {
return value;
}
}
}