import { ChevronDown } from 'lucide-react' import Link from 'next/link' import { useMemo, useState } from 'react' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { parseAsString, useQueryState } from 'nuqs' import { Organization } from 'types' import { Badge, Button, Card, CardHeader, CardTitle, Input_Shadcn_ } from 'ui' export interface ProjectClaimChooseOrgProps { onSelect: (org: Organization) => void maxOrgsToShow?: number } export function OrganizationSelector({ onSelect, maxOrgsToShow = 5 }: ProjectClaimChooseOrgProps) { const { data: organizations = [], isLoading: isLoadingOrgs, isSuccess: isSuccessOrgs, isError: isErrorOrgs, } = useOrganizationsQuery() const [search, setSearch] = useQueryState( 'org', parseAsString.withDefault('').withOptions({ clearOnDefault: true }) ) const [showAll, setShowAll] = useState(false) const filteredOrgs = useMemo(() => { if (!search) { return showAll ? organizations : organizations.slice(0, maxOrgsToShow) } return organizations.filter((org) => org.name.toLowerCase().includes(search.toLowerCase())) }, [organizations, search, showAll, maxOrgsToShow]) const searchParams = new URLSearchParams(location.search) let pathname = location.pathname const basePath = process.env.NEXT_PUBLIC_BASE_PATH if (basePath) { pathname = pathname.replace(basePath, '') } searchParams.set('returnTo', pathname) return (
{isLoadingOrgs ? ( ) : isErrorOrgs ? (
Error
) : isSuccessOrgs && organizations.length === 0 ? ( It seems you don't have any organizations yet. ) : ( <> setSearch(e.target.value)} placeholder="Search..." />
{filteredOrgs.length === 0 && (
No organizations found.
)} {filteredOrgs.map((org) => ( {org.name} {org.plan?.name} ))} {organizations.length > maxOrgsToShow && !showAll && !search && (
)}
)} Need a new organization?
) }