import { Box, createListCollection, Separator } from '@chakra-ui/react';
import React from 'react';
import type { ExternalChain } from 'types/externalChains';
import useIsInitialLoading from 'lib/hooks/useIsInitialLoading';
import useIsMobile from 'lib/hooks/useIsMobile';
import type { SelectOption, SelectProps, ViewMode } from 'toolkit/chakra/select';
import { Select } from 'toolkit/chakra/select';
import { FilterInput } from 'toolkit/components/filters/FilterInput';
import IconSvg from 'ui/shared/IconSvg';
import ChainIcon from './ChainIcon';
const ALL_OPTION: SelectOption = {
value: 'all',
label: 'All chains',
icon: ,
afterElement: ,
};
export interface Props extends Omit {
loading?: boolean;
mode?: ViewMode;
chainsConfig: Array>;
chainIds?: Array;
withAllOption?: boolean;
}
const ChainSelect = ({ loading, mode, chainsConfig, chainIds, withAllOption, ...props }: Props) => {
const [ inputValue, setInputValue ] = React.useState('');
const isInitialLoading = useIsInitialLoading(loading);
const isMobile = useIsMobile();
const allItems = React.useMemo(() => {
const chainItems = chainsConfig
.filter((chain) => !chainIds || isInitialLoading || chainIds.includes(chain.id))
.map((chain) => ({
value: chain.id,
label: chain.name || `Chain ${ chain.id }`,
icon: ,
})) || [];
return [ withAllOption ? ALL_OPTION : undefined, ...chainItems ].filter(Boolean);
}, [ chainsConfig, chainIds, withAllOption, isInitialLoading ]);
const collection = React.useMemo(() => {
return createListCollection({ items: allItems });
}, [ allItems ]);
const handleFilterChange = React.useCallback((value: string) => {
setInputValue(value);
}, [ ]);
const itemFilter = React.useCallback((item: SelectOption) => {
return item.label.toLowerCase().includes(inputValue.toLowerCase());
}, [ inputValue ]);
const contentHeader = allItems.length > 10 ? (
) : null;
if (allItems.length === 0) {
return null;
}
return (