diff --git a/src/.vuepress/theme/client/composables/sidebar/useSidebar.ts b/src/.vuepress/theme/client/composables/sidebar/useSidebar.ts index e815a29f5..498702c8e 100644 --- a/src/.vuepress/theme/client/composables/sidebar/useSidebar.ts +++ b/src/.vuepress/theme/client/composables/sidebar/useSidebar.ts @@ -1,64 +1,48 @@ import { ComputedRef, Ref, computed, ref, watch } from 'vue'; import { useBreakpoints, useNavbarConfig } from '@mptheme/client/composables'; import { MyPaResolvedSidebarItem } from '@mptheme/config.types'; +import { createGlobalState } from '@vueuse/core'; import { useRoute } from 'vue-router'; import { useSidebarItems } from './useSidebarItems'; -let isOpen: ComputedRef; - -let toggled: Ref; - type UseSidebar = () => { exists: ComputedRef; isNavbar: ComputedRef; - isOpen: Ref; items: ComputedRef; toggle: (bool?: boolean) => void; toggled: Ref; }; +const useSidebarToggled = createGlobalState(() => ref(false)); + export const useSidebar: UseSidebar = () => { + const toggled = useSidebarToggled(); const route = useRoute(); const items = useSidebarItems(); const navbar = useNavbarConfig(); const { lg } = useBreakpoints(); - const isNavbar = computed(() => !items.value.length); - - toggled ??= ref(false); - isOpen ??= computed(() => { - const renderByView = lg.value && !isNavbar.value; - - return exists.value && (renderByView || toggled.value); - }); + const isNavbar = computed(() => !items.value.length); const sidebarItems = computed(() => { - if (!items.value.length) { - return navbar.value; - } - - return items.value; - }); - - const exists = computed(() => { - return (sidebarItems.value?.length ?? 0) > 0; + return items.value.length ? items.value : navbar.value; }); + const exists = computed(() => (sidebarItems.value?.length ?? 0) > 0); const toggle = (bool?: boolean): void => { toggled.value = bool ?? !toggled.value; }; watch( - () => route.path, + [() => route.path, lg], () => toggle(false), ); return { - items: sidebarItems, - isOpen, - isNavbar, exists, - toggled, + isNavbar, + items: sidebarItems, toggle, + toggled, }; }; diff --git a/src/.vuepress/theme/client/views/layout/header/toggle-sidebar-button/ToggleSidebarButton.vue b/src/.vuepress/theme/client/views/layout/header/toggle-sidebar-button/ToggleSidebarButton.vue index 4629b96f5..f67b952ce 100644 --- a/src/.vuepress/theme/client/views/layout/header/toggle-sidebar-button/ToggleSidebarButton.vue +++ b/src/.vuepress/theme/client/views/layout/header/toggle-sidebar-button/ToggleSidebarButton.vue @@ -1,74 +1,46 @@ - diff --git a/src/.vuepress/theme/client/views/layout/sidebar/MPSidebar.vue b/src/.vuepress/theme/client/views/layout/sidebar/MPSidebar.vue index b35acfa33..3eb6a6abd 100644 --- a/src/.vuepress/theme/client/views/layout/sidebar/MPSidebar.vue +++ b/src/.vuepress/theme/client/views/layout/sidebar/MPSidebar.vue @@ -2,12 +2,12 @@