Files
NotionNext/pages/dashboard/[[...index]].js
2025-05-27 10:06:47 +08:00

90 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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