otterscan/src/transaction/decoder/DecodedParamsTable.tsx

53 lines
1.4 KiB
TypeScript
Raw Normal View History

2021-09-17 22:42:19 +00:00
import React from "react";
import { ParamType, Result } from "@ethersproject/abi";
2021-09-18 21:18:38 +00:00
import DecodedParamRow from "./DecodedParamRow";
2021-09-25 20:19:49 +00:00
import { TransactionData } from "../../types";
2021-09-17 22:42:19 +00:00
2021-09-18 20:41:00 +00:00
type DecodedParamsTableProps = {
args: Result;
paramTypes: ParamType[];
txData: TransactionData;
hasParamNames?: boolean;
2021-09-17 22:42:19 +00:00
};
2021-09-18 20:41:00 +00:00
const DecodedParamsTable: React.FC<DecodedParamsTableProps> = ({
args,
paramTypes,
txData,
hasParamNames = true,
2021-09-18 20:41:00 +00:00
}) => (
<table className="border w-full">
2021-09-17 22:42:19 +00:00
<thead>
<tr className="grid grid-cols-12 text-left gap-x-2 py-2 bg-gray-100">
2021-09-17 22:42:19 +00:00
<th className="col-span-3 pl-1">
2021-09-18 21:03:54 +00:00
name <span className="text-gray-400 text-xs">(index)</span>
2021-09-17 22:42:19 +00:00
</th>
<th className="col-span-1">type</th>
<th className="col-span-8 pr-1">value</th>
</tr>
{!hasParamNames && (
<tr className="grid grid-cols-12 text-left gap-x-2 py-2 bg-yellow-100 text-red-700">
2021-09-25 20:19:49 +00:00
<th className="col-span-12 px-1">
{paramTypes.length > 0 && paramTypes[0].name !== null
? "Parameter names are estimated."
: "Parameter names are not available."}
2021-09-25 20:19:49 +00:00
</th>
</tr>
)}
2021-09-17 22:42:19 +00:00
</thead>
<tbody className="divide-y">
2021-09-18 20:41:00 +00:00
{args.map((r, i) => (
2021-09-18 21:18:38 +00:00
<DecodedParamRow
key={i}
i={i}
r={r}
paramType={paramTypes[i]}
txData={txData}
/>
2021-09-17 22:42:19 +00:00
))}
</tbody>
</table>
);
2021-09-18 20:41:00 +00:00
export default React.memo(DecodedParamsTable);