refactor userlendingreserver to allow token name in url
This commit is contained in:
parent
ddb2fbca16
commit
2cb73282ff
|
@ -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>);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue