import React from 'react' import { PlusCircledIcon } from '@radix-ui/react-icons' import { formatAbi } from 'abitype' import { CheckCheckIcon } from 'lucide-react' import { ContractTag } from '@/components/contractselection/generateParamsUI' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog' import { HoverCard, HoverCardContent, HoverCardTrigger } from '@/components/ui/hover-card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { ScrollArea } from '@/components/ui/scroll-area' import { Separator } from '@/components/ui/separator' import { getContractABI } from '@/hooks/useContractAbi' import { extractFunctionName } from '@/lib/extractFunctionName' import { ABIStatus } from '@/lib/types/types' import { ComboboxDemo } from './contractselection/ComboBoxFns' import FormGen, { FormGenEdit } from './contractselection/formGen' import FormWrapper from './FormWrapper' import { renderBtnABI } from '../lib/renderBtnABI' import { stepProps } from '../lib/types/stepProps' export const ContractsForm = ({ tags, setTags }: stepProps) => { const [open, setOpen] = React.useState(false) const [value, setValue] = React.useState('') const [contractAddress, setContractAddress] = React.useState('') const [contractAbi, setContractAbi] = React.useState([]) // const [tags, setTags] = React.useState([]); const [chosenFnc, setChosenFnc] = React.useState('') const [fetchStatus, setFetchStatus] = React.useState('idle') let frameworks: { value: string label: string }[] = [] // const [zodSchema, setZodSchema] = React.useState(); // const [fieldConfig, setFieldConfig] = React.useState<{ [k: string]: string }>( // {} // ); const [editingTag, setEditingTag] = React.useState('') const [editOpen, setEditOpen] = React.useState(false) React.useEffect(() => { if (value.length > 1) { setChosenFnc(extractFunctionName(value)) } }, [value]) const renderButtonContent = renderBtnABI(fetchStatus) const handleFetchAbi = async () => { setFetchStatus('loading') try { const abi = await getContractABI(contractAddress) if (!abi) { setContractAbi([]) setFetchStatus('error') return } setContractAbi(abi) setFetchStatus('success') } catch (error) { console.error('Failed to fetch ABI:', error) setFetchStatus('error') } } const removeTag = (uuidNameToRemove: string) => { const newTags = tags.filter((tag) => tag.uuid !== uuidNameToRemove) setTags(newTags) } const editTag = (uuidNameToEdit: string) => { setEditingTag(uuidNameToEdit) setEditOpen(true) // open the edit dialog } if (contractAbi) { const functionAbi = contractAbi.filter((value) => value.type === 'function') const functionNames = formatAbi(functionAbi) frameworks = functionNames.map((name) => ({ value: name, label: name, })) } return (
Add Contract Details Specify the address and function details for the contract you want to interact with.
{ setContractAddress(e.target.value) }} />
{contractAbi.length >= 0 && (
{contractAbi.length > 0 ? ( ) : ( )}