import { Input, InputProps, Modal } from '@/components'; import { useLifi } from '@/index'; import { LifiChainData } from '@/types'; import React, { useEffect, useMemo, useState } from 'react'; export type LifiChainSelectorModalProps = { initialChainKey?: string; onSelect: (tokenAddress: string) => void; title?: string; headerProps?: React.HTMLAttributes; buttonProps?: React.ButtonHTMLAttributes; inputProps?: InputProps; listProps?: React.HTMLAttributes; listItemProps?: React.HTMLAttributes; }; export const LifiChainSelectorModal: React.FC = ({ initialChainKey, onSelect, title, headerProps, buttonProps, inputProps, listProps, listItemProps, }) => { const [selectedChainKey, setSelectedChainKey] = useState( initialChainKey ); const { supportedChainsQuery } = useLifi(); useEffect(() => { if (selectedChainKey !== initialChainKey) setSelectedChainKey(initialChainKey); }, [initialChainKey]); const chainData = supportedChainsQuery.isSuccess ? ((supportedChainsQuery.data as any).data.chains as LifiChainData[]) : ([] as LifiChainData[]); const [isOpen, setIsOpen] = useState(false); const [searchTerm, setSearchTerm] = useState(''); const filteredChains = useMemo(() => { return chainData.filter((chain) => { return ( chain.name.toLowerCase().includes(searchTerm.toLowerCase()) || chain.key.toLowerCase().includes(searchTerm.toLowerCase()) || chain.coin.toLowerCase().includes(searchTerm.toLowerCase()) || chain.id.toString().toLowerCase().includes(searchTerm.toLowerCase()) ); }); }, [chainData, searchTerm]); const toggleModal = () => { setIsOpen(!isOpen); }; const handleChainSelect = (chainKey: string) => { setSelectedChainKey(chainKey); onSelect(chainKey); toggleModal(); }; const selectedChain = chainData.find( (chain) => chain.key === selectedChainKey ); return ( <> {title && (

{title}

)} setSearchTerm(e.target.value)} className="w-full p-2 mb-4 border border-gray-300 rounded" {...inputProps} />
{filteredChains.map((chain) => (
handleChainSelect(chain.key)} className="p-2 cursor-pointer hover:bg-accent-color rounded-sm" {...listItemProps} > {chain.name}
))}
); };