import React, { forwardRef, useMemo } from 'react'; import { View, Text } from 'react-native'; import { radioButtonStyles } from './RadioButton.styles'; import type { RadioGroupProps } from './types'; import { getNativeAccessibilityProps } from '../utils/accessibility'; import type { IdealystElement } from '../utils/refTypes'; const RadioGroupContext = React.createContext<{ value?: string; onValueChange?: (value: string) => void; disabled?: boolean; }>({}); export const useRadioGroup = () => React.useContext(RadioGroupContext); const RadioGroup = forwardRef(({ value, onValueChange, disabled = false, orientation = 'vertical', children, error, helperText, label, style, testID, id, // Accessibility props accessibilityLabel, accessibilityHint, accessibilityDisabled, accessibilityHidden, accessibilityRole, }, ref) => { const hasError = Boolean(error); const showFooter = Boolean(error || helperText); // Generate native accessibility props const nativeA11yProps = useMemo(() => { return getNativeAccessibilityProps({ accessibilityLabel, accessibilityHint, accessibilityDisabled: accessibilityDisabled ?? disabled, accessibilityHidden, accessibilityRole: accessibilityRole ?? 'radiogroup', }); }, [accessibilityLabel, accessibilityHint, accessibilityDisabled, disabled, accessibilityHidden, accessibilityRole]); // Apply variants for group styles radioButtonStyles.useVariants({ orientation, disabled, hasError, }); const content = ( {children} ); if (!label && !showFooter) { return content; } return ( {label && {label}} {content} {showFooter && ( {error && {error}} {!error && helperText && {helperText}} )} ); }); RadioGroup.displayName = 'RadioGroup'; export default RadioGroup;