import React, { useState, useRef, useEffect } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { UserIcon, Bars3Icon, BoltIcon, InboxIcon, } from '@heroicons/react/24/solid'; import { useTranslation } from 'react-i18next'; import PomodoroTimer from './Shared/PomodoroTimer'; interface NavbarProps { isDarkMode: boolean; toggleDarkMode: () => void; currentUser: { email: string; avatarUrl?: string; }; setCurrentUser: React.Dispatch>; isSidebarOpen: boolean; setIsSidebarOpen: React.Dispatch>; openTaskModal: (type?: 'simplified' | 'full') => void; } const Navbar: React.FC = ({ currentUser, setCurrentUser, isSidebarOpen, setIsSidebarOpen, openTaskModal, }) => { const { t } = useTranslation(); const [isDropdownOpen, setIsDropdownOpen] = useState(false); const [pomodoroEnabled, setPomodoroEnabled] = useState(true); // Default to true const dropdownRef = useRef(null); const navigate = useNavigate(); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if ( dropdownRef.current && !dropdownRef.current.contains(event.target as Node) ) { setIsDropdownOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, []); // Fetch user's pomodoro setting useEffect(() => { const fetchProfile = async () => { try { const response = await fetch('/api/profile', { credentials: 'include', }); if (response.ok) { const profile = await response.json(); setPomodoroEnabled( profile.pomodoro_enabled !== undefined ? profile.pomodoro_enabled : true ); } } catch (error) { console.error('Error fetching profile:', error); // Keep default value (true) if fetch fails } }; fetchProfile(); // Listen for Pomodoro setting changes from ProfileSettings const handlePomodoroSettingChange = (event: CustomEvent) => { setPomodoroEnabled(event.detail.enabled); }; window.addEventListener( 'pomodoroSettingChanged', handlePomodoroSettingChange as EventListener ); return () => { window.removeEventListener( 'pomodoroSettingChanged', handlePomodoroSettingChange as EventListener ); }; }, []); const toggleDropdown = () => { setIsDropdownOpen(!isDropdownOpen); }; const handleLogout = async () => { try { const response = await fetch('/api/logout', { method: 'GET', credentials: 'include', }); if (response.ok) { setCurrentUser(null); navigate('/login'); } else { console.error('Logout failed:', await response.json()); } } catch (error) { console.error('Error during logout:', error); } }; return ( ); }; export default Navbar;