'use client' import { formatCNPJ } from '@brazilian-utils/brazilian-utils' import { CheckIcon, ChevronsUpDownIcon, PlusIcon } from 'lucide-react' import { createContext, useContext, useState } from 'react' import { useLocation, useParams } 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' export type Workspace = { id: string name: string cnpj: string } type WorkspaceContextProps = { workspaces: Workspace[] activeWorkspace: Workspace setActiveWorkspace: React.Dispatch> } const WorkspaceContext = createContext(null) export function useWorksapce() { const ctx = useContext(WorkspaceContext) if (!ctx) { throw new Error('WorkspaceContext is null') } return ctx } export function WorkspaceProvider({ workspaces, children }: { workspaces: Workspace[] children: React.ReactNode }) { const { orgid } = useParams() const [activeWorkspace, setActiveWorkspace] = useState( () => workspaces.find((ws) => ws.id === orgid) || {} ) return ( {children} ) } export function WorkspaceSwitcher() { const location = useLocation() const { orgid } = useParams() const { isMobile, state } = useSidebar() const { activeWorkspace, setActiveWorkspace, workspaces } = useWorksapce() const [, fragment, _] = location.pathname.slice(1).split('/') const onSelect = (ws: Workspace) => { setActiveWorkspace(ws) window.location.assign(`/${ws.id}/${fragment}`) } return (
{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
) }