import type { KeyboardEvent, MouseEvent } from 'react' import * as RadixMenu from '@radix-ui/react-dropdown-menu' import { Checkbox } from '../Checkbox' import SelectItemIndicator from '../SelectV2/SelectItemIndicator' import Block from '../Primitives/Block/Block' import PrimitiveText from '../Primitives/PrimitiveText/PrimitiveText' import { useResponsiveTokens } from '../../hooks/useResponsiveTokens' import type { MultiSelectV2TokensType } from './multiSelectV2.tokens' import { getSelectAllState } from './utils' type MultiSelectV2SelectAllItemProps = { selected: string[] availableValues: string[] onSelectAll: (selectAll: boolean) => void selectAllText: string disabled?: boolean /** * Set false to render outside a Radix Menu.Root (e.g. an always-visible * list), where RadixMenu.Item has no menu context to attach to. The row * then carries its own checkbox role, tab stop and key handling. */ asMenuItem?: boolean } const MultiSelectV2SelectAllItem = ({ selected, availableValues, onSelectAll, selectAllText, disabled, asMenuItem = true, }: MultiSelectV2SelectAllItemProps) => { const multiSelectTokens = useResponsiveTokens('MULTI_SELECT_V2') const { allSelected, someSelected } = getSelectAllState( selected, availableValues ) const handleClick = (e: MouseEvent) => { if (disabled) return e.preventDefault() e.stopPropagation() onSelectAll(!allSelected) } const handleKeyDown = (e: KeyboardEvent) => { if (disabled) return if (e.key !== 'Enter' && e.key !== ' ') return e.preventDefault() onSelectAll(!allSelected) } const checkboxState = allSelected ? true : someSelected ? 'indeterminate' : false const row = ( {selectAllText} {asMenuItem ? ( ) : ( // The row itself is the checkbox widget here, so the indicator // must not be a second focusable control inside it. )} ) if (!asMenuItem) return row return ( {row} ) } export default MultiSelectV2SelectAllItem