@@ -11,24 +11,22 @@ import 'highlight.js/styles/github-dark.css';
1111import CodeSnippet from "@/components/blog/code-snippet" ;
1212import { generateDefaultMetadata } from '@/lib/metadata' ;
1313
14- interface BlogPostPageProps {
15- params : {
16- locale : Locale ;
17- slug : string ;
18- } ;
19- }
14+ type Params = Promise < {
15+ locale : Locale ;
16+ slug : string ;
17+ } > ;
2018
21- export async function generateMetadata ( { params } : BlogPostPageProps ) : Promise < Metadata > {
22- const locale = params . locale as Locale ;
23- const allPosts = await getContentAsBlogPosts ( params . locale ) ;
24- const post = allPosts . find ( post => post . slug === params . slug ) ;
19+ export async function generateMetadata ( { params } : { params : Params } ) : Promise < Metadata > {
20+ const { locale, slug } = await params ;
21+ const allPosts = await getContentAsBlogPosts ( locale ) ;
22+ const post = allPosts . find ( post => post . slug === slug ) ;
2523
2624 if ( ! post ) {
2725 return generateDefaultMetadata ( {
2826 title : 'Post Not Found' ,
2927 description : 'The blog post you are looking for does not exist.' ,
3028 locale,
31- url : `/blog/${ params . slug } ` ,
29+ url : `/blog/${ slug } ` ,
3230 noIndex : true ,
3331 } ) ;
3432 }
@@ -37,7 +35,7 @@ export async function generateMetadata({ params }: BlogPostPageProps): Promise<M
3735 title : post . title ,
3836 description : post . description || `${ post . title } - Tech Notes Hub` ,
3937 locale,
40- url : `/blog/${ params . slug } ` ,
38+ url : `/blog/${ slug } ` ,
4139 ogImage : post . coverImage || '/og-image.jpg' ,
4240 } ) ;
4341}
@@ -59,24 +57,21 @@ export async function generateStaticParams() {
5957 return params ;
6058}
6159
62- export default async function BlogPostPage ( {
63- params
64- } : {
65- params : { locale : Locale ; slug : string }
66- } ) {
67- const allPosts = await getContentAsBlogPosts ( params . locale ) ;
68- const post = allPosts . find ( post => post . slug === params . slug ) ;
60+ export default async function BlogPostPage ( { params } : { params : Params } ) {
61+ const { locale, slug } = await params ;
62+ const allPosts = await getContentAsBlogPosts ( locale ) ;
63+ const post = allPosts . find ( post => post . slug === slug ) ;
6964
7065 // Get translations
71- const translations = await getTranslationsFromNamespaces ( params . locale , [ 'common' ] ) ;
66+ const translations = await getTranslationsFromNamespaces ( locale , [ 'common' ] ) ;
7267 const t = translations . common ;
7368
7469 if ( ! post ) {
7570 notFound ( ) ;
7671 }
7772
7873 // Find available translations for this post
79- const availableTranslations = await findAvailableTranslations ( params . slug ) ;
74+ const availableTranslations = await findAvailableTranslations ( slug ) ;
8075
8176 // Get translated category name if available
8277 const categoryKey = post . category . toLowerCase ( ) . replace ( / \s + / g, '-' ) as keyof typeof t . categories ;
@@ -89,7 +84,7 @@ export default async function BlogPostPage({
8984 : post . sourceType ;
9085
9186 // Format dates according to locale
92- const dateFormatter = new Intl . DateTimeFormat ( params . locale === 'vi' ? 'vi-VN' : 'en-US' , {
87+ const dateFormatter = new Intl . DateTimeFormat ( locale === 'vi' ? 'vi-VN' : 'en-US' , {
9388 year : 'numeric' ,
9489 month : 'long' ,
9590 day : 'numeric'
@@ -102,8 +97,8 @@ export default async function BlogPostPage({
10297 const debugInfo = process . env . NODE_ENV === 'development' && (
10398 < div className = "mt-4 p-4 border border-yellow-500 bg-yellow-50 dark:bg-yellow-900/20 rounded-md text-sm" >
10499 < h4 className = "font-bold mb-2" > Debug Info:</ h4 >
105- < div > < strong > Current Slug:</ strong > { params . slug } </ div >
106- < div > < strong > Current Locale:</ strong > { params . locale } </ div >
100+ < div > < strong > Current Slug:</ strong > { slug } </ div >
101+ < div > < strong > Current Locale:</ strong > { locale } </ div >
107102 < div > < strong > Source Type:</ strong > { post . sourceType } </ div >
108103 < div > < strong > Source Path:</ strong > { post . sourcePath } </ div >
109104 < div > < strong > Relative Path:</ strong > { post . relativePath } </ div >
@@ -129,7 +124,7 @@ export default async function BlogPostPage({
129124 return (
130125 < div className = "container mx-auto px-4 py-8 max-w-3xl" >
131126 < div className = "flex justify-between items-center mb-8" >
132- < Link href = { `/${ params . locale } /blog` } className = "cursor-pointer" >
127+ < Link href = { `/${ locale } /blog` } className = "cursor-pointer" >
133128 < Button variant = "outline" size = "sm" >
134129 { t . blog . backToBlog }
135130 </ Button >
@@ -145,7 +140,7 @@ export default async function BlogPostPage({
145140 key = { translation . locale }
146141 href = { `/${ translation . locale } /blog/${ translation . slug } ` }
147142 className = { `text-sm px-2 py-1 rounded cursor-pointer ${
148- translation . locale === params . locale
143+ translation . locale === locale
149144 ? 'bg-primary text-primary-foreground'
150145 : 'bg-secondary text-secondary-foreground hover:bg-secondary/80'
151146 } `}
0 commit comments