Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3dd58e8

Browse filesBrowse files
committed
fix(SidebarNav): navigate to route on SidebarNav parent menu click - closes coreui#98
1 parent 569a93d commit 3dd58e8
Copy full SHA for 3dd58e8

File tree

Expand file treeCollapse file tree

2 files changed

+41
-7
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+41
-7
lines changed

‎src/SidebarNav.md

Copy file name to clipboardExpand all lines: src/SidebarNav.md
+23Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,29 @@ __React Router NavLink props to pass in `attributes` object:__
120120
]
121121
}
122122
```
123+
To override default behavior of `nav-dropdown toggle` and navigate to `url` use custom `onClick` method:
124+
```json5
125+
{
126+
name: 'Base',
127+
url: '/base',
128+
icon: 'icon-puzzle',
129+
attributes: {onClick: (e, item)=>{ console.log(e, item) }}, // (v2.5.6 up) optional
130+
children: []
131+
}
132+
```
133+
For active route consistency, you can set redirect on partial routes in `src/routes.js`:
134+
```js
135+
import { Redirect } from 'react-router-dom';
136+
...
137+
const routes = [
138+
...
139+
{ path: '/base', exact: true, name: 'Base', component: () => <Redirect to={'/base/cards'}/> },
140+
{ path: '/base/cards', name: 'Cards', component: Cards },
141+
{ path: '/base/forms', name: 'Forms', component: Forms },
142+
...
143+
]
144+
```
145+
123146
- divider:
124147
```json5
125148
{

‎src/SidebarNav2.js

Copy file name to clipboardExpand all lines: src/SidebarNav2.js
+18-7Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,12 @@ class AppSidebarNav2 extends Component {
4949

5050
_scrollBarRef = null;
5151

52-
handleClick(e) {
53-
e.preventDefault();
52+
handleClick(e, item) {
53+
if (item.attributes && typeof item.attributes.onClick === 'function' && !this.isActiveRoute(item.url, this.props)) {
54+
item.attributes.onClick(e, item)
55+
} else {
56+
e.preventDefault();
57+
}
5458
e.currentTarget.parentElement.classList.toggle('open');
5559
}
5660

@@ -71,7 +75,7 @@ class AppSidebarNav2 extends Component {
7175
}
7276

7377
getAttribs(attributes) {
74-
return JSON.parse(JSON.stringify(attributes || {}));
78+
return {...attributes};
7579
}
7680

7781
// nav list
@@ -132,14 +136,21 @@ class AppSidebarNav2 extends Component {
132136
delete attributes.class;
133137
delete attributes.className;
134138
const itemAttr = this.getAttribs(item.itemAttr);
135-
const liClasses = classNames(this.activeRoute(item.url, this.props), itemAttr.class, itemAttr.className)
139+
const liClasses = classNames('nav-item', 'nav-dropdown', itemAttr.class, itemAttr.className);
136140
delete itemAttr.class;
137141
delete itemAttr.className;
142+
const NavLink = this.props.router.NavLink || RsNavLink;
143+
138144
return (
139-
<li key={key} className={liClasses} {...itemAttr}>
140-
<a className={classes} href="#" onClick={this.handleClick} {...attributes}><i className={classIcon}/>
145+
<li key={key} className={classNames(liClasses, {'open': this.isActiveRoute(item.url, this.props)})} {...itemAttr}>
146+
<NavLink activeClassName='open'
147+
className={classes}
148+
to={item.url || ''}
149+
{...attributes}
150+
onClick={(e) => this.handleClick(e, item)}>
151+
<i className={classIcon}/>
141152
{item.name}{this.navBadge(item.badge)}
142-
</a>
153+
</NavLink>
143154
<ul className="nav-dropdown-items">
144155
{this.navList(item.children)}
145156
</ul>

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.