f8ddf7f32c
* fix: several Navigation Bar and Drawer fixes Fixes #2821 - Fix navigation drawer animations - Fix navigation bar positioning - Do not display navigation drawer collapse button on mobile - Refactor code and rename componentst * Fix storybook test * fix: fix NavigationDrawerHeader elements space-between --------- Co-authored-by: Charles Bochet <charles@twenty.com>
92 lines
2.7 KiB
TypeScript
92 lines
2.7 KiB
TypeScript
import { useNavigate } from 'react-router-dom';
|
|
import { useRecoilState } from 'recoil';
|
|
|
|
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
|
|
import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState';
|
|
import {
|
|
IconCheckbox,
|
|
IconList,
|
|
IconSearch,
|
|
IconSettings,
|
|
} from '@/ui/display/icon';
|
|
import { IconComponent } from '@/ui/display/icon/types/IconComponent';
|
|
import { NavigationBar } from '@/ui/navigation/navigation-bar/components/NavigationBar';
|
|
import { isNavigationDrawerOpenState } from '@/ui/navigation/states/isNavigationDrawerOpenState';
|
|
|
|
import { useIsSettingsPage } from '../hooks/useIsSettingsPage';
|
|
import { useIsTasksPage } from '../hooks/useIsTasksPage';
|
|
import { currentMobileNavigationDrawerState } from '../states/currentMobileNavigationDrawerState';
|
|
|
|
type NavigationBarItemName = 'main' | 'search' | 'tasks' | 'settings';
|
|
|
|
export const MobileNavigationBar = () => {
|
|
const [isCommandMenuOpened] = useRecoilState(isCommandMenuOpenedState);
|
|
const { closeCommandMenu, toggleCommandMenu } = useCommandMenu();
|
|
const isTasksPage = useIsTasksPage();
|
|
const isSettingsPage = useIsSettingsPage();
|
|
const navigate = useNavigate();
|
|
const [isNavigationDrawerOpen, setIsNavigationDrawerOpen] = useRecoilState(
|
|
isNavigationDrawerOpenState,
|
|
);
|
|
const [currentMobileNavigationDrawer, setCurrentMobileNavigationDrawer] =
|
|
useRecoilState(currentMobileNavigationDrawerState);
|
|
|
|
const activeItemName = isNavigationDrawerOpen
|
|
? currentMobileNavigationDrawer
|
|
: isCommandMenuOpened
|
|
? 'search'
|
|
: isTasksPage
|
|
? 'tasks'
|
|
: isSettingsPage
|
|
? 'settings'
|
|
: 'main';
|
|
|
|
const items: {
|
|
name: NavigationBarItemName;
|
|
Icon: IconComponent;
|
|
onClick: () => void;
|
|
}[] = [
|
|
{
|
|
name: 'main',
|
|
Icon: IconList,
|
|
onClick: () => {
|
|
closeCommandMenu();
|
|
setIsNavigationDrawerOpen(
|
|
(previousIsOpen) => activeItemName !== 'main' || !previousIsOpen,
|
|
);
|
|
setCurrentMobileNavigationDrawer('main');
|
|
},
|
|
},
|
|
{
|
|
name: 'search',
|
|
Icon: IconSearch,
|
|
onClick: () => {
|
|
setIsNavigationDrawerOpen(false);
|
|
toggleCommandMenu();
|
|
},
|
|
},
|
|
{
|
|
name: 'tasks',
|
|
Icon: IconCheckbox,
|
|
onClick: () => {
|
|
closeCommandMenu();
|
|
setIsNavigationDrawerOpen(false);
|
|
navigate('/tasks');
|
|
},
|
|
},
|
|
{
|
|
name: 'settings',
|
|
Icon: IconSettings,
|
|
onClick: () => {
|
|
closeCommandMenu();
|
|
setIsNavigationDrawerOpen(
|
|
(previousIsOpen) => activeItemName !== 'settings' || !previousIsOpen,
|
|
);
|
|
setCurrentMobileNavigationDrawer('settings');
|
|
},
|
|
},
|
|
];
|
|
|
|
return <NavigationBar activeItemName={activeItemName} items={items} />;
|
|
};
|