import React, { useState, useEffect, useRef } from 'react'; import { useModel } from './settings/models/ModelContext'; import { useRecentModels } from './settings/models/RecentModels'; // Hook for recent models import { Sliders } from 'lucide-react'; import { ModelRadioList } from './settings/models/ModelRadioList'; import { Document, ChevronUp, ChevronDown } from './icons'; import type { View } from '../App'; import { settingsV2Enabled } from '../flags'; import { BottomMenuModeSelection } from './BottomMenuModeSelection'; import ModelsBottomBar from './settings_v2/models/bottom_bar/ModelsBottomBar'; import ToolCount from './ToolCount'; export default function BottomMenu({ hasMessages, setView, }: { hasMessages: boolean; setView: (view: View) => void; }) { const [isModelMenuOpen, setIsModelMenuOpen] = useState(false); const { currentModel } = useModel(); const { recentModels } = useRecentModels(); // Get recent models const dropdownRef = useRef(null); // Add effect to handle clicks outside useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsModelMenuOpen(false); } }; if (isModelMenuOpen) { document.addEventListener('mousedown', handleClickOutside); } return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [isModelMenuOpen]); // Add effect to handle Escape key useEffect(() => { const handleEsc = (event: KeyboardEvent) => { if (event.key === 'Escape') { setIsModelMenuOpen(false); } }; if (isModelMenuOpen) { window.addEventListener('keydown', handleEsc); } return () => { window.removeEventListener('keydown', handleEsc); }; }, [isModelMenuOpen]); // Removed the envModelProvider code that was checking for environment variables return (
{/* Directory Chooser - Always visible */} { if (hasMessages) { window.electron.directoryChooser(); } else { window.electron.directoryChooser(true); } }} > Working in {window.appConfig.get('GOOSE_WORKING_DIR')} {/* Goose Mode Selector Dropdown */} {/* Right-side section with ToolCount and Model Selector together */}
{/* Tool count */} {/* Model Selector Dropdown */} {settingsV2Enabled ? ( ) : (
setIsModelMenuOpen(!isModelMenuOpen)} > {(currentModel?.alias ?? currentModel?.name) || 'Select Model'} {isModelMenuOpen ? ( ) : ( )}
{/* Dropdown Menu */} {isModelMenuOpen && (
( )} />
{ setIsModelMenuOpen(false); setView('settings'); }} > Tools and Settings
)}
)}
); }