import React, { memo, forwardRef } from 'react'; import Box from '../Box'; import { Center } from '../../composites/Center'; import { usePropsResolution } from '../../../hooks/useThemeProps'; import type { IRadioProps } from './types'; import { mergeRefs } from './../../../utils'; import { useHover } from '@react-native-aria/interactions'; import { useRadio } from '@react-native-aria/radio'; import { VisuallyHidden } from '@react-aria/visually-hidden'; import { RadioContext } from './RadioGroup'; import { useFocusRing } from '@react-native-aria/focus'; import { CircleIcon } from '../Icon/Icons'; const Radio = ( { icon, children, wrapperRef, ...props }: IRadioProps, ref: any ) => { const contextState = React.useContext(RadioContext); const { _interactionBox: { _hover: _iterationBoxHover, _focus: _iterationBoxFocus, _disabled: _iterationBoxDisabled, ..._interactionBox }, _radio: { _checked: _radioChecked, _disabled: _radioDisabled, _invalid: _radioInvalid, ..._radio }, _icon, isInvalid, ...themedProps } = usePropsResolution('Radio', { ...contextState, ...props, }); const inputRef = React.useRef(null); const { inputProps } = useRadio( { ...props, 'aria-label': props.accessibilityLabel, children }, contextState.state, inputRef ); const { disabled, checked } = inputProps; const _ref = React.useRef(null); const { isHovered } = useHover({}, _ref); const mergedRefs = mergeRefs([_ref, wrapperRef]); const { focusProps, isFocusVisible } = useFocusRing(); // only calling below function when icon exist. const sizedIcon = () => //@ts-ignore React.cloneElement(icon, { ..._icon, }); const component = (
{/* Interaction Box */} {/* Radio */}
{icon && sizedIcon && checked ? ( sizedIcon() ) : ( )}
{children}
); return ( {component} ); }; export default memo(forwardRef(Radio));