Show zero balance for missing accounts

This commit is contained in:
Justin Starry
2020-04-05 16:31:40 +08:00
committed by Michael Vines
parent aec0d9cca0
commit 35814e77cb
2 changed files with 24 additions and 8 deletions

View File

@ -109,6 +109,10 @@ const renderAccountRow = (account: Account) => {
let statusText; let statusText;
let statusClass; let statusClass;
switch (account.status) { switch (account.status) {
case Status.NotFound:
statusClass = "danger";
statusText = "Not Found";
break;
case Status.CheckFailed: case Status.CheckFailed:
statusClass = "danger"; statusClass = "danger";
statusText = "Error"; statusText = "Error";
@ -131,14 +135,17 @@ const renderAccountRow = (account: Account) => {
} }
let data = "-"; let data = "-";
let balance = "-";
let owner = "-"; let owner = "-";
if (account.details) { if (account.details) {
data = `${account.details.space}`; data = `${account.details.space}`;
balance = `${(1.0 * account.details.lamports) / LAMPORTS_PER_SOL}`;
owner = `${account.details.owner.toBase58()}`; owner = `${account.details.owner.toBase58()}`;
} }
let balance = "-";
if (account.lamports !== undefined) {
balance = `${(1.0 * account.lamports) / LAMPORTS_PER_SOL}`;
}
return ( return (
<tr key={account.id}> <tr key={account.id}>
<td> <td>

View File

@ -6,6 +6,7 @@ import { useCluster, ClusterStatus } from "./cluster";
export enum Status { export enum Status {
Checking, Checking,
CheckFailed, CheckFailed,
NotFound,
Success Success
} }
@ -17,7 +18,6 @@ enum Source {
export interface Details { export interface Details {
executable: boolean; executable: boolean;
owner: PublicKey; owner: PublicKey;
lamports: number;
space: number; space: number;
} }
@ -26,6 +26,7 @@ export interface Account {
status: Status; status: Status;
source: Source; source: Source;
pubkey: PublicKey; pubkey: PublicKey;
lamports?: number;
details?: Details; details?: Details;
} }
@ -44,6 +45,7 @@ interface Update {
type: ActionType.Update; type: ActionType.Update;
address: string; address: string;
status: Status; status: Status;
lamports?: number;
details?: Details; details?: Details;
} }
@ -78,7 +80,8 @@ function reducer(state: State, action: Action): State {
account = { account = {
...account, ...account,
status: action.status, status: action.status,
details: action.details details: action.details,
lamports: action.lamports
}; };
const accounts = { const accounts = {
...state.accounts, ...state.accounts,
@ -169,22 +172,28 @@ export async function fetchAccountInfo(
let status; let status;
let details; let details;
let lamports;
try { try {
const result = await new Connection(url).getAccountInfo( const result = await new Connection(url).getAccountInfo(
new PublicKey(address) new PublicKey(address)
); );
lamports = result.lamports;
details = { details = {
space: result.data.length, space: result.data.length,
executable: result.executable, executable: result.executable,
lamports: result.lamports,
owner: result.owner owner: result.owner
}; };
status = Status.Success; status = Status.Success;
} catch (error) { } catch (error) {
if (error.toString() === "Error: Invalid request") {
lamports = 0;
status = Status.NotFound;
} else {
console.error("Failed to fetch account info", error); console.error("Failed to fetch account info", error);
status = Status.CheckFailed; status = Status.CheckFailed;
} }
dispatch({ type: ActionType.Update, status, details, address }); }
dispatch({ type: ActionType.Update, status, lamports, details, address });
} }
export function useAccounts() { export function useAccounts() {