/ src / components / transactions / Switch / NetworkSelector.tsx
NetworkSelector.tsx
 1  import { ChevronDownIcon } from '@heroicons/react/outline';
 2  import {
 3    Box,
 4    FormControl,
 5    MenuItem,
 6    Select,
 7    SelectChangeEvent,
 8    SvgIcon,
 9    Typography,
10  } from '@mui/material';
11  import { MarketLogo } from 'src/components/MarketSwitcher';
12  
13  import { SupportedNetworkWithChainId } from './common';
14  
15  interface NetworkSelectorProps {
16    networks: SupportedNetworkWithChainId[];
17    selectedNetwork: number;
18    setSelectedNetwork: (value: number) => void;
19  }
20  
21  export const NetworkSelector = ({
22    networks,
23    selectedNetwork,
24    setSelectedNetwork,
25  }: NetworkSelectorProps) => {
26    const handleChange = (event: SelectChangeEvent<string>) => {
27      setSelectedNetwork(Number(event.target.value));
28    };
29    return (
30      <FormControl sx={{ minWidth: 'unset', width: 'unset' }}>
31        <Select
32          native={false}
33          value={String(selectedNetwork)}
34          onChange={handleChange}
35          IconComponent={(props) => (
36            <SvgIcon sx={{ fontSize: '14px' }} {...props}>
37              <ChevronDownIcon />
38            </SvgIcon>
39          )}
40          sx={{
41            '&.MuiInputBase-root': {
42              border: 0,
43              '.MuiSelect-select': {
44                display: 'flex',
45                backgroundColor: 'transparent',
46                border: 0,
47              },
48            },
49            '& .MuiOutlinedInput-notchedOutline': {
50              border: 'none',
51            },
52          }}
53        >
54          {networks.map((network) => (
55            <MenuItem value={network.chainId} key={`${network.name}`}>
56              <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
57                <MarketLogo
58                  size={16}
59                  logo={network.networkLogoPath}
60                  sx={{
61                    mr: 1,
62                  }}
63                />
64                <Typography variant="subheader2" color="#4D6EEE">
65                  {network.displayName || network.name}
66                </Typography>
67              </Box>
68            </MenuItem>
69          ))}
70        </Select>
71      </FormControl>
72    );
73  };