web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

commit 8405b6519f78644122c2b021fb50f57be456f927
parent f98c2a9cf8dc5906595345f3643fcb31fb86a292
Author: triesap <137732411+triesap@users.noreply.github.com>
Date:   Fri, 13 Sep 2024 07:17:45 +0000

utils: add currency utils

Diffstat:
Mutils/src/currency.ts | 38++++++++++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)

diff --git a/utils/src/currency.ts b/utils/src/currency.ts @@ -1,2 +1,37 @@ export type FiatCurrency = `usd` | `eur`; -export const fiat_currencies: FiatCurrency[] = [`usd`, `eur`] as const; -\ No newline at end of file +export const fiat_currencies: FiatCurrency[] = [`usd`, `eur`] as const; + +export type FiatCurrencyGlyphs = `dollar` | `eur`; + +export function parse_currency(val?: string): FiatCurrency { + switch (val) { + case "usd": + case "eur": + return val; + default: + return `usd`; + }; +}; + +export function parse_currency_glyph_key(val?: string): | `currency-${FiatCurrencyGlyphs}` { + switch (val) { + case "usd": + return `currency-dollar`; + case "eur": + return `currency-eur`; + default: + return `currency-dollar`; + }; +}; + +export const fmt_currency_tuple = (locale: string, currency: string, amount: number): [string, string, string] => { + const fmt = new Intl.NumberFormat(locale, { + style: 'currency', + currency: parse_currency(currency).toUpperCase(), + minimumFractionDigits: 2, + }); + const fmt_amt = fmt.format(amount); + const [a, b] = fmt_amt.split('.'); + return [a.charAt(0), a.slice(1), b.length > 1 ? b : '00']; +}; +