Skip to content

Commit cf19b41

Browse files
committed
feat(Dropdown): add size prop
1 parent daa9e90 commit cf19b41

4 files changed

Lines changed: 100 additions & 0 deletions

File tree

docs/lib/Components/DropdownsPage.jsx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
DropdownMenu } from 'reactstrap';
1010
import DropdownExample from '../examples/Dropdown';
1111
const DropdownExampleSource = require('!!raw!../examples/Dropdown.jsx');
12+
import DropdownSizingExample from '../examples/DropdownSizing';
1213

1314
export default class DropdownPage extends React.Component {
1415
constructor(props) {
@@ -120,6 +121,46 @@ DropdownToggle.propTypes = {
120121
{'<DropdownItem disabled>Action</DropdownItem>'}
121122
</PrismCode>
122123
</pre>
124+
<h3>Sizing</h3>
125+
<div className="docs-example">
126+
<div>
127+
<DropdownSizingExample size="lg" />
128+
<br />
129+
<DropdownSizingExample />
130+
<br />
131+
<DropdownSizingExample size="sm" />
132+
</div>
133+
</div>
134+
<pre>
135+
<PrismCode className="language-jsx">
136+
{`<Dropdown isOpen={this.state.dropdownOpen} size="lg" toggle={this.toggle}>
137+
<DropdownToggle caret>
138+
Dropdown
139+
</DropdownToggle>
140+
<DropdownMenu>
141+
...
142+
</DropdownMenu>
143+
</Dropdown>
144+
145+
<Dropdown isOpen={this.state.dropdownOpen} toggle={this.toggle}>
146+
<DropdownToggle caret>
147+
Dropdown
148+
</DropdownToggle>
149+
<DropdownMenu>
150+
...
151+
</DropdownMenu>
152+
</Dropdown>
153+
154+
<Dropdown isOpen={this.state.dropdownOpen} size="sm" toggle={this.toggle}>
155+
<DropdownToggle caret>
156+
Dropdown
157+
</DropdownToggle>
158+
<DropdownMenu>
159+
...
160+
</DropdownMenu>
161+
</Dropdown>`}
162+
</PrismCode>
163+
</pre>
123164
</div>
124165
);
125166
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import React from 'react';
2+
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
3+
4+
export default class Example extends React.Component {
5+
constructor(props) {
6+
super(props);
7+
8+
this.toggle = this.toggle.bind(this);
9+
this.state = {
10+
dropdownOpen: false
11+
};
12+
}
13+
14+
toggle() {
15+
this.setState({
16+
dropdownOpen: !this.state.dropdownOpen
17+
});
18+
}
19+
20+
render() {
21+
return (
22+
<Dropdown isOpen={this.state.dropdownOpen} toggle={this.toggle} {...this.props}>
23+
<DropdownToggle caret>
24+
Dropdown
25+
</DropdownToggle>
26+
<DropdownMenu>
27+
<DropdownItem header>Header</DropdownItem>
28+
<DropdownItem>Action</DropdownItem>
29+
</DropdownMenu>
30+
</Dropdown>
31+
);
32+
}
33+
}

src/Dropdown.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const propTypes = {
1313
dropup: PropTypes.bool,
1414
group: PropTypes.bool,
1515
isOpen: PropTypes.bool,
16+
size: PropTypes.string,
1617
tag: PropTypes.string,
1718
tether: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
1819
toggle: PropTypes.func,
@@ -162,6 +163,7 @@ class Dropdown extends React.Component {
162163
className,
163164
dropup,
164165
group,
166+
size,
165167
tag: Tag,
166168
isOpen,
167169
...attributes
@@ -171,6 +173,7 @@ class Dropdown extends React.Component {
171173
className,
172174
{
173175
'btn-group': group,
176+
[`btn-group-${size}`]: !!size,
174177
dropdown: !group,
175178
open: isOpen,
176179
dropup: dropup

test/Dropdown.spec.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,4 +245,27 @@ describe('Dropdown', () => {
245245
wrapper.detach();
246246
});
247247
});
248+
249+
it('should render different size classes', () => {
250+
const small = mount(
251+
<Dropdown isOpen={isOpen} size="sm" toggle={toggle}>
252+
<DropdownToggle>Toggle</DropdownToggle>
253+
<DropdownMenu>
254+
<DropdownItem>Test</DropdownItem>
255+
</DropdownMenu>
256+
</Dropdown>
257+
);
258+
259+
const large = mount(
260+
<Dropdown isOpen={isOpen} size="lg" toggle={toggle}>
261+
<DropdownToggle>Toggle</DropdownToggle>
262+
<DropdownMenu>
263+
<DropdownItem>Test</DropdownItem>
264+
</DropdownMenu>
265+
</Dropdown>
266+
);
267+
268+
expect(small.hasClass('btn-group-sm')).toBe(true);
269+
expect(large.hasClass('btn-group-lg')).toBe(true);
270+
});
248271
});

0 commit comments

Comments
 (0)