diff --git a/frontend/src/components/Navbar.jsx b/frontend/src/components/Navbar.jsx index 1e7b2db..fa53db9 100644 --- a/frontend/src/components/Navbar.jsx +++ b/frontend/src/components/Navbar.jsx @@ -10,16 +10,9 @@ import NavSettings from "./navbar/NavSettings"; const Navbar = () => { // State for UI controls const [isProfileMenuOpen, setIsProfileMenuOpen] = useState(false); - const [searchQuery, setSearchQuery] = useState(""); - const [isSearchFocused, setIsSearchFocused] = useState(false); - const [recentSearches, setRecentSearches] = useState(() => { - const saved = localStorage.getItem("recentSearches"); - return saved ? JSON.parse(saved) : []; - }); const [isSettingsMenuOpen, setIsSettingsMenuOpen] = useState(false); const [isSettingsLoading, setIsSettingsLoading] = useState(false); const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 }); - const searchRef = useRef(null); const settingsRef = useRef(null); const menuRef = useRef(null); const { pathname } = useLocation(); @@ -68,61 +61,6 @@ const Navbar = () => { setIsSettingsMenuOpen(false); }, [location.pathname]); - // Handle clicks outside dropdown menus and keyboard navigation - useEffect(() => { - // Handle clicks outside the search dropdown - const handleClickOutside = (event) => { - if (searchRef.current && !searchRef.current.contains(event.target)) { - setIsSearchFocused(false); - } - if (settingsRef.current && !settingsRef.current.contains(event.target)) { - setIsSettingsMenuOpen(false); - } - }; - - // Handle keyboard navigation - const handleKeyDown = (event) => { - // Close menus on Escape - if (event.key === "Escape") { - setIsSearchFocused(false); - setIsSettingsMenuOpen(false); - setIsProfileMenuOpen(false); - } - - // Handle Tab key to manage focus trap in menus - if (event.key === "Tab" && (isSettingsMenuOpen || isProfileMenuOpen)) { - const menu = isSettingsMenuOpen ? settingsRef.current : document; - const focusableElements = menu.querySelectorAll( - 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' - ); - const firstFocusableElement = focusableElements[0]; - const lastFocusableElement = - focusableElements[focusableElements.length - 1]; - - if (event.shiftKey) { - // If shift + tab and first element is focused, move to last - if (document.activeElement === firstFocusableElement) { - event.preventDefault(); - lastFocusableElement.focus(); - } - } else { - // If tab and last element is focused, move to first - if (document.activeElement === lastFocusableElement) { - event.preventDefault(); - firstFocusableElement.focus(); - } - } - } - }; - - document.addEventListener("mousedown", handleClickOutside); - document.addEventListener("keydown", handleKeyDown); - return () => { - document.removeEventListener("mousedown", handleClickOutside); - document.removeEventListener("keydown", handleKeyDown); - }; - }, [isSettingsMenuOpen, isProfileMenuOpen]); - // Control body scrolling when settings modal is open useEffect(() => { // Prevent body scrolling when settings modal is open @@ -138,52 +76,6 @@ const Navbar = () => { }; }, [isSettingsMenuOpen]); - // Persist recent searches to localStorage - useEffect(() => { - // Save recent searches to localStorage whenever it changes - localStorage.setItem("recentSearches", JSON.stringify(recentSearches)); - }, [recentSearches]); - - // Handler for search input changes - const handleSearchChange = (e) => { - setSearchQuery(e.target.value); - }; - - // Handler for search form submission - const handleSearchSubmit = (e) => { - e.preventDefault(); - if (searchQuery.trim()) { - // Add to recent searches (avoid duplicates and limit to 5) - const updatedSearches = [ - searchQuery.trim(), - ...recentSearches.filter((search) => search !== searchQuery.trim()), - ].slice(0, 5); - - setRecentSearches(updatedSearches); - navigate(`/listings?location=${encodeURIComponent(searchQuery.trim())}`); - setSearchQuery(""); - setIsSearchFocused(false); - } - }; - - // Handler for clicking a search suggestion - const handleSuggestionClick = (suggestion) => { - // Add to recent searches - const updatedSearches = [ - suggestion, - ...recentSearches.filter((search) => search !== suggestion), - ].slice(0, 5); - - setRecentSearches(updatedSearches); - navigate(`/listings?location=${encodeURIComponent(suggestion)}`); - setIsSearchFocused(false); - }; - - // Handler to clear all recent searches - const clearRecentSearches = () => { - setRecentSearches([]); - }; - // Handler for changing language const handleLanguageChange = async (langCode, langName) => { try { @@ -235,91 +127,10 @@ const Navbar = () => { )} - {/* Center search bar - Responsive for all screens */} - {location.pathname === "/" && ( -