parent
8ba75251e6
commit
8147e61169
@ -1,77 +1,115 @@ |
|||||||
import React from 'react' |
import React, { useMemo } from 'react' |
||||||
import { SubmittedContract } from '../types/VerificationTypes' |
import { SubmittedContract, SubmittedProxyContract, isContract, isProxy } from '../types/VerificationTypes' |
||||||
import { shortenAddress, CustomTooltip } from '@remix-ui/helper' |
import { shortenAddress, CustomTooltip } from '@remix-ui/helper' |
||||||
|
import { AppContext } from '../AppContext' |
||||||
|
|
||||||
interface AccordionReceiptProps { |
interface AccordionReceiptProps { |
||||||
contract: SubmittedContract |
contract: SubmittedContract | SubmittedProxyContract |
||||||
chainName: string |
|
||||||
index: number |
index: number |
||||||
} |
} |
||||||
|
|
||||||
export const AccordionReceipt: React.FC<AccordionReceiptProps> = ({ contract, index, chainName }) => { |
export const AccordionReceipt: React.FC<AccordionReceiptProps> = ({ contract, index }) => { |
||||||
|
const { chains } = React.useContext(AppContext) |
||||||
|
|
||||||
const [expanded, setExpanded] = React.useState(false) |
const [expanded, setExpanded] = React.useState(false) |
||||||
|
|
||||||
|
const address = isProxy(contract) ? contract.implementation.address : contract.address |
||||||
|
|
||||||
|
const chainName = useMemo(() => { |
||||||
|
const chainId = isProxy(contract) ? contract.implementation.chainId : contract.chainId |
||||||
|
return chains.find((chain) => chain.chainId === parseInt(chainId))?.name ?? 'Unknown Chain' |
||||||
|
}, [contract, chains]) |
||||||
|
|
||||||
const toggleAccordion = () => { |
const toggleAccordion = () => { |
||||||
setExpanded(!expanded) |
setExpanded(!expanded) |
||||||
} |
} |
||||||
|
|
||||||
return ( |
return ( |
||||||
<div key={contract.address + '-' + index} className="bg-secondary p-3 accordion-item" id={contract.address + '-accordion-' + index}> |
<div key={address + '-' + index} className="bg-secondary p-3 accordion-item" id={address + '-accordion-' + index}> |
||||||
<h3 className="accordion-header" id={`heading${index}`}> |
<h3 className="accordion-header" id={`heading${index}`}> |
||||||
<button className="accordion-button d-flex flex-row align-items-center text-left w-100 border-0" type="button" onClick={toggleAccordion} aria-expanded={expanded} aria-controls={`collapse${index}`}> |
<button className="accordion-button d-flex flex-row align-items-center text-left w-100 border-0" type="button" onClick={toggleAccordion} aria-expanded={expanded} aria-controls={`collapse${index}`}> |
||||||
<span className={`accordion-arrow ${expanded ? 'fa-angle-down' : 'fa-angle-right'} fa w-0`} style={{ width: '0' }}></span> |
<span className={`accordion-arrow ${expanded ? 'fa-angle-down' : 'fa-angle-right'} fa w-0`} style={{ width: '0' }}></span> |
||||||
<span className="pl-4" style={{ fontSize: '1rem' }}> |
<span className="pl-4" style={{ fontSize: '1rem' }}> |
||||||
<CustomTooltip tooltipText={contract.address}> |
<CustomTooltip tooltipText={address}> |
||||||
<span>{shortenAddress(contract.address)}</span> |
<span>{shortenAddress(address)}</span> |
||||||
</CustomTooltip>{' '} |
</CustomTooltip> |
||||||
on {chainName} |
on {chainName} {isProxy(contract) ? 'with proxy' : ''} |
||||||
</span> |
</span> |
||||||
</button> |
</button> |
||||||
</h3> |
</h3> |
||||||
<div id={`collapse${index}`} className={`accordion-collapse p-2 collapse ${expanded ? 'show' : ''}`} aria-labelledby={`heading${index}`} data-bs-parent="#receiptsAccordion"> |
<div id={`collapse${index}`} className={`accordion-collapse p-2 collapse ${expanded ? 'show' : ''}`} aria-labelledby={`heading${index}`} data-bs-parent="#receiptsAccordion"> |
||||||
<div className="accordion-body"> |
<div className="accordion-body"> |
||||||
<div> |
{isContract(contract) ? ( |
||||||
<span className="font-weight-bold">Chain ID: </span> |
<ReceiptsBody contract={contract}></ReceiptsBody> |
||||||
{contract.chainId} |
) : ( |
||||||
</div> |
<> |
||||||
<div> |
<div> |
||||||
<span className="font-weight-bold">File: </span> |
<span className="font-weight-bold" style={{ fontSize: '1.2rem' }}> |
||||||
{contract.filePath} |
Implementation |
||||||
</div> |
</span> |
||||||
<div> |
<ReceiptsBody contract={contract.implementation}></ReceiptsBody> |
||||||
<span className="font-weight-bold">Contract: </span> |
</div> |
||||||
{contract.contractName} |
<div className="mt-3"> |
||||||
</div> |
<span className="font-weight-bold" style={{ fontSize: '1.2rem' }}> |
||||||
<div> |
Proxy |
||||||
<span className="font-weight-bold">Submission: </span> |
</span> |
||||||
{contract.date.toLocaleString()} |
|
||||||
</div> |
<CustomTooltip tooltipText={contract.proxy.address}> |
||||||
<div className="table-responsive"> |
<span>{shortenAddress(contract.proxy.address)}</span> |
||||||
<table className="table"> |
</CustomTooltip> |
||||||
<thead> |
<ReceiptsBody contract={contract.proxy}></ReceiptsBody> |
||||||
<tr> |
</div> |
||||||
<th>Verifier</th> |
</> |
||||||
<th>API URL</th> |
)} |
||||||
<th>Status</th> |
|
||||||
<th>Message</th> |
|
||||||
<th>ReceiptID</th> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
{contract.receipts.map((receipt) => ( |
|
||||||
<tr key={receipt.receiptId}> |
|
||||||
<td>{receipt.verifier.name}</td> |
|
||||||
<td>{receipt.verifier.apiUrl}</td> |
|
||||||
<td>{receipt.status}</td> |
|
||||||
<td>{receipt.message}</td> |
|
||||||
<td>{receipt.receiptId}</td> |
|
||||||
</tr> |
|
||||||
))} |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
</div> |
</div> |
||||||
</div> |
</div> |
||||||
</div> |
</div> |
||||||
) |
) |
||||||
} |
} |
||||||
|
|
||||||
|
const ReceiptsBody = ({ contract }: { contract: SubmittedContract }) => { |
||||||
|
return ( |
||||||
|
<> |
||||||
|
<div> |
||||||
|
<span className="font-weight-bold">Chain ID: </span> |
||||||
|
{contract.chainId} |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<span className="font-weight-bold">File: </span> |
||||||
|
{contract.filePath} |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<span className="font-weight-bold">Contract: </span> |
||||||
|
{contract.contractName} |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<span className="font-weight-bold">Submission: </span> |
||||||
|
{contract.date.toLocaleString()} |
||||||
|
</div> |
||||||
|
<div className="table-responsive"> |
||||||
|
<table className="table"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>Verifier</th> |
||||||
|
<th>API URL</th> |
||||||
|
<th>Status</th> |
||||||
|
<th>Message</th> |
||||||
|
<th>ReceiptID</th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
{contract.receipts.map((receipt) => ( |
||||||
|
<tr key={receipt.receiptId}> |
||||||
|
<td>{receipt.verifier.name}</td> |
||||||
|
<td>{receipt.verifier.apiUrl}</td> |
||||||
|
<td>{receipt.status}</td> |
||||||
|
<td>{receipt.message}</td> |
||||||
|
<td>{receipt.receiptId}</td> |
||||||
|
</tr> |
||||||
|
))} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</> |
||||||
|
) |
||||||
|
} |
||||||
|
Loading…
Reference in new issue