diff --git a/src/components/dashboards/DashboardClient.tsx b/src/components/dashboards/DashboardClient.tsx index 5128d4d..8b43292 100644 --- a/src/components/dashboards/DashboardClient.tsx +++ b/src/components/dashboards/DashboardClient.tsx @@ -16,11 +16,11 @@ import { } from "@/src/app/dashboard/lib/data"; import { ModelInfoSkeleton } from "../skeletons/ModelInfoSkeleton"; import { ModelInfo } from "./ModelInfo"; -import { SentimentAnalyzer } from "./SentimentAnalyzer"; import { BrandFilter } from "./BrandFilter"; import { ReviewTable } from "./ReviewTable"; import { SentimentChart, TrendChart, WordCloud } from "@/src/utils/dImports"; import { useDashboards } from "@/src/hooks/useDashboard"; +import SentimentForm from "./SentimentAnalyzer"; export default function DashboardClient() { const { @@ -136,7 +136,7 @@ export default function DashboardClient() {
- +
diff --git a/src/components/dashboards/ReviewTable.tsx b/src/components/dashboards/ReviewTable.tsx index 29c8e19..ff91e82 100644 --- a/src/components/dashboards/ReviewTable.tsx +++ b/src/components/dashboards/ReviewTable.tsx @@ -8,7 +8,6 @@ import { } from "../../components/ui/table"; import { ReviewTableProps } from "@/src/types"; import getSentimentBadge from "./SentimentBadge"; -import renderStars from "./RenderStars"; export function ReviewTable({ reviews }: ReviewTableProps) { return ( @@ -48,7 +47,7 @@ export function ReviewTable({ reviews }: ReviewTableProps) {

- {renderStars(review.rating)} + {/* {renderStars(review.rating)} */} {getSentimentBadge(review.sentiment)} diff --git a/src/components/dashboards/SentimentAnalyzer.tsx b/src/components/dashboards/SentimentAnalyzer.tsx index c9a4ee4..f2216ca 100644 --- a/src/components/dashboards/SentimentAnalyzer.tsx +++ b/src/components/dashboards/SentimentAnalyzer.tsx @@ -1,10 +1,8 @@ -import { Button } from "../../components/ui/button"; -import { Textarea } from "../../components/ui/textarea"; -import { Badge } from "../../components/ui/badge"; -import { cn } from "@/lib/utils"; -import { Loader2, Send, Sparkles } from "lucide-react"; +"use client"; + +import { Send, Loader2, AlertCircle, Sparkles } from "lucide-react"; import { motion, AnimatePresence } from "framer-motion"; -import { Input } from "../ui/input"; +import { cn } from "@/lib/utils"; import { Combobox, ComboboxContent, @@ -14,25 +12,30 @@ import { ComboboxList, } from "../ui/combobox"; import { Item, ItemContent, ItemDescription, ItemTitle } from "../ui/item"; -import { useSentiment } from "@/src/hooks/useSentiment"; +import { Input } from "../ui/input"; +import { Textarea } from "../ui/textarea"; +import { Button } from "../ui/button"; +import { Badge } from "../ui/badge"; +import { getSentimentDisplay } from "@/src/utils/datas"; +import { useSentimentForm } from "@/src/hooks/useSentimentForm"; -export function SentimentAnalyzer() { +export default function SentimentForm() { const { selectedModel, - setSelectedModel, - text, - setText, - laptopName, - setLaptopName, - isAnalyzing, - analyzeText, - result, - getSentimentDisplay, searchQuery, - setSearchQuery, + laptopName, + text, + isAnalyzing, + result, filteredItems, isFormValid, - } = useSentiment(); + error, + analyzeText, + setSelectedModel, + setSearchQuery, + setLaptopName, + setText, + } = useSentimentForm(); return (
@@ -40,17 +43,29 @@ export function SentimentAnalyzer() {

Analisis Sentimen Real-time

+

Masukkan ulasan produk laptop untuk menganalisis sentimennya menggunakan model XGBoost

-
+ e.preventDefault()}>
+ {error && ( +
+ + {error} +
+ )} +
setSelectedModel(val)} + onValueChange={(value) => { + if (value !== null) { + setSelectedModel(value); + } + }} itemToStringValue={(model) => model?.label ?? ""} > setSearchQuery(e.target.value)} /> - - + {filteredItems.length === 0 && ( Model "{searchQuery}" tidak ditemukan. )} - {filteredItems.map((model) => ( {model.label} - - {model.desc} ({model.code}) + + {model.desc} @@ -91,14 +104,14 @@ export function SentimentAnalyzer() { setLaptopName(e.target.value)} />