"use client";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "../../components/ui/table";
import { Badge } from "../../components/ui/badge";
import { EllipsisVertical, Inbox, Loader2, Pencil, Trash } from "lucide-react";
import getSentimentBadge from "./SentimentBadge";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "../ui/dropdown-menu";
import { useReviewTable } from "@/src/hooks/useReviewTable";
import {
Pagination,
PaginationContent,
PaginationItem,
PaginationLink,
PaginationNext,
PaginationPrevious,
} from "../ui/pagination";
import { useSearchParams } from "next/navigation";
export function ReviewTable() {
const searchParams = useSearchParams();
const selectedBrand = searchParams.get("brand");
const { currentData, isLoading, pagination } = useReviewTable(
10,
selectedBrand,
);
const { currentPage, totalPages, nextPage, prevPage, goToPage } = pagination;
if (isLoading) {
return (
);
}
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 || "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)}%`
: "-"}
{/*
Edit
Delete
*/}
))
)}
{totalPages > 1 && (
{
e.preventDefault();
prevPage();
}}
className={
currentPage === 1
? "pointer-events-none opacity-50"
: "cursor-pointer"
}
/>
{[...Array(totalPages)].map((_, i) => (
{
e.preventDefault();
goToPage(i + 1);
}}
isActive={currentPage === i + 1}
>
{i + 1}
))}
{
e.preventDefault();
nextPage();
}}
className={
currentPage === totalPages
? "pointer-events-none opacity-50"
: "cursor-pointer"
}
/>
)}
);
}