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 { 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<LendingReserve>
>(cache.get(id || "") as ParsedAccount<LendingReserve>);

View File

@ -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<string, any>());
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;