diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-10-25 17:23:53 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-11 18:15:27 +0100 |
| commit | c21a137e1991af1331fe5768fc6bac15ea9230b1 (patch) | |
| tree | 80569408dbed888273a15d9ae543f553f2798a9b /src/components/organisms/toolbar/toolbar.tsx | |
| parent | 73e12fe8ae059ef70bbdf8716af421cb72aec76c (diff) | |
refactor(components): extract MainNav component from toolbar
Diffstat (limited to 'src/components/organisms/toolbar/toolbar.tsx')
| -rw-r--r-- | src/components/organisms/toolbar/toolbar.tsx | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/components/organisms/toolbar/toolbar.tsx b/src/components/organisms/toolbar/toolbar.tsx index 94c9d95..999a29a 100644 --- a/src/components/organisms/toolbar/toolbar.tsx +++ b/src/components/organisms/toolbar/toolbar.tsx @@ -1,6 +1,7 @@ -import { FC, useState } from 'react'; +/* eslint-disable max-statements */ +import { type FC, useState, useCallback } from 'react'; import { useOnClickOutside, useRouteChange } from '../../../utils/hooks'; -import { MainNav, type MainNavProps } from './main-nav'; +import { MainNavItem, type MainNavItemProps } from './main-nav'; import { Search, type SearchProps } from './search'; import { Settings, type SettingsProps } from './settings'; import styles from './toolbar.module.scss'; @@ -14,7 +15,7 @@ export type ToolbarProps = Pick<SearchProps, 'searchPage'> & /** * The main nav items. */ - nav: MainNavProps['items']; + nav: MainNavItemProps['items']; }; /** @@ -43,23 +44,36 @@ export const Toolbar: FC<ToolbarProps> = ({ () => 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 ( <div className={`${styles.wrapper} ${className}`}> - <MainNav + <MainNavItem className={styles.modal} isActive={isNavOpened} items={nav} ref={mainNavRef} - setIsActive={() => setIsNavOpened(!isNavOpened)} + setIsActive={toggleMainNav} /> <Search className={`${styles.modal} ${styles['modal--search']}`} isActive={isSearchOpened} ref={searchRef} searchPage={searchPage} - setIsActive={() => setIsSearchOpened(!isSearchOpened)} + setIsActive={toggleSearch} /> <Settings ackeeStorageKey={ackeeStorageKey} @@ -67,7 +81,7 @@ export const Toolbar: FC<ToolbarProps> = ({ isActive={isSettingsOpened} motionStorageKey={motionStorageKey} ref={settingsRef} - setIsActive={() => setIsSettingsOpened(!isSettingsOpened)} + setIsActive={toggleSettings} /> </div> ); |
