mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
* Contract interactions: simulate transactions and output gas price Resolves #2910 * prevent form with tuples and arrays from being submitted without required fields * update screenshots * add simulate button to receive method
56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { chakra } from '@chakra-ui/react';
|
|
import React from 'react';
|
|
import type { AbiParameter } from 'viem';
|
|
|
|
import type { ResultViewMode } from '../../types';
|
|
|
|
import Item from './Item';
|
|
import { printRowOffset } from './utils';
|
|
|
|
interface Props {
|
|
abiParameter: AbiParameter;
|
|
data: unknown;
|
|
level: number;
|
|
mode: ResultViewMode;
|
|
}
|
|
|
|
const ItemTuple = ({ abiParameter, data, mode, level }: Props) => {
|
|
return (
|
|
<chakra.span display="block">
|
|
<chakra.span display="block">
|
|
<span>{ printRowOffset(level) }</span>
|
|
<chakra.span fontWeight={ 500 }>{ abiParameter.name || abiParameter.internalType }</chakra.span>
|
|
<span> { '{' }</span>
|
|
</chakra.span>
|
|
{ 'components' in abiParameter && abiParameter.components.map((component, index) => {
|
|
const itemData = (() => {
|
|
if (typeof data !== 'object' || data === null) {
|
|
return;
|
|
}
|
|
|
|
if (Array.isArray(data)) {
|
|
return data[index];
|
|
}
|
|
|
|
if (component.name && component.name in data) {
|
|
return data[component.name as keyof typeof data];
|
|
}
|
|
})();
|
|
|
|
return (
|
|
<Item
|
|
key={ index }
|
|
abiParameter={ component }
|
|
data={ itemData }
|
|
mode={ mode }
|
|
level={ level + 1 }
|
|
/>
|
|
);
|
|
}) }
|
|
<chakra.span display="block">{ printRowOffset(level) }{ '}' }</chakra.span>
|
|
</chakra.span>
|
|
);
|
|
};
|
|
|
|
export default React.memo(ItemTuple);
|