'use client'; import { useEffect, useState } from 'react'; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import Link from "next/link" import strings from "@/strings.json" import { formatDistanceToNow, format } from 'date-fns' export default function CategorySlug() { const [posts, setPosts] = useState([]); const [error, setError] = useState(''); const [category, setCategory] = useState('Category View'); // TODO: needs a better title const [loading, setLoading] = useState(true); useEffect(() => { console.log("[i] Fetching post list..."); (async () => { try { const catReq = await fetch(`http://localhost:3001/api/categories/fetchList`, { method: 'GET', }); const postReq = await fetch(`http://localhost:3001/api/posts/fetchList`, { method: 'GET', }); if (!catReq.ok) { throw new Error(`Failed to fetch category list: ${catReq.status}`); } if (!postReq.ok) { throw new Error(`Failed to fetch post list: ${postReq.status}`); } const catData = await catReq.json(); const postData = await postReq.json(); if (!catData) { setError('Failed to fetch category list'); } else { console.log("[✓] Fetched categories"); const slug = window.location.pathname.split('/').slice(-1)[0]; const category = catData.categories.find((cat: { slug: string }) => cat.slug === slug); if (category) { console.log(`[✓] Found category: ${category.name}`); setCategory(category.name); if (postData.success === false) { if (postData.message) { throw new Error(postData.message); } else { throw new Error('Unknown error occurred'); } } else { const sortedPosts = postData.posts.sort((a, b) => b.date - a.date); setPosts(sortedPosts); } } else { setError('Could not find requested category'); throw new Error(`Category with slug "${slug}" not found`); } } } catch (error) { console.error('[!] Error fetching post list:', error); setError('Failed to fetch post list. Please try again later.'); } finally { setLoading(false); } })(); }, []); const formatDate = (timestamp) => { const date = new Date(timestamp * 1000); const now = new Date(); if (date.getFullYear() !== now.getFullYear()) { return format(date, 'MM/DD/YYYY'); } else { return formatDistanceToNow(date, { addSuffix: true }); } }; return (
{strings.recentPostsPublishedOnLabel} {formatDate(post.date)}