@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
49 lines • 2.38 kB
JavaScript
;
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