11import React , { HTMLProps , PureComponent } from 'react' ;
22import classNames from 'classnames' ;
33import { FormElementProps } from '../../util/types/FormTypes' ;
4- import { RadiosContext } from './RadioContext' ;
4+ import { RadiosContext , IRadiosContext } from './RadioContext' ;
55import FormGroup from '../../util/FormGroup' ;
66import Divider from './components/Divider' ;
77import Radio from './components/Radio' ;
@@ -22,6 +22,8 @@ class Radios extends PureComponent<RadiosProps, RadiosState> {
2222
2323 private radioReferences : Array < string > = [ ] ;
2424
25+ private radioIds : Record < string , string > = { } ;
26+
2527 static defaultProps = {
2628 role : 'radiogroup' ,
2729 } ;
@@ -34,10 +36,14 @@ class Radios extends PureComponent<RadiosProps, RadiosState> {
3436 } ;
3537 }
3638
37- getRadioId = ( id : string ) : string => {
39+ getRadioId = ( id : string , reference : string ) : string => {
3840 const { idPrefix } = this . props ;
41+ if ( reference in this . radioIds ) {
42+ return this . radioIds [ reference ] ;
43+ }
3944 this . radioCount += 1 ;
40- return `${ idPrefix || id } -${ this . radioCount } ` ;
45+ this . radioIds [ reference ] = `${ idPrefix || id } -${ this . radioCount } ` ;
46+ return this . radioIds [ reference ] ;
4147 } ;
4248
4349 leaseReference = ( ) : string => {
@@ -78,6 +84,11 @@ class Radios extends PureComponent<RadiosProps, RadiosState> {
7884 } ) ;
7985 } ;
8086
87+ resetRadioIds = ( ) => {
88+ this . radioCount = 0 ;
89+ this . radioIds = { } ;
90+ } ;
91+
8192 static Divider = Divider ;
8293
8394 static Radio = Radio ;
@@ -87,9 +98,9 @@ class Radios extends PureComponent<RadiosProps, RadiosState> {
8798 return (
8899 < FormGroup < RadiosProps > inputType = "radios" { ...rest } >
89100 { ( { className, inline, name, id, error, ...restRenderProps } ) => {
90- this . radioCount = 0 ;
91- const contextValue = {
92- getRadioId : ( ) => this . getRadioId ( id ) ,
101+ this . resetRadioIds ( ) ;
102+ const contextValue : IRadiosContext = {
103+ getRadioId : reference => this . getRadioId ( id , reference ) ,
93104 selectedRadio : this . state . selectedRadio ,
94105 setConditional : this . setConditional ,
95106 setSelected : this . setSelected ,
0 commit comments