'use client' import { formatCNPJ } from '@brazilian-utils/brazilian-utils' import { BadgeCheckIcon, BadgeIcon, CheckIcon, ChevronsUpDownIcon, PlusIcon } from 'lucide-react' import { createContext, use } from 'react' import { useLocation } from 'react-router' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger } from '@repo/ui/components/ui/dropdown-menu' import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar } from '@repo/ui/components/ui/sidebar' import { initials } from '@repo/ui/lib/utils' import { Link } from 'react-router' import type { Workspace, WorkspaceContextProps } from '@/middleware/workspace' import type { Address } from '@/routes/_.$orgid.enrollments.buy/review' type Subscription = { billing_day: number payment_method: 'PIX' | 'BANK_SLIP' | 'MANUAL' } const WorkspaceContext = createContext< | (WorkspaceContextProps & { subscription: Subscription | null address: Address | null }) | null >(null) export function useWorksapce() { const ctx = use(WorkspaceContext) if (!ctx) { throw new Error('WorkspaceContext is null') } return ctx } export function WorkspaceProvider({ activeWorkspace, workspaces, subscription, address, children }: { activeWorkspace: Workspace workspaces: Workspace[] subscription?: Subscription address?: Address children: React.ReactNode }) { return ( 0 ? address : null, subscription: subscription && Object.keys(subscription).length > 0 ? subscription : null }} > {children} ) } export function WorkspaceSwitcher() { const location = useLocation() const { isMobile, state } = useSidebar() const { activeWorkspace, workspaces, subscription } = useWorksapce() const [, fragment, _] = location.pathname.slice(1).split('/') const onSelect = (workspace: Workspace) => { window.location.assign(`/${workspace.id}/${fragment}`) } return (
{subscription && ( )} {initials(activeWorkspace.name)}
{activeWorkspace.name} {formatCNPJ(activeWorkspace.cnpj)}
Empresas {workspaces.map((workspace, index) => ( onSelect(workspace)} className="group gap-2 p-2 cursor-pointer aria-selected:pointer-events-none" aria-selected={workspace.id === activeWorkspace?.id} >
{initials(workspace?.name)}
{workspace?.name} {formatCNPJ(workspace?.cnpj)}
))}
Adicionar empresa
) }