client/utilities/currencyIso.ts (30 lines of code) (raw):
import { isOneOf } from '@guardian/libs';
import * as Sentry from '@sentry/browser';
export const CurrencyIsos = ['GBP', 'USD', 'AUD', 'EUR', 'NZD', 'CAD'] as const;
export type CurrencyIso = typeof CurrencyIsos[number];
type CurrencySymbol = '£' | '$' | '€';
const currencySymbols: Record<CurrencyIso, CurrencySymbol> = {
GBP: '£',
USD: '$',
AUD: '$',
EUR: '€',
NZD: '$',
CAD: '$',
};
export function isCurrencyIso(currency: string): currency is CurrencyIso {
return isOneOf(CurrencyIsos)(currency);
}
export function convertCurrencyToSymbol(
currency: string,
): CurrencySymbol | undefined {
if (!isCurrencyIso(currency)) {
Sentry.captureException(`Unrecognized currency code: ${currency}`);
return undefined;
}
return convertCurrencyIsoToSymbol(currency);
}
export function convertCurrencyIsoToSymbol(
currency: CurrencyIso,
): CurrencySymbol {
return currencySymbols[currency];
}