@@ -210,10 +210,16 @@ class ReactSlider extends React.Component {
210210        ariaLabel : PropTypes . oneOfType ( [ PropTypes . string ,  PropTypes . arrayOf ( PropTypes . string ) ] ) , 
211211
212212        /** 
213-          * aria-valuetext for screen-readers 
213+          * aria-valuetext for screen-readers. 
214+          * Can be a static string, or a function that returns a string. 
215+          * The function will be passed a single argument, 
216+          * an object with the following properties: 
217+          * 
218+          * - `index` {`number`} the index of the thumb 
219+          * - 'value' {`number` | `array`} the current value state 
214220         */ 
215221        // eslint-disable-next-line zillow/react/require-default-props 
216-         ariaValuetext : PropTypes . string , 
222+         ariaValuetext : PropTypes . oneOfType ( [ PropTypes . string ,   PropTypes . func ] ) , 
217223
218224        /** 
219225         * Provide a custom render function for the track node. 
@@ -841,31 +847,38 @@ class ReactSlider extends React.Component {
841847            this . state . index  ===  i  ? this . props . thumbActiveClassName  : ''  
842848        }  `; 
843849
844-         return  React . createElement ( 
845-             'div' , 
846-             { 
847-                 ref : r  =>  { 
848-                     this [ `thumb${ i }  ` ]  =  r ; 
849-                 } , 
850-                 key : `thumb${ i }  ` , 
851-                 className, 
852-                 style, 
853-                 onMouseDown : this . createOnMouseDown ( i ) , 
854-                 onTouchStart : this . createOnTouchStart ( i ) , 
855-                 onFocus : this . createOnKeyDown ( i ) , 
856-                 tabIndex : 0 , 
857-                 role : 'slider' , 
858-                 'aria-orientation' : this . props . orientation , 
859-                 'aria-valuenow' : this . state . value [ i ] , 
860-                 'aria-valuemin' : this . props . min , 
861-                 'aria-valuemax' : this . props . max , 
862-                 'aria-label' : Array . isArray ( this . props . ariaLabel ) 
863-                     ? this . props . ariaLabel [ i ] 
864-                     : this . props . ariaLabel , 
865-                 'aria-valuetext' : this . props . ariaValuetext , 
850+         const  props  =  { 
851+             ref : r  =>  { 
852+                 this [ `thumb${ i }  ` ]  =  r ; 
866853            } , 
867-             child 
868-         ) ; 
854+             key : `thumb${ i }  ` , 
855+             className, 
856+             style, 
857+             onMouseDown : this . createOnMouseDown ( i ) , 
858+             onTouchStart : this . createOnTouchStart ( i ) , 
859+             onFocus : this . createOnKeyDown ( i ) , 
860+             tabIndex : 0 , 
861+             role : 'slider' , 
862+             'aria-orientation' : this . props . orientation , 
863+             'aria-valuenow' : this . state . value [ i ] , 
864+             'aria-valuemin' : this . props . min , 
865+             'aria-valuemax' : this . props . max , 
866+             'aria-label' : Array . isArray ( this . props . ariaLabel ) 
867+                 ? this . props . ariaLabel [ i ] 
868+                 : this . props . ariaLabel , 
869+         } ; 
870+ 
871+         if  ( this . props . ariaValuetext )  { 
872+             props [ 'aria-valuetext' ]  = 
873+                 typeof  this . props . ariaValuetext  ===  'string' 
874+                     ? this . props . ariaValuetext 
875+                     : this . props . ariaValuetext ( { 
876+                           value : this . state . value , 
877+                           index : i , 
878+                       } ) ; 
879+         } 
880+ 
881+         return  React . createElement ( 'div' ,  props ,  child ) ; 
869882    } ; 
870883
871884    renderThumbs ( offset )  { 
0 commit comments