Update lib/blog.ts
This commit is contained in:
parent
efdedb0697
commit
3de1013887
|
|
@ -0,0 +1,74 @@
|
||||||
|
import glob from "fast-glob";
|
||||||
|
|
||||||
|
interface Blog {
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
author: {
|
||||||
|
name: string;
|
||||||
|
src: string;
|
||||||
|
};
|
||||||
|
date: string;
|
||||||
|
image?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface BlogWithSlug extends Blog {
|
||||||
|
slug: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hardcoded blog data to avoid MDX export issues at build time
|
||||||
|
// This prevents "createContext only works in Client Components" errors
|
||||||
|
const blogData: Record<string, Blog> = {
|
||||||
|
"refactoring-ui-book-review": {
|
||||||
|
author: { name: "Alice Johnson", src: "/avatar.webp" },
|
||||||
|
date: "2023-11-15",
|
||||||
|
title: "Refactoring UI Book Review",
|
||||||
|
description: "A comprehensive review of the popular design book 'Refactoring UI' and its practical applications in modern web development.",
|
||||||
|
image: "https://images.unsplash.com/photo-1506880018603-83d5b814b5a6?w=800&h=400&fit=crop"
|
||||||
|
},
|
||||||
|
"rust-vs-go-for-backend": {
|
||||||
|
author: { name: "Bob Smith", src: "/avatar.webp" },
|
||||||
|
date: "2023-11-10",
|
||||||
|
title: "Rust vs Go for Backend Development",
|
||||||
|
description: "An in-depth comparison of Rust and Go for building scalable backend services.",
|
||||||
|
image: "https://images.unsplash.com/photo-1461749280684-dccba630e2f6?w=800&h=400&fit=crop"
|
||||||
|
},
|
||||||
|
"best-react-libraries-2024": {
|
||||||
|
author: { name: "Charlie Davis", src: "/avatar.webp" },
|
||||||
|
date: "2023-11-05",
|
||||||
|
title: "Best React Libraries in 2024",
|
||||||
|
description: "Discover the most useful React libraries and tools that will boost your productivity in 2024.",
|
||||||
|
image: "https://images.unsplash.com/photo-1633356122544-f134324a6cee?w=800&h=400&fit=crop"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export async function getAllBlogs() {
|
||||||
|
// Still use glob to find existing blog files
|
||||||
|
let blogFilenames = await glob("*/page.mdx", {
|
||||||
|
cwd: "./app/blog",
|
||||||
|
});
|
||||||
|
|
||||||
|
// Map filenames to blog data
|
||||||
|
const blogs = blogFilenames.map(filename => {
|
||||||
|
const slug = filename.replace(/(\/page)?\.mdx$/, "");
|
||||||
|
const blog = blogData[slug];
|
||||||
|
|
||||||
|
if (!blog) {
|
||||||
|
// Fallback data if blog not found in hardcoded data
|
||||||
|
return {
|
||||||
|
slug,
|
||||||
|
title: slug.replace(/-/g, " ").replace(/\b\w/g, l => l.toUpperCase()),
|
||||||
|
description: "Blog article",
|
||||||
|
author: { name: "Author", src: "/avatar.webp" },
|
||||||
|
date: new Date().toISOString().split('T')[0],
|
||||||
|
image: ""
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
slug,
|
||||||
|
...blog
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return blogs.sort((a, z) => +new Date(z.date) - +new Date(a.date));
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue