import { useRef, useMemo, useState } from "react";
import { ButtonModal } from "../Buttons";
import { useJupiterApiContext } from "../../contexts";
import { TokenInfo } from "@solana/spl-token-registry";
import { useVirtualList } from "ahooks";
import { ChevronDownIcon, LinkIcon } from "@heroicons/react/solid";
import defaultCoin from "../../assets/default-coin.png";
import { Link } from "../Link";
import Urls from "../../settings/urls";
const Row = ({
info,
handleSelect,
}: {
info: TokenInfo;
handleSelect: (e: TokenInfo) => void;
}) => {
return (
);
};
const Coin = ({ tokenInfo }: { tokenInfo: TokenInfo }) => {
return (

{
currentTarget.onerror = null; // prevents looping
currentTarget.src = defaultCoin;
}}
className="h-[25px] w-[25px]"
/>
{tokenInfo.symbol}
);
};
const TOP_COINS = [
"EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp", // FIDA
"SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", // SRM
"9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", // BTC
"So11111111111111111111111111111111111111112", // wSOL
"4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", // RAY
"MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac", // Mango
"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", // USDT
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC
"mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", // mSOL
];
const TopCoin = ({
token,
handleSelect,
}: {
token: TokenInfo;
handleSelect: (e: TokenInfo) => void;
}) => {
return (
);
};
export const SelectCoin = ({
tokenInfo,
setCoin,
}: {
tokenInfo: TokenInfo | null | undefined;
setCoin: React.Dispatch>;
}) => {
const containerRef = useRef(null);
const wrapperRef = useRef(null);
const { tokenMap } = useJupiterApiContext();
const [search, setSearch] = useState("");
const [visible, setVisible] = useState(false);
const originalList = useMemo(
() =>
Array.from(tokenMap.values()).filter(
(e) =>
e.address.includes(search) ||
e.name.toLowerCase().includes(search.toLowerCase()) ||
e.symbol.toLowerCase().includes(search.toLowerCase())
),
[search, tokenInfo]
);
const topList = originalList.filter((e) => TOP_COINS.includes(e.address));
const [list, scrollTo] = useVirtualList(originalList, {
containerTarget: containerRef,
wrapperTarget: wrapperRef,
itemHeight: 70,
overscan: 10,
});
const handleSelect = (e: TokenInfo) => {
setCoin(e);
setVisible(false);
};
if (!tokenInfo) {
return null;
}
return (
}
modalClass="h-screen overflow-clip"
>
{
setSearch(e.target.value.trim());
scrollTo(0);
}}
type="text"
id="search-token"
placeholder="Search"
className="w-full mb-3 text-xs font-bold sm:text-lg input input-bordered input-info"
spellCheck={false}
/>
{topList.map((e, idx) => (
))}
);
};