"use client"; import { useState, useEffect } from "react"; import { getPublicClients, PublicClient, } from "@/service/client/public-clients"; type CategoryTabsProps = { selectedCategory: string; onCategoryChange: (category: string) => void; }; export default function CategoryTabs({ selectedCategory, onCategoryChange, }: CategoryTabsProps) { const [clients, setClients] = useState([]); const [loading, setLoading] = useState(true); // ✅ Fetch public clients dari API useEffect(() => { async function fetchClients() { try { const response = await getPublicClients(); if (response?.data?.success && response.data.data) { // 🔹 Filter hanya client aktif (boolean true) const activeClients = response.data.data.filter( (client: PublicClient) => client.isActive === true ); setClients(activeClients); } } catch (error) { console.error("Error fetching public clients:", error); // Fallback ke data statis jika API gagal setClients([]); } finally { setLoading(false); } } fetchClients(); }, []); // 🔹 Fallback jika API gagal const fallbackClients = [ { id: 1, name: "DIV HUMAS POLRI" }, { id: 2, name: "POLDASUMUT" }, { id: 3, name: "POLDAMETROJAYA" }, { id: 4, name: "POLDARIYAD" }, { id: 5, name: "POLDABALI" }, ]; const displayClients = clients.length > 0 ? clients : (fallbackClients as any); // 🔹 Susun kategori: “SEMUA” di awal const categories = ["SEMUA", ...displayClients.map((c: any) => c.name)]; // 🔹 Tampilkan skeleton saat loading if (loading) { return (
{Array.from({ length: 6 }).map((_, idx) => (
))}
); } // 🔹 Render kategori client return (
{categories.map((cat, idx) => ( ))}
); } // "use client"; // import { useState, useEffect } from "react"; // import { getPublicClients, PublicClient } from "@/service/client/public-clients"; // type CategoryTabsProps = { // selectedCategory: string; // onCategoryChange: (category: string) => void; // }; // export default function CategoryTabs({ // selectedCategory, // onCategoryChange, // }: CategoryTabsProps) { // const [clients, setClients] = useState([]); // const [loading, setLoading] = useState(true); // // Fetch public clients // useEffect(() => { // async function fetchClients() { // try { // const response = await getPublicClients(); // if (response?.data?.success && response.data.data) { // setClients(response.data.data); // } // } catch (error) { // console.error("Error fetching public clients:", error); // // Fallback to empty array if API fails // setClients([]); // } finally { // setLoading(false); // } // } // fetchClients(); // }, []); // // Create categories array with "SEMUA" first, then client names // const categories = ["SEMUA", ...clients.map(client => client.name)]; // if (loading) { // return ( //
// {Array.from({ length: 6 }).map((_, idx) => ( //
// ))} //
// ); // } // return ( //
// {categories.map((cat, idx) => ( // // ))} //
// ); // }