11import React , {
2+ useId ,
23 HTMLAttributes ,
34 Ref ,
45 createContext ,
@@ -9,6 +10,7 @@ import React, {
910import classnames from 'classnames' ;
1011import { FieldSetColumnContext } from './FieldSet' ;
1112import { TooltipContent } from './TooltipContent' ;
13+ import { FormElementProps } from './FormElement' ;
1214import { createFC } from './common' ;
1315import { Bivariant } from './typeUtils' ;
1416
@@ -22,6 +24,8 @@ export type RadioValueType = string | number;
2224 */
2325export const RadioGroupContext = createContext < {
2426 name ?: string ;
27+ error ?: FormElementProps [ 'error' ] ;
28+ errorId ?: string ;
2529 onValueChange ?: Bivariant < ( value : RadioValueType ) => void > ;
2630} > ( { } ) ;
2731
@@ -83,21 +87,25 @@ export const RadioGroup = createFC<RadioGroupProps, { isFormElement: boolean }>(
8387 ? error . message
8488 : undefined
8589 : undefined ;
90+
91+ const errorId = useId ( ) ;
8692 const grpCtx = useMemo (
87- ( ) => ( { name, onValueChange } ) ,
88- [ name , onValueChange ]
93+ ( ) => ( { name, error , errorId , onValueChange } ) ,
94+ [ name , error , errorId , onValueChange ]
8995 ) ;
9096
9197 return (
9298 < fieldset
9399 ref = { elementRef }
94100 className = { grpClassNames }
95101 style = { grpStyles }
102+ role = 'radiogroup'
103+ aria-required = { required }
96104 { ...rprops }
97105 >
98106 < legend className = 'slds-form-element__label' >
99107 { required ? (
100- < abbr className = 'slds-required' title = 'required' >
108+ < abbr className = 'slds-required' title = 'required' aria-hidden = 'true' >
101109 *
102110 </ abbr >
103111 ) : undefined }
@@ -112,7 +120,12 @@ export const RadioGroup = createFC<RadioGroupProps, { isFormElement: boolean }>(
112120 < RadioGroupContext . Provider value = { grpCtx } >
113121 { children }
114122 { errorMessage ? (
115- < div className = 'slds-form-element__help' > { errorMessage } </ div >
123+ < div
124+ className = 'slds-form-element__help'
125+ id = { error ? errorId : undefined }
126+ >
127+ { errorMessage }
128+ </ div >
116129 ) : undefined }
117130 </ RadioGroupContext . Provider >
118131 </ div >
0 commit comments