diff --git a/src/_nav.js b/src/_nav.js
index 45c9198..62b332c 100644
--- a/src/_nav.js
+++ b/src/_nav.js
@@ -1,12 +1,10 @@
import React from 'react'
import CIcon from '@coreui/icons-react'
-import { NavLink } from 'react-router-dom'
const _nav = [
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Dashboard',
+ component: 'CNavItem',
+ name: 'Dashboard',
to: '/dashboard',
icon: ,
badge: {
@@ -15,210 +13,206 @@ const _nav = [
},
},
{
- _component: 'CNavTitle',
- anchor: 'Theme',
+ component: 'CNavTitle',
+ name: 'Theme',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Colors',
+ component: 'CNavItem',
+ name: 'Colors',
to: '/theme/colors',
icon: ,
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Typography',
+ component: 'CNavItem',
+ name: 'Typography',
to: '/theme/typography',
icon: ,
},
{
- _component: 'CNavTitle',
- anchor: 'Components',
+ component: 'CNavTitle',
+ name: 'Components',
},
{
- _component: 'CNavGroup',
- as: NavLink,
- anchor: 'Base',
- to: '/to',
- icon: ,
+ component: 'CNavGroup',
+ name: 'Base',
+ to: '/base',
+ icon: 'cil-puzzle',
items: [
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Accordion',
+ component: 'CNavItem',
+
+ name: 'Accordion',
to: '/base/accordion',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Breadcrumb',
+ component: 'CNavItem',
+
+ name: 'Breadcrumb',
to: '/base/breadcrumbs',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Cards',
+ component: 'CNavItem',
+
+ name: 'Cards',
to: '/base/cards',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Carousel',
+ component: 'CNavItem',
+
+ name: 'Carousel',
to: '/base/carousels',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Collapse',
+ component: 'CNavItem',
+
+ name: 'Collapse',
to: '/base/collapses',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'List group',
+ component: 'CNavItem',
+
+ name: 'List group',
to: '/base/list-groups',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Navs & Tabs',
+ component: 'CNavItem',
+
+ name: 'Navs & Tabs',
to: '/base/navs',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Pagination',
+ component: 'CNavItem',
+
+ name: 'Pagination',
to: '/base/paginations',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Popovers',
+ component: 'CNavItem',
+
+ name: 'Popovers',
to: '/base/popovers',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Progress',
+ component: 'CNavItem',
+
+ name: 'Progress',
to: '/base/progress',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Spinners',
+ component: 'CNavItem',
+
+ name: 'Spinners',
to: '/base/spinners',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Tables',
+ component: 'CNavItem',
+
+ name: 'Tables',
to: '/base/tables',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Tooltips',
+ component: 'CNavItem',
+
+ name: 'Tooltips',
to: '/base/tooltips',
},
],
},
{
- _component: 'CNavGroup',
- anchor: 'Buttons',
+ component: 'CNavGroup',
+ name: 'Buttons',
icon: ,
items: [
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Buttons',
+ component: 'CNavItem',
+
+ name: 'Buttons',
to: '/buttons/buttons',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Buttons groups',
+ component: 'CNavItem',
+
+ name: 'Buttons groups',
to: '/buttons/button-groups',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Dropdowns',
+ component: 'CNavItem',
+
+ name: 'Dropdowns',
to: '/buttons/dropdowns',
},
],
},
{
- _component: 'CNavGroup',
- anchor: 'Forms',
+ component: 'CNavGroup',
+ name: 'Forms',
icon: ,
items: [
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Form Control',
+ component: 'CNavItem',
+
+ name: 'Form Control',
to: '/forms/form-control',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Select',
+ component: 'CNavItem',
+
+ name: 'Select',
to: '/forms/select',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Checks & Radios',
+ component: 'CNavItem',
+
+ name: 'Checks & Radios',
to: '/forms/checks-radios',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Range',
+ component: 'CNavItem',
+
+ name: 'Range',
to: '/forms/range',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Input Group',
+ component: 'CNavItem',
+
+ name: 'Input Group',
to: '/forms/input-group',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Floating Labels',
+ component: 'CNavItem',
+
+ name: 'Floating Labels',
to: '/forms/floating-labels',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Layout',
+ component: 'CNavItem',
+
+ name: 'Layout',
to: '/forms/layout',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Validation',
+ component: 'CNavItem',
+
+ name: 'Validation',
to: '/forms/validation',
},
],
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Charts',
+ component: 'CNavItem',
+ name: 'Charts',
to: '/charts',
icon: ,
},
{
- _component: 'CNavGroup',
- anchor: 'Icons',
+ component: 'CNavGroup',
+ name: 'Icons',
icon: ,
items: [
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'CoreUI Free',
+ component: 'CNavItem',
+
+ name: 'CoreUI Free',
to: '/icons/coreui-icons',
badge: {
color: 'success',
@@ -226,54 +220,53 @@ const _nav = [
},
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'CoreUI Flags',
+ component: 'CNavItem',
+
+ name: 'CoreUI Flags',
to: '/icons/flags',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'CoreUI Brands',
+ component: 'CNavItem',
+
+ name: 'CoreUI Brands',
to: '/icons/brands',
},
],
},
{
- _component: 'CNavGroup',
- anchor: 'Notifications',
+ component: 'CNavGroup',
+ name: 'Notifications',
icon: ,
items: [
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Alerts',
+ component: 'CNavItem',
+
+ name: 'Alerts',
to: '/notifications/alerts',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Badges',
+ component: 'CNavItem',
+
+ name: 'Badges',
to: '/notifications/badges',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Modal',
+ component: 'CNavItem',
+
+ name: 'Modal',
to: '/notifications/modals',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Toasts',
+ component: 'CNavItem',
+
+ name: 'Toasts',
to: '/notifications/toasts',
},
],
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Widgets',
+ component: 'CNavItem',
+ name: 'Widgets',
to: '/widgets',
icon: ,
badge: {
@@ -282,36 +275,36 @@ const _nav = [
},
},
{
- _component: 'CNavTitle',
- anchor: 'Extras',
+ component: 'CNavTitle',
+ name: 'Extras',
},
{
- _component: 'CNavGroup',
- anchor: 'Pages',
+ component: 'CNavGroup',
+ name: 'Pages',
icon: ,
items: [
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Login',
+ component: 'CNavItem',
+
+ name: 'Login',
to: '/login',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Register',
+ component: 'CNavItem',
+
+ name: 'Register',
to: '/register',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Error 404',
+ component: 'CNavItem',
+
+ name: 'Error 404',
to: '/404',
},
{
- _component: 'CNavItem',
- as: NavLink,
- anchor: 'Error 500',
+ component: 'CNavItem',
+
+ name: 'Error 500',
to: '/500',
},
],
diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js
index c48a061..0126aaf 100644
--- a/src/components/AppSidebar.js
+++ b/src/components/AppSidebar.js
@@ -1,13 +1,9 @@
import React from 'react'
import { useSelector, useDispatch } from 'react-redux'
-import {
- CSidebar,
- CSidebarBrand,
- CSidebarNav,
- CSidebarToggler,
- CCreateNavItem,
-} from '@coreui/react'
+import { CSidebar, CSidebarBrand, CSidebarNav, CSidebarToggler } from '@coreui/react'
+
+import { AppSidebarNav } from './AppSidebarNav'
import CIcon from '@coreui/icons-react'
@@ -27,7 +23,7 @@ const AppSidebar = () => {
position="fixed"
selfHiding="md"
unfoldable={unfoldable}
- show={sidebarShow}
+ visible={sidebarShow}
onShow={() => console.log('show')}
onHide={() => {
dispatch({ type: 'set', sidebarShow: false })
@@ -39,7 +35,7 @@ const AppSidebar = () => {
-
+
{
+ const components = { CNavGroup, CNavGroupItems, CNavItem, CNavLink, CNavTitle }
+ const location = useLocation()
+
+ const navLink = (name, icon, badge) => {
+ return (
+ <>
+ {icon && typeof icon === 'string' ? : icon}
+ {name && name}
+ {badge && (
+
+ {badge.text}
+
+ )}
+ >
+ )
+ }
+
+ const navItem = (item, index) => {
+ const { component, name, badge, icon, ...rest } = item
+ const Component = components[component] || component
+ return (
+
+ {navLink(name, icon, badge)}
+
+ )
+ }
+ const navGroup = (item, index) => {
+ const { component, name, icon, items, to, ...rest } = item
+ const Component = components[component] || component
+ return (
+
+ {item.items.map((item, index) =>
+ item.items ? navGroup(item, index) : navItem(item, index),
+ )}
+
+ )
+ }
+
+ return (
+
+ {items &&
+ items.map((item, index) => (item.items ? navGroup(item, index) : navItem(item, index)))}
+
+ )
+}
+
+AppSidebarNav.propTypes = {
+ items: PropTypes.arrayOf(PropTypes.any).isRequired,
+}