forked from solana-foundation/explorer
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathUnknownDetailsCard.tsx
More file actions
63 lines (57 loc) · 2.32 KB
/
UnknownDetailsCard.tsx
File metadata and controls
63 lines (57 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import { TableCardBody } from '@components/common/TableCardBody';
import { ProgramField } from '@entities/instruction-card';
import { useScrollAnchor } from '@providers/scroll-anchor';
import { cn } from '@shared/utils';
import { TransactionInstruction } from '@solana/web3.js';
import React from 'react';
import getInstructionCardScrollAnchorId from '@/app/utils/get-instruction-card-scroll-anchor-id';
import { BaseRawDetails } from '../common/BaseRawDetails';
export function UnknownDetailsCard({
index,
ix,
programName,
innerCards,
}: {
index: number;
ix: TransactionInstruction;
programName: string;
innerCards?: React.ReactNode[];
}) {
const hasInnerCards = innerCards && innerCards.length > 0;
const [expanded, setExpanded] = React.useState(hasInnerCards ?? false);
const scrollAnchorRef = useScrollAnchor(getInstructionCardScrollAnchorId([index + 1]));
return (
<div className="card" ref={scrollAnchorRef}>
<div className={cn('card-header', !expanded && 'border-bottom-none')}>
<h3 className="card-header-title mb-0 d-flex align-items-center">
<span className={`badge bg-info-soft me-2`}>#{index + 1}</span>
{programName} Instruction
</h3>
<button
className={cn('btn btn-sm d-flex', expanded ? 'btn-black active' : 'btn-white')}
onClick={() => setExpanded(e => !e)}
>
{expanded ? 'Collapse' : 'Expand'}
</button>
</div>
{expanded && (
<TableCardBody>
<ProgramField programId={ix.programId} showExtendedInfo />
<BaseRawDetails ix={ix} />
{hasInnerCards && (
<>
<tr className="table-sep">
<td colSpan={3}>Inner Instructions</td>
</tr>
<tr>
<td colSpan={3}>
<div className="inner-cards !e-m-0">{innerCards}</div>
</td>
</tr>
</>
)}
</TableCardBody>
)}
</div>
);
}