import * as React from 'react'; import classnames from 'classnames'; import {SelectMenuOptionType} from './SelectMenu'; import type {IconTypeType as SubjectIconTypeType} from '../subject-icons/SubjectIcon'; import type {IconTypeType} from '../icons/Icon'; import SubjectIcon from '../subject-icons/SubjectIcon'; import Icon from '../icons/Icon'; import Checkbox from '../form-elements/checkbox/Checkbox'; import Text from '../text/Text'; export type SelectOptionElementPropsType = { option: SelectMenuOptionType; isSelected?: boolean; withIcon?: boolean; multiSelect?: boolean; interactions: Record; tabIndex: number; }; const SelectMenuOption = React.forwardRef< HTMLDivElement, SelectOptionElementPropsType >( ( { option, isSelected, withIcon = false, multiSelect = false, interactions, tabIndex, }: SelectOptionElementPropsType, ref ) => { const [isHovered, setIsHovered] = React.useState(false); const {value, label, icon} = option; const classNames = classnames('sg-select-menu__option', { 'sg-select-menu__option--selected': isSelected, 'sg-select-menu__option--with-icon': withIcon, 'sg-select-menu__option--multi-select': multiSelect, }); const displayedIcon = React.useMemo(() => { const {name, isSubjectIcon = false} = icon || {}; if (!withIcon || (withIcon && !name)) return null; if (isSubjectIcon) { const subjectIconName = name as SubjectIconTypeType; return ( ); } else { const regularIconName = name as IconTypeType; return ( ); } }, [isSelected, isHovered, withIcon, icon]); const optionState = React.useMemo(() => { let optionState; if (multiSelect) { optionState = ; } else if (isSelected) { optionState = ; } return (
{optionState}
); }, [isSelected, multiSelect, option.value]); return (
setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} >
{displayedIcon} {label}
{optionState}
); } ); export default SelectMenuOption;