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 (