import { getAnalysisQueue } from "@/features/admin/actions/analysis"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Video, Clock, CheckCircle2, AlertCircle, Play, ArrowRight } from "lucide-react"; import Link from "next/link"; import { formatDistanceToNow } from "date-fns"; export const metadata = { title: "Video Hub | Vault Admin", }; export default async function AnalysisQueuePage(props: { searchParams: Promise<{ status?: string }>; }) { const searchParams = await props.searchParams; const status = searchParams.status; const queue = await getAnalysisQueue(status); const getStatusColor = (status: string) => { switch (status) { case 'pending_analysis': return 'bg-amber-500/10 text-amber-500 border-amber-500/20'; case 'in_progress': return 'bg-blue-500/10 text-blue-500 border-blue-500/20'; case 'awaiting_approval': return 'bg-emerald-500/10 text-emerald-500 border-emerald-500/20'; default: return 'bg-slate-500/10 text-slate-500 border-slate-500/20'; } }; const getStatusLabel = (status: string) => { switch (status) { case 'pending_analysis': return 'In Intake'; case 'in_progress': return 'In Pipeline'; case 'awaiting_approval': return 'Ready for Review'; default: return status; } }; return (
Dashboard / Video Hub

Video Hub

Manage video content submitted for AI product discovery.

{status && ( Filtering by: {getStatusLabel(status)} )}
{queue.length === 0 ? ( Queue is empty No videos currently require analysis review. ) : ( queue.map((video) => (
{video.title} {video.scanStatus === 'in_progress' && (
Analyzing...
)}

{video.title}

{getStatusLabel(video.scanStatus)}
{video.channel?.channelName} {formatDistanceToNow(new Date(video.createdAt))} ago
{video.scanStatus === 'awaiting_approval' && (
Ready for Approval
)}
)) )}
); }