valaxy-theme-sakura
Version:
<h1 align="center">valaxy-theme-sakura</h1> <pre align="center"> 一个简单、个性化、可爱的动漫风格博客主题 ❥(ゝω・✿ฺ) </pre>
83 lines (68 loc) • 2.16 kB
text/typescript
import { useSiteConfig, usePostList as useValaxyPostList } from 'valaxy'
import { computed } from 'vue'
import { useThemeConfig } from '../composables'
import { useSakuraAppStore } from '../stores'
import { resolveImage } from '../utils'
// import type { ComputedRef, StyleValue } from 'vue'
// import { computed } from 'vue'
// import { useThemeConfig } from './config'
// /**
// * get type card property
// * todo: test reactive
// */
// export function usePostProperty(type?: string): {
// color: string
// icon: string
// styles: StyleValue | undefined | ComputedRef<StyleValue | undefined>
// } {
// if (!type) {
// return {
// color: '',
// icon: '',
// styles: undefined,
// }
// }
// const themeConfig = useThemeConfig()
// if (!(type in themeConfig.value.types))
// type = 'link'
// const color = themeConfig.value.types[type].color
// const icon = themeConfig.value.types[type].icon
// const styles = computed<StyleValue | undefined>(() => {
// return type
// ? ({
// '--card-c-primary': color,
// })
// : undefined
// })
// return {
// color,
// icon,
// styles,
// }
// }
export function usePostList(params: {
type?: string
} = {}) {
const siteConfig = useSiteConfig()
const themeConfig = useThemeConfig()
const sakura = useSakuraAppStore()
const pageSize = computed(() => themeConfig.value.pagination?.itemsPerPage || siteConfig.value.pageSize)
const posts = useValaxyPostList(params)
const curPage = computed(() => sakura.curPage || 1)
const displayedPosts = computed(() =>
posts.value.slice(
(curPage.value - 1) * pageSize.value,
curPage.value * pageSize.value * sakura.loadMultiple,
),
)
const postsWithLimitedTags = computed(() => {
return displayedPosts.value.map((post) => {
if (themeConfig.value.postList?.defaultImage)
post.cover = post.cover || resolveImage(themeConfig.value.postList.defaultImage)
if (post.tags && post.tags.length > 3)
return { ...post, tags: post.tags.slice(0, 3) }
return post
})
})
return postsWithLimitedTags
}