Skip to content

Commit f782c59

Browse files
authored
Merge pull request #60 from connorabbas/develop
Feature - Toggle Sidebar
2 parents d9d6788 + da77588 commit f782c59

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

src/layouts/app/SidebarLayout.vue

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
<script setup lang="ts">
2-
import { ChevronsUpDown, Menu as MenuIcon } from 'lucide-vue-next'
2+
import { useStorage } from '@vueuse/core'
3+
import {
4+
ChevronsUpDown,
5+
Menu as MenuIcon,
6+
PanelLeftClose,
7+
PanelLeftOpen
8+
} from 'lucide-vue-next'
39
import { useAppLayout } from '@/composables/useAppLayout'
410
import Container from '@/components/Container.vue'
511
import PopupMenuButton from '@/components/PopupMenuButton.vue'
@@ -21,6 +27,11 @@ const {
2127
expandedKeys,
2228
userMenuItems,
2329
} = useAppLayout()
30+
31+
const sidebarOpen = useStorage('desktop-sidebar-open', true)
32+
const toggleSidebar = () => {
33+
sidebarOpen.value = !sidebarOpen.value
34+
}
2435
</script>
2536

2637
<template>
@@ -84,7 +95,8 @@ const {
8495
<div class="flex-1">
8596
<!-- Desktop Sidebar -->
8697
<aside
87-
class="w-[18rem] inset-0 hidden lg:block fixed overflow-y-auto overflow-x-hidden dynamic-bg border-r dynamic-border"
98+
class="w-[18rem] inset-0 hidden lg:block fixed overflow-y-auto overflow-x-hidden dynamic-bg border-r dynamic-border transition-transform duration-300 ease-in-out"
99+
:class="sidebarOpen ? 'translate-x-0' : '-translate-x-full'"
88100
>
89101
<div class="w-full h-full flex flex-col justify-between p-4">
90102
<div class="space-y-6">
@@ -115,16 +127,32 @@ const {
115127
</aside>
116128

117129
<!-- Scrollable Content -->
118-
<main class="flex flex-col h-full lg:pl-[18rem]">
130+
<main
131+
class="flex flex-col h-full transition-[padding] duration-300 ease-in-out"
132+
:class="sidebarOpen ? 'lg:pl-[18rem]' : 'lg:pl-0'"
133+
>
119134
<Container
120135
vertical
121136
fluid
122137
>
123-
<!-- Breadcrumbs -->
124-
<Breadcrumb
125-
v-if="props.breadcrumbs.length"
126-
:model="props.breadcrumbs"
127-
/>
138+
<div class="flex gap-4 items-center">
139+
<Button
140+
v-tooltip.right="`${sidebarOpen ? 'Collapse' : 'Expand'} Sidebar`"
141+
class="hidden lg:flex"
142+
severity="secondary"
143+
outlined
144+
@click="toggleSidebar()"
145+
>
146+
<template #icon>
147+
<PanelLeftClose v-if="sidebarOpen" />
148+
<PanelLeftOpen v-else />
149+
</template>
150+
</Button>
151+
<Breadcrumb
152+
v-if="props.breadcrumbs.length"
153+
:model="props.breadcrumbs"
154+
/>
155+
</div>
128156

129157
<!-- Page Content -->
130158
<slot />

0 commit comments

Comments
 (0)