Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | 'use client'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, } from '@web/components/ui/dropdown-menu'; import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from '@web/components/ui/sidebar'; import { useSidebar } from '@web/providers/side-bar'; import { ChevronsUpDown, Plus } from 'lucide-react'; import * as React from 'react'; export function TeamSwitcher({ teams, }: { teams: { name: string; logo: React.ElementType; plan: string; }[]; }): React.ReactElement | null { const { isMobile } = useSidebar(); const [activeTeam, setActiveTeam] = React.useState(teams[0]); if (!activeTeam) { return null; } return ( <SidebarMenu> <SidebarMenuItem> <DropdownMenu> <DropdownMenuTrigger asChild> <SidebarMenuButton size="lg" className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground" > <div className="bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg"> <activeTeam.logo className="size-4" /> </div> <div className="grid flex-1 text-left text-sm leading-tight"> <span className="truncate font-medium">{activeTeam.name}</span> <span className="truncate text-xs">{activeTeam.plan}</span> </div> <ChevronsUpDown className="ml-auto" /> </SidebarMenuButton> </DropdownMenuTrigger> <DropdownMenuContent className="w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg" align="start" side={isMobile ? 'bottom' : 'right'} sideOffset={4} > <DropdownMenuLabel className="text-muted-foreground text-xs"> Teams </DropdownMenuLabel> {teams.map((team, index) => ( <DropdownMenuItem key={team.name} onClick={(): void => setActiveTeam(team)} className="gap-2 p-2" > <div className="flex size-6 items-center justify-center rounded-md border"> <team.logo className="size-3.5 shrink-0" /> </div> {team.name} <DropdownMenuShortcut>⌘{index + 1}</DropdownMenuShortcut> </DropdownMenuItem> ))} <DropdownMenuSeparator /> <DropdownMenuItem className="gap-2 p-2"> <div className="flex size-6 items-center justify-center rounded-md border bg-transparent"> <Plus className="size-4" /> </div> <div className="text-muted-foreground font-medium">Add team</div> </DropdownMenuItem> </DropdownMenuContent> </DropdownMenu> </SidebarMenuItem> </SidebarMenu> ); } |