diff --git a/src/_nav.js b/src/_nav.js
index 14c02f4fe..e05863e70 100644
--- a/src/_nav.js
+++ b/src/_nav.js
@@ -16,33 +16,61 @@ import {
} from '@coreui/icons'
import { CNavGroup, CNavItem, CNavTitle } from '@coreui/react'
+// Helper component for external link labels with icon
+const ExternalLinkLabel = ({ children }) => (
+ <>
+ {children}
+
+ >
+)
+
+// Badge configuration constants
+const BADGE_PRO = {
+ color: 'danger',
+ text: 'PRO',
+}
+
+const BADGE_NEW = {
+ color: 'info',
+ text: 'NEW',
+}
+
+// CoreUI Pro documentation base URL
+const PRO_DOCS_BASE = 'https://coreui.io/react/docs'
+
+// Navigation item factories for consistency and DRY principle
+const createNavItem = (name, to, options = {}) => ({
+ component: CNavItem,
+ name,
+ to,
+ ...options,
+})
+
+const createProNavItem = (name, path) => ({
+ component: CNavItem,
+ name: {name},
+ href: `${PRO_DOCS_BASE}${path}`,
+ badge: BADGE_PRO,
+})
+
const _nav = [
{
component: CNavItem,
name: 'Dashboard',
to: '/dashboard',
icon: ,
- badge: {
- color: 'info',
- text: 'NEW',
- },
+ badge: BADGE_NEW,
},
{
component: CNavTitle,
name: 'Theme',
},
- {
- component: CNavItem,
- name: 'Colors',
- to: '/theme/colors',
+ createNavItem('Colors', '/theme/colors', {
icon: ,
- },
- {
- component: CNavItem,
- name: 'Typography',
- to: '/theme/typography',
+ }),
+ createNavItem('Typography', '/theme/typography', {
icon: ,
- },
+ }),
{
component: CNavTitle,
name: 'Components',
@@ -53,132 +81,25 @@ const _nav = [
to: '/base',
icon: ,
items: [
- {
- component: CNavItem,
- name: 'Accordion',
- to: '/base/accordion',
- },
- {
- component: CNavItem,
- name: 'Breadcrumb',
- to: '/base/breadcrumbs',
- },
- {
- component: CNavItem,
- name: (
-
- {'Calendar'}
-
-
- ),
- href: 'https://coreui.io/react/docs/components/calendar/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: 'Cards',
- to: '/base/cards',
- },
- {
- component: CNavItem,
- name: 'Carousel',
- to: '/base/carousels',
- },
- {
- component: CNavItem,
- name: 'Collapse',
- to: '/base/collapses',
- },
- {
- component: CNavItem,
- name: 'List group',
- to: '/base/list-groups',
- },
- {
- component: CNavItem,
- name: 'Navs & Tabs',
- to: '/base/navs',
- },
- {
- component: CNavItem,
- name: 'Pagination',
- to: '/base/paginations',
- },
- {
- component: CNavItem,
- name: 'Placeholders',
- to: '/base/placeholders',
- },
- {
- component: CNavItem,
- name: 'Popovers',
- to: '/base/popovers',
- },
- {
- component: CNavItem,
- name: 'Progress',
- to: '/base/progress',
- },
- {
- component: CNavItem,
- name: 'Smart Pagination',
- href: 'https://coreui.io/react/docs/components/smart-pagination/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: (
-
- {'Smart Table'}
-
-
- ),
- href: 'https://coreui.io/react/docs/components/smart-table/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: 'Spinners',
- to: '/base/spinners',
- },
- {
- component: CNavItem,
- name: 'Tables',
- to: '/base/tables',
- },
- {
- component: CNavItem,
- name: 'Tabs',
- to: '/base/tabs',
- },
- {
- component: CNavItem,
- name: 'Tooltips',
- to: '/base/tooltips',
- },
- {
- component: CNavItem,
- name: (
-
- {'Virtual Scroller'}
-
-
- ),
- href: 'https://coreui.io/react/docs/components/virtual-scroller/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
+ createNavItem('Accordion', '/base/accordion'),
+ createNavItem('Breadcrumb', '/base/breadcrumbs'),
+ createProNavItem('Calendar', '/components/calendar/'),
+ createNavItem('Cards', '/base/cards'),
+ createNavItem('Carousel', '/base/carousels'),
+ createNavItem('Collapse', '/base/collapses'),
+ createNavItem('List group', '/base/list-groups'),
+ createNavItem('Navs & Tabs', '/base/navs'),
+ createNavItem('Pagination', '/base/paginations'),
+ createNavItem('Placeholders', '/base/placeholders'),
+ createNavItem('Popovers', '/base/popovers'),
+ createNavItem('Progress', '/base/progress'),
+ createProNavItem('Smart Pagination', '/components/smart-pagination/'),
+ createProNavItem('Smart Table', '/components/smart-table/'),
+ createNavItem('Spinners', '/base/spinners'),
+ createNavItem('Tables', '/base/tables'),
+ createNavItem('Tabs', '/base/tabs'),
+ createNavItem('Tooltips', '/base/tooltips'),
+ createProNavItem('Virtual Scroller', '/components/virtual-scroller/'),
],
},
{
@@ -187,35 +108,10 @@ const _nav = [
to: '/buttons',
icon: ,
items: [
- {
- component: CNavItem,
- name: 'Buttons',
- to: '/buttons/buttons',
- },
- {
- component: CNavItem,
- name: 'Buttons groups',
- to: '/buttons/button-groups',
- },
- {
- component: CNavItem,
- name: 'Dropdowns',
- to: '/buttons/dropdowns',
- },
- {
- component: CNavItem,
- name: (
-
- {'Loading Button'}
-
-
- ),
- href: 'https://coreui.io/react/docs/components/loading-button/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
+ createNavItem('Buttons', '/buttons/buttons'),
+ createNavItem('Buttons groups', '/buttons/button-groups'),
+ createNavItem('Dropdowns', '/buttons/dropdowns'),
+ createProNavItem('Loading Button', '/components/loading-button/'),
],
},
{
@@ -223,167 +119,23 @@ const _nav = [
name: 'Forms',
icon: ,
items: [
- {
- component: CNavItem,
- name: (
-
- {'Autocomplete'}
-
-
- ),
- href: 'https://coreui.io/react/docs/forms/autocomplete/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: 'Checks & Radios',
- to: '/forms/checks-radios',
- },
- {
- component: CNavItem,
- name: (
-
- {'Date Picker'}
-
-
- ),
- href: 'https://coreui.io/react/docs/forms/date-picker/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: 'Date Range Picker',
- href: 'https://coreui.io/react/docs/forms/date-range-picker/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: 'Floating Labels',
- to: '/forms/floating-labels',
- },
- {
- component: CNavItem,
- name: 'Form Control',
- to: '/forms/form-control',
- },
- {
- component: CNavItem,
- name: 'Input Group',
- to: '/forms/input-group',
- },
- {
- component: CNavItem,
- name: (
-
- {'Multi Select'}
-
-
- ),
- href: 'https://coreui.io/react/docs/forms/multi-select/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: (
-
- {'Password Input'}
-
-
- ),
- href: 'https://coreui.io/react/docs/forms/password-input/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: 'Range',
- to: '/forms/range',
- },
- {
- component: CNavItem,
- name: (
-
- {'Range Slider'}
-
-
- ),
- href: 'https://coreui.io/react/docs/forms/range-slider/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: (
-
- {'Rating'}
-
-
- ),
- href: 'https://coreui.io/react/docs/forms/rating/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: 'Select',
- to: '/forms/select',
- },
- {
- component: CNavItem,
- name: (
-
- {'Stepper'}
-
-
- ),
- href: 'https://coreui.io/react/docs/forms/stepper/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: (
-
- {'Time Picker'}
-
-
- ),
- href: 'https://coreui.io/react/docs/forms/time-picker/',
- badge: {
- color: 'danger',
- text: 'PRO',
- },
- },
- {
- component: CNavItem,
- name: 'Layout',
- to: '/forms/layout',
- },
- {
- component: CNavItem,
- name: 'Validation',
- to: '/forms/validation',
- },
+ createProNavItem('Autocomplete', '/forms/autocomplete/'),
+ createNavItem('Checks & Radios', '/forms/checks-radios'),
+ createProNavItem('Date Picker', '/forms/date-picker/'),
+ createProNavItem('Date Range Picker', '/forms/date-range-picker/'),
+ createNavItem('Floating Labels', '/forms/floating-labels'),
+ createNavItem('Form Control', '/forms/form-control'),
+ createNavItem('Input Group', '/forms/input-group'),
+ createProNavItem('Multi Select', '/forms/multi-select/'),
+ createProNavItem('Password Input', '/forms/password-input/'),
+ createNavItem('Range', '/forms/range'),
+ createProNavItem('Range Slider', '/forms/range-slider/'),
+ createProNavItem('Rating', '/forms/rating/'),
+ createNavItem('Select', '/forms/select'),
+ createProNavItem('Stepper', '/forms/stepper/'),
+ createProNavItem('Time Picker', '/forms/time-picker/'),
+ createNavItem('Layout', '/forms/layout'),
+ createNavItem('Validation', '/forms/validation'),
],
},
{
@@ -397,21 +149,9 @@ const _nav = [
name: 'Icons',
icon: ,
items: [
- {
- component: CNavItem,
- name: 'CoreUI Free',
- to: '/icons/coreui-icons',
- },
- {
- component: CNavItem,
- name: 'CoreUI Flags',
- to: '/icons/flags',
- },
- {
- component: CNavItem,
- name: 'CoreUI Brands',
- to: '/icons/brands',
- },
+ createNavItem('CoreUI Free', '/icons/coreui-icons'),
+ createNavItem('CoreUI Flags', '/icons/flags'),
+ createNavItem('CoreUI Brands', '/icons/brands'),
],
},
{
@@ -419,26 +159,10 @@ const _nav = [
name: 'Notifications',
icon: ,
items: [
- {
- component: CNavItem,
- name: 'Alerts',
- to: '/notifications/alerts',
- },
- {
- component: CNavItem,
- name: 'Badges',
- to: '/notifications/badges',
- },
- {
- component: CNavItem,
- name: 'Modal',
- to: '/notifications/modals',
- },
- {
- component: CNavItem,
- name: 'Toasts',
- to: '/notifications/toasts',
- },
+ createNavItem('Alerts', '/notifications/alerts'),
+ createNavItem('Badges', '/notifications/badges'),
+ createNavItem('Modal', '/notifications/modals'),
+ createNavItem('Toasts', '/notifications/toasts'),
],
},
{
@@ -446,10 +170,7 @@ const _nav = [
name: 'Widgets',
to: '/widgets',
icon: ,
- badge: {
- color: 'info',
- text: 'NEW',
- },
+ badge: BADGE_NEW,
},
{
component: CNavTitle,
@@ -460,26 +181,10 @@ const _nav = [
name: 'Pages',
icon: ,
items: [
- {
- component: CNavItem,
- name: 'Login',
- to: '/login',
- },
- {
- component: CNavItem,
- name: 'Register',
- to: '/register',
- },
- {
- component: CNavItem,
- name: 'Error 404',
- to: '/404',
- },
- {
- component: CNavItem,
- name: 'Error 500',
- to: '/500',
- },
+ createNavItem('Login', '/login'),
+ createNavItem('Register', '/register'),
+ createNavItem('Error 404', '/404'),
+ createNavItem('Error 500', '/500'),
],
},
{