- Update RelayHubStatus.vue to display both local and global subscription counts, improving user visibility into active subscriptions. - Add totalSubscriptionCount computed property in useRelayHub.ts to track the total number of subscriptions. - Implement totalSubscriptionCount getter in relayHub.ts to return the size of the subscriptions map. - Include debug logging in relayHub.ts for connected relay counts and statuses to aid in troubleshooting.
81 lines
2.7 KiB
TypeScript
81 lines
2.7 KiB
TypeScript
/**
|
|
* Formatting utility functions for amounts and currencies
|
|
*/
|
|
|
|
/**
|
|
* Format a number with thousand separators
|
|
* @param value - The number to format
|
|
* @param locale - The locale to use for formatting (default: 'en-US')
|
|
* @returns Formatted string with thousand separators
|
|
*/
|
|
export function formatNumber(value: number, locale: string = 'en-US'): string {
|
|
return new Intl.NumberFormat(locale).format(value)
|
|
}
|
|
|
|
/**
|
|
* Format satoshi amounts with thousand separators
|
|
* @param sats - The satoshi amount
|
|
* @param locale - The locale to use for formatting (default: 'en-US')
|
|
* @returns Formatted string with "sats" suffix
|
|
*/
|
|
export function formatSats(sats: number, locale: string = 'en-US'): string {
|
|
return `${formatNumber(sats, locale)} sats`
|
|
}
|
|
|
|
/**
|
|
* Format millisatoshi amounts with thousand separators
|
|
* @param msats - The millisatoshi amount
|
|
* @param locale - The locale to use for formatting (default: 'en-US')
|
|
* @returns Formatted string with "sats" suffix
|
|
*/
|
|
export function formatMsats(msats: number, locale: string = 'en-US'): string {
|
|
const sats = Math.floor(msats / 1000)
|
|
return formatSats(sats, locale)
|
|
}
|
|
|
|
/**
|
|
* Format currency amounts with thousand separators
|
|
* @param amount - The amount to format
|
|
* @param currency - The currency code (e.g., 'USD', 'EUR')
|
|
* @param locale - The locale to use for formatting (default: 'en-US')
|
|
* @returns Formatted currency string
|
|
*/
|
|
export function formatCurrency(amount: number, currency: string, locale: string = 'en-US'): string {
|
|
try {
|
|
return new Intl.NumberFormat(locale, {
|
|
style: 'currency',
|
|
currency: currency.toUpperCase()
|
|
}).format(amount)
|
|
} catch (error) {
|
|
// Fallback to basic formatting if currency is not supported
|
|
return `${formatNumber(amount, locale)} ${currency}`
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Format event ticket price with appropriate formatting
|
|
* @param price - The price amount
|
|
* @param currency - The currency code
|
|
* @param locale - The locale to use for formatting (default: 'en-US')
|
|
* @returns Formatted price string
|
|
*/
|
|
export function formatEventPrice(price: number, currency: string, locale: string = 'en-US'): string {
|
|
if (currency.toLowerCase() === 'sats' || currency.toLowerCase() === 'sat') {
|
|
return formatSats(price, locale)
|
|
}
|
|
return formatCurrency(price, currency, locale)
|
|
}
|
|
|
|
/**
|
|
* Format wallet balance with appropriate formatting
|
|
* @param balanceMsat - The balance in millisatoshi
|
|
* @param locale - The locale to use for formatting (default: 'en-US')
|
|
* @returns Formatted balance string
|
|
*/
|
|
export function formatWalletBalance(balanceMsat: number, locale: string = 'en-US'): string {
|
|
if (balanceMsat === 0) {
|
|
return '0 sats'
|
|
}
|
|
return formatMsats(balanceMsat, locale)
|
|
}
|
|
|