fix: revert data.ts, add derived.ts, update imports

pull/4673/head
Yuxuan Zhang 6 months ago
parent 930038923c
commit eb2f47ae3d
No known key found for this signature in database
GPG Key ID: 6910B04F3351EF7D

@ -1,12 +1,14 @@
<script setup lang="ts"> <script setup lang="ts">
import NotFound from '../NotFound.vue' import NotFound from '../NotFound.vue'
import { useData } from '../composables/data' import { useData } from '../composables/data'
import { useDerived } from '../composables/derived'
import { useSidebar } from '../composables/sidebar' import { useSidebar } from '../composables/sidebar'
import VPDoc from './VPDoc.vue' import VPDoc from './VPDoc.vue'
import VPHome from './VPHome.vue' import VPHome from './VPHome.vue'
import VPPage from './VPPage.vue' import VPPage from './VPPage.vue'
const { page, frontmatter } = useData() const { page, frontmatter } = useData()
const { isHomeLayout } = useDerived()
const { hasSidebar } = useSidebar() const { hasSidebar } = useSidebar()
</script> </script>
@ -16,7 +18,7 @@ const { hasSidebar } = useSidebar()
id="VPContent" id="VPContent"
:class="{ :class="{
'has-sidebar': hasSidebar, 'has-sidebar': hasSidebar,
'is-home': frontmatter.isHomeLayout 'is-home': isHomeLayout
}" }"
> >
<slot name="not-found" v-if="page.isNotFound"><NotFound /></slot> <slot name="not-found" v-if="page.isNotFound"><NotFound /></slot>

@ -1,7 +1,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useWindowScroll } from '@vueuse/core' import { useWindowScroll } from '@vueuse/core'
import { ref, watchPostEffect } from 'vue' import { ref, watchPostEffect } from 'vue'
import { useData } from '../composables/data' import { useDerived } from '../composables/derived'
import { useSidebar } from '../composables/sidebar' import { useSidebar } from '../composables/sidebar'
import VPNavBarAppearance from './VPNavBarAppearance.vue' import VPNavBarAppearance from './VPNavBarAppearance.vue'
import VPNavBarExtra from './VPNavBarExtra.vue' import VPNavBarExtra from './VPNavBarExtra.vue'
@ -22,14 +22,14 @@ defineEmits<{
const { y } = useWindowScroll() const { y } = useWindowScroll()
const { hasSidebar } = useSidebar() const { hasSidebar } = useSidebar()
const { frontmatter } = useData() const { isHomeLayout } = useDerived()
const classes = ref<Record<string, boolean>>({}) const classes = ref<Record<string, boolean>>({})
watchPostEffect(() => { watchPostEffect(() => {
classes.value = { classes.value = {
'has-sidebar': hasSidebar.value, 'has-sidebar': hasSidebar.value,
'home': frontmatter.value.isHomeLayout, 'home': isHomeLayout.value,
'top': y.value === 0, 'top': y.value === 0,
'screen-open': props.isScreenOpen 'screen-open': props.isScreenOpen
} }

@ -1,12 +1,4 @@
import { useData as useData$ } from 'vitepress' import { useData as useData$ } from 'vitepress'
import type { DefaultTheme } from 'vitepress/theme' import type { DefaultTheme } from 'vitepress/theme'
export function useData() { export const useData: typeof useData$<DefaultTheme.Config> = useData$
const data = useData$<DefaultTheme.Config>()
// Allow an arbitrary layout to be used as the home layout
;(data.frontmatter as any).isHomeLayout ??=
(data.frontmatter as any).layout === 'home'
return data
}

@ -0,0 +1,14 @@
import { computed } from 'vue'
import { useData } from './data'
export function useDerived() {
const { frontmatter } = useData()
const isHomeLayout = computed(() => {
if (frontmatter.value.isHomeLayout !== undefined)
return Boolean(frontmatter.value.isHomeLayout)
else return frontmatter.value.layout === 'home'
})
return { isHomeLayout }
}

@ -18,6 +18,7 @@ import {
getSidebarGroups getSidebarGroups
} from '../support/sidebar' } from '../support/sidebar'
import { useData } from './data' import { useData } from './data'
import { useDerived } from '../composables/derived'
export interface SidebarControl { export interface SidebarControl {
collapsed: Ref<boolean> collapsed: Ref<boolean>
@ -31,6 +32,7 @@ export interface SidebarControl {
export function useSidebar() { export function useSidebar() {
const { frontmatter, page, theme } = useData() const { frontmatter, page, theme } = useData()
const { isHomeLayout } = useDerived()
const is960 = useMediaQuery('(min-width: 960px)') const is960 = useMediaQuery('(min-width: 960px)')
const isOpen = ref(false) const isOpen = ref(false)
@ -52,7 +54,7 @@ export function useSidebar() {
return ( return (
frontmatter.value.sidebar !== false && frontmatter.value.sidebar !== false &&
sidebar.value.length > 0 && sidebar.value.length > 0 &&
!frontmatter.value.isHomeLayout !isHomeLayout.value
) )
}) })
@ -65,7 +67,7 @@ export function useSidebar() {
}) })
const hasAside = computed(() => { const hasAside = computed(() => {
if (frontmatter.value.isHomeLayout) return false if (isHomeLayout.value) return false
if (frontmatter.value.aside != null) return !!frontmatter.value.aside if (frontmatter.value.aside != null) return !!frontmatter.value.aside
return theme.value.aside !== false return theme.value.aside !== false
}) })

Loading…
Cancel
Save