NavUser.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { usePage } from '@inertiajs/react';
  2. import { ChevronsUpDown } from 'lucide-react';
  3. import { UserInfo } from '@/common/UserInfo';
  4. import { UserMenuContent } from '@/common/UserMenuContent';
  5. import { useIsMobile } from '@/common/hooks/useMobile';
  6. import { type SharedData } from '@/common/types';
  7. import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from '@/shadcn/dropdown-menu';
  8. import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar } from '@/shadcn/sidebar';
  9. export function NavUser() {
  10. const { auth } = usePage<SharedData>().props;
  11. const { state } = useSidebar();
  12. const isMobile = useIsMobile();
  13. return (
  14. <SidebarMenu>
  15. <SidebarMenuItem>
  16. <DropdownMenu>
  17. <DropdownMenuTrigger asChild>
  18. <SidebarMenuButton size="lg" className="group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent">
  19. <UserInfo user={auth.user} />
  20. <ChevronsUpDown className="ml-auto size-4" />
  21. </SidebarMenuButton>
  22. </DropdownMenuTrigger>
  23. <DropdownMenuContent
  24. className="w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg"
  25. align="end"
  26. side={isMobile ? 'bottom' : state === 'collapsed' ? 'left' : 'bottom'}
  27. >
  28. <UserMenuContent user={auth.user} />
  29. </DropdownMenuContent>
  30. </DropdownMenu>
  31. </SidebarMenuItem>
  32. </SidebarMenu>
  33. );
  34. }