refactor userlendingreserver to allow token name in url

This commit is contained in:
juan 2021-01-19 15:37:20 -05:00
parent ddb2fbca16
commit 2cb73282ff
2 changed files with 17 additions and 16 deletions

View File

@ -2,7 +2,7 @@ import { PublicKey } from "@solana/web3.js";
import { useEffect, useMemo, useState } from "react"; import { useEffect, useMemo, useState } from "react";
import { LendingReserve, LendingReserveParser } from "../models/lending"; import { LendingReserve, LendingReserveParser } from "../models/lending";
import { cache, ParsedAccount } from "./../contexts/accounts"; import { cache, ParsedAccount } from "./../contexts/accounts";
import { useConnectionConfig } from "../contexts/connection"; import { useConnectionConfig } from "./../contexts/connection";
import { getTokenByName, KnownToken } from "../utils/utils"; import { getTokenByName, KnownToken } from "../utils/utils";
export const getLendingReserves = () => { export const getLendingReserves = () => {
@ -35,22 +35,27 @@ export function useLendingReserves() {
} }
export function useLendingReserve(address?: string | PublicKey) { export function useLendingReserve(address?: string | PublicKey) {
const { tokens } = useConnectionConfig(); const { tokenMap } = useConnectionConfig();
const { reserveAccounts } = useLendingReserves();
let addressName = address; let addressName = address;
let token: KnownToken;
if (typeof address === "string") { if (typeof address === "string") {
token = getTokenByName(tokens, address); const token: KnownToken | null = getTokenByName(tokenMap, address);
if (token) { if (token) {
addressName = getLendingReserves().filter( const account = reserveAccounts.filter(
(acc) => acc.info.liquidityMint.toBase58() === token.mintAddress (acc) => acc.info.liquidityMint.toBase58() === token.mintAddress
)[0]?.pubkey; )[0]
if (account) {
addressName = account.pubkey;
}
} }
} }
const id = useMemo( const id = useMemo(
() => () =>
typeof addressName === "string" ? addressName : addressName?.toBase58(), typeof addressName === "string" ? addressName : addressName?.toBase58(),
[addressName] [addressName]
); );
const [reserveAccount, setReserveAccount] = useState< const [reserveAccount, setReserveAccount] = useState<
ParsedAccount<LendingReserve> ParsedAccount<LendingReserve>
>(cache.get(id || "") as ParsedAccount<LendingReserve>); >(cache.get(id || "") as ParsedAccount<LendingReserve>);

View File

@ -74,16 +74,12 @@ export function getTokenName(
return shorten ? `${mintAddress.substring(0, 5)}...` : mintAddress; return shorten ? `${mintAddress.substring(0, 5)}...` : mintAddress;
} }
export function getTokenByName(tokens: KnownToken[], name: string) { export function getTokenByName(tokenMap: KnownTokenMap, name: string) {
let token = null; let token: KnownToken | null = null;
const nameToToken = tokens.reduce((map, item) => { for (const val of tokenMap.values()) {
map.set(item.tokenSymbol, item); if (val.tokenSymbol === name) {
return map; token = val;
}, new Map<string, any>()); break;
if (name) {
if (nameToToken.has(name)) {
token = nameToToken.get(name);
} }
} }
return token; return token;