|
1 | 1 | <template> |
2 | 2 | <nav class="sidebar-nav"> |
3 | 3 | <VuePerfectScrollbar class="scroll-area" :settings="psSettings" @ps-scroll-y="scrollHandle"> |
4 | | - <ul class="nav"> |
5 | | - <template v-for="(item, index) in navItems"> |
6 | | - <template v-if="item.title"> |
7 | | - <SidebarNavTitle :key="index" :name="item.name" :classes="item.class" :wrapper="item.wrapper"/> |
8 | | - </template> |
9 | | - <template v-else-if="item.divider"> |
10 | | - <SidebarNavDivider :key="index" :classes="item.class"/> |
11 | | - </template> |
12 | | - <template v-else-if="item.label"> |
13 | | - <SidebarNavLabel :key="index" :name="item.name" :url="item.url" :icon="item.icon" :label="item.label" :classes="item.class"/> |
14 | | - </template> |
15 | | - <template v-else> |
16 | | - <template v-if="item.children"> |
17 | | - <!-- First level dropdown --> |
18 | | - <SidebarNavDropdown :key="index" :name="item.name" :url="item.url" :icon="item.icon"> |
19 | | - <template v-for="(childL1, index1) in item.children"> |
20 | | - <template v-if="childL1.children"> |
21 | | - <!-- Second level dropdown --> |
22 | | - <SidebarNavDropdown :key="index1" :name="childL1.name" :url="childL1.url" :icon="childL1.icon"> |
23 | | - <li :key="index2" class="nav-item" v-for="(childL2, index2) in childL1.children"> |
24 | | - <SidebarNavLink :name="childL2.name" :url="childL2.url" :icon="childL2.icon" :badge="childL2.badge" :variant="item.variant"/> |
25 | | - </li> |
26 | | - </SidebarNavDropdown> |
27 | | - </template> |
28 | | - <template v-else> |
29 | | - <SidebarNavItem :key="index1" :classes="item.class"> |
30 | | - <SidebarNavLink :name="childL1.name" :url="childL1.url" :icon="childL1.icon" :badge="childL1.badge" :variant="item.variant"/> |
31 | | - </SidebarNavItem> |
32 | | - </template> |
33 | | - </template> |
34 | | - </SidebarNavDropdown> |
| 4 | + <ul class="nav"> |
| 5 | + <template v-for="(item, index) in navItems"> |
| 6 | + <template v-if="item.title"> |
| 7 | + <SidebarNavTitle :key="index" :name="item.name" :classes="item.class" :wrapper="item.wrapper"/> |
| 8 | + </template> |
| 9 | + <template v-else-if="item.divider"> |
| 10 | + <SidebarNavDivider :key="index" :classes="item.class"/> |
| 11 | + </template> |
| 12 | + <template v-else-if="item.label"> |
| 13 | + <SidebarNavLabel :key="index" :name="item.name" :url="item.url" :icon="item.icon" :label="item.label" :classes="item.class"/> |
35 | 14 | </template> |
36 | 15 | <template v-else> |
37 | | - <SidebarNavItem :key="index" :classes="item.class"> |
38 | | - <SidebarNavLink :name="item.name" :url="item.url" :icon="item.icon" :badge="item.badge" :variant="item.variant"/> |
39 | | - </SidebarNavItem> |
| 16 | + <template v-if="item.children"> |
| 17 | + <!-- First level dropdown --> |
| 18 | + <SidebarNavDropdown :key="index" :name="item.name" :url="item.url" :icon="item.icon"> |
| 19 | + <template v-for="(childL1, index1) in item.children"> |
| 20 | + <template v-if="childL1.children"> |
| 21 | + <!-- Second level dropdown --> |
| 22 | + <SidebarNavDropdown :key="index1" :name="childL1.name" :url="childL1.url" :icon="childL1.icon"> |
| 23 | + <li :key="index2" class="nav-item" v-for="(childL2, index2) in childL1.children"> |
| 24 | + <SidebarNavLink :name="childL2.name" :url="childL2.url" :icon="childL2.icon" :badge="childL2.badge" :variant="item.variant"/> |
| 25 | + </li> |
| 26 | + </SidebarNavDropdown> |
| 27 | + </template> |
| 28 | + <template v-else> |
| 29 | + <SidebarNavItem :key="index1" :classes="item.class"> |
| 30 | + <SidebarNavLink :name="childL1.name" :url="childL1.url" :icon="childL1.icon" :badge="childL1.badge" :variant="item.variant"/> |
| 31 | + </SidebarNavItem> |
| 32 | + </template> |
| 33 | + </template> |
| 34 | + </SidebarNavDropdown> |
| 35 | + </template> |
| 36 | + <template v-else> |
| 37 | + <SidebarNavItem :key="index" :classes="item.class"> |
| 38 | + <SidebarNavLink :name="item.name" :url="item.url" :icon="item.icon" :badge="item.badge" :variant="item.variant"/> |
| 39 | + </SidebarNavItem> |
| 40 | + </template> |
40 | 41 | </template> |
41 | 42 | </template> |
42 | | - </template> |
43 | | - </ul> |
44 | | - <slot></slot> |
| 43 | + </ul> |
| 44 | + <slot></slot> |
45 | 45 | </VuePerfectScrollbar> |
46 | 46 | </nav> |
47 | 47 | </template> |
@@ -74,11 +74,15 @@ export default { |
74 | 74 | VuePerfectScrollbar |
75 | 75 | }, |
76 | 76 | data () { |
77 | | - return { |
78 | | - psSettings: { |
| 77 | + return {} |
| 78 | + }, |
| 79 | + computed: { |
| 80 | + psSettings: () => { |
| 81 | + // ToDo: find better rtl fix |
| 82 | + return { |
79 | 83 | maxScrollbarLength: 200, |
80 | 84 | minScrollbarLength: 40, |
81 | | - suppressScrollX: true, |
| 85 | + suppressScrollX: getComputedStyle(document.querySelector('html')).direction !== 'rtl', |
82 | 86 | wheelPropagation: false, |
83 | 87 | interceptRailY: styles => ({ ...styles, height: 0 }) |
84 | 88 | } |
|
0 commit comments