diff --git a/src/features/blocks/data/latest-blocks.ts b/src/features/blocks/data/latest-blocks.ts index 3a6fae64e..715106639 100644 --- a/src/features/blocks/data/latest-blocks.ts +++ b/src/features/blocks/data/latest-blocks.ts @@ -26,54 +26,45 @@ import { syncedRoundAtom } from './synced-round' const maxBlocksToDisplay = 5 -const createLatestBlockSummariesAtom = () => { - const latestBlockSummariesAtom = atom([]) - const refreshLatestBlockSummariesEffect = atomEffect((get, set) => { - const syncedRound = get(syncedRoundAtom) - if (!syncedRound) { - return - } - - const blockResults = get.peek(blockResultsAtom) - const transactionResults = get.peek(transactionResultsAtom) - - ;(async () => { - const latestBlockSummaries = ( - await Promise.all( - Array.from({ length: maxBlocksToDisplay }, async (_, i) => { - const round = syncedRound - i - const blockAtom = blockResults.get(round) - - if (blockAtom) { - const block = await get(blockAtom) - const transactionSummaries = await Promise.all( - block.transactionIds.map(async (transactionId) => { - const transactionResult = await get.peek(transactionResults.get(transactionId)!) +export const latestBlockSummariesAtom = atom([]) +const refreshLatestBlockSummariesEffect = atomEffect((get, set) => { + const syncedRound = get(syncedRoundAtom) + if (!syncedRound) { + return + } - return asTransactionSummary(transactionResult) - }) - ) + const blockResults = get.peek(blockResultsAtom) + const transactionResults = get.peek(transactionResultsAtom) - return asBlockSummary(block, transactionSummaries) - } - }) - ) - ).filter(isDefined) + ;(async () => { + const latestBlockSummaries = ( + await Promise.all( + Array.from({ length: maxBlocksToDisplay }, async (_, i) => { + const round = syncedRound - i + const blockAtom = blockResults.get(round) - set(latestBlockSummariesAtom, latestBlockSummaries) - })() - }) + if (blockAtom) { + const block = await get(blockAtom) + const transactionSummaries = await Promise.all( + block.transactionIds.map(async (transactionId) => { + const transactionResult = await get.peek(transactionResults.get(transactionId)!) - return atom((get) => { - get(refreshLatestBlockSummariesEffect) + return asTransactionSummary(transactionResult) + }) + ) - return get(latestBlockSummariesAtom) - }) -} + return asBlockSummary(block, transactionSummaries) + } + }) + ) + ).filter(isDefined) -export const latestBlockSummariesAtom = createLatestBlockSummariesAtom() + set(latestBlockSummariesAtom, latestBlockSummaries) + })() +}) export const useLatestBlockSummaries = () => { + useAtom(refreshLatestBlockSummariesEffect) return useAtomValue(latestBlockSummariesAtom) } diff --git a/src/features/transactions/mappers/transaction-mappers.ts b/src/features/transactions/mappers/transaction-mappers.ts index 7f876d193..876a5f84a 100644 --- a/src/features/transactions/mappers/transaction-mappers.ts +++ b/src/features/transactions/mappers/transaction-mappers.ts @@ -93,7 +93,7 @@ export const asTransactionSummary = (transactionResult: TransactionResult): Tran } } case algosdk.TransactionType.keyreg: { - invariant(transactionResult['key-reg-transaction'], 'key-reg-transaction is not set') + invariant(transactionResult['keyreg-transaction'], 'keyreg-transaction is not set') return { ...common, type: TransactionType.KeyReg, diff --git a/src/utils/error.ts b/src/utils/error.ts index d09956483..25a56ca1d 100644 --- a/src/utils/error.ts +++ b/src/utils/error.ts @@ -1,5 +1,9 @@ export const asError = (error: unknown) => { - return error instanceof Error ? error : new Error(String(error)) + return error instanceof Error + ? error + : error instanceof Object && 'error' in error && error.error instanceof Error + ? error.error + : new Error(String(error)) } export const is404 = (error: Error) => 'status' in error && error.status === 404