UNPKG

@0xsplits/splits-sdk-react

Version:

React wrapper for the 0xSplits SDK

54 lines (43 loc) 1.45 kB
import { Log } from 'viem' import { useCallback, useContext, useState } from 'react' import { MulticallConfig } from '@0xsplits/splits-sdk' import { SplitsContext } from '../context' import { ContractExecutionStatus, RequestError } from '../types' import { getSplitsClient } from '../utils' export const useMulticall = (): { multicall: (arg0: MulticallConfig) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context) const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const multicall = useCallback( async (argsDict: MulticallConfig) => { try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitMulticallTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: [], includeAll: true, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { multicall, status, txHash, error } }