aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/organisms/toolbar/toolbar.tsx
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2023-10-30 11:18:11 +0100
committerArmand Philippot <git@armandphilippot.com>2023-11-11 18:15:27 +0100
commit84a679b0e48ed76eee2fa44d3caac83591aa3c8c (patch)
tree1d418a6c514ff8a04b84ba35c98736e8450f968c /src/components/organisms/toolbar/toolbar.tsx
parent60c49f18389ff625177a57277ef8f292a31097bf (diff)
feat(hooks): add useBoolean and useToggle hooks
Diffstat (limited to 'src/components/organisms/toolbar/toolbar.tsx')
-rw-r--r--src/components/organisms/toolbar/toolbar.tsx53
1 files changed, 28 insertions, 25 deletions
diff --git a/src/components/organisms/toolbar/toolbar.tsx b/src/components/organisms/toolbar/toolbar.tsx
index c400285..c0be464 100644
--- a/src/components/organisms/toolbar/toolbar.tsx
+++ b/src/components/organisms/toolbar/toolbar.tsx
@@ -1,6 +1,10 @@
/* eslint-disable max-statements */
-import { type FC, useState, useCallback } from 'react';
-import { useOnClickOutside, useRouteChange } from '../../../utils/hooks';
+import type { FC } from 'react';
+import {
+ useBoolean,
+ useOnClickOutside,
+ useRouteChange,
+} from '../../../utils/hooks';
import { MainNavItem, type MainNavItemProps } from './main-nav';
import { Search, type SearchProps } from './search';
import { Settings } from './settings';
@@ -27,54 +31,53 @@ export const Toolbar: FC<ToolbarProps> = ({
nav,
searchPage,
}) => {
- const [isNavOpened, setIsNavOpened] = useState<boolean>(false);
- const [isSearchOpened, setIsSearchOpened] = useState<boolean>(false);
- const [isSettingsOpened, setIsSettingsOpened] = useState<boolean>(false);
+ const {
+ deactivate: deactivateMainNav,
+ state: isMainNavOpen,
+ toggle: toggleMainNav,
+ } = useBoolean(false);
+ const {
+ deactivate: deactivateSearch,
+ state: isSearchOpen,
+ toggle: toggleSearch,
+ } = useBoolean(false);
+ const {
+ deactivate: deactivateSettings,
+ state: isSettingsOpen,
+ toggle: toggleSettings,
+ } = useBoolean(false);
const mainNavRef = useOnClickOutside<HTMLDivElement>(
- () => isNavOpened && setIsNavOpened(false)
+ () => isMainNavOpen && deactivateMainNav()
);
const searchRef = useOnClickOutside<HTMLDivElement>(
- () => isSearchOpened && setIsSearchOpened(false)
+ () => isSearchOpen && deactivateSearch()
);
const settingsRef = useOnClickOutside<HTMLDivElement>(
- () => isSettingsOpened && setIsSettingsOpened(false)
+ () => isSettingsOpen && deactivateSettings()
);
- const toggleMainNav = useCallback(
- () => setIsNavOpened((prevState) => !prevState),
- []
- );
- const toggleSearch = useCallback(
- () => setIsSearchOpened((prevState) => !prevState),
- []
- );
- const toggleSettings = useCallback(
- () => setIsSettingsOpened((prevState) => !prevState),
- []
- );
-
- useRouteChange(() => setIsSearchOpened(false));
+ useRouteChange(deactivateSearch);
return (
<div className={`${styles.wrapper} ${className}`}>
<MainNavItem
className={styles.modal}
- isActive={isNavOpened}
+ isActive={isMainNavOpen}
items={nav}
ref={mainNavRef}
setIsActive={toggleMainNav}
/>
<Search
className={`${styles.modal} ${styles['modal--search']}`}
- isActive={isSearchOpened}
+ isActive={isSearchOpen}
ref={searchRef}
searchPage={searchPage}
setIsActive={toggleSearch}
/>
<Settings
className={`${styles.modal} ${styles['modal--settings']}`}
- isActive={isSettingsOpened}
+ isActive={isSettingsOpen}
ref={settingsRef}
setIsActive={toggleSettings}
/>