UNPKG

@ledgerhq/live-common

Version:
49 lines 2.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useCoinControlAmountInput = useCoinControlAmountInput; const amountInput_1 = require("../../amount/utils/amountInput"); const bignumber_js_1 = require("bignumber.js"); const react_1 = require("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). */ function useCoinControlAmountInput({ transaction, status, onUpdateTransaction, locale, accountUnit, }) { const initialFormattedValue = (0, react_1.useMemo)(() => { const amount = transaction.useAllAmount && status.amount != null ? status.amount : transaction.amount ?? null; return amount ? (0, amountInput_1.formatAmountForInput)(accountUnit, amount, locale) : null; }, [accountUnit, locale, status.amount, transaction.amount, transaction.useAllAmount]); const [inputValue, setInputValue] = (0, react_1.useState)(initialFormattedValue); const debounceTimeoutRef = (0, react_1.useRef)(null); const cancelPendingUpdates = (0, react_1.useCallback)(() => { if (debounceTimeoutRef.current) { clearTimeout(debounceTimeoutRef.current); debounceTimeoutRef.current = null; } }, []); const debouncedUpdateTransaction = (0, react_1.useCallback)((patch) => { cancelPendingUpdates(); debounceTimeoutRef.current = setTimeout(() => { onUpdateTransaction(patch); debounceTimeoutRef.current = null; }, 500); }, [cancelPendingUpdates, onUpdateTransaction]); const handleAmountChange = (0, react_1.useCallback)((rawValue) => { const processed = (0, amountInput_1.processRawInput)(rawValue, accountUnit, locale); setInputValue(processed.display); debouncedUpdateTransaction({ amount: processed.value.integerValue(bignumber_js_1.BigNumber.ROUND_DOWN), useAllAmount: false, }); }, [debouncedUpdateTransaction, accountUnit, locale]); return { amountValue: inputValue, onAmountChange: handleAmountChange, cancelPendingUpdates, debounceTimeoutRef, }; } //# sourceMappingURL=useCoinControlAmountInput.js.map