import { useBreakpoint, useParams } from 'common' import { Boxes, ChevronsUpDown, Plus } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, Popover, PopoverContent, PopoverTrigger, ScrollArea, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from 'ui' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' import { OrgSelectorSheet } from './OrgSelectorSheet' import { OrgCommandItem } from '@/components/layouts/AppLayout/OrgCommandItem' import { useOrganizationsQuery } from '@/data/organizations/organizations-query' import { useOrgProjectsInfiniteQuery } from '@/data/projects/org-projects-infinite-query' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' export function OrgSelector() { const router = useRouter() const { slug: routeSlug } = useParams() const { data: selectedOrganization } = useSelectedOrganizationQuery() const { data: organizations, isPending: isLoadingOrganizations } = useOrganizationsQuery() const organizationCreationEnabled = useIsFeatureEnabled('organizations:create') const [open, setOpen] = useState(false) const slug = selectedOrganization?.slug const isPlatformOrg = selectedOrganization?.plan?.id === 'platform' const selectedOrgInitial = selectedOrganization?.name?.trim().charAt(0).toUpperCase() || 'O' const { data: projects } = useOrgProjectsInfiniteQuery( { slug, limit: 1 }, { enabled: Boolean(slug) && !isPlatformOrg } ) const numProjects = projects?.pages[0]?.pagination.count const projectsLabel = isPlatformOrg ? 'Platform' : typeof numProjects === 'number' ? `${numProjects} project${numProjects === 1 ? '' : 's'}` : 'No projects' const isMobile = useBreakpoint('md') if (isLoadingOrganizations) return const triggerButton = ( setOpen(true) : undefined} > {selectedOrgInitial} {selectedOrganization?.name ?? 'Select organization'} {selectedOrganization && ( {projectsLabel} )} ) if (isMobile) { return ( <> {isLoadingOrganizations ? : triggerButton} setOpen(false)} selectedOrganization={selectedOrganization ?? null} /> > ) } return ( {triggerButton} No organizations found 7 ? 'h-full md:h-[210px]' : ''} > {organizations?.map((org) => ( setOpen(false)} /> ))} { setOpen(false) router.push('/organizations') }} onClick={() => setOpen(false)} > All Organizations {organizationCreationEnabled && ( <> { setOpen(false) router.push('/new') }} onClick={() => setOpen(false)} > New organization > )} ) }
All Organizations
New organization