diff --git a/app/blogs/[slug]/page.tsx b/app/blogs/[slug]/page.tsx index bdfcb68..4cb3d60 100644 --- a/app/blogs/[slug]/page.tsx +++ b/app/blogs/[slug]/page.tsx @@ -10,6 +10,7 @@ import { PortableText } from "@portabletext/react"; type Blog = { _id: string; title: string; + slug: { current: string }; mainImage?: { asset: { url: string } }; author?: { name: string }; body?: any; // PortableText content @@ -17,23 +18,23 @@ type Blog = { category?: string; }; -async function getBlogs(): Promise { - const query = `*[_type=="blog"]|order(publishedAt desc)[0...50]{ +async function getBlogBySlug(slug: string): Promise { + const query = `*[_type=="blog" && slug.current == $slug][0]{ _id, title, + slug, "mainImage": mainImage.asset->{url}, "author": author-> { name }, body, publishedAt, category }`; - return client.fetch(query); + return client.fetch(query, { slug }); } export default function BlogDetailPage() { const params = useParams(); const slug = params.slug as string; - const numericId = parseInt(slug, 10); const [blog, setBlog] = useState(null); const [loading, setLoading] = useState(true); @@ -46,10 +47,10 @@ export default function BlogDetailPage() { const fetchBlog = async () => { try { setLoading(true); - const blogs = await getBlogs(); + const fetchedBlog = await getBlogBySlug(slug); - if (numericId > 0 && numericId <= blogs.length) { - setBlog(blogs[numericId - 1]); + if (fetchedBlog) { + setBlog(fetchedBlog); } else { setError("Blog not found."); } @@ -61,7 +62,7 @@ export default function BlogDetailPage() { } }; fetchBlog(); - }, [numericId]); + }, [slug]); if (loading) return

Loading blog...

; if (error) return

{error}

; diff --git a/app/blogs/page.tsx b/app/blogs/page.tsx index 8f35ff5..0edac55 100644 --- a/app/blogs/page.tsx +++ b/app/blogs/page.tsx @@ -8,6 +8,7 @@ import { useState, useEffect } from "react"; type Blog = { _id: string; title: string; + slug: { current: string }; mainImage?: { asset: { url: string } }; author?: { name: string }; excerpt?: string; @@ -19,6 +20,7 @@ async function getBlogs(): Promise { const query = `*[_type=="blog"]|order(publishedAt desc)[0...50]{ _id, title, + slug, "mainImage": mainImage.asset->{url}, "author": author-> { name }, excerpt, @@ -59,30 +61,27 @@ export default function BlogsPage() {

Blogs

- {blogs.map((blog, index) => { - const numericId = index + 1; // Numeric ID - return ( -
- {blog.mainImage?.url && ( -
- {blog.title} -
- )} -
-

{blog.title}

- {blog.excerpt &&

{blog.excerpt}

} -
- - View Blog - -
+ {blogs.map((blog) => ( +
+ {blog.mainImage?.url && ( +
+ {blog.title}
-
- ); - })} + )} +
+

{blog.title}

+ {blog.excerpt &&

{blog.excerpt}

} +
+ + View Blog + +
+
+
+ ))}
);