import { DisplayVariable } from "./DisplayVariable"; import { Abi, AbiFunction } from "abitype"; import { Contract, ContractName, GenericContract, InheritedFunctions } from "~~/utils/scaffold-eth/contract"; export const ContractVariables = ({ refreshDisplayVariables, deployedContractData, }: { refreshDisplayVariables: boolean; deployedContractData: Contract; }) => { if (!deployedContractData) { return null; } const functionsToDisplay = ( (deployedContractData.abi as Abi).filter(part => part.type === "function") as AbiFunction[] ) .filter(fn => { const isQueryableWithNoParams = (fn.stateMutability === "view" || fn.stateMutability === "pure") && fn.inputs.length === 0; return isQueryableWithNoParams; }) .map(fn => { return { fn, inheritedFrom: ((deployedContractData as GenericContract)?.inheritedFunctions as InheritedFunctions)?.[fn.name], }; }) .sort((a, b) => (b.inheritedFrom ? b.inheritedFrom.localeCompare(a.inheritedFrom) : 1)); if (!functionsToDisplay.length) { return <>No contract variables; } return ( <> {functionsToDisplay.map(({ fn, inheritedFrom }) => ( ))} ); };