'use client'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarRail } from '@/components/ui/sidebar'; import { UserAvatarProfile } from '@/components/user-avatar-profile'; import { navItems } from '@/constants/data'; import { useMediaQuery } from '@/hooks/use-media-query'; import useAuthUser from '@/features/auth/hooks/use-auth-user'; import { useSignOutMutation } from '@/features/auth/hooks/use-mutation'; import { IconBell, IconChevronRight, IconChevronsDown, IconCreditCard, IconLogout, IconPhotoUp, IconUserCircle } from '@tabler/icons-react'; import Link from 'next/link'; import { usePathname, useRouter } from 'next/navigation'; import * as React from 'react'; import { Icons } from '../icons'; import { OrgSwitcher } from '../org-switcher'; import { toast } from 'sonner'; export const company = { name: 'Acme Inc', logo: IconPhotoUp, plan: 'Enterprise' }; const tenants = [ { id: '1', name: 'Acme Inc' }, { id: '2', name: 'Beta Corp' }, { id: '3', name: 'Gamma Ltd' } ]; export default function AppSidebar() { const pathname = usePathname(); const { isOpen } = useMediaQuery(); const { data: user } = useAuthUser(); const signOutMutation = useSignOutMutation(); const router = useRouter(); const handleSwitchTenant = (_tenantId: string) => { // Tenant switching functionality would be implemented here }; const handleSignOut = () => { signOutMutation.mutate(undefined, { onSuccess: () => { toast.success('Signed out successfully'); router.push('/auth/sign-in'); }, onError: (error: any) => { toast.error(error.message || 'Sign out failed'); } }); }; const activeTenant = tenants[0]; React.useEffect(() => { // Side effects based on sidebar state changes }, [isOpen]); return ( Overview {navItems.map((item) => { const Icon = item.icon ? Icons[item.icon] : Icons.logo; return item?.items && item?.items?.length > 0 ? ( {item.icon && } {item.title} {item.items?.map((subItem) => ( {subItem.title} ))} ) : ( {item.title} ); })} {user && ( )}
{user && ( )}
{/* router.push('/dashboard/profile')} > Profile Billing Notifications */} {signOutMutation.isPending ? 'Signing out...' : 'Sign out'}
); }