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'; // Remove react-router-dom usage // import { useNavigate } from 'react-router-dom'; import { Document, ChevronUp, ChevronDown } from './icons'; import type { View } from '../ChatWindow'; 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]); let envModelProvider = null; if (window.electron.getConfig().GOOSE_MODEL && window.electron.getConfig().GOOSE_PROVIDER) { envModelProvider = `${window.electron.getConfig().GOOSE_MODEL} - ${window.electron.getConfig().GOOSE_PROVIDER}`; } return (
{/* Directory Chooser - Always visible */} { console.log('Opening directory chooser'); if (hasMessages) { window.electron.directoryChooser(); } else { window.electron.directoryChooser(true); } }} > Working in {window.appConfig.get('GOOSE_WORKING_DIR')} {/* Model Selector Dropdown - Only in development */}
setIsModelMenuOpen(!isModelMenuOpen)} > {envModelProvider || currentModel?.name || 'Select Model'} {isModelMenuOpen ? ( ) : ( )}
{/* Dropdown Menu */} {isModelMenuOpen && (
( )} />
{ setIsModelMenuOpen(false); // Instead of navigate('/settings'), call setView('settings'). setView?.('settings'); }} > Tools and Settings
)}
); }