diff options
Diffstat (limited to 'web-ui/src/common/input_field')
-rw-r--r-- | web-ui/src/common/input_field/input_field.js | 47 | ||||
-rw-r--r-- | web-ui/src/common/input_field/input_field.scss | 43 | ||||
-rw-r--r-- | web-ui/src/common/input_field/input_field.spec.js | 20 |
3 files changed, 110 insertions, 0 deletions
diff --git a/web-ui/src/common/input_field/input_field.js b/web-ui/src/common/input_field/input_field.js new file mode 100644 index 00000000..f50fc2b1 --- /dev/null +++ b/web-ui/src/common/input_field/input_field.js @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +import React from 'react'; +import TextField from 'material-ui/TextField'; + +import './input_field.scss'; + +const InputField = ({ label, name, type = 'text', ...other }) => ( + <div className='input-field-group'> + <TextField + hintText={label} + floatingLabelText={label} + name={name} + type={type} + fullWidth + floatingLabelFocusStyle={{ color: '#178ca6' }} + {...other} + /> + </div> +); + +InputField.propTypes = { + label: React.PropTypes.string.isRequired, + name: React.PropTypes.string.isRequired, + type: React.PropTypes.string +}; + +InputField.defaultProps = { + type: 'text' +}; + +export default InputField; diff --git a/web-ui/src/common/input_field/input_field.scss b/web-ui/src/common/input_field/input_field.scss new file mode 100644 index 00000000..d550a281 --- /dev/null +++ b/web-ui/src/common/input_field/input_field.scss @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +@import "~scss/base/colors"; + +.input-field-group { + position:relative; + margin: 1.5em 0; + width: 100%; +} + +input:-webkit-autofill { + -webkit-box-shadow: 0 0 0px 1000px white inset; +} + +@media only screen and (min-width : 500px) { + .input-field-group { + width: 70%; + align-self: center; + } +} + +@media only screen and (min-width : 960px) { + .input-field-group { + width: 300px; + align-self: flex-start; + font-size: 1em; + } +} diff --git a/web-ui/src/common/input_field/input_field.spec.js b/web-ui/src/common/input_field/input_field.spec.js new file mode 100644 index 00000000..ae55653d --- /dev/null +++ b/web-ui/src/common/input_field/input_field.spec.js @@ -0,0 +1,20 @@ +import { shallow } from 'enzyme'; +import expect from 'expect'; +import React from 'react'; +import InputField from 'src/common/input_field/input_field'; + +describe('InputField', () => { + let inputField; + + beforeEach(() => { + inputField = shallow(<InputField label='Email' name='email' />); + }); + + it('renders an input of type text for email', () => { + expect(inputField.find('TextField').props().name).toEqual('email'); + }); + + it('renders a label for the email', () => { + expect(inputField.find('TextField').props().floatingLabelText).toEqual('Email'); + }); +}); |