import React, { useState, useEffect, useCallback } from 'react'; import axios from 'axios'; import { motion } from 'framer-motion'; import debounce from 'lodash/debounce'; const CalloutModal = ({ isOpen, onClose, onSubmit }) => { const [tokenId, setTokenId] = useState(''); const [tokenName, setTokenName] = useState(''); const [tokenContract, setTokenContract] = useState(''); const [tokenInput, setTokenInput] = useState(''); const [searchResults, setSearchResults] = useState([]); const [showDropdown, setShowDropdown] = useState(false); const [shouldSearch, setShouldSearch] = useState(true); useEffect(() => { if (tokenId && shouldSearch) { const fetchData = async () => { try { const response = await axios.get(`https://api.dexscreener.io/latest/dex/search/?q=${tokenId}`); setSearchResults(response.data.pairs || []); setShowDropdown(true); } catch (error) { console.error('Error fetching data:', error); setShowDropdown(false); } }; fetchData(); } }, [tokenId, shouldSearch]); const debouncedSearch = useCallback(debounce((value) => { setShouldSearch(true); setTokenId(value); }, 500), []); const handleTokenChange = (e) => { setTokenInput(e.target.value); setTokenContract(""); setShouldSearch(false); debouncedSearch(e.target.value); }; const handleSelectToken = (token, name, ca) => { setTokenInput(token); setTokenId(token); setTokenName(name); setTokenContract(ca); setShowDropdown(false); setShouldSearch(false); }; const handleSubmit = () => { onSubmit(tokenId,tokenContract,tokenName); onClose(); }; return isOpen ? (

Make a new call!

Type in a token short code that you think will boom anytime soon

{showDropdown && (
    {searchResults.map((result) => (
  • handleSelectToken(result["baseToken"]["symbol"],result["baseToken"]["name"], result["baseToken"]["address"])} className="p-2 hover:bg-gray-400 cursor-pointer flex justify-between items-center glassmorphism-scroller" >
    {result["baseToken"]["symbol"]} - {result["baseToken"]["name"]} {result["chain"]}
    24H Vol: ${result["volume"]["h24"]} 0x...{(result["baseToken"]["address"] as string).slice(-4)}
    ${result["priceUsd"]}
  • ))}
)}

{tokenContract.length > 0 ? "name: " +tokenName : ""}

{tokenContract.length > 0 ? "ca: " +tokenContract : ""}

) : null; }; export default CalloutModal;