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 status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).templates const [status, setStatus] = useState() const [txHash, setTxHash] = useState() const [error, setError] = useState() 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 status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).templates const [status, setStatus] = useState() const [txHash, setTxHash] = useState() const [error, setError] = useState() 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 } }