import React, { forwardRef } from 'react' import { MoreHorizontal } from 'lucide-react' import Block from '../Primitives/Block/Block' import PrimitiveButton from '../Primitives/PrimitiveButton/PrimitiveButton' import { SingleSelect } from '../SingleSelect' import { SelectMenuVariant, SelectMenuAlignment, SelectMenuSide, } from '../Select/types' import { FOUNDATION_THEME } from '../../tokens' import { arrangeTenants } from './utils' import type { TenantItem } from './types' import { Tooltip } from '../Tooltip' import { TooltipSide, TooltipSize } from '../Tooltip/types' import { Badge, BadgeColor, BadgeSize } from '../Badge' import { useResponsiveTokens } from '../../hooks/useResponsiveTokens' import type { SidebarTokenType } from './sidebar.tokens' type TenantPanelProps = { items: TenantItem[] selected: string onSelect: (label: string) => void tenantSlot1?: React.ReactNode tenantSlot2?: React.ReactNode tenantFooter?: React.ReactNode } const TenantPanel = forwardRef( ( { items, selected, onSelect, tenantSlot1, tenantSlot2, tenantFooter }, ref ) => { const tokens = useResponsiveTokens('SIDEBAR') const { visibleTenants, hiddenTenants, hasMoreTenants } = arrangeTenants(items, selected) return ( {visibleTenants.map((tenant, index) => ( onSelect(tenant.label)} /> ))} {hasMoreTenants && ( )} {(tenantSlot1 || tenantSlot2) && ( {tenantSlot1 && ( {tenantSlot1} )} {tenantSlot2 && ( {tenantSlot2} )} )} {tenantFooter && ( {tenantFooter} )} ) } ) const TenantItem: React.FC<{ tenant: TenantItem isSelected: boolean onSelect: () => void }> = ({ tenant, isSelected, onSelect }) => { const tokens = useResponsiveTokens('SIDEBAR') const tenantButton = ( ) const trigger = tenant.badge ? ( {tenantButton} ) : ( tenantButton ) return ( {trigger} ) } const TenantOverflowMenu: React.FC<{ hiddenTenants: TenantItem[] onSelect: (label: string) => void }> = ({ hiddenTenants, onSelect }) => { const tokens = useResponsiveTokens('SIDEBAR') return ( ({ label: tenant.label, value: tenant.value || tenant.label, slot1: tenant.icon, tooltip: tenant.label, tooltipProps: { side: TooltipSide.RIGHT, size: TooltipSize.SMALL, delayDuration: 500, }, })), }, ]} selected="" onSelect={(value) => { const selectedTenant = hiddenTenants.find( (t) => (t.value || t.label) === value ) if (selectedTenant) { onSelect(selectedTenant.label) } }} customTrigger={ } /> ) } export default TenantPanel