mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-13 15:09:13 +00:00
90 lines
2.3 KiB
JavaScript
90 lines
2.3 KiB
JavaScript
import BLOG from '@/blog.config'
|
||
import { siteConfig } from '@/lib/config'
|
||
import { getGlobalData, getPost, getPostBlocks } from '@/lib/db/getSiteData'
|
||
import { DynamicLayout } from '@/themes/theme'
|
||
|
||
/**
|
||
* 根据notion的slug访问页面
|
||
* 只解析一级目录例如 /about
|
||
* @param {*} props
|
||
* @returns
|
||
*/
|
||
const Dashboard = props => {
|
||
const theme = siteConfig('THEME', BLOG.THEME, props.NOTION_CONFIG)
|
||
return <DynamicLayout theme={theme} layoutName='LayoutDashboard' {...props} />
|
||
}
|
||
|
||
export async function getStaticProps({ locale }) {
|
||
const prefix = 'dashboard'
|
||
let fullSlug = 'dashboard'
|
||
const from = `slug-props-${fullSlug}`
|
||
const props = await getGlobalData({ from, locale })
|
||
if (siteConfig('PSEUDO_STATIC', false, props.NOTION_CONFIG)) {
|
||
if (!fullSlug.endsWith('.html')) {
|
||
fullSlug += '.html'
|
||
}
|
||
}
|
||
|
||
// 在列表内查找文章
|
||
props.post = props?.allPages?.find(p => {
|
||
return p.type.indexOf('Menu') < 0 && p.slug === fullSlug
|
||
})
|
||
|
||
// 处理非列表内文章的内信息
|
||
if (!props?.post) {
|
||
const pageId = prefix
|
||
if (pageId.length >= 32) {
|
||
const post = await getPost(pageId)
|
||
props.post = post
|
||
}
|
||
}
|
||
// 无法获取文章
|
||
if (!props?.post) {
|
||
props.post = null
|
||
return {
|
||
props,
|
||
revalidate: process.env.EXPORT
|
||
? undefined
|
||
: siteConfig(
|
||
'NEXT_REVALIDATE_SECOND',
|
||
BLOG.NEXT_REVALIDATE_SECOND,
|
||
props.NOTION_CONFIG
|
||
)
|
||
}
|
||
}
|
||
|
||
// 文章内容加载
|
||
if (!props?.post?.blockMap) {
|
||
props.post.blockMap = await getPostBlocks(props.post.id, from)
|
||
}
|
||
|
||
delete props.allPages
|
||
return {
|
||
props,
|
||
revalidate: process.env.EXPORT
|
||
? undefined
|
||
: siteConfig(
|
||
'NEXT_REVALIDATE_SECOND',
|
||
BLOG.NEXT_REVALIDATE_SECOND,
|
||
props.NOTION_CONFIG
|
||
)
|
||
}
|
||
}
|
||
|
||
export const getStaticPaths = () => {
|
||
return {
|
||
paths: [
|
||
{ params: { index: [] } }, // 对应首页路径
|
||
{ params: { index: ['membership'] } },
|
||
{ params: { index: ['balance'] } },
|
||
{ params: { index: ['user-profile'] } },
|
||
{ params: { index: ['user-profile', 'security'] } }, // 嵌套路由,按结构传递
|
||
{ params: { index: ['order'] } },
|
||
{ params: { index: ['affiliate'] } }
|
||
],
|
||
fallback: 'blocking' // 或者 true,阻塞式渲染
|
||
}
|
||
}
|
||
|
||
export default Dashboard
|