mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
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 (
|
|
<span className="block">
|
|
<span className="block">
|
|
<span>{ printRowOffset(level) }</span>
|
|
<span className="font-medium">{ abiParameter.name || abiParameter.internalType }</span>
|
|
<span> { '{' }</span>
|
|
</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 }
|
|
/>
|
|
);
|
|
}) }
|
|
<span className="block">{ printRowOffset(level) }{ '}' }</span>
|
|
</span>
|
|
);
|
|
};
|
|
|
|
export default React.memo(ItemTuple);
|