"use client"; import React, { useState } from "react"; import { Card } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { ShieldAlert, Filter, Search, RotateCcw } from "lucide-react"; import { AdminDetectionCard } from "./admin-detection-card"; import { AdminCorrectionModal } from "./admin-correction-modal"; import { AdminMarkIncorrectModal } from "./admin-mark-incorrect-modal"; interface AdminDetection { detection: { id: string; objectName: string; category: string; confidenceScore: number; status: string; frameTimestamp: number; createdAt: Date; }; video: { id: string; title: string; thumbnailUrl: string; }; channel: { creatorId: string; channelName: string; }; marketplaceMatches: any[]; pledgeCount?: number; } interface AdminModerationQueueProps { initialDetections: AdminDetection[]; initialMinPledges?: number; initialCategory?: string; initialMinConfidence?: number; } export function AdminModerationQueue({ initialDetections, initialMinPledges = 0, initialCategory = "all", initialMinConfidence = 0 }: AdminModerationQueueProps) { const [detections, setDetections] = useState(initialDetections); const [filterCategory, setFilterCategory] = useState(initialCategory); const [minConfidence, setMinConfidence] = useState(initialMinConfidence); const [minPledges, setMinPledges] = useState(initialMinPledges); const filteredDetections = detections.filter(d => (filterCategory === "all" || d.detection.category === filterCategory) && d.detection.confidenceScore >= minConfidence && (d.pledgeCount || 0) >= minPledges ); const categories = Array.from(new Set(initialDetections.map(d => d.detection.category))); const removeDetection = (id: string) => { setDetections(prev => prev.filter(d => d.detection.id !== id)); }; return (
{/* Filters Bar */}
setMinConfidence(parseFloat(e.target.value))} className="w-[150px]" />
setMinPledges(parseInt(e.target.value))} className="w-[150px] accent-emerald-500" />
{/* Grid */} {filteredDetections.length > 0 ? (
{filteredDetections.map((d) => ( removeDetection(d.detection.id)} /> ))}
) : (

Admin Queue Clear

No flagged items found with current filters. Good job on the quality control!

)}
); }