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 ? (
) : (
)}
{openDropdown && (
{filteredNetworks?.map((network, index) => {
return !!network ? (
)}
);
}