hirsun-vuepress-theme-hope-plus
Version:
A light vuepress theme with tons of features and typewriter effect
34 lines • 1.37 kB
JavaScript
import { isLinkExternal, isString } from "@vuepress/shared";
import { ref, watch } from "vue";
import { useRouter } from "vue-router";
import { useThemeLocaleData } from "@theme-hope/composables/index";
import { resolveLinkInfo } from "@theme-hope/utils/index";
export const resolveNavbarItem = (router, item, prefix = "") => {
if (isString(item))
return resolveLinkInfo(router, `${prefix}${item}`);
if ("children" in item)
return {
...item,
...(item.link && !isLinkExternal(item.link)
? resolveLinkInfo(router, `${prefix}${item.link}`)
: {}),
children: item.children.map((child) => resolveNavbarItem(router, child, `${prefix}${item.prefix || ""}`)),
};
return {
...item,
link: isLinkExternal(item.link)
? item.link
: resolveLinkInfo(router, `${prefix}${item.link}`).link,
};
};
export const useNavbarItems = () => {
const themeLocaleData = useThemeLocaleData();
const router = useRouter();
const getNavbarItems = () => (themeLocaleData.value.navbar || []).map((item) => resolveNavbarItem(router, item));
const navbarItems = ref(getNavbarItems());
watch(themeLocaleData, () => {
navbarItems.value = getNavbarItems();
});
return navbarItems;
};
//# sourceMappingURL=navbarConfig.js.map