"use client"; import { useEffect, useState } from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; // pastikan path sesuai import { format } from "date-fns"; import { id } from "date-fns/locale"; import { Badge } from "@/components/ui/badge"; import { listDataImage } from "@/service/content"; import { Button } from "../ui/button"; import { getCookiesDecrypt } from "@/lib/utils"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import { useParams, useRouter, useSearchParams } from "next/navigation"; import { ChevronDown, Edit, Eye, Search, Trash, View } from "lucide-react"; import { InputGroup, InputGroupText } from "../ui/input-group"; import { Input } from "../ui/input"; import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger, } from "../ui/dropdown-menu"; import { Label } from "../ui/label"; import TablePagination from "./table-pagination"; import { table } from "console"; export default function ImageTable() { const [dataTable, setDataTable] = useState([]); const [loading, setLoading] = useState(false); const router = useRouter(); const searchParams = useSearchParams(); const params = useParams(); const locale = params?.locale; const MySwal = withReactContent(Swal); const [totalData, setTotalData] = useState(1); const [showData, setShowData] = useState("10"); const [page, setPage] = useState(1); const [totalPage, setTotalPage] = useState(1); const [search, setSearch] = useState(""); const userId = getCookiesDecrypt("uie"); const userLevelId = getCookiesDecrypt("ulie"); const [categories, setCategories] = useState([]); const [selectedCategories, setSelectedCategories] = useState([]); const [categoryFilter, setCategoryFilter] = useState(""); const [statusFilter, setStatusFilter] = useState([]); const [startDate, setStartDate] = useState(""); const [endDate, setEndDate] = useState(""); const [filterByCreator, setFilterByCreator] = useState(""); const [filterBySource, setFilterBySource] = useState(""); const [filterByCreatorGroup, setFilterByCreatorGroup] = useState(""); const roleId = getCookiesDecrypt("urie"); useEffect(() => { fetchData(); }, [page, showData, search, categoryFilter, statusFilter]); async function fetchData() { const formattedStartDate = startDate ? format(new Date(startDate), "yyyy-MM-dd") : ""; const formattedEndDate = endDate ? format(new Date(endDate), "yyyy-MM-dd") : ""; try { const isForSelf = Number(roleId) === 4; setLoading(true); const res = await listDataImage( showData, page - 1, isForSelf, !isForSelf, categoryFilter, statusFilter, statusFilter?.sort().join(",").includes("1") ? userLevelId : "", filterByCreator, filterBySource, formattedStartDate, formattedEndDate, search, filterByCreatorGroup, locale == "en" ); const contentData = res?.data?.data?.content || []; const formattedData = contentData.map((item: any, index: number) => ({ no: index + 1, ...item, })); setDataTable(formattedData); } catch (error) { console.error("Error fetching data:", error); } finally { setLoading(false); } } useEffect(() => { fetchData(); }, []); const getStatusBadge = (status: number) => { switch (status) { case 1: return Done; case 2: return Queue; case 3: return Trigger Error; default: return Unknown; } }; // const handleSearch = (e: React.ChangeEvent) => { // setSearch(e.target.value); // dataTable.getColumn("judul")?.setFilterValue(e.target.value); // }; const handleSearchFilterBySource = ( e: React.ChangeEvent ) => { const value = e.target.value; setFilterBySource(value); fetchData(); }; function handleStatusCheckboxChange(value: any) { setStatusFilter((prev: any) => prev.includes(value) ? prev.filter((status: any) => status !== value) : [...prev, value] ); } const handleSearchFilterByCreator = ( e: React.ChangeEvent ) => { const value = e.target.value; setFilterByCreator(value); fetchData(); }; const handleCheckboxChange = (categoryId: number) => { setSelectedCategories((prev: any) => prev.includes(categoryId) ? prev.filter((id: any) => id !== categoryId) : [...prev, categoryId] ); // Perbarui filter kategori setCategoryFilter((prev) => { const updatedCategories = prev.split(",").filter(Boolean).map(Number); const newCategories = updatedCategories.includes(categoryId) ? updatedCategories.filter((id) => id !== categoryId) : [...updatedCategories, categoryId]; return newCategories.join(","); }); }; return (
10 Data 50 Data 100 Data 250 Data

Filter

{/*

Simpan

*/}
{categories.length > 0 ? ( categories.map((category) => (
handleCheckboxChange(category.id)} />
)) ) : (

No categories found.

)}
setStartDate(e.target.value)} className="max-w-sm" />
setEndDate(e.target.value)} className="max-w-sm" />
handleStatusCheckboxChange(1)} />
handleStatusCheckboxChange(2)} />
handleStatusCheckboxChange(3)} />
handleStatusCheckboxChange(4)} />
No Title Category Created At Creator Name Creator Group Status Action {loading ? ( Loading... ) : dataTable.length > 0 ? ( dataTable.map((item: any) => ( {item.no} {item.title} {item.categoryName} {item.createdAt ? format(new Date(item.createdAt), "dd-MM-yyyy HH:mm", { locale: id, }) : "-"} {item.creatorName} {item.creatorGroup} {getStatusBadge(item.status)} )) ) : ( No data found )}
{/* Pagination */}
{/* Info jumlah data */} Page {page} of {totalPage} {/* Navigasi halaman */}
{Array.from({ length: totalPage }, (_, i) => ( ))}
); }