import classNames from 'classnames' import React, { useCallback, useMemo } from 'react' import { useNavigate, useSearchParams } from 'react-router-dom' import { useSWRConfig } from 'swr' import Button from 'components/common/Button' import { ExternalLink } from 'components/common/Icons' import Overlay from 'components/common/Overlay' import Radio from 'components/common/Radio' import Text from 'components/common/Text' import ChainLogo from 'components/common/chain/ChainLogo' import chains from 'configs/chains' import useCurrentChainId from 'hooks/localStorage/useCurrentChainId' import useChainConfig from 'hooks/useChainConfig' import useToggle from 'hooks/useToggle' import useStore from 'store' import { NETWORK } from 'types/enums/network' import { ChainInfoID } from 'types/enums/wallet' import { getRoute } from 'utils/route' interface V1Outpost { chainId: ChainInfoID name: string url: string target: '_blank' | '_self' } interface ChainOptionProps { chainConfig?: ChainConfig onSelect?: (chain: ChainConfig) => void active: boolean outpost?: V1Outpost } const v1Outposts: V1Outpost[] = [ { chainId: ChainInfoID.Neutron1, name: 'Neutron', url: 'https://neutron.marsprotocol.io', target: '_blank', }, { chainId: ChainInfoID.Pion1, name: 'Neutron Testnet', url: '/v1', target: '_self', }, { chainId: ChainInfoID.Osmosis1, name: 'Osmosis', url: '/v1', target: '_self' }, { chainId: ChainInfoID.OsmosisDevnet, name: 'Osmosis Devnet', url: '/v1', target: '_self' }, ] export default function ChainSelect() { const [showMenu, setShowMenu] = useToggle() const chainConfig = useChainConfig() const { mutate } = useSWRConfig() const navigate = useNavigate() const [searchParams] = useSearchParams() const isV1 = useStore((s) => s.isV1) const [_, setCurrentChainId] = useCurrentChainId() const selectChain = useCallback( async (chainConfig: ChainConfig) => { setShowMenu(false) setCurrentChainId(chainConfig.id) mutate(() => true) useStore.setState({ chainConfig, isV1: false, client: undefined, address: undefined, userDomain: undefined, balances: [], }) navigate(getRoute('trade', searchParams)) }, [setCurrentChainId, setShowMenu, mutate, navigate, searchParams], ) const ChainOption = (props: ChainOptionProps) => { const { onSelect, active, outpost, chainConfig } = props return (