"use client" import { useMemo, useState } from "react" import { useRouter } from "next/navigation" import { useCustomer } from "autumn-js/react" import { toast } from "sonner" import { Building2, Check, ChevronsUpDown, LoaderIcon, Plus, } from "lucide-react" import { cn } from "@lib/utils" import { dmSansClassName } from "@/lib/fonts" import { useAuth } from "@lib/auth-context" import { Popover, PopoverContent, PopoverTrigger } from "@ui/components/popover" import { OrgPlanBadge, resolveOrgPlan } from "@/components/org-plan-badge" import { useOrgSummaries } from "@/hooks/use-org-summaries" import { useTokenUsage, type PlanType } from "@/hooks/use-token-usage" export function SettingsOrgSwitcher() { const { org, organizations, setActiveOrg } = useAuth() const router = useRouter() const autumn = useCustomer() const { currentPlan } = useTokenUsage(autumn) const { data: orgSummaries } = useOrgSummaries() const [open, setOpen] = useState(false) const [switchingId, setSwitchingId] = useState(null) const planByOrgId = useMemo(() => { const map = new Map() for (const summary of orgSummaries ?? []) { map.set(summary.orgId, summary.plan) } return map }, [orgSummaries]) const activeOrgPlan = org?.id ? resolveOrgPlan(org.id, true, currentPlan, planByOrgId) : currentPlan const sortedOrgs = useMemo( () => [...(organizations ?? [])].sort((a, b) => a.name.localeCompare(b.name)), [organizations], ) const handleSwitch = async (slug: string, id: string) => { if (id === org?.id) { setOpen(false) return } setSwitchingId(id) try { await setActiveOrg(slug) window.location.reload() } catch (error) { console.error("Failed to switch organization:", error) setSwitchingId(null) toast.error("Failed to switch organization") } } const handleCreate = () => { setOpen(false) router.push("/onboarding?new=1") } return (
event.stopPropagation()} onTouchMoveCapture={(event) => event.stopPropagation()} > {sortedOrgs.map((organization) => { const isCurrent = organization.id === org?.id const isSwitching = switchingId === organization.id const plan = resolveOrgPlan( organization.id, isCurrent, currentPlan, planByOrgId, ) return ( ) })}
) }