vuepress-theme-hope
Version:
A light vuepress theme with tons of features
54 lines • 2.53 kB
JavaScript
import { computed, defineComponent, h } from "vue";
import { useFrontmatter, usePage } from "vuepress/client";
import ArticleList from "@theme-hope/components/blog/ArticleList";
import CategoryList from "@theme-hope/components/blog/CategoryList";
import InfoPanel from "@theme-hope/components/blog/InfoPanel";
import TagList from "@theme-hope/components/blog/TagList";
import DropTransition from "@theme-hope/components/transitions/DropTransition";
import { useCategoryMap } from "@theme-hope/composables/blog/useCategoryMap";
import { useTagMap } from "@theme-hope/composables/blog/useTagMap";
export default defineComponent({
name: "CategoryPage",
slots: Object,
setup(_props, { slots }) {
const page = usePage();
const frontmatter = useFrontmatter();
const categoryMap = useCategoryMap();
const tagMap = useTagMap();
const blogData = computed(() => {
const blogConfig = frontmatter.value.blog;
if (blogConfig?.type !== "category")
return null;
const { name, key } = blogConfig;
return key === "category"
? {
component: CategoryList,
items: name ? categoryMap.value.map[name].items : null,
}
: key === "tag"
? {
component: TagList,
items: name ? tagMap.value.map[name].items : null,
}
: null;
});
return () => h("div", { class: "vp-page vp-blog" }, h("div", { class: "blog-page-wrapper" }, [
h("main", { id: "main-content", class: "vp-blog-main" }, slots.default?.() ?? [
h(DropTransition, { appear: true }, () => blogData.value ? h(blogData.value.component) : null),
slots.articlesBefore?.(),
blogData.value?.items
? h(DropTransition, { appear: true, delay: 0.08 }, () => [
h(ArticleList, {
key: page.value.path,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
items: blogData.value.items,
}, slots),
])
: null,
slots.articlesAfter?.(),
]),
h(DropTransition, { delay: 0.16 }, () => h(InfoPanel, { key: "blog" }, slots)),
]));
},
});
//# sourceMappingURL=CategoryPage.js.map