diff --git a/frontend/src/components/sidebar/sidebar-toggle-button.tsx b/frontend/src/components/sidebar/sidebar-toggle-button.tsx new file mode 100644 index 0000000..cb78168 --- /dev/null +++ b/frontend/src/components/sidebar/sidebar-toggle-button.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import { useIsMobile } from '@/hooks/use-is-mobile'; +import { + desktopSidebarAtom, + mobileSidebarAtom, +} from '@/components/sidebar/atoms/sidebar-atom'; +import { useToggleSidebar } from './hooks/use-toggle-sidebar'; +import ButtonWithIcon from '../ui/button-with-icon'; +import { + IconLayoutSidebarLeftCollapse, + IconLayoutSidebarRightCollapse, +} from '@tabler/icons-react'; +import { useAtom } from 'jotai'; +import { cn } from '@/lib/utils'; + +interface SidebarToggleButtonProps { + className?: string; +} + +export default function SidebarToggleButton({ + className, +}: SidebarToggleButtonProps) { + const isMobile = useIsMobile(); + const sidebarStateAtom = isMobile ? mobileSidebarAtom : desktopSidebarAtom; + + const [isSidebarOpen] = useAtom(sidebarStateAtom); + const toggleSidebar = useToggleSidebar(sidebarStateAtom); + + const SidebarIcon = isSidebarOpen + ? IconLayoutSidebarLeftCollapse + : IconLayoutSidebarRightCollapse; + + return ( + } + variant={'ghost'} + onClick={toggleSidebar} + > + ); +} diff --git a/frontend/src/components/sidebar/sidebar.tsx b/frontend/src/components/sidebar/sidebar.tsx index d67713a..a8b0aa9 100644 --- a/frontend/src/components/sidebar/sidebar.tsx +++ b/frontend/src/components/sidebar/sidebar.tsx @@ -12,9 +12,11 @@ import { NavigationMenuType, } from '@/components/sidebar/actions/sidebar-actions'; import ButtonWithIcon from '@/components/ui/button-with-icon'; +import SidebarToggleButton from './sidebar-toggle-button'; export default function Sidebar() { const isMobile = useIsMobile(); + const [isSidebarOpen] = useAtom( isMobile ? mobileSidebarAtom : desktopSidebarAtom ); @@ -22,10 +24,25 @@ export default function Sidebar() { return (