1
- import React , { PropTypes } from 'react'
1
+ import PropTypes from 'prop-types'
2
+ import React from 'react'
2
3
3
4
function makeLookup ( arr , prop ) {
4
5
let lkup = { }
@@ -35,10 +36,8 @@ const DEFAULT_CLASS_NAMES = {
35
36
select : 'FilteredMultiSelect__select'
36
37
}
37
38
38
- export default React . createClass ( {
39
- displayName : 'FilteredMultiSelect' ,
40
-
41
- propTypes : {
39
+ class FilteredMultiSelect extends React . Component {
40
+ static propTypes = {
42
41
onChange : PropTypes . func . isRequired ,
43
42
options : PropTypes . array . isRequired ,
44
43
@@ -52,34 +51,34 @@ export default React.createClass({
52
51
size : PropTypes . number ,
53
52
textProp : PropTypes . string ,
54
53
valueProp : PropTypes . string
55
- } ,
56
-
57
- getDefaultProps ( ) {
58
- return {
59
- buttonText : 'Select' ,
60
- className : 'FilteredMultiSelect' ,
61
- classNames : { } ,
62
- defaultFilter : '' ,
63
- disabled : false ,
64
- placeholder : 'type to filter' ,
65
- size : 6 ,
66
- selectedOptions : [ ] ,
67
- textProp : 'text' ,
68
- valueProp : 'value'
69
- }
70
- } ,
54
+ }
55
+
56
+ static defaultProps = {
57
+ buttonText : 'Select' ,
58
+ className : 'FilteredMultiSelect' ,
59
+ classNames : { } ,
60
+ defaultFilter : '' ,
61
+ disabled : false ,
62
+ placeholder : 'type to filter' ,
63
+ size : 6 ,
64
+ selectedOptions : [ ] ,
65
+ textProp : 'text' ,
66
+ valueProp : 'value'
67
+ }
68
+
69
+ constructor ( props ) {
70
+ super ( props )
71
71
72
- getInitialState ( ) {
73
- let { defaultFilter, selectedOptions} = this . props
74
- return {
72
+ let { defaultFilter, selectedOptions} = props
73
+ this . state = {
75
74
// Filter text
76
75
filter : defaultFilter ,
77
76
// Options which haven't been selected and match the filter text
78
77
filteredOptions : this . _filterOptions ( defaultFilter , selectedOptions ) ,
79
78
// Values of <options> currently selected in the <select>
80
79
selectedValues : [ ]
81
80
}
82
- } ,
81
+ }
83
82
84
83
componentWillReceiveProps ( nextProps ) {
85
84
// Update visibile options in response to options or selectedOptions
@@ -95,7 +94,7 @@ export default React.createClass({
95
94
nextProps . options )
96
95
} , this . _updateSelectedValues )
97
96
}
98
- } ,
97
+ }
99
98
100
99
_getClassName ( name , ...modifiers ) {
101
100
let classNames = [ this . props . classNames [ name ] || DEFAULT_CLASS_NAMES [ name ] ]
@@ -105,7 +104,7 @@ export default React.createClass({
105
104
}
106
105
}
107
106
return classNames . join ( ' ' )
108
- } ,
107
+ }
109
108
110
109
_filterOptions ( filter , selectedOptions , options ) {
111
110
if ( typeof filter == 'undefined' ) {
@@ -131,15 +130,15 @@ export default React.createClass({
131
130
}
132
131
133
132
return filteredOptions
134
- } ,
133
+ }
135
134
136
135
_onFilterChange ( e ) {
137
136
let filter = e . target . value
138
137
this . setState ( {
139
138
filter,
140
139
filteredOptions : this . _filterOptions ( filter )
141
140
} , this . _updateSelectedValues )
142
- } ,
141
+ }
143
142
144
143
_onFilterKeyPress ( e ) {
145
144
if ( e . key === 'Enter' ) {
@@ -152,7 +151,7 @@ export default React.createClass({
152
151
} )
153
152
}
154
153
}
155
- } ,
154
+ }
156
155
157
156
_updateSelectedValues ( e ) {
158
157
let el = e ? e . target : this . refs . select
@@ -167,7 +166,7 @@ export default React.createClass({
167
166
if ( e || String ( this . state . selectedValues ) !== String ( selectedValues ) ) {
168
167
this . setState ( { selectedValues} )
169
168
}
170
- } ,
169
+ }
171
170
172
171
/**
173
172
* Adds backing objects for the currently selected options to the selection
@@ -181,7 +180,7 @@ export default React.createClass({
181
180
this . setState ( { selectedValues : [ ] } , ( ) => {
182
181
this . props . onChange ( selectedOptions )
183
182
} )
184
- } ,
183
+ }
185
184
186
185
render ( ) {
187
186
let { filter, filteredOptions, selectedValues} = this . state
@@ -217,4 +216,6 @@ export default React.createClass({
217
216
</ button >
218
217
</ div >
219
218
}
220
- } )
219
+ }
220
+
221
+ export default FilteredMultiSelect
0 commit comments