UNPKG

@0xsplits/splits-sdk-react

Version:

React wrapper for the 0xSplits SDK

107 lines (85 loc) 2.91 kB
import { Log } from 'viem' import { useCallback, useContext, useState } from 'react' import { CreateRecoupConfig, CreateDiversifierConfig, } from '@0xsplits/splits-sdk' import { SplitsContext } from '../context' import { ContractExecutionStatus, RequestError } from '../types' import { getSplitsClient } from '../utils' export const useCreateRecoup = (): { createRecoup: (arg0: CreateRecoupConfig) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).templates const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const createRecoup = useCallback( async (argsDict: CreateRecoupConfig) => { if (!splitsClient) throw new Error('Invalid chain id for recoup') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitCreateRecoupTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.createRecoup, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { createRecoup, status, txHash, error } } export const useCreateDiversifier = (): { createDiversifier: ( arg0: CreateDiversifierConfig, ) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).templates const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const createDiversifier = useCallback( async (argsDict: CreateDiversifierConfig) => { if (!splitsClient) throw new Error('Invalid chain id for diversifier') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitCreateDiversifierTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.createDiversifier, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { createDiversifier, status, txHash, error } }