diff --git a/.eslintrc b/.eslintrc
index 8c2d9f43..4bfd9014 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -40,7 +40,7 @@
"createClass": "createReactClass", // Regex for Component Factory to use,
// default to "createReactClass"
"pragma": "React", // Pragma to use, default to "React"
- "version": "16.5", // React version, default to the latest React stable release
+ "version": "16.8", // React version, default to the latest React stable release
"flowVersion": "0.81" // Flow version
},
"propWrapperFunctions": [ "forbidExtraProps" ] // The names of any functions used to wrap the
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e368b640..3c7ac10d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
### [@coreui/react](https://coreui.io/) changelog
+##### `v2.5.1`
+
+- fix(SidebarNav): add missing `class` and `attributes` to navDropdown item
+- fix(HeaderDropdown): add missing Dropdown.propTypes
+- refactor(demo): AppHeaderDropdown remove style right auto
+
+###### dependencies update
+- update `core-js` to `^2.6.8`
+- update `enzyme-adapter-react-16` to `^1.13.1`
+- update `webpack-dev-server` to `^3.4.1`
+
##### `v2.5.0`
- BREAKING CHANGE release for use with `react-router-dom v5`
- feat(Breadcrumb2): mandatory prop `router` :boom: see: [Breadcrumb](./src/Breadcrumb.md)
diff --git a/demo/src/containers/DefaultLayout/DefaultLayout.js b/demo/src/containers/DefaultLayout/DefaultLayout.js
index 2fce1fb0..6e66ad3d 100644
--- a/demo/src/containers/DefaultLayout/DefaultLayout.js
+++ b/demo/src/containers/DefaultLayout/DefaultLayout.js
@@ -16,6 +16,7 @@ import {
AppSidebarForm,
AppSidebarHeader,
AppSidebarMinimizer,
+ // AppSidebarNav as AppSidebarNav,
AppSidebarNav2 as AppSidebarNav,
AppSidebarToggler,
} from '../../../../src';
@@ -53,7 +54,7 @@ class DefaultLayout extends Component {
-
+
AppHeaderDropdown
@@ -91,7 +92,7 @@ class DefaultLayout extends Component {
- CoreUI © 2018 creativeLabs
+ CoreUI © 2019 creativeLabs
Powered by CoreUI for React
diff --git a/package.json b/package.json
index ea0e0966..f723f247 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@coreui/react",
- "version": "2.5.0",
+ "version": "2.5.1",
"description": "CoreUI React Bootstrap 4 components",
"license": "MIT",
"author": {
@@ -37,7 +37,7 @@
"dependencies": {
"@coreui/icons": "0.3.0",
"classnames": "^2.2.6",
- "core-js": "^2.6.5",
+ "core-js": "^2.6.8",
"prop-types": "^15.7.2",
"react-onclickout": "^2.0.8",
"react-perfect-scrollbar": "^1.5.2",
@@ -51,7 +51,7 @@
"devDependencies": {
"babel-eslint": "^10.0.1",
"enzyme": "^3.9.0",
- "enzyme-adapter-react-16": "^1.13.0",
+ "enzyme-adapter-react-16": "^1.13.1",
"eslint": "^5.16.0",
"eslint-plugin-import": "^2.17.2",
"eslint-plugin-react": "^7.13.0",
@@ -60,7 +60,7 @@
"react-dom": "^16.8.6",
"react-router-dom": "^5.0.0",
"sinon": "^5.1.1",
- "webpack-dev-server": "~3.3.1"
+ "webpack-dev-server": "^3.4.1"
},
"repository": {
"type": "git",
diff --git a/src/HeaderDropdown.js b/src/HeaderDropdown.js
index cd23cb29..7fc33be3 100644
--- a/src/HeaderDropdown.js
+++ b/src/HeaderDropdown.js
@@ -4,7 +4,8 @@ import PropTypes from 'prop-types';
const propTypes = {
children: PropTypes.node,
- direction: PropTypes.string
+ direction: PropTypes.string,
+ ...Dropdown.propTypes
};
const defaultProps = {
diff --git a/src/SidebarNav.js b/src/SidebarNav.js
index 549c01b2..25229ebc 100644
--- a/src/SidebarNav.js
+++ b/src/SidebarNav.js
@@ -109,9 +109,14 @@ class AppSidebarNav extends Component {
// nav dropdown
navDropdown(item, key) {
const classIcon = classNames('nav-icon', item.icon);
+ const attributes = JSON.parse(JSON.stringify(item.attributes || {}));
+ const classes = classNames('nav-link', 'nav-dropdown-toggle', item.class, attributes.class);
+ delete attributes.class;
return (
- {item.name}{this.navBadge(item.badge)}
+
+ {item.name}{this.navBadge(item.badge)}
+
{this.navList(item.children)}
@@ -132,14 +137,14 @@ class AppSidebarNav extends Component {
// nav link
navLink(item, key, classes) {
- const url = item.url ? item.url : '';
+ const url = item.url || '';
const itemIcon =
const itemBadge = this.navBadge(item.badge)
const attributes = item.attributes || {}
return (
{ attributes.disabled ?
-
+
{itemIcon}{item.name}{itemBadge}
:
@@ -181,7 +186,7 @@ class AppSidebarNav extends Component {
const navClasses = classNames(className, 'sidebar-nav');
// ToDo: find better rtl fix
- const isRtl = getComputedStyle(document.querySelector('html')).direction === 'rtl'
+ const isRtl = getComputedStyle(document.documentElement).direction === 'rtl'
// sidebar-nav root
return (
diff --git a/src/SidebarNav.md b/src/SidebarNav.md
index dfc96e40..665aa018 100644
--- a/src/SidebarNav.md
+++ b/src/SidebarNav.md
@@ -58,6 +58,8 @@ router | inject `react-router-dom@5` object | _mandatory for @coreui/react ^2.5.
name: 'Icons',
url: '/icons',
icon: 'icon-star',
+ class: 'text-uppercase', // (v2.5.1 up) optional
+ attributes: { class: 'bg-success' }, // (v2.5.1 up) optional valid JS object with JS API naming,
children: [
{
name: 'Flags', // item options apply
diff --git a/src/SidebarNav2.js b/src/SidebarNav2.js
index 2ab4b7fa..2951bc1e 100644
--- a/src/SidebarNav2.js
+++ b/src/SidebarNav2.js
@@ -47,8 +47,8 @@ class AppSidebarNav2 extends Component {
activeRoute(routeName, props) {
return props.location.pathname.indexOf(routeName) > -1
- ? 'nav-item nav-dropdown open'
- : 'nav-item nav-dropdown';
+ ? 'nav-item nav-dropdown open'
+ : 'nav-item nav-dropdown';
}
hideMobile() {
@@ -65,11 +65,11 @@ class AppSidebarNav2 extends Component {
// nav type
navType(item, idx) {
return (
- item.title ? this.navTitle(item, idx)
- : item.divider ? this.navDivider(item, idx)
- : item.label ? this.navLabel(item, idx)
- : item.children ? this.navDropdown(item, idx)
- : this.navItem(item, idx)
+ item.title ? this.navTitle(item, idx)
+ : item.divider ? this.navDivider(item, idx)
+ : item.label ? this.navLabel(item, idx)
+ : item.children ? this.navDropdown(item, idx)
+ : this.navItem(item, idx)
);
}
@@ -96,27 +96,32 @@ class AppSidebarNav2 extends Component {
item: classNames('hidden-cn', item.class),
link: classNames('nav-label', item.class ? item.class : ''),
icon: classNames(
- 'nav-icon',
- !item.icon ? 'fa fa-circle' : item.icon,
- item.label.variant ? `text-${item.label.variant}` : '',
- item.label.class ? item.label.class : '',
+ 'nav-icon',
+ !item.icon ? 'fa fa-circle' : item.icon,
+ item.label.variant ? `text-${item.label.variant}` : '',
+ item.label.class ? item.label.class : '',
)
};
return (
- this.navLink(item, key, classes)
+ this.navLink(item, key, classes)
);
}
// nav dropdown
navDropdown(item, key) {
const classIcon = classNames('nav-icon', item.icon);
+ const attributes = JSON.parse(JSON.stringify(item.attributes || {}));
+ const classes = classNames('nav-link', 'nav-dropdown-toggle', item.class, attributes.class);
+ delete attributes.class;
return (
-
- {item.name}{this.navBadge(item.badge)}
-
- {this.navList(item.children)}
-
- );
+
+
+ {item.name}{this.navBadge(item.badge)}
+
+
+ {this.navList(item.children)}
+
+ );
}
// nav item with nav link
@@ -127,7 +132,7 @@ class AppSidebarNav2 extends Component {
icon: classNames('nav-icon', item.icon)
};
return (
- this.navLink(item, key, classes)
+ this.navLink(item, key, classes)
);
}
@@ -139,21 +144,21 @@ class AppSidebarNav2 extends Component {
const attributes = item.attributes || {}
const NavLink = this.props.router.NavLink || RsNavLink
return (
-
- { attributes.disabled ?
-
- {itemIcon}{item.name}{itemBadge}
-
- :
- this.isExternal(url) || NavLink === RsNavLink ?
-
- {itemIcon}{item.name}{itemBadge}
- :
-
- {itemIcon}{item.name}{itemBadge}
-
- }
-
+
+ { attributes.disabled ?
+
+ {itemIcon}{item.name}{itemBadge}
+
+ :
+ this.isExternal(url) || NavLink === RsNavLink ?
+
+ {itemIcon}{item.name}{itemBadge}
+ :
+
+ {itemIcon}{item.name}{itemBadge}
+
+ }
+
);
}
@@ -162,7 +167,7 @@ class AppSidebarNav2 extends Component {
if (badge) {
const classes = classNames(badge.class);
return (
- {badge.text}
+ {badge.text}
);
}
return null;
@@ -184,15 +189,15 @@ class AppSidebarNav2 extends Component {
const navClasses = classNames(className, 'sidebar-nav');
// ToDo: find better rtl fix
- const isRtl = getComputedStyle(document.querySelector('html')).direction === 'rtl'
+ const isRtl = getComputedStyle(document.documentElement).direction === 'rtl'
// sidebar-nav root
return (
-
-
-
+
+
+
);
}
}