mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-14 15:09:22 +00:00
50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
import { isIterable } from '../utils'
|
||
|
||
/**
|
||
* 获取所有文章的标签
|
||
* @param allPosts
|
||
* @param sliceCount 默认截取数量为12,若为0则返回全部
|
||
* @param tagOptions tags的下拉选项
|
||
* @returns {Promise<{}|*[]>}
|
||
*/
|
||
|
||
/**
|
||
* 获取所有文章的分类
|
||
* @param allPosts
|
||
* @returns {Promise<{}|*[]>}
|
||
*/
|
||
export function getAllCategories({ allPages, categoryOptions, sliceCount = 0 }) {
|
||
const allPosts = allPages.filter(page => page.type === 'Post' && page.status === 'Published')
|
||
if (!allPosts || !categoryOptions) {
|
||
return []
|
||
}
|
||
// 计数
|
||
let categories = allPosts.map(p => p.category)
|
||
categories = [...categories.flat()]
|
||
const categoryObj = {}
|
||
categories.forEach(category => {
|
||
if (category in categoryObj) {
|
||
categoryObj[category]++
|
||
} else {
|
||
categoryObj[category] = 1
|
||
}
|
||
})
|
||
const list = []
|
||
if (isIterable(categoryOptions)) {
|
||
for (const c of categoryOptions) {
|
||
const count = categoryObj[c.value]
|
||
if (count) {
|
||
list.push({ id: c.id, name: c.value, color: c.color, count })
|
||
}
|
||
}
|
||
}
|
||
|
||
// 按照数量排序
|
||
// list.sort((a, b) => b.count - a.count)
|
||
if (sliceCount && sliceCount > 0) {
|
||
return list.slice(0, sliceCount)
|
||
} else {
|
||
return list
|
||
}
|
||
}
|