import { FormEvent } from 'react'; import { Link, NavLink, useLocation, useNavigate } from 'react-router-dom'; import { appConfig } from '@/config/appConfig'; import { Badge } from '@/components/ui/Badge'; import { IconButton } from '@/components/ui/IconButton'; import { Input } from '@/components/ui/Input'; import { usePreferencesStore } from '@/store/preferencesStore'; import { cn } from '@/utils/classNames'; function SearchIcon() { return ( ); } function LogoMark() { return ( ); } function ThemeIcon({ mode }: { readonly mode: string }) { if (mode === 'light') { return ( ); } if (mode === 'dark') { return ( ); } return ( ); } export function TopNav() { const location = useLocation(); const navigate = useNavigate(); const query = usePreferencesStore((state) => state.catalogueQuery); const setQuery = usePreferencesStore((state) => state.setCatalogueQuery); const favouriteCount = usePreferencesStore((state) => state.favourites.length); const themeMode = usePreferencesStore((state) => state.themeMode); const toggleThemeMode = usePreferencesStore((state) => state.toggleThemeMode); const handleSubmit = (event: FormEvent) => { event.preventDefault(); const nextParams = new URLSearchParams(location.pathname === '/' ? location.search : ''); const trimmedQuery = query.trim(); if (trimmedQuery) { nextParams.set('q', trimmedQuery); } else { nextParams.delete('q'); } navigate({ pathname: '/', search: nextParams.toString() }); }; const nextThemeLabel = themeMode === 'system' ? 'Switch to dark theme' : themeMode === 'dark' ? 'Switch to light theme' : 'Use system theme'; return ( {appConfig.name} {appConfig.tagline} cn( 'interactive-ring rounded-xl px-3 py-2 text-sm font-semibold transition hover:bg-elevated/75', isActive ? 'text-foreground' : 'text-muted hover:text-foreground', ) } > Catalogue setQuery(event.currentTarget.value)} placeholder="Search engines, gears, pumps…" leftIcon={} inputSize="sm" /> {favouriteCount} saved } onClick={toggleThemeMode} variant="outline" /> setQuery(event.currentTarget.value)} placeholder="Search the mechanical catalogue…" leftIcon={} inputSize="sm" /> ); }