"use client"; import { useState, useEffect } from "react"; import { getArticleCategories, ArticleCategory, } from "@/service/categories/article-categories"; import { useTranslations } from "next-intl"; import { RevealR } from "../ui/RevealR"; export default function Category() { const t = useTranslations("MediaUpdate"); const [categories, setCategories] = useState([]); const [loading, setLoading] = useState(true); // Fetch article categories useEffect(() => { async function fetchCategories() { try { const response = await getArticleCategories(); if (response?.data?.success && response.data.data) { // Filter hanya kategori yang aktif dan published const activeCategories = response.data.data.filter( (category: ArticleCategory) => category.isActive && category.isPublish, ); setCategories(activeCategories); } } catch (error) { console.error("Error fetching article categories:", error); // Fallback to static categories if API fails setCategories([]); } finally { setLoading(false); } } fetchCategories(); }, []); // Fallback categories jika API gagal atau tidak ada data const fallbackCategories = [ "PON XXI", "OPERASI KETUPAT 2025", "HUT HUMAS KE-74", "OPERASI ZEBRA 2025", "OPERASI MANTAP PRAJA & PILKADA 2024", "PERS RILIS", "LIPUTAN KEGIATAN", "UNGKAP KASUS", "INFOGRAFIS", "SEPUTAR PRESTASI", ]; const displayCategories = categories.length > 0 ? categories : fallbackCategories; return (

{loading ? t("loadCategory") : `${displayCategories.length} ${t("category")}`}

{loading ? ( // Loading skeleton
{Array.from({ length: 10 }).map((_, index) => (
))}
) : (
{displayCategories.map((category, index) => { // Handle both API data and fallback data const categoryTitle = typeof category === "string" ? category : category.title; const categorySlug = typeof category === "string" ? category.toLowerCase().replace(/\s+/g, "-") : category.slug; return ( ); })}
)}
); }