import React, { useCallback, useRef, useState } from "react"; import { ChainIcon } from "../chain-icon"; import CaretDown from "../../icons/caret-down"; import { useAccount, useConfig } from "wagmi"; import Error from "../../icons/error"; import { NetworksPopover } from "./networks-popover"; import { Typography } from "@carrot-kpi/ui"; import { useTranslation } from "react-i18next"; import { useClickAway } from "react-use"; import { Environment } from "@carrot-kpi/shared-state"; export interface ChainSelectProps { compact?: boolean; } export const ChainSelect = ({ compact = true }: ChainSelectProps) => { const { t } = useTranslation(); const { chains } = useConfig(); const { connector: activeConnector, chain } = useAccount(); const [networksPopoverAnchor, setNetworksPopoverAnchor] = useState(null); const [networksPopoverOpen, setNetworksPopoverOpen] = useState(false); const networksPopoverRef = useRef(null); useClickAway(networksPopoverRef, () => { setNetworksPopoverOpen(false); }); const handleNetworksPopoverOpen = useCallback(() => { setNetworksPopoverOpen(true); }, []); const handleNetworkSwitchClick = useCallback( async (chainId: number) => { try { await activeConnector?.switchChain?.({ chainId }); } catch (error) { console.warn("could not switch network", error); } setNetworksPopoverOpen(false); }, [activeConnector], ); const Logo = chain?.icon.logo || Error; return (
{__ENVIRONMENT__ !== Environment.Local && ( )}
1 ? handleNetworksPopoverOpen : undefined } ref={setNetworksPopoverAnchor} > } /> {!compact && ( {chain?.name || t("connect.wallet.unknown")} )} {__ENVIRONMENT__ !== Environment.Local && chains.length > 1 && ( )}
); };