UNPKG

@ledgerhq/live-common

Version:
85 lines 3.68 kB
"use strict"; 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