Skip to content

Commit 3ce62fe

Browse files
authored
Merge pull request #674 from code16/improve-sidebar
Persist sidebar closed state + add sidebar trigger separator
2 parents 3feeb9d + 55f3fb1 commit 3ce62fe

3 files changed

Lines changed: 12 additions & 3 deletions

File tree

resources/js/Layouts/Layout.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import GlobalSearch from "@/components/GlobalSearch.vue";
5858
import Content from "@/components/Content.vue";
5959
import MenuItem from "@/components/MenuItem.vue";
60+
import { Separator } from "@/components/ui/separator";
6061
6162
const dialogs = useDialogs();
6263
const menu = useMenu();
@@ -91,7 +92,7 @@
9192

9293
<template>
9394
<ConfigProvider>
94-
<SidebarProvider>
95+
<SidebarProvider persist>
9596
<template v-if="auth()?.user">
9697
<Sidebar>
9798
<SidebarHeader class="p-4 h-14 items-start justify-center">
@@ -252,6 +253,10 @@
252253
<template v-if="auth()?.user">
253254
<SidebarTrigger class="-ml-1 shrink-0" />
254255
</template>
256+
<Separator
257+
orientation="vertical"
258+
class="mr-2 data-[orientation=vertical]:h-4"
259+
/>
255260
<div class="min-w-0 flex-1 lg:flex-initial">
256261
<slot name="breadcrumb" />
257262
</div>

resources/js/components/ui/separator/Separator.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const delegatedProps = computed(() => {
1616
<Separator
1717
v-bind="delegatedProps"
1818
:class="cn('shrink-0 bg-border', props.orientation === 'vertical' ? 'w-px h-full' : 'h-px w-full', props.class)"
19+
:data-orientation="props.orientation"
1920
>
2021
<slot />
2122
</Separator>

resources/js/components/ui/sidebar/SidebarProvider.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const props = withDefaults(defineProps<{
99
defaultOpen?: boolean
1010
open?: boolean
1111
class?: HTMLAttributes['class']
12+
persist?: boolean,
1213
}>(), {
1314
defaultOpen: true,
1415
open: undefined,
@@ -20,17 +21,19 @@ const emits = defineEmits<{
2021
2122
const isMobile = useMediaQuery('(max-width: 768px)')
2223
const openMobile = ref(false)
24+
const defaultOpen = props.persist ? localStorage.getItem('sidebar-open') !== 'false' : props.defaultOpen
2325
2426
const open = useVModel(props, 'open', emits, {
25-
defaultValue: props.defaultOpen ?? false,
27+
defaultValue: defaultOpen,
2628
passive: (props.open === undefined) as false,
2729
}) as Ref<boolean>
2830
2931
function setOpen(value: boolean) {
3032
open.value = value // emits('update:open', value)
3133
34+
localStorage.setItem('sidebar-open', value.toString());
3235
// This sets the cookie to keep the sidebar state.
33-
document.cookie = `${SIDEBAR_COOKIE_NAME}=${open.value}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
36+
// document.cookie = `${SIDEBAR_COOKIE_NAME}=${open.value}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
3437
}
3538
3639
function setOpenMobile(value: boolean) {

0 commit comments

Comments
 (0)