File tree Expand file tree Collapse file tree 2 files changed +19
-9
lines changed
Expand file tree Collapse file tree 2 files changed +19
-9
lines changed Original file line number Diff line number Diff line change @@ -20,19 +20,21 @@ class ListBox extends React.Component {
2020 // If selected item is not a part of new items, aggressively fallback to
2121 // first item from the list. We're doing it to be protected from cases
2222 // when nothing is selected.
23- if ( ! selected || ! nextProps . items . contains ( selected ) ) {
23+ if ( ! selected || ! nextProps . items . find ( item => item . value === selected ) ) {
2424 selected = nextProps . items . get ( 0 ) ;
25+ if ( ! selected ) return ;
26+ selected = selected . value ;
2527 nextProps . onClick ( selected ) ;
2628 }
2729
2830 this . setState ( { selected } ) ;
2931 }
3032
3133 onClick ( e ) {
32- const { item } = e . target . dataset ;
34+ const { value } = e . target . dataset ;
3335
34- this . setState ( { selected : item } ) ;
35- this . props . onClick ( item ) ;
36+ this . setState ( { selected : value } ) ;
37+ this . props . onClick ( value ) ;
3638 }
3739
3840 render ( ) {
@@ -48,11 +50,11 @@ class ListBox extends React.Component {
4850 { items . size ? null : < li className = "new-snippet-lang-empty" > No results found</ li > }
4951 { items . map ( item => (
5052 < li
51- className = { `new-snippet-lang-item ${ item === selected ? 'active' : '' } ` }
52- data-item = { item }
53- key = { item }
53+ className = { `new-snippet-lang-item ${ item . value === selected ? 'active' : '' } ` }
54+ data-value = { item . value }
55+ key = { item . value }
5456 >
55- { item }
57+ { item . name }
5658 </ li >
5759 ) ) }
5860 </ ul >
Original file line number Diff line number Diff line change @@ -20,11 +20,19 @@ class ListBoxWithSearch extends React.PureComponent {
2020 const { searchQuery } = this . state ;
2121 let { items } = this . props ;
2222
23+ // Normalize items arrays so each item is always an object.
24+ items = items . map ( ( item ) => {
25+ if ( item !== Object ( item ) ) {
26+ return { name : item , value : item } ;
27+ }
28+ return item ;
29+ } ) ;
30+
2331 // Filter out only those items that match search query. If no query is
2432 // set, do nothing and use the entire set.
2533 if ( searchQuery ) {
2634 const regExp = new RegExp ( regExpEscape ( searchQuery ) , 'gi' ) ;
27- items = items . filter ( item => item . match ( regExp ) ) ;
35+ items = items . filter ( item => item . name . match ( regExp ) ) ;
2836 }
2937
3038 return (
You can’t perform that action at this time.
0 commit comments