Add real slot info to transactions table (#16)

* Add real slot info to transactions table

* npm run format:fix
This commit is contained in:
Justin Starry 2020-03-25 12:21:47 +08:00 committed by Michael Vines
parent ea705f9147
commit 52f5934c3d
2 changed files with 20 additions and 10 deletions

View File

@ -138,6 +138,8 @@ const renderTransactionRow = (transaction: Transaction) => {
return assertUnreachable(transaction.status); return assertUnreachable(transaction.status);
} }
const slotText = `${transaction.slot || "-"}`;
return ( return (
<tr key={transaction.signature}> <tr key={transaction.signature}>
<td> <td>
@ -152,7 +154,7 @@ const renderTransactionRow = (transaction: Transaction) => {
<code>{transaction.signature}</code> <code>{transaction.signature}</code>
</td> </td>
<td>-</td> <td>-</td>
<td>-</td> <td>{slotText}</td>
</tr> </tr>
); );
}; };

View File

@ -20,6 +20,7 @@ export interface Transaction {
id: number; id: number;
status: Status; status: Status;
source: Source; source: Source;
slot?: number;
signature: TransactionSignature; signature: TransactionSignature;
} }
@ -38,6 +39,7 @@ interface UpdateStatus {
type: ActionType.UpdateStatus; type: ActionType.UpdateStatus;
id: number; id: number;
status: Status; status: Status;
slot?: number;
} }
interface InputSignature { interface InputSignature {
@ -66,7 +68,11 @@ function reducer(state: State, action: Action): State {
case ActionType.UpdateStatus: { case ActionType.UpdateStatus: {
let transaction = state.transactions[action.id]; let transaction = state.transactions[action.id];
if (transaction) { if (transaction) {
transaction = { ...transaction, status: action.status }; transaction = {
...transaction,
status: action.status,
slot: action.slot
};
const transactions = { const transactions = {
...state.transactions, ...state.transactions,
[action.id]: transaction [action.id]: transaction
@ -136,23 +142,25 @@ export async function checkTransactionStatus(
}); });
let status; let status;
let slot;
try { try {
const signatureStatus = await new Connection(url).getSignatureStatus( const result = await new Connection(url).getSignatureStatus(signature);
signature
);
if (signatureStatus === null) { if (result === null) {
status = Status.Missing; status = Status.Missing;
} else if ("Ok" in signatureStatus.status) {
status = Status.Success;
} else { } else {
status = Status.Failure; slot = result.slot;
if ("Ok" in result.status) {
status = Status.Success;
} else {
status = Status.Failure;
}
} }
} catch (error) { } catch (error) {
console.error("Failed to check transaction status", error); console.error("Failed to check transaction status", error);
status = Status.CheckFailed; status = Status.CheckFailed;
} }
dispatch({ type: ActionType.UpdateStatus, status, id }); dispatch({ type: ActionType.UpdateStatus, status, slot, id });
} }
export function useTransactions() { export function useTransactions() {