@@ -22,9 +22,14 @@ const defaultFilter = (term, item) => {
2222class SLDSLookup extends React . Component {
2323 constructor ( props ) {
2424 super ( props ) ;
25+ this . props . items . map ( ( item , index ) => {
26+ return item . id = 'item-' + index ;
27+ } )
28+
2529 this . state = {
2630 searchTerm : '' ,
2731 isOpen :false ,
32+ activeItem :null ,
2833 selectedIndex : null ,
2934 activeIndex :null ,
3035 } ;
@@ -44,14 +49,15 @@ class SLDSLookup extends React.Component {
4449 } )
4550 }
4651
47- getActiveDescendant ( ) {
48- return this . state . activeIndex !== null ? 'item-' + this . state . activeIndex : "" ;
52+ setActiveDescendant ( id ) {
53+ this . setState ( { activeItem : id } ) ;
4954 }
5055
5156 //=================================================
5257 // Select menu item (onClick or on key enter/space)
53- selectItem ( index ) {
58+ selectItem ( itemId ) {
5459 //console.log('selectItem fired');
60+ let index = itemId . replace ( 'item-' , '' ) ;
5561 this . setState ( {
5662 selectedIndex : index ,
5763 searchTerm : null
@@ -115,7 +121,7 @@ class SLDSLookup extends React.Component {
115121 //If user hits enter/space key, select current activedescendant item
116122 else if ( ( event . keyCode === KEYS . ENTER || event . keyCode === KEYS . SPACE ) && this . state . activeIndex !== null ) {
117123 EventUtil . trapImmediate ( event ) ;
118- this . selectItem ( this . state . activeIndex ) ;
124+ this . selectItem ( this . state . activeItem ) ;
119125 }
120126 }
121127 }
@@ -130,6 +136,7 @@ class SLDSLookup extends React.Component {
130136 onSelect = { this . selectItem . bind ( this ) }
131137 label = { this . props . label }
132138 items = { this . props . items }
139+ setActiveDescendant = { this . setActiveDescendant . bind ( this ) }
133140 activeIndex = { this . state . activeIndex } /> ;
134141 } else {
135142 return null ;
@@ -172,7 +179,7 @@ class SLDSLookup extends React.Component {
172179 aria-label = "lookup"
173180 aria-haspopup = "true"
174181 aria-autocomplete = "list"
175- aria-activedescendant = { this . getActiveDescendant ( ) }
182+ aria-activedescendant = { this . state . activeItem ? this . state . activeItem : "" }
176183 aria-expanded = { this . state . isOpen }
177184 role = "combobox"
178185 onChange = { this . handleChange . bind ( this ) }
0 commit comments