import { forwardRef } from 'react'; import classnames from 'classnames'; import bordersStyles from '../Borders.css'; import boxWhitespaceStyles from '../boxWhitespace.css'; import styles from '../ComboBox.css'; import flexStyles from '../Flex.css'; import focusStyles from '../Focus.css'; import Icon from '../Icon'; import layoutStyles from '../Layout.css'; import touchableStyles from '../TapArea.css'; import Text from '../Text'; export type ComboBoxItemType = { label: string; subtext?: string; value: string; }; type Props = { id: string; index: number; isHovered: boolean; isSelected: boolean; label: string; onSelect?: (arg1: { item: ComboBoxItemType; event: React.ChangeEvent }) => void; setHoveredItemIndex: (arg1: number) => void; subtext?: string; value: string; }; const ComboBoxItemWithForwardRef = forwardRef( function OptionItem( { isHovered, id, index, isSelected, label, onSelect, setHoveredItemIndex, subtext, value, }: Props, ref, ) { const handleEventPreventDefault = (event: React.ChangeEvent) => event.preventDefault(); const handleOnTap = (event: React.ChangeEvent) => onSelect?.({ event, item: { label, value, subtext } }); const handleOnMouseEnter = () => setHoveredItemIndex(index); return (
' is not assignable to type 'LegacyRef | undefined'. ref={isHovered ? ref : null} aria-selected={isSelected} className={classnames( focusStyles.hideOutline, touchableStyles.fullWidth, touchableStyles.pointer, )} id={`${id}-item-${index}`} // @ts-expect-error - TS2322 - Type '(event: React.ChangeEvent) => void | undefined' is not assignable to type 'MouseEventHandler'. onClick={handleOnTap} // @ts-expect-error - TS2322 - Type '(event: React.ChangeEvent) => void' is not assignable to type 'KeyboardEventHandler'. onKeyPress={handleEventPreventDefault} // @ts-expect-error - TS2322 - Type '(event: React.ChangeEvent) => void' is not assignable to type 'MouseEventHandler'. onMouseDown={handleEventPreventDefault} onMouseEnter={handleOnMouseEnter} role="option" tabIndex={-1} >
{label} {subtext && ( {subtext} )}
{isSelected ? ( ) : (
)}
); }, ); ComboBoxItemWithForwardRef.displayName = 'ComboBoxItem'; export default ComboBoxItemWithForwardRef;