683cf9bb92
- refactor: raw html to b-row, b-col, b-card, b-button components - fix: Cards change variant="accent- to class="card-accent- - refactor: Modal's ok-button variants - refactor: forms with validation feedback - update: bootstrap-vue to 1.1.0 closes #28 - update: to vue 2.5.6 from build v1.0.5 - update: bootstrap-vue to 1.0.x - fix: use <b-form-radio-group> instead of <b-form-radio> - refactor: <b-table> bootstrap-vue component in Tables closes #24 - refactor: extract Table component from Tables - refactor: <b-table> bootstrap-vue component in Switches - fix: add table-responsive-sm class to Tables closes #26 - refactor: use component <b-navbar-nav> instead of deprecated prop is-nav-bar - fix: b-progress height property workaround (bootstrap-vue) - chore: dependencies update
94 lines
3.0 KiB
Vue
94 lines
3.0 KiB
Vue
<template>
|
|
<div class="sidebar">
|
|
<SidebarHeader/>
|
|
<SidebarForm/>
|
|
<nav class="sidebar-nav">
|
|
<div slot="header"></div>
|
|
<ul class="nav">
|
|
<template v-for="(item, index) in navItems">
|
|
<template v-if="item.title">
|
|
<SidebarNavTitle :name="item.name" :classes="item.class" :wrapper="item.wrapper"/>
|
|
</template>
|
|
<template v-else-if="item.divider">
|
|
<SidebarNavDivider :classes="item.class"/>
|
|
</template>
|
|
<template v-else>
|
|
<template v-if="item.children">
|
|
<!-- First level dropdown -->
|
|
<SidebarNavDropdown :name="item.name" :url="item.url" :icon="item.icon">
|
|
<template v-for="(childL1, index) in item.children">
|
|
<template v-if="childL1.children">
|
|
<!-- Second level dropdown -->
|
|
<SidebarNavDropdown :name="childL1.name" :url="childL1.url" :icon="childL1.icon">
|
|
<li class="nav-item" v-for="(childL2, index) in childL1.children">
|
|
<SidebarNavLink :name="childL2.name" :url="childL2.url" :icon="childL2.icon" :badge="childL2.badge" :variant="item.variant"/>
|
|
</li>
|
|
</SidebarNavDropdown>
|
|
</template>
|
|
<template v-else>
|
|
<SidebarNavItem :classes="item.class">
|
|
<SidebarNavLink :name="childL1.name" :url="childL1.url" :icon="childL1.icon" :badge="childL1.badge" :variant="item.variant"/>
|
|
</SidebarNavItem>
|
|
</template>
|
|
</template>
|
|
</SidebarNavDropdown>
|
|
</template>
|
|
<template v-else>
|
|
<SidebarNavItem :classes="item.class">
|
|
<SidebarNavLink :name="item.name" :url="item.url" :icon="item.icon" :badge="item.badge" :variant="item.variant"/>
|
|
</SidebarNavItem>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</ul>
|
|
<slot></slot>
|
|
</nav>
|
|
<SidebarFooter/>
|
|
<SidebarMinimizer/>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import SidebarFooter from './SidebarFooter'
|
|
import SidebarForm from './SidebarForm'
|
|
import SidebarHeader from './SidebarHeader'
|
|
import SidebarMinimizer from './SidebarMinimizer'
|
|
import SidebarNavDivider from './SidebarNavDivider'
|
|
import SidebarNavDropdown from './SidebarNavDropdown'
|
|
import SidebarNavLink from './SidebarNavLink'
|
|
import SidebarNavTitle from './SidebarNavTitle'
|
|
import SidebarNavItem from './SidebarNavItem'
|
|
export default {
|
|
name: 'sidebar',
|
|
props: {
|
|
navItems: {
|
|
type: Array,
|
|
required: true,
|
|
default: () => []
|
|
}
|
|
},
|
|
components: {
|
|
SidebarFooter,
|
|
SidebarForm,
|
|
SidebarHeader,
|
|
SidebarMinimizer,
|
|
SidebarNavDivider,
|
|
SidebarNavDropdown,
|
|
SidebarNavLink,
|
|
SidebarNavTitle,
|
|
SidebarNavItem
|
|
},
|
|
methods: {
|
|
handleClick (e) {
|
|
e.preventDefault()
|
|
e.target.parentElement.classList.toggle('open')
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="css">
|
|
.nav-link {
|
|
cursor:pointer;
|
|
}
|
|
</style>
|