import useClickOutside from "../../hooks/useClickOutside"; import { Network } from "../../types"; import { ReactNode, useContext, useState } from "react"; import { useEffect } from "react"; import { ChevronDown } from "react-feather"; import { CustomizeContext } from "../../providers/CustomizeProvider"; interface ChainDropdownProps { networks: Network[]; activeNetworkId: number; onChange: (network: Network) => void; } function Option({ network, children, onClick, selected = false, borderRadius = 1, onlyOneNetwork = false, }: { network: Network; children?: ReactNode; onClick?: () => void; selected?: boolean; borderRadius?: number; onlyOneNetwork?: boolean; }) { const networkDisplayName = network?.chainId === 1101 ? 'zkEVM' : network?.chainId === 324 ? 'zkSync' : network?.name; return (
{networkDisplayName}
{selected && !onlyOneNetwork && ( )} {children}
); } export function ChainSelect({ networks, activeNetworkId, onChange, }: ChainDropdownProps) { const [openDropdown, setOpenDropdown] = useState(false); const chainDropdownRef = useClickOutside(() => setOpenDropdown(false)); const [filteredNetworks, setFilteredNetworks] = useState(null); const activeNetwork = networks?.filter( (x: Network) => x?.chainId === activeNetworkId )[0]; const customSettings = useContext(CustomizeContext); const { borderRadius } = customSettings.customization; useEffect(() => { setFilteredNetworks( networks?.filter((x: Network) => x?.chainId !== activeNetworkId) ); }, [networks, activeNetworkId, activeNetwork]); return (
setOpenDropdown(!openDropdown) } className={`skt-w skt-w-relative skt-w-p-1.5 ${ openDropdown ? "skt-w-bg-widget-interactive skt-w-h-auto" : "" }`} style={{ borderRadius: `calc(0.5rem * ${borderRadius})` }} ref={chainDropdownRef} > {activeNetwork ? (
); }