'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' type Subscription = { billing_day: number payment_method: 'PIX' | 'BANK_SLIP' | 'MANUAL' } const WorkspaceContext = createContext< | (WorkspaceContextProps & { subscription: Subscription | 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, children }: { activeWorkspace: Workspace workspaces: Workspace[] subscription?: Subscription children: React.ReactNode }) { return ( 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 ) }