import React, { useEffect, useRef } from 'react'; import { useId } from '../../hooks/useId'; import { CheckboxInput } from '../CheckboxInput'; import styles from './ListBox.module.css'; import { useOptionContext } from './ListBoxProvider'; import { classNames } from '../../utils'; export type OptionProps = { option: T; }; const stopPropagation = ( e: React.MouseEvent | React.KeyboardEvent, ) => { e.stopPropagation(); }; export function Option({ option }: OptionProps) { const { renderOption, onOptionClick, rowHeight, active, id, isChecked, onOptionChange, isDisabled, isCheckboxDisabled, variant, handleKeyboardNavigation, isActiveElementInsideListBox, } = useOptionContext(option); const titleId = useId(); const controlId = useId(); const optionReference = useRef(null); const handleClick = () => { if (!isDisabled) { onOptionClick?.(option); } }; const handleKeyDown = (e: React.KeyboardEvent) => { switch (e.key) { case 'ArrowDown': case 'ArrowUp': case 'Home': case 'End': return handleKeyboardNavigation(e.key); } }; useEffect(() => { if (active && isActiveElementInsideListBox()) { optionReference.current?.focus(); } }, [active, isActiveElementInsideListBox]); return (
  • {onOptionChange ? ( // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions ) : null} {renderOption(option, titleId)}
  • ); }