UNPKG

@safe-global/safe-react-hooks

Version:

A collection of React Hooks that facilitates the interaction of React apps with Safe Smart Accounts

37 lines 1.91 kB
import { isSafeTransaction } from '../types/index.js'; import { useSignerClientMutation } from '../hooks/useSignerClientMutation.js'; import { useWaitForTransaction } from '../hooks/useWaitForTransaction.js'; import { MutationKey, QueryKey } from '../constants.js'; import { invalidateQueries } from '../queryClient.js'; /** * Hook to send or propose a multisig transaction. * @param params Parameters to customize the hook behavior. * @param params.config SafeConfig to use instead of the one provided by `SafeProvider`. * @returns Object containing the mutation state and the send function. */ export function useSendTransaction(params = {}) { const { waitForTransactionReceipt, waitForTransactionIndexed } = useWaitForTransaction({ config: params.config }); const { mutate, mutateAsync, ...result } = useSignerClientMutation({ ...params, mutationKey: [MutationKey.SendTransaction], mutationSafeClientFn: async (signerClient, { transactions = [] }) => { const result = await signerClient.send({ transactions: transactions.map((tx) => isSafeTransaction(tx) ? { to: tx.data.to, value: tx.data.value, data: tx.data.data } : tx) }); if (result.transactions?.ethereumTxHash) { await waitForTransactionReceipt(result.transactions.ethereumTxHash); invalidateQueries([QueryKey.PendingTransactions, QueryKey.SafeInfo]); await waitForTransactionIndexed(result.transactions); invalidateQueries([QueryKey.Transactions]); } else if (result.transactions?.safeTxHash) { invalidateQueries([QueryKey.PendingTransactions]); } return result; } }); return { ...result, sendTransaction: mutate, sendTransactionAsync: mutateAsync }; } //# sourceMappingURL=useSendTransaction.js.map