Skip to content

Commit 06e4911

Browse files
committed
Merge branch 'master' of github.com:erikras/redux-form-material-ui
2 parents 029d463 + c485bb7 commit 06e4911

File tree

6 files changed

+123
-0
lines changed

6 files changed

+123
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Using [npm](https://www.npmjs.org/):
2424

2525
## Available Components
2626

27+
* [AutoComplete](http://www.material-ui.com/#/components/auto-complete)
2728
* [Checkbox](http://www.material-ui.com/#/components/checkbox)
2829
* [DatePicker](http://www.material-ui.com/#/components/date-picker)
2930
* [RadioButtonGroup](http://www.material-ui.com/#/components/radio-button)

example/src/Example.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ You simply provide the string name of the Material UI component you want to rend
1010

1111
Available components:
1212

13+
* [AutoComplete](http://www.material-ui.com/#/components/auto-complete)
1314
* [Checkbox](http://www.material-ui.com/#/components/checkbox)
1415
* [DatePicker](http://www.material-ui.com/#/components/date-picker)
1516
* [RadioButtonGroup](http://www.material-ui.com/#/components/radio-button)

example/src/Form.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import React, { Component } from 'react'
22
import { Field, reduxForm } from 'redux-form'
33
import { RadioButton } from 'material-ui/RadioButton'
44
import MenuItem from 'material-ui/MenuItem'
5+
import { AutoComplete as MUIAutoComplete } from 'material-ui'
56
import {
7+
AutoComplete,
68
Checkbox,
79
DatePicker,
810
RadioButtonGroup,
@@ -103,6 +105,16 @@ class Form extends Component {
103105
multiLine={true}
104106
rows={2}/>
105107
</div>
108+
<div>
109+
<Field
110+
name="cheese"
111+
component={AutoComplete}
112+
floatingLabelText="Cheese"
113+
openOnFocus={true}
114+
filter={MUIAutoComplete.fuzzyFilter}
115+
dataSource={[ 'Cheddar', 'Mozzarella', 'Parmesan', 'Provolone' ]}
116+
/>
117+
</div>
106118
<div>
107119
<button type="submit" disabled={pristine || submitting}>Submit</button>
108120
<button type="button" disabled={pristine || submitting} onClick={reset}>Clear</button>

src/AutoComplete.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import AutoComplete from 'material-ui/AutoComplete'
2+
import noop from 'lodash.noop'
3+
import createComponent from './createComponent'
4+
import mapError from './mapError'
5+
6+
export default createComponent(
7+
AutoComplete,
8+
({ input: { onChange, value, ...inputProps }, ...props }) => ({
9+
...mapError(props),
10+
...inputProps,
11+
searchText: value,
12+
onChange: noop,
13+
onNewRequest: value => onChange(value)
14+
}))

src/__tests__/AutoComplete.spec.js

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import React from 'react'
2+
import TestUtils from 'react-addons-test-utils'
3+
import expect, { createSpy } from 'expect'
4+
import expectJsx from 'expect-jsx'
5+
import AutoComplete from 'material-ui/AutoComplete'
6+
import getMuiTheme from 'material-ui/styles/getMuiTheme'
7+
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'
8+
import noop from 'lodash.noop'
9+
import ReduxFormMaterialUIAutoComplete from '../AutoComplete'
10+
11+
expect.extend(expectJsx)
12+
13+
describe('AutoComplete', () => {
14+
15+
const dataSource = [
16+
'One',
17+
'Two',
18+
'Three'
19+
]
20+
21+
it('has a display name', () => {
22+
expect(ReduxFormMaterialUIAutoComplete.displayName)
23+
.toBe('ReduxFormMaterialUIAutoComplete')
24+
})
25+
26+
it('renders an AutoComplete', () => {
27+
expect(new ReduxFormMaterialUIAutoComplete({
28+
dataSource,
29+
input: {
30+
name: 'myAutoComplete',
31+
value: 'Foo'
32+
}
33+
}).render())
34+
.toEqualJSX(<AutoComplete dataSource={dataSource} name="myAutoComplete" searchText="Foo" onChange={noop} ref="component"/>)
35+
})
36+
37+
it('renders an AutoComplete with no error when not touched', () => {
38+
expect(new ReduxFormMaterialUIAutoComplete({
39+
dataSource,
40+
input: {
41+
name: 'myAutoComplete',
42+
value: 'Foo'
43+
},
44+
error: 'FooError'
45+
}).render())
46+
.toEqualJSX(<AutoComplete dataSource={dataSource} name="myAutoComplete" searchText="Foo" onChange={noop} ref="component"/>)
47+
})
48+
49+
it('renders an AutoComplete with an error', () => {
50+
expect(new ReduxFormMaterialUIAutoComplete({
51+
dataSource,
52+
input: {
53+
name: 'myAutoComplete',
54+
value: 'Foo'
55+
},
56+
error: 'FooError',
57+
touched: true
58+
}).render())
59+
.toEqualJSX(<AutoComplete dataSource={dataSource} name="myAutoComplete" searchText="Foo" errorText="FooError" onChange={noop}
60+
ref="component"/>)
61+
})
62+
63+
it('maps onChange properly', () => {
64+
const onChange = createSpy()
65+
66+
const dom = TestUtils.renderIntoDocument(
67+
<MuiThemeProvider muiTheme={getMuiTheme()}>
68+
<ReduxFormMaterialUIAutoComplete dataSource={dataSource} name="myAutoComplete" input={{ onChange, value: 'Foo' }}/>
69+
</MuiThemeProvider>
70+
)
71+
72+
const autocomplete = TestUtils.findRenderedComponentWithType(dom, AutoComplete)
73+
expect(onChange).toNotHaveBeenCalled()
74+
autocomplete.props.onNewRequest('TheValue')
75+
expect(onChange)
76+
.toHaveBeenCalled()
77+
.toHaveBeenCalledWith('TheValue')
78+
})
79+
80+
it('provides getRenderedComponent', () => {
81+
const dom = TestUtils.renderIntoDocument(
82+
<MuiThemeProvider muiTheme={getMuiTheme()}>
83+
<ReduxFormMaterialUIAutoComplete dataSource={dataSource} input={{ name: 'myAutoComplete' }}/>
84+
</MuiThemeProvider>
85+
)
86+
87+
const element =
88+
TestUtils.findRenderedComponentWithType(dom, ReduxFormMaterialUIAutoComplete)
89+
expect(element.getRenderedComponent).toBeA('function')
90+
expect(element.getRenderedComponent()).toExist()
91+
})
92+
})
93+

src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import Checkbox from './Checkbox'
55
import Slider from './Slider'
66
import Toggle from './Toggle'
77
import SelectField from './SelectField'
8+
import AutoComplete from './AutoComplete'
89

910
export {
11+
AutoComplete,
1012
Checkbox,
1113
DatePicker,
1214
RadioButtonGroup,

0 commit comments

Comments
 (0)