@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
85 lines • 3.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useSendFlowBusinessLogic = useSendFlowBusinessLogic;
const react_1 = require("react");
const types_1 = require("../../wizard/types");
const useSendFlowAccount_1 = require("./useSendFlowAccount");
const uiConfig_1 = require("../uiConfig");
/**
* Core Send flow business logic - platform agnostic
* Manages account, transaction, recipient, operation, and status state
* Apps inject platform-specific operation hooks (e.g. Redux)
*/
function useSendFlowBusinessLogic({ initParams, useOperationHook, useTransactionHook, }) {
const [flowStatus, setFlowStatus] = (0, react_1.useState)(types_1.FLOW_STATUS.IDLE);
const [recipientSearchValue, setRecipientSearchValue] = (0, react_1.useState)("");
const [recipient, setRecipient] = (0, react_1.useState)(() => {
if (!initParams?.recipient)
return null;
return { address: initParams.recipient };
});
const accountHook = (0, useSendFlowAccount_1.useSendFlowAccount)({
initialAccount: initParams?.account,
initialParentAccount: initParams?.parentAccount,
});
const transactionHook = useTransactionHook({
account: accountHook.state.account,
parentAccount: accountHook.state.parentAccount,
});
const operationHook = useOperationHook({
account: accountHook.state.account,
parentAccount: accountHook.state.parentAccount,
});
const uiConfig = (0, react_1.useMemo)(() => (0, uiConfig_1.getSendUiConfig)(accountHook.state.currency), [accountHook.state.currency]);
const setAccountAndNavigate = (0, react_1.useCallback)((account, parentAccount) => {
accountHook.setAccount(account, parentAccount);
transactionHook.actions.setAccount(account, parentAccount);
}, [accountHook, transactionHook.actions]);
const handleRecipientSet = (0, react_1.useCallback)((newRecipient) => {
setRecipient(newRecipient);
transactionHook.actions.setRecipient(newRecipient);
}, [transactionHook.actions]);
const recipientSearch = (0, react_1.useMemo)(() => ({
value: recipientSearchValue,
setValue: setRecipientSearchValue,
clear: () => setRecipientSearchValue(""),
}), [recipientSearchValue]);
const state = (0, react_1.useMemo)(() => ({
account: accountHook.state,
transaction: transactionHook.state,
recipient,
operation: operationHook.state,
isLoading: transactionHook.state.bridgePending,
flowStatus,
}), [accountHook.state, transactionHook.state, recipient, operationHook.state, flowStatus]);
const statusActions = (0, react_1.useMemo)(() => ({
setStatus: setFlowStatus,
setError: () => setFlowStatus(types_1.FLOW_STATUS.ERROR),
setSuccess: () => setFlowStatus(types_1.FLOW_STATUS.SUCCESS),
resetStatus: () => setFlowStatus(types_1.FLOW_STATUS.IDLE),
}), []);
const transactionActions = (0, react_1.useMemo)(() => ({
...transactionHook.actions,
setRecipient: handleRecipientSet,
}), [transactionHook.actions, handleRecipientSet]);
return (0, react_1.useMemo)(() => ({
state,
transaction: transactionActions,
operation: operationHook.actions,
status: statusActions,
uiConfig,
recipientSearch,
recipient,
setAccountAndNavigate,
}), [
state,
transactionActions,
operationHook.actions,
statusActions,
uiConfig,
recipientSearch,
recipient,
setAccountAndNavigate,
]);
}
//# sourceMappingURL=useSendFlowBusinessLogic.js.map