Track HiveGrid Cloud planning reference

This commit is contained in:
david committed 2026-06-26 20:48:01 +02:00
1 parent b3d5ea6764
commit e341c5938a
5784 files changed
+1104929 -3

No files matched your search

@@ -0,0 +1,86 @@
import numeral from "numeral";
import { formatCurrency, formatNumber, formatPercent } from "~/locale/format";
export const defaultCurrencySymbol = "$";
export const defaultCurrency = "USD";
const legacyNumberLocale = "en-US";
export type NumberFormatType = "integer" | "decimal" | "currency" | "percentage" | "rating";
export const NumberFormats: { name: string; value: NumberFormatType; labelKey: string }[] = [
{ name: "Integer", value: "integer", labelKey: "formats.number.integer" },
{ name: "Decimal", value: "decimal", labelKey: "formats.number.decimal" },
{ name: "Currency", value: "currency", labelKey: "formats.number.currency" },
{ name: "Percent", value: "percentage", labelKey: "formats.number.percent" },
{ name: "Rating", value: "rating", labelKey: "formats.number.rating" },
];
const numberFormat = (value: number): string => {
try {
return formatNumber(value, legacyNumberLocale, { maximumFractionDigits: 0 });
} catch (e) {
return value?.toString();
}
};
const decimalFormat = (value: number, decimalPlaces: number = 2): string => {
try {
return formatNumber(value, legacyNumberLocale, {
minimumFractionDigits: decimalPlaces,
maximumFractionDigits: decimalPlaces,
});
} catch (e) {
return value?.toString();
}
};
const intFormat = (value: number | string): string => {
try {
return formatNumber(Number(value), legacyNumberLocale, { maximumFractionDigits: 0 });
} catch (e) {
return value?.toString();
}
};
const currencyFormat = (value: number, currency: string = defaultCurrency, decimalPlaces: number = 2, locale: string = legacyNumberLocale): string => {
try {
return formatCurrency(value, currency.toUpperCase(), locale, {
minimumFractionDigits: decimalPlaces,
maximumFractionDigits: decimalPlaces,
});
} catch (e) {
return `${defaultCurrencySymbol}${decimalFormat(value, decimalPlaces)}`;
}
};
const currencyFromCents = (cents: number, currency: string = defaultCurrency, decimalPlaces: number = 2, locale: string = legacyNumberLocale): string => {
return currencyFormat(cents / 100, currency, decimalPlaces, locale);
};
const percentFormat = (value: number, decimalPlaces: number = 2, locale: string = legacyNumberLocale): string => {
try {
return formatPercent(value / 100, locale, {
minimumFractionDigits: decimalPlaces,
maximumFractionDigits: decimalPlaces,
});
} catch (e) {
return `${decimalFormat(value, decimalPlaces)}%`;
}
};
const pad = (num: number, size: number) => {
const s = "000000000" + num;
return s.substring(s.length - size);
};
const custom = (value: number, format: string): string => {
try {
return numeral(value).format(format);
} catch (e) {
return value?.toString();
}
};
export default {
numberFormat,
decimalFormat,
intFormat,
currencyFormat,
currencyFromCents,
percentFormat,
pad,
defaultCurrencySymbol,
defaultCurrency,
custom,
};