diff --git a/.env.local b/.env.local index b24ee712..c1efd7f1 100644 --- a/.env.local +++ b/.env.local @@ -1,2 +1,2 @@ # 环境变量 @see https://www.nextjs.cn/docs/basic-features/environment-variables -NEXT_PUBLIC_VERSION=3.3.5 \ No newline at end of file +NEXT_PUBLIC_VERSION=3.3.6 \ No newline at end of file diff --git a/components/CommonHead.js b/components/CommonHead.js index 7f129995..f4fe840a 100644 --- a/components/CommonHead.js +++ b/components/CommonHead.js @@ -6,7 +6,7 @@ const CommonHead = ({ meta, children }) => { let image if (meta) { url = `${url}/${meta.slug}` - image = meta.image || '' + image = meta.image || '/bg_image.jpg' } const title = meta?.title || BLOG.TITLE const description = meta?.description || BLOG.DESCRIPTION diff --git a/lib/notion.js b/lib/notion.js index 51c02180..0042487f 100644 --- a/lib/notion.js +++ b/lib/notion.js @@ -1,3 +1,2 @@ -export { getAllPosts } from './notion/getAllPosts' export { getAllTags } from './notion/getAllTags' export { getPostBlocks } from './notion/getPostBlocks' diff --git a/lib/notion/getNotionData.js b/lib/notion/getNotionData.js index aa308e3d..9d742a3b 100644 --- a/lib/notion/getNotionData.js +++ b/lib/notion/getNotionData.js @@ -5,7 +5,6 @@ import { idToUuid } from 'notion-utils' import { defaultMapImageUrl } from 'react-notion-x' import { deepClone, isIterable } from '../utils' import getAllPageIds from './getAllPageIds' -import { getAllPosts } from './getAllPosts' import { getAllTags } from './getAllTags' import getPageProperties from './getPageProperties' @@ -81,14 +80,16 @@ export async function getNotionPageData({ pageId, from }) { * @param notionPageData * @returns {Promise<[]|*[]>} */ -function getCustomNav({ allPage }) { +function getCustomNav({ allPages }) { const customNav = [] - if (allPage && allPage.length > 0) { - allPage.forEach(p => { - if (p?.slug?.indexOf('http') === 0) { - customNav.push({ icon: p.icon || null, name: p.title, to: p.slug, show: true }) - } else { - customNav.push({ icon: p.icon || null, name: p.title, to: '/' + p.slug, show: true }) + if (allPages && allPages.length > 0) { + allPages.forEach(p => { + if (p?.status?.[0] === 'Published') { + if (p?.slug?.indexOf('http') === 0) { + customNav.push({ icon: p.icon || null, name: p.title, to: p.slug, show: true }) + } else { + customNav.push({ icon: p.icon || null, name: p.title, to: '/' + p.slug, show: true }) + } } }) } @@ -235,11 +236,11 @@ async function getPageRecordMapByNotionAPI({ pageId, from }) { const tagOptions = getTagOptions(schema) const categoryOptions = getCategoryOptions(schema) const viewIds = rawMetadata?.view_ids - const data = [] + const collectionData = [] const pageIds = getAllPageIds(collectionQuery, collectionId, collectionView, viewIds) const siteInfo = getBlogInfo({ collection, block }) if (pageIds?.length === 0) { - console.error('获取到的文章列表为空,请检查notion模板', collectionQuery, collection, pageRecordMap) + console.error('获取到的文章列表为空,请检查notion模板', collectionQuery, collection, collectionView, viewIds, pageRecordMap) } for (let i = 0; i < pageIds.length; i++) { const id = pageIds[i] @@ -247,20 +248,30 @@ async function getPageRecordMapByNotionAPI({ pageId, from }) { if (!value) { continue } + collectionData.push(properties) const properties = (await getPageProperties(id, block, schema, null, tagOptions, siteInfo)) || null if (properties) { data.push(properties) } } - const allPage = data.filter(post => { - return post.title && post?.status?.[0] === 'Published' && ['Page'].indexOf(post?.type?.[0]) > -1 + const allPages = collectionData.filter(post => { + return post.title && ['Page'].indexOf(post?.type?.[0]) > -1 && (post?.status?.[0] === 'Published' || post?.status?.[0] === 'Invisible') }) - const allPosts = data.filter(post => { - return post.title && post?.status?.[0] === 'Published' && ['Post'].indexOf(post?.type?.[0]) > -1 + const allPosts = collectionData.filter(post => { + return post.title && ['Post'].indexOf(post?.type?.[0]) > -1 && post?.status?.[0] === 'Published' }) - const customNav = getCustomNav({ allPage }) + // Sort by date + if (BLOG.POSTS_SORT_BY === 'date') { + allPosts.sort((a, b) => { + const dateA = new Date(a?.date?.start_date || a.createdTime) + const dateB = new Date(b?.date?.start_date || b.createdTime) + return dateB - dateA + }) + } + + const customNav = getCustomNav({ allPages }) const postCount = allPosts?.length || 0 const categories = getAllCategories({ allPosts, categoryOptions, sliceCount: BLOG.PREVIEW_CATEGORY_COUNT }) const tags = getAllTags({ allPosts, tagOptions, sliceCount: BLOG.PREVIEW_TAG_COUNT }) @@ -268,6 +279,8 @@ async function getPageRecordMapByNotionAPI({ pageId, from }) { return { siteInfo, + allPages, + allPosts, collection, collectionQuery, collectionId, diff --git a/package.json b/package.json index 0cc4a8a2..f6b327a4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "notion-next", - "version": "3.3.5", + "version": "3.3.6", "homepage": "https://github.com/tangly1024/NotionNext.git", "license": "MIT", "repository": { diff --git a/pages/404.js b/pages/404.js index b5a3ca8d..43172bfb 100644 --- a/pages/404.js +++ b/pages/404.js @@ -8,9 +8,9 @@ import { useGlobal } from '@/lib/global' * @returns */ const NoFound = props => { - const { theme } = useGlobal() + const { theme, siteInfo } = useGlobal() const ThemeComponents = ThemeMap[theme] - const meta = { title: `${props?.siteInfo?.title} | 页面找不到啦` } + const meta = { title: `${props?.siteInfo?.title} | 页面找不到啦`, image: siteInfo?.pageCover } return } diff --git a/pages/[slug].js b/pages/[slug].js index 43c98844..16f67e6c 100644 --- a/pages/[slug].js +++ b/pages/[slug].js @@ -80,12 +80,10 @@ export async function getStaticPaths() { } const from = 'slug-paths' - const { allPosts } = await getGlobalNotionData({ from, pageType: ['Page'] }) - const filterPosts = - allPosts?.filter(e => e?.slug?.indexOf('http') !== 0) || [] + const { allPages } = await getGlobalNotionData({ from, pageType: ['Page'] }) return { - paths: filterPosts.map(row => ({ params: { slug: row.slug } })), + paths: allPages.map(row => ({ params: { slug: row.slug } })), fallback: true } } @@ -93,19 +91,19 @@ export async function getStaticPaths() { export async function getStaticProps({ params: { slug } }) { const from = `slug-props-${slug}` const props = await getGlobalNotionData({ from, pageType: ['Page'] }) - const { allPosts } = props - const post = allPosts.find(p => p.slug === slug) - if (!post) { + const { allPages } = props + const page = allPages?.find(p => p.slug === slug) + if (!page) { return { props: {}, revalidate: 1 } } try { - post.blockMap = await getPostBlocks(post.id, 'slug') + page.blockMap = await getPostBlocks(page.id, 'slug') } catch (error) { console.error('获取文章详情失败', error) } - props.post = post + props.post = page return { props, diff --git a/pages/archive/index.js b/pages/archive/index.js index e66b2abd..fda51dc5 100644 --- a/pages/archive/index.js +++ b/pages/archive/index.js @@ -10,6 +10,7 @@ const ArchiveIndex = props => { const meta = { title: `${locale.NAV.ARCHIVE} | ${siteInfo?.title}`, description: siteInfo?.description, + image: siteInfo?.pageCover, slug: 'archive', type: 'website' } diff --git a/pages/article/[slug].js b/pages/article/[slug].js index 52a2082d..89a42833 100644 --- a/pages/article/[slug].js +++ b/pages/article/[slug].js @@ -15,7 +15,7 @@ import { useRouter } from 'next/router' const Slug = props => { const { theme, changeLoadingState } = useGlobal() const ThemeComponents = ThemeMap[theme] - const { post } = props + const { post, siteInfo } = props if (!post) { changeLoadingState(true) @@ -30,7 +30,7 @@ const Slug = props => { } } }, 10000) - const meta = { title: `${props?.siteInfo?.title || BLOG.TITLE} | loading` } + const meta = { title: `${props?.siteInfo?.title || BLOG.TITLE} | loading`, image: siteInfo?.pageCover } return } @@ -58,7 +58,6 @@ const Slug = props => { props = { ...props, lock, setLock, validPassword } - const { siteInfo } = props const meta = { title: `${post?.title} | ${siteInfo?.title}`, description: post?.summary, diff --git a/pages/category/[category].js b/pages/category/[category].js index 80281a01..ac44bb05 100644 --- a/pages/category/[category].js +++ b/pages/category/[category].js @@ -17,6 +17,7 @@ export default function Category(props) { }`, description: siteInfo?.description, slug: 'category/' + props.category, + image: siteInfo?.pageCover, type: 'website' } return diff --git a/pages/category/index.js b/pages/category/index.js index f099d29f..13f95eee 100644 --- a/pages/category/index.js +++ b/pages/category/index.js @@ -11,6 +11,7 @@ export default function Category(props) { const meta = { title: `${locale.COMMON.CATEGORY} | ${siteInfo?.title}`, description: siteInfo?.description, + image: siteInfo?.pageCover, slug: 'category', type: 'website' } diff --git a/pages/page/[page].js b/pages/page/[page].js index b6787758..f86b0902 100644 --- a/pages/page/[page].js +++ b/pages/page/[page].js @@ -14,6 +14,7 @@ const Page = props => { const meta = { title: `${props.page} | Page | ${siteInfo?.title}`, description: siteInfo?.description, + image: siteInfo?.pageCover, slug: 'page/' + props.page, type: 'website' } diff --git a/pages/search/[keyword].js b/pages/search/[keyword].js index 1607cb90..03fb8109 100644 --- a/pages/search/[keyword].js +++ b/pages/search/[keyword].js @@ -10,6 +10,7 @@ const Index = props => { const meta = { title: `${keyword || ''}${keyword ? ' | ' : ''}${locale.NAV.SEARCH} | ${siteInfo?.title}`, description: siteInfo?.title, + image: siteInfo?.pageCover, slug: 'search/' + (keyword || ''), type: 'website' } diff --git a/pages/search/index.js b/pages/search/index.js index 80cfe52c..30e97c95 100644 --- a/pages/search/index.js +++ b/pages/search/index.js @@ -26,6 +26,7 @@ const Search = props => { siteInfo?.title }`, description: siteInfo?.description, + image: siteInfo?.pageCover, slug: 'search', type: 'website' } diff --git a/pages/tag/[tag].js b/pages/tag/[tag].js index be89d2fa..121dc973 100644 --- a/pages/tag/[tag].js +++ b/pages/tag/[tag].js @@ -15,6 +15,7 @@ const Tag = props => { const meta = { title: `${tag} | ${locale.COMMON.TAGS} | ${siteInfo?.title}`, description: siteInfo?.description, + image: siteInfo?.pageCover, slug: 'tag/' + tag, type: 'website' } diff --git a/pages/tag/index.js b/pages/tag/index.js index 302511dc..1ceb0f07 100644 --- a/pages/tag/index.js +++ b/pages/tag/index.js @@ -11,6 +11,7 @@ const TagIndex = props => { const meta = { title: `${locale.COMMON.TAGS} | ${siteInfo?.title}`, description: siteInfo?.description, + image: siteInfo?.pageCover, slug: 'tag', type: 'website' } diff --git a/themes/fukasawa/components/ArticleDetail.js b/themes/fukasawa/components/ArticleDetail.js index 2fad01ce..78957330 100644 --- a/themes/fukasawa/components/ArticleDetail.js +++ b/themes/fukasawa/components/ArticleDetail.js @@ -37,13 +37,16 @@ export default function ArticleDetail(props) {
- - - - {post.category} - - - | + + {post?.category && (<> + + + + {post.category} + + + | + )} {post?.type[0] !== 'Page' && (<> { return (
- +