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));