mirror of https://github.com/certusone/oyster.git
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 { 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>);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue