import React, { useState, useRef, useEffect } from 'react'; import type { Provider } from '../../../types/broker'; import { formatBalance } from '../../../utils/currency'; interface ProviderSelectorProps { providers: Provider[]; selectedProvider: Provider | null; onProviderSelect: (provider: Provider) => void; isLoading?: boolean; isStreaming?: boolean; } export const ProviderSelector: React.FC = ({ providers, selectedProvider, onProviderSelect, isLoading = false, isStreaming = false, }) => { const [isDropdownOpen, setIsDropdownOpen] = useState(false); const dropdownRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsDropdownOpen(false); } }; if (isDropdownOpen) { document.addEventListener("mousedown", handleClickOutside); } return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, [isDropdownOpen]); const handleProviderSelect = (provider: Provider) => { onProviderSelect(provider); setIsDropdownOpen(false); }; const disabled = isLoading || isStreaming; return (
{isDropdownOpen && !disabled && (
{providers.length === 0 ? (
No providers available
) : ( providers.map((provider) => ( )) )}
)}
); };