@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
JavaScript
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