'use client' import { trpc } from '@/lib/trpc/client' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Skeleton } from '@/components/ui/skeleton' import { FileText, Download, ExternalLink } from 'lucide-react' import { toast } from 'sonner' interface MultiWindowDocViewerProps { roundId: string projectId: string } function formatFileSize(bytes: number): string { if (bytes === 0) return '0 B' const k = 1024 const sizes = ['B', 'KB', 'MB', 'GB'] const i = Math.floor(Math.log(bytes) / Math.log(k)) return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i] } function getFileIcon(mimeType: string) { if (mimeType.startsWith('image/')) return '🖼️' if (mimeType.startsWith('video/')) return '🎥' if (mimeType.includes('pdf')) return '📄' if (mimeType.includes('word') || mimeType.includes('document')) return '📝' if (mimeType.includes('sheet') || mimeType.includes('excel')) return '📊' if (mimeType.includes('presentation') || mimeType.includes('powerpoint')) return '📊' return '📎' } export function MultiWindowDocViewer({ roundId, projectId }: MultiWindowDocViewerProps) { const { data: windows, isLoading } = trpc.round.getVisibleWindows.useQuery( { roundId }, { enabled: !!roundId } ) if (isLoading) { return ( ) } if (!windows || windows.length === 0) { return ( Documents Submission windows and uploaded files No submission windows available ) } return ( Documents Files submitted across all windows {windows.map((window: any) => ( {window.name} {window.files && window.files.length > 0 && ( {window.files.length} )} ))} {windows.map((window: any) => ( {!window.files || window.files.length === 0 ? ( No files uploaded ) : ( {window.files.map((file: any) => ( {getFileIcon(file.mimeType || '')} {file.filename} {file.mimeType?.split('/')[1]?.toUpperCase() || 'FILE'} {file.size && ( {formatFileSize(file.size)} )} Download Preview ))} )} ))} ) }
No submission windows available
No files uploaded
{file.filename}