mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-21 07:26:49 +00:00
Merge pull request #438 from tangly1024/bugfix/blogs-from-tag
Bugfix/blogs from tag
This commit is contained in:
49
lib/notion/getAllCategories.js
Normal file
49
lib/notion/getAllCategories.js
Normal file
@@ -0,0 +1,49 @@
|
||||
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')
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,8 @@ import { getDataFromCache, setDataToCache } from '@/lib/cache/cache_manager'
|
||||
import { getPostBlocks } from '@/lib/notion/getPostBlocks'
|
||||
import { idToUuid } from 'notion-utils'
|
||||
import { defaultMapImageUrl } from 'react-notion-x'
|
||||
import { deepClone, isIterable } from '../utils'
|
||||
import { deepClone } from '../utils'
|
||||
import { getAllCategories } from './getAllCategories'
|
||||
import getAllPageIds from './getAllPageIds'
|
||||
import { getAllTags } from './getAllTags'
|
||||
import getPageProperties from './getPageProperties'
|
||||
@@ -31,8 +32,6 @@ export async function getGlobalNotionData({
|
||||
delete notionPageData.schema
|
||||
delete notionPageData.rawMetadata
|
||||
delete notionPageData.pageIds
|
||||
delete notionPageData.tagOptions
|
||||
delete notionPageData.categoryOptions
|
||||
return notionPageData
|
||||
}
|
||||
|
||||
@@ -117,46 +116,6 @@ function getCategoryOptions(schema) {
|
||||
return categorySchema?.options || []
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有文章的分类
|
||||
* @param allPosts
|
||||
* @returns {Promise<{}|*[]>}
|
||||
*/
|
||||
function getAllCategories({ allPages, categoryOptions, sliceCount = 0 }) {
|
||||
const allPosts = allPages.filter(page => page.type === 'Post')
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 站点信息
|
||||
* @param notionPageData
|
||||
@@ -279,7 +238,7 @@ async function getPageRecordMapByNotionAPI({ pageId, from }) {
|
||||
|
||||
const customNav = getCustomNav({ allPages })
|
||||
const categories = getAllCategories({ allPages, categoryOptions, sliceCount: BLOG.PREVIEW_CATEGORY_COUNT })
|
||||
const tags = getAllTags({ allPages, tagOptions, sliceCount: BLOG.PREVIEW_TAG_COUNT })
|
||||
const tags = getAllTags({ allPages, sliceCount: BLOG.PREVIEW_TAG_COUNT, tagOptions })
|
||||
const latestPosts = getLatestPosts({ allPages, from, latestPostCount: 5 })
|
||||
|
||||
return {
|
||||
|
||||
14
lib/utils.js
14
lib/utils.js
@@ -105,3 +105,17 @@ export const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export const isBrowser = () => typeof window !== 'undefined'
|
||||
|
||||
/**
|
||||
* 获取从第1页到指定页码的文章
|
||||
* @param pageIndex 第几页
|
||||
* @param list 所有文章
|
||||
* @param pageSize 每页文章数量
|
||||
* @returns {*}
|
||||
*/
|
||||
export const getListByPage = function (list, pageIndex, pageSize) {
|
||||
return list.slice(
|
||||
0,
|
||||
pageIndex * pageSize
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user