diff --git a/src/components/FunctionalArea/NavBar/NavBar.component.tsx b/src/components/FunctionalArea/NavBar/NavBar.component.tsx index 78b2dffa815a8841c25d28b133cc23c04e404b18..5d166a8afe6e9cd9c49ec3ad6425ea458f53eb1d 100644 --- a/src/components/FunctionalArea/NavBar/NavBar.component.tsx +++ b/src/components/FunctionalArea/NavBar/NavBar.component.tsx @@ -1,9 +1,9 @@ import logoImg from '@/assets/vectors/branding/logo.svg'; import luxembourgLogoImg from '@/assets/vectors/branding/luxembourg-logo.svg'; import { MINERVA_WEBSITE_URL } from '@/constants'; -import { openDrawer } from '@/redux/drawer/drawer.slice'; +import { closeDrawer, openDrawer } from '@/redux/drawer/drawer.slice'; import { useAppDispatch } from '@/redux/hooks/useAppDispatch'; -import { openLegend } from '@/redux/legend/legend.slice'; +import { closeLegend, openLegend } from '@/redux/legend/legend.slice'; import { openPluginsDrawer } from '@/redux/plugins/plugins.slice'; import { IconButton } from '@/shared/IconButton'; import { store } from '@/redux/store'; @@ -13,21 +13,40 @@ import Image from 'next/image'; export const NavBar = (): JSX.Element => { const dispatch = useAppDispatch(); - const openDrawerInfo = (): void => { - dispatch(openDrawer('project-info')); + const toggleDrawerInfo = (): void => { + if (store.getState().drawer.isOpen && store.getState().drawer.drawerName === 'project-info') { + dispatch(closeDrawer()); + } else { + dispatch(openDrawer('project-info')); + } }; - const openDrawerPlugins = (): void => { - dispatch(openDrawer('available-plugins')); + const toggleDrawerPlugins = (): void => { + if ( + store.getState().drawer.isOpen && + store.getState().drawer.drawerName === 'available-plugins' + ) { + dispatch(closeDrawer()); + } else { + dispatch(openDrawer('available-plugins')); + } dispatch(openPluginsDrawer()); }; - const openDrawerExport = (): void => { - dispatch(openDrawer('export')); + const toggleDrawerExport = (): void => { + if (store.getState().drawer.isOpen && store.getState().drawer.drawerName === 'export') { + dispatch(closeDrawer()); + } else { + dispatch(openDrawer('export')); + } }; - const openDrawerLegend = (): void => { - dispatch(openLegend()); + const toggleDrawerLegend = (): void => { + if (store.getState().legend.isOpen) { + dispatch(closeLegend()); + } else { + dispatch(openLegend()); + } }; const configuration = store.getState().configuration.main.data; @@ -41,15 +60,15 @@ export const NavBar = (): JSX.Element => { <div className="flex min-h-full w-[88px] flex-col items-center justify-between overflow-y-auto bg-cultured py-8"> <div data-testid="nav-buttons"> <div className="mb-8 flex flex-col gap-[10px]"> - <IconButton icon="info" onClick={openDrawerInfo} title="Project info" /> + <IconButton icon="info" onClick={toggleDrawerInfo} title="Project info" /> <a href={apiDocsUrl} target="_blank"> <IconButton icon="page" title="API Doc" /> </a> - <IconButton icon="plugin" onClick={openDrawerPlugins} title="Available plugins" /> - <IconButton icon="export" onClick={openDrawerExport} title="Export" /> + <IconButton icon="plugin" onClick={toggleDrawerPlugins} title="Available plugins" /> + <IconButton icon="export" onClick={toggleDrawerExport} title="Export" /> </div> <div className="flex flex-col gap-[10px]"> - <IconButton icon="legend" onClick={openDrawerLegend} title="Legend" /> + <IconButton icon="legend" onClick={toggleDrawerLegend} title="Legend" /> </div> </div>