import * as RadixMenu from '@radix-ui/react-dropdown-menu' import styled from 'styled-components' import Block from '../Primitives/Block/Block' import Text from '../Text/Text' import type { CSSProperties } from 'react' import { MenuItem } from './SingleSelectV2MenuItems' import type { SingleSelectV2VirtualListProps, FlattenedItem, } from './singleSelectV2.types' import { getItemOrdinalIndex } from './utils' const GroupLabel = styled(RadixMenu.Label)` user-select: none; text-transform: uppercase; overflow: clip; ` const rowStyle: CSSProperties = { display: 'flex', alignItems: 'center', overflow: 'hidden', boxSizing: 'border-box', } const SingleSelectV2VirtualList = ({ flattenedItems, selected, onSelect, singleSelectTokens, size, variant, virtualViewportHeight, virtualItems, totalSize, measureElement, loadingComponent, hasMore, virtualScrollRef, focusIdentityEnabled, }: SingleSelectV2VirtualListProps) => { const menuGroupLabel = singleSelectTokens.menu.groupLabel const menuItem = singleSelectTokens.menu.item const renderVirtualRow = (flatItem: FlattenedItem, flatIndex: number) => { if (flatItem.type === 'label') { return ( {flatItem.label} ) } if (flatItem.type === 'separator') { return ( ) } if (flatItem.type === 'item' && flatItem.item) { const ordinalIndex = getItemOrdinalIndex(flattenedItems, flatIndex) return ( ) } return null } return (
{virtualItems.map((virtualItem) => (
{renderVirtualRow( flattenedItems[virtualItem.index], virtualItem.index )}
))}
{loadingComponent && hasMore && ( {loadingComponent} )}
) } export default SingleSelectV2VirtualList