STripe Paymen and PK payemtns and many othe rbacekd and froentened issues
This commit is contained in:
68
frontend/src/utils/currency.ts
Normal file
68
frontend/src/utils/currency.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Currency utilities for formatting amounts with proper symbols
|
||||
*/
|
||||
|
||||
// Currency symbols map
|
||||
const CURRENCY_SYMBOLS: Record<string, string> = {
|
||||
USD: '$',
|
||||
EUR: '€',
|
||||
GBP: '£',
|
||||
INR: '₹',
|
||||
JPY: '¥',
|
||||
CNY: '¥',
|
||||
AUD: 'A$',
|
||||
CAD: 'C$',
|
||||
CHF: 'Fr',
|
||||
SEK: 'kr',
|
||||
NOK: 'kr',
|
||||
DKK: 'kr',
|
||||
PLN: 'zł',
|
||||
BRL: 'R$',
|
||||
ZAR: 'R',
|
||||
AED: 'د.إ',
|
||||
SAR: 'ر.س',
|
||||
PKR: '₨',
|
||||
};
|
||||
|
||||
/**
|
||||
* Get currency symbol for a currency code
|
||||
*/
|
||||
export const getCurrencySymbol = (currencyCode?: string): string => {
|
||||
if (!currencyCode) return '$';
|
||||
const code = currencyCode.toUpperCase();
|
||||
return CURRENCY_SYMBOLS[code] || `${code} `;
|
||||
};
|
||||
|
||||
/**
|
||||
* Format an amount with the proper currency symbol
|
||||
* @param amount - The amount to format (string or number)
|
||||
* @param currency - The currency code (e.g., 'USD', 'PKR')
|
||||
* @param showDecimals - Whether to show decimal places (default: true for most currencies)
|
||||
*/
|
||||
export const formatCurrency = (
|
||||
amount: string | number,
|
||||
currency?: string,
|
||||
showDecimals: boolean = true
|
||||
): string => {
|
||||
const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount;
|
||||
if (isNaN(numAmount)) return '-';
|
||||
|
||||
const symbol = getCurrencySymbol(currency);
|
||||
|
||||
// For zero-decimal currencies like JPY, don't show decimals
|
||||
const zeroDecimalCurrencies = ['JPY', 'KRW', 'VND'];
|
||||
const shouldShowDecimals = showDecimals && !zeroDecimalCurrencies.includes(currency?.toUpperCase() || '');
|
||||
|
||||
const formatted = shouldShowDecimals
|
||||
? numAmount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })
|
||||
: numAmount.toLocaleString('en-US', { maximumFractionDigits: 0 });
|
||||
|
||||
return `${symbol}${formatted}`;
|
||||
};
|
||||
|
||||
/**
|
||||
* Format price for display (typically USD)
|
||||
*/
|
||||
export const formatPrice = (price: string | number): string => {
|
||||
return formatCurrency(price, 'USD');
|
||||
};
|
||||
Reference in New Issue
Block a user