import React, { useState, useMemo } from "react"; import { FiChevronDown } from "react-icons/fi"; import * as RadixDialog from "@radix-ui/react-dialog"; import { motion, AnimatePresence } from "framer-motion"; import { useTheme } from "@/context"; interface TokenSelectorProps { tokens: any[]; selectedToken: any; onSelect: (token: any) => void; children?: React.ReactNode; } export const TokenSelector: React.FC = ({ tokens, selectedToken, onSelect, children, }) => { const [isOpen, setIsOpen] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const theme = useTheme(); const filteredTokens = useMemo(() => { return tokens.filter( (token) => token.symbol.toLowerCase().includes(searchTerm.toLowerCase()) || token.name.toLowerCase().includes(searchTerm.toLowerCase()), ); }, [tokens, searchTerm]); const sortedTokens = useMemo(() => { return filteredTokens.sort((a, b) => { const balanceA = Number.parseFloat(a.balance || "0"); const balanceB = Number.parseFloat(b.balance || "0"); return balanceB - balanceA; }); }, [filteredTokens]); return ( {children || ( )} {isOpen && ( Select a token setSearchTerm(e.target.value)} className={`w-full p-2 mb-4 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`} />
{sortedTokens.map((token) => ( ))}
)}
); };