import React from 'react'; import { useFormContext } from 'react-hook-form'; import type { ContractAbiItemInput } from '../types'; import type { Props as AccordionProps } from './ContractMethodFieldAccordion'; import ContractMethodFieldAccordion from './ContractMethodFieldAccordion'; import ContractMethodFieldInput from './ContractMethodFieldInput'; import ContractMethodFieldInputArray from './ContractMethodFieldInputArray'; import { getFieldLabel, matchArray } from './utils'; interface Props extends Pick { data: ContractAbiItemInput; basePath: string; level: number; isDisabled: boolean; isOptional?: boolean; } const ContractMethodFieldInputTuple = ({ data, basePath, level, isDisabled, isOptional, ...accordionProps }: Props) => { const { formState: { errors } } = useFormContext(); const fieldsWithErrors = Object.keys(errors); const isInvalid = fieldsWithErrors.some((field) => field.startsWith(basePath)); if (!('components' in data)) { return null; } return ( { data.components?.map((component, index) => { if ('components' in component && component.type === 'tuple') { return ( ); } const arrayMatch = matchArray(component.type); if (arrayMatch) { return ( ); } return ( ); }) } ); }; export default React.memo(ContractMethodFieldInputTuple);