personal-site/app/blog/page.tsx

81 lines
3.1 KiB
TypeScript
Raw Normal View History

2023-10-24 17:59:00 +00:00
/////////////////////////////////////////////
//* IMPORTS
/////////////////////////////////////////////
import React from "react";
import { Metadata } from "next";
const datasquirel = require("datasquirel");
2024-10-01 15:17:51 +00:00
import { redirect } from "next/navigation";
2023-10-24 17:59:00 +00:00
/////////////////////////////////////////////
//* Metadata
/////////////////////////////////////////////
export const metadata: Metadata = {
title: "Blog posts | Tben.me",
description: "Tech talks and tutorials by Tben",
};
2024-01-01 01:49:58 +00:00
export const revalidate = 3600;
2023-10-24 17:59:00 +00:00
/////////////////////////////////////////////
//* Main Function
/////////////////////////////////////////////
/**
* Blog page index
* ==============================================================================
*/
export default async function BlogIndex() {
2024-10-01 15:17:51 +00:00
try {
//* Data fetching
/////////////////////////////////////////////
const postsResponse = await datasquirel.get({
key: process.env.DATASQUIREL_API_KEY,
db: process.env.DB_NAME,
query: "select title,slug,excerpt,date_created from blog_posts limit 10",
});
2023-10-24 17:59:00 +00:00
2024-10-01 15:17:51 +00:00
const posts = postsResponse?.success ? postsResponse.payload : [];
2023-10-24 17:59:00 +00:00
2024-10-01 15:17:51 +00:00
//* Main Function Return
/////////////////////////////////////////////
return (
<React.Fragment>
<div className="flex flex-col items-start max-w-6xl w-full">
<h1 className="mb-8">My Blog</h1>
<div className="flex flex-col items-start w-full gap-4">
{posts.map(
(
post: {
slug: string;
title: string;
excerpt: string;
date_created: string;
},
index: number
) => (
<a
key={index}
href={`/blog/${post.slug}`}
className="flex flex-col items-start gap-2 w-full hover:bg-blue-600 border border-solid border-white/20 p-8 transition-all bg-primary/10"
>
<h2 className="m-0">{post.title}</h2>
<span className="opacity-80">
{post.excerpt}
</span>
<span className="text-sm opacity-50">
{post.date_created.substring(0, 24)}
</span>
</a>
)
)}
</div>
2023-10-24 17:59:00 +00:00
</div>
2024-10-01 15:17:51 +00:00
</React.Fragment>
);
2023-10-24 17:59:00 +00:00
2024-10-01 15:17:51 +00:00
/** ********************************************** */
} catch (error) {
return redirect("/");
}
2023-10-24 17:59:00 +00:00
}