"use client"; import { useEffect, useMemo, useState } from "react"; import { InheritanceTooltip } from "./InheritanceTooltip"; import { Abi, AbiFunction } from "abitype"; import { Address } from "viem"; import { useReadContract } from "wagmi"; import { ContractInput, displayTxResult, getFunctionInputKey, getInitialFormState, getParsedContractFunctionArgs, transformAbiFunction, } from "~~/app/debug/_components/contract"; import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; import { getParsedError, notification } from "~~/utils/scaffold-eth"; type ReadOnlyFunctionFormProps = { contractAddress: Address; abiFunction: AbiFunction; inheritedFrom?: string; abi: Abi; }; export const ReadOnlyFunctionForm = ({ contractAddress, abiFunction, inheritedFrom, abi, }: ReadOnlyFunctionFormProps) => { const [form, setForm] = useState>(() => getInitialFormState(abiFunction)); const [result, setResult] = useState(); const { targetNetwork } = useTargetNetwork(); const { isFetching, refetch, error } = useReadContract({ address: contractAddress, functionName: abiFunction.name, abi: abi, args: getParsedContractFunctionArgs(form), chainId: targetNetwork.id, query: { enabled: false, retry: false, }, }); useEffect(() => { if (error) { const parsedError = getParsedError(error); notification.error(parsedError); } }, [error]); const transformedFunction = useMemo(() => transformAbiFunction(abiFunction), [abiFunction]); const inputElements = transformedFunction.inputs.map((input, inputIndex) => { const key = getFunctionInputKey(abiFunction.name, input, inputIndex); return ( { setResult(undefined); setForm(updatedFormValue); }} form={form} stateObjectKey={key} paramType={input} /> ); }); return (

{abiFunction.name}

{inputElements}
{result !== null && result !== undefined && (

Result:

{displayTxResult(result, "sm")}
)}
); };