Skip to content

Commit d09e81a

Browse files
authored
Merge branch 'master' into ListGroupItem
2 parents f06afd0 + 8e42068 commit d09e81a

7 files changed

Lines changed: 64 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
<a name="3.6.0"></a>
2+
# [3.6.0](https://github.com/reactstrap/reactstrap/compare/3.5.0...v3.6.0) (2016-10-23)
3+
4+
5+
### Features
6+
7+
* **DropdownToggle:** add nav prop to enable Nav specific functionality ([#197](https://github.com/reactstrap/reactstrap/issues/197))([9b28cbc](https://github.com/reactstrap/reactstrap/commit/9b28cbc))
8+
9+
10+
111
<a name="3.5.0"></a>
212
# [3.5.0](https://github.com/reactstrap/reactstrap/compare/3.4.1...v3.5.0) (2016-10-18)
313

docs/lib/Components/DropdownsPage.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ DropdownToggle.propTypes = {
6969
onClick: PropTypes.func,
7070
'data-toggle': PropTypes.string,
7171
'aria-haspopup': PropTypes.bool,
72-
72+
// For DropdownToggle usage inside a Nav
73+
nav: PropTypes.bool,
7374
// Defaults to Button component
7475
tag: PropTypes.any
7576
};`}

docs/lib/examples/NavPills.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export default class Example extends React.Component {
2525
<NavLink href="#" active>Link</NavLink>
2626
</NavItem>
2727
<NavDropdown isOpen={this.state.dropdownOpen} toggle={this.toggle}>
28-
<DropdownToggle caret>
29-
<NavLink href="#">Dropdown</NavLink>
28+
<DropdownToggle nav caret>
29+
Dropdown
3030
</DropdownToggle>
3131
<DropdownMenu>
3232
<DropdownItem header>Header</DropdownItem>

docs/lib/examples/NavTabs.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export default class Example extends React.Component {
2525
<NavLink href="#" active>Link</NavLink>
2626
</NavItem>
2727
<NavDropdown isOpen={this.state.dropdownOpen} toggle={this.toggle}>
28-
<DropdownToggle caret>
29-
<NavLink href="#">Dropdown</NavLink>
28+
<DropdownToggle nav caret>
29+
Dropdown
3030
</DropdownToggle>
3131
<DropdownMenu>
3232
<DropdownItem header>Header</DropdownItem>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "reactstrap",
3-
"version": "3.5.0",
3+
"version": "3.6.0",
44
"description": "React Bootstrap 4 components compatible with React 0.14.x and 15.x",
55
"main": "lib/index.js",
66
"scripts": {

src/DropdownToggle.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ const propTypes = {
1111
'data-toggle': PropTypes.string,
1212
'aria-haspopup': PropTypes.bool,
1313
split: PropTypes.bool,
14-
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string])
14+
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
15+
nav: PropTypes.bool
1516
};
1617

1718
const defaultProps = {
@@ -39,6 +40,10 @@ class DropdownToggle extends React.Component {
3940
return;
4041
}
4142

43+
if (this.props.nav) {
44+
e.preventDefault();
45+
}
46+
4247
if (this.props.onClick) {
4348
this.props.onClick(e);
4449
}
@@ -47,18 +52,24 @@ class DropdownToggle extends React.Component {
4752
}
4853

4954
render() {
50-
const { className, caret, split, tag: Tag, ...props } = this.props;
55+
const { className, caret, split, nav, tag: Tag, ...props } = this.props;
5156
const ariaLabel = props['aria-label'] || 'Toggle Dropdown';
5257
const classes = classNames(
5358
className,
5459
{
5560
'dropdown-toggle': caret || split,
5661
'dropdown-toggle-split': split,
5762
active: this.context.isOpen,
63+
'nav-link': nav
5864
}
5965
);
6066
const children = props.children || <span className="sr-only">{ariaLabel}</span>;
6167

68+
if (nav) {
69+
props.tag = 'a';
70+
props.href = '#';
71+
}
72+
6273
return (
6374
<Tag
6475
{...props}

src/__tests__/DropdownToggle.spec.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,38 @@ describe('DropdownToggle', () => {
153153
expect(e.preventDefault).toHaveBeenCalled();
154154
});
155155
});
156+
157+
describe('nav', () => {
158+
it('should add .nav-link class', () => {
159+
const wrapper = mount(
160+
<DropdownToggle nav>Ello world</DropdownToggle>,
161+
{
162+
context: {
163+
isOpen: isOpen,
164+
toggle: toggle
165+
}
166+
}
167+
);
168+
169+
expect(wrapper.find('a').length).toBe(1);
170+
expect(wrapper.find('.nav-link').length).toBe(1);
171+
});
172+
173+
it('should preventDefault', () => {
174+
const e = { preventDefault: jasmine.createSpy('preventDefault') };
175+
const wrapper = mount(
176+
<DropdownToggle nav>Ello world</DropdownToggle>,
177+
{
178+
context: {
179+
isOpen: isOpen,
180+
toggle: toggle
181+
}
182+
}
183+
);
184+
const instance = wrapper.instance();
185+
186+
instance.onClick(e);
187+
expect(e.preventDefault).toHaveBeenCalled();
188+
});
189+
});
156190
});

0 commit comments

Comments
 (0)