/* eslint-disable max-statements */ import { type FC, useState, useCallback } from 'react'; import { useOnClickOutside, useRouteChange } from '../../../utils/hooks'; import { MainNavItem, type MainNavItemProps } from './main-nav'; import { Search, type SearchProps } from './search'; import { Settings } from './settings'; import styles from './toolbar.module.scss'; export type ToolbarProps = Pick & { /** * Set additional classnames to the toolbar wrapper. */ className?: string; /** * The main nav items. */ nav: MainNavItemProps['items']; }; /** * Toolbar component * * Render the website toolbar. */ export const Toolbar: FC = ({ className = '', nav, searchPage, }) => { const [isNavOpened, setIsNavOpened] = useState(false); const [isSearchOpened, setIsSearchOpened] = useState(false); const [isSettingsOpened, setIsSettingsOpened] = useState(false); const mainNavRef = useOnClickOutside( () => isNavOpened && setIsNavOpened(false) ); const searchRef = useOnClickOutside( () => isSearchOpened && setIsSearchOpened(false) ); const settingsRef = useOnClickOutside( () => isSettingsOpened && setIsSettingsOpened(false) ); const toggleMainNav = useCallback( () => setIsNavOpened((prevState) => !prevState), [] ); const toggleSearch = useCallback( () => setIsSearchOpened((prevState) => !prevState), [] ); const toggleSettings = useCallback( () => setIsSettingsOpened((prevState) => !prevState), [] ); useRouteChange(() => setIsSearchOpened(false)); return (
); };