"use client"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "../../components/ui/table"; import { Badge } from "../../components/ui/badge"; import { Inbox, Loader2 } from "lucide-react"; import getSentimentBadge from "./SentimentBadge"; import { useReviewTable } from "@/src/hooks/useReviewTable"; import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "../ui/pagination"; import { useSearchParams } from "next/navigation"; import { getVisiblePages } from "@/src/utils/datas"; export function ReviewTable() { const searchParams = useSearchParams(); const selectedBrand = searchParams.get("brand"); const { currentData, isLoading, pagination } = useReviewTable( 10, selectedBrand, ); const { currentPage, totalPages } = pagination; const visiblePage = getVisiblePages({ totalPages, currentPage }); if (isLoading) { return (

Memuat data ulasan...

); } return (
Produk Ulasan & Kata Kunci Tanggal Sentimen Confidence Score {currentData.length === 0 ? (

Belum ada data

Belum ada ulasan yang dianalisis oleh sistem.

) : ( currentData.map((review, index) => (
{review.product?.brand?.name || "Generic"}
{review.product?.name || "Unknown Product"}

{review.content}

{review.keywords && review.keywords.length > 0 && (
{review.keywords.slice(0, 5).map((k, i) => ( {k} ))}
)}
{review.createdAt ? new Date(review.createdAt).toLocaleDateString( "id-ID", { day: "numeric", month: "short", year: "numeric", }, ) : "-"} {getSentimentBadge(review.sentiment ?? null)} {review.confidenceScore ? `${(review.confidenceScore * 100).toFixed(1)}%` : "-"}
)) )}
{totalPages > 1 && (
{ e.preventDefault(); pagination.prevPage(); }} className={ currentPage === 1 ? "pointer-events-none opacity-50" : "cursor-pointer hover:bg-[#F8FBFF] hover:text-primary" } /> {visiblePage.map((page, index) => ( {page === "..." ? ( ) : ( { e.preventDefault(); pagination.goToPage(page as number); }} isActive={currentPage === page} > {page} )} ))} { e.preventDefault(); pagination.nextPage(); }} className={ currentPage === totalPages ? "pointer-events-none opacity-50" : "cursor-pointer hover:bg-primary hover:text-card" } />
)}
); }