"use client"; import { Suspense, useEffect, useState } from "react"; import { brandData, reviewData, sentimentDistribution, trendData, wordCloudData, } from "./lib/data"; import { Header } from "../../components/dashboards/Header"; import { MessageSquareText, Minus, ThumbsDown, ThumbsUp, TrendingUp, } from "lucide-react"; import { StatCard } from "../../components/dashboards/StatCard"; import { TrendChart } from "../../components/dashboards/TrendChart"; import { SentimentChart } from "../../components/dashboards/SentimentChart"; import { WordCloud } from "../../components/dashboards/WordCloud"; import { ModelInfo } from "../../components/dashboards/ModelInfo"; import { SentimentAnalyzer } from "../../components/dashboards/SentimentAnalyzer"; import { BrandFilter } from "../../components/dashboards/BrandFilter"; import { ReviewTable } from "../../components/dashboards/ReviewTable"; import { getClassificationReport } from "./lib/actions"; import { ModelDB } from "@/src/types"; import { ModelInfoSkeleton } from "../../components/skeletons/ModelInfoSkeleton"; export default function DashboardPage() { const [selectedBrand, setSelectedBrand] = useState(null); const [loading, setLoading] = useState(true); const [modelData, setModelData] = useState([]); const totalReviews = sentimentDistribution.reduce( (sum, s) => sum + s.value, 0, ); const positiveCount = sentimentDistribution.find((s) => s.name === "Positif")?.value || 0; const negativeCount = sentimentDistribution.find((s) => s.name === "Negatif")?.value || 0; const neutralCount = sentimentDistribution.find((s) => s.name === "Netral")?.value || 0; const filteredReviews = selectedBrand ? reviewData.filter((r) => r.brand === selectedBrand) : reviewData; useEffect(() => { async function fetchData() { try { const data = await getClassificationReport(); setModelData(data); } catch (error) { console.error("Failed to fetch model data", error); } finally { setLoading(false); } } fetchData(); }, []); return (
{/* Hero Section */}

Analisis Sentimen Ulasan Laptop

Sistem klasifikasi sentimen menggunakan algoritma XGBoost untuk menganalisis ulasan produk laptop pada platform Tokopedia

Akurasi 92.4% XGBoost + TF-IDF Real-time Analysis
{/* Stats Grid */}
{/* Charts Section */}

Tren Sentimen Bulanan

Distribusi Sentimen

{/* Word Cloud & Model Info */}
{/* Slot Kata Kunci */}

Kata Kunci Populer

Kata-kata yang sering muncul dalam ulasan berdasarkan kategori sentimen

{loading ? ( ) : modelData.length > 0 ? ( ) : (
Data model tidak tersedia.
)}
{/* Sentiment Analyzer */}
{/* Reviews Section */}

Ulasan Terbaru

Hasil klasifikasi sentimen ulasan produk laptop

{/* Footer */}
); }