aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/Toolbar/Toolbar.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/Toolbar/Toolbar.tsx')
-rw-r--r--src/components/Toolbar/Toolbar.tsx162
1 files changed, 0 insertions, 162 deletions
diff --git a/src/components/Toolbar/Toolbar.tsx b/src/components/Toolbar/Toolbar.tsx
deleted file mode 100644
index 17f9ef9..0000000
--- a/src/components/Toolbar/Toolbar.tsx
+++ /dev/null
@@ -1,162 +0,0 @@
-import { ButtonToolbar } from '@components/Buttons';
-import MainNav from '@components/MainNav/MainNav';
-import Spinner from '@components/Spinner/Spinner';
-import dynamic from 'next/dynamic';
-import { RefObject, useCallback, useEffect, useRef, useState } from 'react';
-import styles from './Toolbar.module.scss';
-
-const DynamicSearchForm = dynamic(
- () => import('@components/SearchForm/SearchForm'),
- {
- loading: () => <Spinner />,
- }
-);
-
-const DynamicSettings = dynamic(() => import('@components/Settings/Settings'), {
- loading: () => <Spinner />,
-});
-
-const Toolbar = () => {
- const [isNavOpened, setIsNavOpened] = useState<boolean>(false);
- const [isSearchOpened, setIsSearchOpened] = useState<boolean>(false);
- const [isSettingsOpened, setIsSettingsOpened] = useState<boolean>(false);
- const mainNavRef = useRef<HTMLDivElement>(null);
- const searchBtnRef = useRef<HTMLButtonElement>(null);
- const searchModalRef = useRef<HTMLDivElement>(null);
- const settingsBtnRef = useRef<HTMLButtonElement>(null);
- const settingsModalRef = useRef<HTMLDivElement>(null);
-
- useEffect(() => {
- if (isNavOpened) {
- setIsSearchOpened(false);
- setIsSettingsOpened(false);
- }
- }, [isNavOpened]);
-
- useEffect(() => {
- if (isSearchOpened) {
- setIsNavOpened(false);
- setIsSettingsOpened(false);
- }
- }, [isSearchOpened]);
-
- useEffect(() => {
- if (isSettingsOpened) {
- setIsNavOpened(false);
- setIsSearchOpened(false);
- }
- }, [isSettingsOpened]);
-
- const isClickOutside = (
- ref: RefObject<HTMLDivElement>,
- target: EventTarget
- ) => {
- return ref.current && !ref.current.contains(target as Node);
- };
-
- const isToggleBtn = (ref: RefObject<HTMLDivElement>, target: EventTarget) => {
- return (
- ref.current &&
- ref.current.previousElementSibling &&
- ref.current.previousElementSibling.contains(target as Node)
- );
- };
-
- const isSearchBtn = useCallback((target: HTMLElement) => {
- return (
- target === searchBtnRef.current || searchBtnRef.current?.contains(target)
- );
- }, []);
-
- const isSettingsBtn = useCallback((target: HTMLElement) => {
- return (
- target === settingsBtnRef.current ||
- settingsBtnRef.current?.contains(target)
- );
- }, []);
-
- const handleVisibility = useCallback(
- (e: MouseEvent | FocusEvent) => {
- let ref: RefObject<HTMLDivElement> | null = null;
- if (isNavOpened) ref = mainNavRef;
- if (isSearchOpened) ref = searchModalRef;
- if (isSettingsOpened) ref = settingsModalRef;
-
- if (!ref || !ref.current || !ref.current.id) return;
- if (!isClickOutside(ref, e.target as Node)) return;
- if (isToggleBtn(ref, e.target as Node)) return;
-
- if (
- ref.current.id === 'main-nav' &&
- !isSettingsBtn(e.target as HTMLElement) &&
- !isSearchBtn(e.target as HTMLElement)
- ) {
- setIsNavOpened(false);
- }
-
- if (
- ref.current.id === 'search-modal' &&
- !isSettingsBtn(e.target as HTMLElement)
- )
- setIsSearchOpened(false);
- if (
- ref.current.id === 'settings-modal' &&
- !isSearchBtn(e.target as HTMLElement)
- )
- setIsSettingsOpened(false);
- },
- [isNavOpened, isSearchOpened, isSettingsOpened, isSearchBtn, isSettingsBtn]
- );
-
- useEffect(() => {
- document.addEventListener('mousedown', handleVisibility);
- document.addEventListener('focusin', handleVisibility);
-
- return () => {
- document.removeEventListener('mousedown', handleVisibility);
- document.removeEventListener('focusin', handleVisibility);
- };
- }, [handleVisibility]);
-
- const searchClasses = `${styles.menu} ${
- isSearchOpened ? styles['menu--opened'] : styles['menu--closed']
- }`;
-
- const settingsClasses = `${styles.menu} ${
- isSettingsOpened ? styles['menu--opened'] : styles['menu--closed']
- }`;
-
- return (
- <div className={styles.wrapper}>
- <MainNav
- ref={mainNavRef}
- isOpened={isNavOpened}
- setIsOpened={setIsNavOpened}
- />
- <ButtonToolbar
- ref={searchBtnRef}
- type="search"
- isActivated={isSearchOpened}
- setIsActivated={setIsSearchOpened}
- />
- <div id="search-modal" className={searchClasses} ref={searchModalRef}>
- <DynamicSearchForm isOpened={isSearchOpened} />
- </div>
- <ButtonToolbar
- ref={settingsBtnRef}
- type="settings"
- isActivated={isSettingsOpened}
- setIsActivated={setIsSettingsOpened}
- />
- <div
- id="settings-modal"
- className={settingsClasses}
- ref={settingsModalRef}
- >
- <DynamicSettings />
- </div>
- </div>
- );
-};
-
-export default Toolbar;