diff --git a/src/components/BlogCard.astro b/src/components/BlogCard.astro
index 394fe0f..e2b41c9 100644
--- a/src/components/BlogCard.astro
+++ b/src/components/BlogCard.astro
@@ -65,7 +65,6 @@ const subpostCount = !isSubpost(entry.id) ? await getSubpostCount(entry.id) : 0
fallback={author.name[0]}
className="size-5 rounded-full"
/>
- {author.name}
))}
diff --git a/src/components/notion/Bookmark.astro b/src/components/notion/Bookmark.astro
index 893ec82..76b3927 100644
--- a/src/components/notion/Bookmark.astro
+++ b/src/components/notion/Bookmark.astro
@@ -10,7 +10,7 @@ export interface Props {
}
const { block } = Astro.props
-
+console.log(block)
const target = block.Bookmark || block.LinkPreview || block.Embed
const urlString = target?.Url
@@ -37,7 +37,7 @@ try {
-
{target?.Url}
+
{url.hostname}
-
+
)}
>
diff --git a/src/components/ui/pagination.tsx b/src/components/ui/pagination.tsx
index a9b189c..9dc777d 100644
--- a/src/components/ui/pagination.tsx
+++ b/src/components/ui/pagination.tsx
@@ -162,7 +162,7 @@ const PaginationComponent: React.FC = ({
const getPageUrl = (page: number) => {
if (page === 1) return baseUrl
- return `${baseUrl}${page}`
+ return `${baseUrl}?p=${page}`
}
return (
diff --git a/src/lib/data-utils.ts b/src/lib/data-utils.ts
index 1bc9eed..0bf347b 100644
--- a/src/lib/data-utils.ts
+++ b/src/lib/data-utils.ts
@@ -94,16 +94,16 @@ export function normalizePost(post: NotionPost): CollectionEntry<'blog'> {
}
}
-export async function getAllPosts(): Promise[]> {
+export async function getAllPosts(page?: Number, size?: Number): Promise[]> {
try {
- const res = await fetch("https://notion-api.nvme0n1p.dev/v2/posts")
+ const res = await fetch(`https://notion-api.nvme0n1p.dev/v2/posts?page=${page ?? 1}&length=${size ?? 1000}`)
if (!res.ok) throw new Error(`Failed to fetch posts: ${res.status}`)
- const payload = (await res.json()) as { posts?: NotionPost[] }
+ const payload = (await res.json()) as { posts?: NotionPost[], length?: number }
const posts = (payload.posts ?? []).filter(
(post) => post.Published ?? true,
)
-
+ const length = payload.length;
const normalized = posts.map(normalizePost)
return normalized
@@ -545,7 +545,6 @@ function buildBlocks(
i++
continue
}
-
if (current.type === 'bulleted_list' || current.type === 'numbered_list') {
const listItems: Block[] = []
const targetType = current.type
@@ -748,7 +747,7 @@ function convertBlock(
}
case 'bookmark': {
const url =
- block.properties?.link_url?.[0]?.[0] ||
+ block.properties?.link?.[0]?.[0] ||
block.properties?.source?.[0]?.[0] ||
block.properties?.title?.[0]?.[0] ||
''
@@ -758,7 +757,7 @@ function convertBlock(
Type: 'bookmark',
HasChildren: false,
Bookmark: {
- Caption: parseRichTexts(block.properties?.caption),
+ Caption: parseRichTexts(block.properties?.title),
Url: url,
},
}
diff --git a/src/pages/blog/[...id].astro b/src/pages/blog/[...id].astro
index 3baf6d7..d5a4209 100644
--- a/src/pages/blog/[...id].astro
+++ b/src/pages/blog/[...id].astro
@@ -46,10 +46,14 @@ let remoteContent = null
const remote = await fetchRemotePostContent(currentPostId)
+if(!remote) {
+ // return Astro.response(null, {status: 404})
+ return Astro.rewrite("/404")
+}
remoteContent = remote ? renderRemoteBlockMap(remote.blockMap, remote.post.id) : null
headings = remoteContent?.headings ?? []
const post = remote?.post
-const authors = await parseAuthors(post.authors ?? [])
+const authors = await parseAuthors(post?.authors ?? [])
const isCurrentSubpost = isSubpost(currentPostId)
const navigation = await getAdjacentPosts(currentPostId)
@@ -71,7 +75,7 @@ const tocSections: TOCSection[] = remoteContent
]
: []
: await getTOCSections(currentPostId)
-const heroImage = post.data.banner
+const heroImage = post?.data?.banner
export const prerender = false;
---
@@ -232,7 +236,7 @@ export const prerender = false;
headings={remoteContent.headingBlocks}
/>
) : (
- Content unavailable.
+ 你来到了没有知识的荒原!
)
) : (
Content &&
diff --git a/src/pages/blog/[...page].astro b/src/pages/blog/index.astro
similarity index 56%
rename from src/pages/blog/[...page].astro
rename to src/pages/blog/index.astro
index 3f60dca..80a4950 100644
--- a/src/pages/blog/[...page].astro
+++ b/src/pages/blog/index.astro
@@ -5,20 +5,42 @@ import PageHead from '@/components/PageHead.astro'
import PaginationComponent from '@/components/ui/pagination'
import { SITE } from '@/consts'
import Layout from '@/layouts/Layout.astro'
-import { getAllPosts, groupPostsByYear } from '@/lib/data-utils'
+import { getAllPosts, groupPostsByYear, normalizePost } from '@/lib/data-utils'
import type { PaginateFunction } from 'astro'
-export async function getStaticPaths({
- paginate,
-}: {
- paginate: PaginateFunction
-}) {
- const allPosts = await getAllPosts()
- return paginate(allPosts, { pageSize: SITE.postsPerPage })
+// export async function getStaticPaths({
+// paginate,
+// }: {
+// paginate: PaginateFunction
+// }) {
+// const allPosts = await getAllPosts()
+// return paginate(allPosts, { pageSize: SITE.postsPerPage })
+// }
+const nowPage = parseInt(new URL(Astro.request.url).searchParams.get("p") || "1");
+
+// use url param
+// const { page } = Astro.para
+
+const page = await fetch(`https://notion-api.nvme0n1p.dev/v2/posts/?page=${nowPage}&length=${SITE.postsPerPage}`)
+ .then((res) => {
+ if (!res.ok) throw new Error(`Failed to fetch posts: ${res.status}`);
+ return res.json();
+ })
+ .then((allPosts) => {
+ const totalPages = allPosts.length;
+ const currentPage = nowPage;
+ return {
+ data: allPosts.posts.map((post) => normalizePost(post)),
+ currentPage,
+ lastPage: totalPages,
+ };
+});
+console.log(page);
+// fetch page
+if(page.lastPage < page.currentPage) {
+ console.log("redirect to 404")
+ return Astro.rewrite("/404")
}
-
-const { page } = Astro.props
-
const postsByYear = groupPostsByYear(page.data)
const years = Object.keys(postsByYear).sort((a, b) => parseInt(b) - parseInt(a))
export const prerender = false;