UNPKG

@ledgerhq/live-common

Version:
46 lines 2.16 kB
import { formatAmountForInput, processRawInput } from "../../amount/utils/amountInput"; import { BigNumber } from "bignumber.js"; import { useCallback, useMemo, useRef, useState } from "react"; /** * Shared hook for CoinControl amount input state. * Accepts accountUnit from the caller so apps can use useMaybeAccountUnit or similar. * onAmountChange is string-based; desktop views should adapt from ChangeEvent (e.target.value). */ export function useCoinControlAmountInput({ transaction, status, onUpdateTransaction, locale, accountUnit, }) { const initialFormattedValue = useMemo(() => { const amount = transaction.useAllAmount && status.amount != null ? status.amount : transaction.amount ?? null; return amount ? formatAmountForInput(accountUnit, amount, locale) : null; }, [accountUnit, locale, status.amount, transaction.amount, transaction.useAllAmount]); const [inputValue, setInputValue] = useState(initialFormattedValue); const debounceTimeoutRef = useRef(null); const cancelPendingUpdates = useCallback(() => { if (debounceTimeoutRef.current) { clearTimeout(debounceTimeoutRef.current); debounceTimeoutRef.current = null; } }, []); const debouncedUpdateTransaction = useCallback((patch) => { cancelPendingUpdates(); debounceTimeoutRef.current = setTimeout(() => { onUpdateTransaction(patch); debounceTimeoutRef.current = null; }, 500); }, [cancelPendingUpdates, onUpdateTransaction]); const handleAmountChange = useCallback((rawValue) => { const processed = processRawInput(rawValue, accountUnit, locale); setInputValue(processed.display); debouncedUpdateTransaction({ amount: processed.value.integerValue(BigNumber.ROUND_DOWN), useAllAmount: false, }); }, [debouncedUpdateTransaction, accountUnit, locale]); return { amountValue: inputValue, onAmountChange: handleAmountChange, cancelPendingUpdates, debounceTimeoutRef, }; } //# sourceMappingURL=useCoinControlAmountInput.js.map