element-plus/docs/.vitepress/vitepress/composables/page-nav.ts
zouhang d8954f945e
chore: make eslint works in docs folder (#3582)
* chore: make eslints work in docs folder

* refactor(dev): improve eslint

* fix eslint issue

Co-authored-by: Kevin <sxzz@sxzz.moe>
Co-authored-by: jeremywuuuuu <15975785+JeremyWuuuuu@users.noreply.github.com>
2021-09-23 14:16:37 +08:00

59 lines
1.3 KiB
TypeScript

import { computed } from 'vue'
import { useData } from 'vitepress'
import {
isArray,
ensureStartingSlash,
removeExtention as removeExtension,
} from '../utils'
import { useLang } from './lang'
import { getSidebarConfig, getFlatSideBarLinks } from './sidebar'
export function usePageNav() {
const { page, theme } = useData()
const lang = useLang()
const path = computed(() => {
return removeExtension(ensureStartingSlash(page.value.relativePath))
})
const candidates = computed(() => {
const config = getSidebarConfig(
theme.value.sidebars,
path.value,
lang.value
)
return isArray(config) ? getFlatSideBarLinks(config) : []
})
const index = computed(() => {
return candidates.value.findIndex((item) => {
return item.link === path.value
})
})
const next = computed(() => {
if (
theme.value.nextLinks !== false &&
index.value > -1 &&
index.value < candidates.value.length - 1
) {
return candidates.value[index.value + 1]
}
return null
})
const prev = computed(() => {
if (theme.value.prevLinks !== false && index.value > 0) {
return candidates.value[index.value - 1]
}
return null
})
const hasLinks = computed(() => !!next.value || !!prev.value)
return {
next,
prev,
hasLinks,
}
}