diff --git a/src/hooks/useLendingReserves.ts b/src/hooks/useLendingReserves.ts index caf8b7b..aebe1d0 100644 --- a/src/hooks/useLendingReserves.ts +++ b/src/hooks/useLendingReserves.ts @@ -2,7 +2,7 @@ import { PublicKey } from "@solana/web3.js"; import { useEffect, useMemo, useState } from "react"; import { LendingReserve, LendingReserveParser } from "../models/lending"; import { cache, ParsedAccount } from "./../contexts/accounts"; -import { useConnectionConfig } from "../contexts/connection"; +import { useConnectionConfig } from "./../contexts/connection"; import { getTokenByName, KnownToken } from "../utils/utils"; export const getLendingReserves = () => { @@ -35,22 +35,27 @@ export function useLendingReserves() { } export function useLendingReserve(address?: string | PublicKey) { - const { tokens } = useConnectionConfig(); + const { tokenMap } = useConnectionConfig(); + const { reserveAccounts } = useLendingReserves(); let addressName = address; - let token: KnownToken; if (typeof address === "string") { - token = getTokenByName(tokens, address); + const token: KnownToken | null = getTokenByName(tokenMap, address); if (token) { - addressName = getLendingReserves().filter( + const account = reserveAccounts.filter( (acc) => acc.info.liquidityMint.toBase58() === token.mintAddress - )[0]?.pubkey; + )[0] + if (account) { + addressName = account.pubkey; + } } + } const id = useMemo( () => typeof addressName === "string" ? addressName : addressName?.toBase58(), [addressName] ); + const [reserveAccount, setReserveAccount] = useState< ParsedAccount >(cache.get(id || "") as ParsedAccount); diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 0b3e6c0..ce70ebf 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -74,16 +74,12 @@ export function getTokenName( return shorten ? `${mintAddress.substring(0, 5)}...` : mintAddress; } -export function getTokenByName(tokens: KnownToken[], name: string) { - let token = null; - const nameToToken = tokens.reduce((map, item) => { - map.set(item.tokenSymbol, item); - return map; - }, new Map()); - - if (name) { - if (nameToToken.has(name)) { - token = nameToToken.get(name); +export function getTokenByName(tokenMap: KnownTokenMap, name: string) { + let token: KnownToken | null = null; + for (const val of tokenMap.values()) { + if (val.tokenSymbol === name) { + token = val; + break; } } return token;