import { useMemo } from 'react'; import { NumericFormat, NumericFormatProps } from 'react-number-format'; import { getCurrency } from '@akinon/next/utils'; import { useLocalization } from '@akinon/next/hooks'; import { PriceProps } from '../types'; import Settings from 'settings'; export const Price = (props: NumericFormatProps & PriceProps) => { const { value, currencyCode, displayType = 'text', useCurrencySymbol = false, useCurrencyAfterPrice = true, useCurrencySpace = true, useNegative = false, useNegativeSpace = true, thousandSeparator = '.', decimalScale = 2, decimalSeparator = ',', fixedDecimalScale = true, ...rest } = props; const { currency: selectedCurrencyCode } = useLocalization(); const currencyCode_ = currencyCode || selectedCurrencyCode; const currency = useMemo( () => getCurrency({ currencyCode: currencyCode_, useCurrencySymbol, useCurrencyAfterPrice, useCurrencySpace }), [currencyCode_, useCurrencySymbol, useCurrencyAfterPrice, useCurrencySpace] ); const numericValue = typeof value === 'string' ? parseFloat(value) : typeof value === 'number' ? value : 0; const formattedValue = Number.isFinite(numericValue) ? numericValue.toFixed(decimalScale) : '0'; const displayValue = useNegative && numericValue < 0 ? `-${useNegativeSpace ? ' ' : ''}${Math.abs(numericValue).toFixed( decimalScale )}` : formattedValue; const currentCurrencyDecimalScale = Settings.localization.currencies.find( (currency) => currency?.code === currencyCode_ )?.decimalScale; return ( ); };