fix: restore individual tag route
This commit is contained in:
		
							
								
								
									
										32
									
								
								app/tags/[tag]/page.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								app/tags/[tag]/page.tsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| import { slug } from 'github-slugger' | ||||
| import { getAllTags, allCoreContent } from 'pliny/utils/contentlayer' | ||||
| import siteMetadata from '@/data/siteMetadata' | ||||
| import ListLayout from '@/layouts/ListLayout' | ||||
| import { allBlogs } from 'contentlayer/generated' | ||||
| import { genPageMetadata } from 'app/seo' | ||||
| import { Metadata } from 'next' | ||||
|  | ||||
| export async function generateMetadata({ params }: { params: { tag: string } }): Promise<Metadata> { | ||||
|   const tag = params.tag | ||||
|   return genPageMetadata({ title: tag, description: `${siteMetadata.title} ${tag} tagged content` }) | ||||
| } | ||||
|  | ||||
| export const generateStaticParams = async () => { | ||||
|   const tags = await getAllTags(allBlogs) | ||||
|   const paths = Object.keys(tags).map((tag) => ({ | ||||
|     tag: tag, | ||||
|   })) | ||||
|   return paths | ||||
| } | ||||
|  | ||||
| export default function TagPage({ params }: { params: { tag: string } }) { | ||||
|   const { tag } = params | ||||
|   // Capitalize first letter and convert space to dash | ||||
|   const title = tag[0].toUpperCase() + tag.split(' ').join('-').slice(1) | ||||
|   const filteredPosts = allCoreContent( | ||||
|     allBlogs.filter( | ||||
|       (post) => post.draft !== true && post.tags && post.tags.map((t) => slug(t)).includes(tag) | ||||
|     ) | ||||
|   ) | ||||
|   return <ListLayout posts={filteredPosts} title={title} /> | ||||
| } | ||||
| @@ -1,8 +1,7 @@ | ||||
| import { getAllTags } from 'pliny/utils/contentlayer' | ||||
| import Link from '@/components/Link' | ||||
| // import { PageSEO } from '@/components/SEO' | ||||
| import Tag from '@/components/Tag' | ||||
| import { kebabCase } from 'pliny/utils/kebabCase' | ||||
| import { slug } from 'github-slugger' | ||||
| import { allBlogs } from 'contentlayer/generated' | ||||
| import { genPageMetadata } from 'app/seo' | ||||
|  | ||||
| @@ -13,7 +12,6 @@ export default async function Page() { | ||||
|   const sortedTags = Object.keys(tags).sort((a, b) => tags[b] - tags[a]) | ||||
|   return ( | ||||
|     <> | ||||
|       {/* <PageSEO title={`Tags - ${siteMetadata.author}`} description="Things I blog about" /> */} | ||||
|       <div className="flex flex-col items-start justify-start divide-y divide-gray-200 dark:divide-gray-700 md:mt-24 md:flex-row md:items-center md:justify-center md:space-x-6 md:divide-y-0"> | ||||
|         <div className="space-x-2 pb-8 pt-6 md:space-y-5"> | ||||
|           <h1 className="text-3xl font-extrabold leading-9 tracking-tight text-gray-900 dark:text-gray-100 sm:text-4xl sm:leading-10 md:border-r-2 md:px-6 md:text-6xl md:leading-14"> | ||||
| @@ -27,7 +25,7 @@ export default async function Page() { | ||||
|               <div key={t} className="mb-2 mr-5 mt-2"> | ||||
|                 <Tag text={t} /> | ||||
|                 <Link | ||||
|                   href={`/tags/${kebabCase(t)}`} | ||||
|                   href={`/tags/${slug(t)}`} | ||||
|                   className="-ml-2 text-sm font-semibold uppercase text-gray-600 dark:text-gray-300" | ||||
|                   aria-label={`View posts tagged ${t}`} | ||||
|                 > | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| import Link from 'next/link' | ||||
| import { kebabCase } from 'pliny/utils/kebabCase' | ||||
|  | ||||
| import { slug } from 'github-slugger' | ||||
| interface Props { | ||||
|   text: string | ||||
| } | ||||
| @@ -8,7 +7,7 @@ interface Props { | ||||
| const Tag = ({ text }: Props) => { | ||||
|   return ( | ||||
|     <Link | ||||
|       href={`/tags/${kebabCase(text)}`} | ||||
|       href={`/tags/${slug(text)}`} | ||||
|       className="mr-3 text-sm font-medium uppercase text-primary-500 hover:text-primary-600 dark:hover:text-primary-400" | ||||
|     > | ||||
|       {text.split(' ').join('-')} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user