@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
61 lines • 2.63 kB
JavaScript
import { BigNumber } from "bignumber.js";
import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies/formatCurrencyUnit";
import { sanitizeValueString } from "@ledgerhq/ledger-wallet-framework/currencies/sanitizeValueString";
import { clampDecimals, isOverDecimalLimit, trimTrailingZeros } from "./decimals";
const formatUnitForInput = (unit, amount, locale) => formatCurrencyUnit(unit, amount, {
showCode: false,
disableRounding: true,
useGrouping: false,
locale,
});
export function formatAmountForInput(unit, amount, locale) {
if (amount.isZero())
return "";
return formatUnitForInput(unit, amount, locale);
}
export function formatFiatForInput(unit, amount, locale) {
if (amount.isZero())
return "";
const formatted = formatUnitForInput(unit, amount, locale);
return trimTrailingZeros(clampDecimals(formatted));
}
export function processRawInput(rawValue, unit, locale) {
const sanitized = sanitizeValueString(unit, rawValue, locale);
const value = sanitized.value ? new BigNumber(sanitized.value) : new BigNumber(0);
return {
display: sanitized.display,
value: value.isFinite() && !value.isNaN() ? value : new BigNumber(0),
};
}
export function processFiatInput(rawValue, fiatUnit, locale) {
const sanitized = sanitizeValueString(fiatUnit, rawValue, locale);
const clampedDisplay = clampDecimals(sanitized.display);
const nextSanitized = sanitizeValueString(fiatUnit, clampedDisplay, locale);
const value = nextSanitized.value ? new BigNumber(nextSanitized.value) : new BigNumber(0);
// Keep the same behavior as the hook did previously:
// - we clamp what is displayed,
// - and we avoid pushing transaction updates while the user is typing > 2 decimals.
const isOverLimit = isOverDecimalLimit(sanitized.display);
return {
display: sanitized.display,
clampedDisplay,
value,
isOverLimit,
};
}
export function calculateFiatEquivalent(params) {
const directFiat = params.calculateFiatFromCrypto(params.amount);
const ratioFiat = params.lastTransactionAmount &&
!params.lastTransactionAmount.isZero() &&
params.lastFiatAmount &&
!params.lastFiatAmount.isZero()
? params.lastFiatAmount.multipliedBy(params.amount).dividedBy(params.lastTransactionAmount)
: null;
return directFiat ?? ratioFiat;
}
export function shouldSyncInput(params) {
return (params.isQuickAction ||
params.useAllAmountChanged ||
!(params.isActiveInput && params.hasInputValue));
}
//# sourceMappingURL=amountInput.js.map