import React from "react"; import { PublicKey, VersionedMessage } from "@solana/web3.js"; import { Address } from "components/common/Address"; import { useAddressLookupTable } from "providers/accounts"; import { FetchStatus } from "providers/cache"; export function AddressTableLookupsCard({ message, }: { message: VersionedMessage; }) { const [expanded, setExpanded] = React.useState(true); const lookupRows = React.useMemo(() => { let key = 0; return message.addressTableLookups.flatMap((lookup) => { const indexes = [ ...lookup.writableIndexes.map((index) => ({ index, readOnly: false })), ...lookup.readonlyIndexes.map((index) => ({ index, readOnly: true })), ]; indexes.sort((a, b) => (a.index < b.index ? -1 : 1)); return indexes.map(({ index, readOnly }) => { const props = { lookupTableKey: lookup.accountKey, lookupTableIndex: index, readOnly, }; return ; }); }); }, [message]); if (message.version === "legacy") return null; return (

Address Table Lookup(s)

{expanded && (
{lookupRows.length > 0 ? ( {lookupRows} ) : (
No entries found
)}
Address Lookup Table Address Table Index Resolved Address Details
)}
); } function LookupRow({ lookupTableKey, lookupTableIndex, readOnly, }: { lookupTableKey: PublicKey; lookupTableIndex: number; readOnly: boolean; }) { const lookupTableInfo = useAddressLookupTable(lookupTableKey.toBase58()); const loadingComponent = ( Loading ); let resolvedKeyComponent; if (!lookupTableInfo) { resolvedKeyComponent = loadingComponent; } else { const [lookupTable, status] = lookupTableInfo; if (status === FetchStatus.Fetching) { resolvedKeyComponent = loadingComponent; } else if (status === FetchStatus.FetchFailed || !lookupTable) { resolvedKeyComponent = ( Failed to fetch Lookup Table ); } else if (typeof lookupTable === "string") { resolvedKeyComponent = ( Invalid Lookup Table ); } else if (lookupTableIndex >= lookupTable.state.addresses.length) { resolvedKeyComponent = ( Invalid Lookup Table Index ); } else { const resolvedKey = lookupTable.state.addresses[lookupTableIndex]; resolvedKeyComponent =
; } } return (
{lookupTableIndex} {resolvedKeyComponent} {!readOnly && Writable} ); }