wagmi
Version:
React Hooks for Ethereum
76 lines • 3.19 kB
JavaScript
import { useCallback } from 'react';
import { useChainId } from '../useChainId.js';
import { useConfig } from '../useConfig.js';
import { useWriteContract, } from '../useWriteContract.js';
export function createUseWriteContract(props) {
if (props.address !== undefined && typeof props.address === 'object')
return (parameters) => {
const config = useConfig(parameters);
const result = useWriteContract(parameters);
const configChainId = useChainId({ config });
const mutate = useCallback((...args) => {
const chainId = (() => {
if (args[0].chainId)
return args[0].chainId;
return configChainId;
})();
const variables = {
...args[0],
address: chainId ? props.address?.[chainId] : undefined,
...(props.functionName ? { functionName: props.functionName } : {}),
abi: props.abi,
};
result.writeContract(variables, args[1]);
}, [props, configChainId, result.writeContract]);
const mutateAsync = useCallback((...args) => {
const chainId = (() => {
if (args[0].chainId)
return args[0].chainId;
return configChainId;
})();
const variables = {
...args[0],
address: chainId ? props.address?.[chainId] : undefined,
...(props.functionName ? { functionName: props.functionName } : {}),
abi: props.abi,
};
return result.writeContractAsync(variables, args[1]);
}, [props, configChainId, result.writeContractAsync]);
return {
...result,
mutate,
mutateAsync,
writeContract: mutate,
writeContractAsync: mutateAsync,
};
};
return (parameters) => {
const result = useWriteContract(parameters);
const mutate = useCallback((...args) => {
const variables = {
...args[0],
...(props.address ? { address: props.address } : {}),
...(props.functionName ? { functionName: props.functionName } : {}),
abi: props.abi,
};
result.mutate(variables, args[1]);
}, [props, result.mutate]);
const mutateAsync = useCallback((...args) => {
const variables = {
...args[0],
...(props.address ? { address: props.address } : {}),
...(props.functionName ? { functionName: props.functionName } : {}),
abi: props.abi,
};
return result.mutateAsync(variables, args[1]);
}, [props, result.mutateAsync]);
return {
...result,
mutate,
mutateAsync,
writeContract: mutate,
writeContractAsync: mutateAsync,
};
};
}
//# sourceMappingURL=createUseWriteContract.js.map