Files
solana/explorer/src/components/ProgramLogsCardBody.tsx
T
man0s b4b26894cd Iterate on IDL account/instruction decoding (#24239)
* Switch to more integrated Anchor data decoding

* Revert anchor account data tab and better error handling
2022-04-13 15:38:59 -04:00

73 lines
2.1 KiB
TypeScript

import { Message, ParsedMessage } from "@solana/web3.js";
import { Cluster } from "providers/cluster";
import { TableCardBody } from "components/common/TableCardBody";
import { InstructionLogs } from "utils/program-logs";
import { ProgramName } from "utils/anchor";
import React from "react";
export function ProgramLogsCardBody({
message,
logs,
cluster,
url,
}: {
message: Message | ParsedMessage;
logs: InstructionLogs[];
cluster: Cluster;
url: string;
}) {
return (
<TableCardBody>
{message.instructions.map((ix, index) => {
let programId;
if ("programIdIndex" in ix) {
const programAccount = message.accountKeys[ix.programIdIndex];
if ("pubkey" in programAccount) {
programId = programAccount.pubkey;
} else {
programId = programAccount;
}
} else {
programId = ix.programId;
}
const programLogs: InstructionLogs | undefined = logs[index];
let badgeColor = "white";
if (programLogs) {
badgeColor = programLogs.failed ? "warning" : "success";
}
return (
<tr key={index}>
<td>
<div className="d-flex align-items-center">
<span className={`badge bg-${badgeColor}-soft me-2`}>
#{index + 1}
</span>
<ProgramName
programId={programId}
cluster={cluster}
url={url}
/>{" "}
Instruction
</div>
{programLogs && (
<div className="d-flex align-items-start flex-column font-monospace p-2 font-size-sm">
{programLogs.logs.map((log, key) => {
return (
<span key={key}>
<span className="text-muted">{log.prefix}</span>
<span className={`text-${log.style}`}>{log.text}</span>
</span>
);
})}
</div>
)}
</td>
</tr>
);
})}
</TableCardBody>
);
}