import { useState, useEffect } from 'react' import _ from 'lodash' import { Chain } from 'types' import usePopover from '@/hooks/usePopoverRef' import { DownArrow } from '@/components/icons/DownArrow' import { SearchInput } from './SearchInput' import { TabOption, ToggleTabs } from './ToggleTabs' import { ChainOption } from './ChainOption' import { useChainInputFilter } from '@/hooks/useChainInputFilter' type PopoverSelectProps = { options: Chain[] remaining: Chain[] targets: Chain[] onSelect: (selected: Chain) => void selected: Chain label: string isOrigin: boolean } export const ChainPopoverSelect = ({ options, remaining, targets, onSelect, selected, label, isOrigin, }: PopoverSelectProps) => { const { popoverRef, isOpen, togglePopover, closePopover } = usePopover() const [activeTab, setActiveTab] = useState( isOrigin ? 'All' : 'Target' ) useEffect(() => { if (!targets || _.isEmpty(targets)) { setActiveTab('All') } else if (isOrigin) { setActiveTab('All') } else if (!isOrigin) { setActiveTab('Target') } }, [targets, isOrigin]) const handleSelect = (option: Chain) => { onSelect(option) closePopover() } const handleTabSelect = (tab: TabOption) => { setActiveTab(tab) } const { filterValue, setFilterValue, filteredOptions, filteredRemaining, filteredTargets, hasFilteredRemaining, hasFilteredResults, hasFilteredTargets, } = useChainInputFilter(options, remaining, targets, isOpen) return (
togglePopover()} style={{ background: 'var(--synapse-select-bg)' }} className={` flex px-2.5 py-1.5 gap-2 items-center rounded text-[--synapse-select-text] whitespace-nowrap border border-solid border-[--synapse-select-border] cursor-pointer hover:border-[--synapse-focus] `} > {selected?.imgUrl && ( {`${selected?.name} )} {selected?.name || 'Network'}
{isOpen && (
{targets && targets.length > 0 && ( )}
{activeTab === 'All' ? ( hasFilteredResults ? (
    {filteredOptions.map((option, i) => ( handleSelect(option)} isOrigin={isOrigin} /> ))} {hasFilteredRemaining && (
    Other chains
    )} {filteredRemaining.map((option, i) => ( handleSelect(option)} isOrigin={isOrigin} /> ))}
) : (
No chains found
matching '{filterValue}'.
) ) : null} {activeTab === 'Target' ? ( hasFilteredTargets ? (
    {filteredTargets.map((option, i) => ( handleSelect(option)} isOrigin={isOrigin} /> ))}
) : (
No chains found
matching '{filterValue}'.
) ) : null}
)}
) }