Skip to content

Commit ce6bf66

Browse files
mattlystevoland
authored andcommitted
Implement buttonBefore/buttonAfter / input-group-btn
Closes react-bootstrap#201
1 parent 29aad63 commit ce6bf66

2 files changed

Lines changed: 42 additions & 1 deletion

File tree

src/Input.jsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ var Input = React.createClass({
1010
help: React.PropTypes.node,
1111
addonBefore: React.PropTypes.node,
1212
addonAfter: React.PropTypes.node,
13+
buttonBefore: React.PropTypes.node,
14+
buttonAfter: React.PropTypes.node,
1315
bsStyle: function(props) {
1416
if (props.type === 'submit') {
1517
// Return early if `type=submit` as the `Button` component
@@ -105,11 +107,25 @@ var Input = React.createClass({
105107
</span>
106108
) : null;
107109

108-
return addonBefore || addonAfter ? (
110+
var buttonBefore = this.props.buttonBefore ? (
111+
<span className="input-group-btn">
112+
{this.props.buttonBefore}
113+
</span>
114+
) : null;
115+
116+
var buttonAfter = this.props.buttonAfter ? (
117+
<span className="input-group-btn">
118+
{this.props.buttonAfter}
119+
</span>
120+
) : null;
121+
122+
return addonBefore || addonAfter || buttonBefore || buttonAfter ? (
109123
<div className="input-group" key="input-group">
110124
{addonBefore}
125+
{buttonBefore}
111126
{children}
112127
{addonAfter}
128+
{buttonAfter}
113129
</div>
114130
) : children;
115131
},

test/InputSpec.jsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
var React = require('react');
44
var ReactTestUtils = require('react/lib/ReactTestUtils');
55
var Input = require('../cjs/Input');
6+
var Button = require('../cjs/Button');
7+
var DropdownButton = require('../cjs/DropdownButton');
8+
var MenuItem = require('../cjs/MenuItem');
69

710
describe('Input', function () {
811
beforeEach(function() {
@@ -120,6 +123,28 @@ describe('Input', function () {
120123
assert.ok(ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'input-group-addon'));
121124
});
122125

126+
it('renders btn-group', function() {
127+
var instance = ReactTestUtils.renderIntoDocument(
128+
<Input buttonAfter={<Button>!</Button>} />
129+
);
130+
131+
assert.ok(ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'input-group'));
132+
assert.ok(ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'input-group-btn'));
133+
})
134+
135+
it('renders btn-group with dropdown', function() {
136+
var instance = ReactTestUtils.renderIntoDocument(
137+
<Input buttonAfter={<DropdownButton title="dropdown">
138+
<MenuItem key="1">One</MenuItem>
139+
</DropdownButton>} />
140+
);
141+
142+
assert.ok(ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'input-group'));
143+
assert.ok(ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'input-group-btn'));
144+
assert.ok(ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'btn'));
145+
assert.ok(ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'dropdown-menu'));
146+
})
147+
123148
it('renders help', function () {
124149
var instance = ReactTestUtils.renderIntoDocument(
125150
<Input help="Help" />

0 commit comments

Comments
 (0)