'use client'; import { memo, type ReactNode } from 'react'; import { Download, Image as ImageIcon, Loader2, Play, Trash2, Volume2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { cn } from '@/lib/utils'; import type { VideoAsset } from '@/components/video-page/types'; interface AssetListSectionProps { assets: VideoAsset[]; isLoadingAssets: boolean; focusedAssetId: string | null; bunnyProcessingByAssetId: Record; bunnyReadyByAssetId: Record; activeDownloadAssetId: string | null; activeDeleteAssetId: string | null; canDownloadAssets: boolean; hasMoreAssets: boolean; isLoadingMoreAssets: boolean; onViewAsset: (asset: VideoAsset) => void; onDownloadAsset: (asset: VideoAsset, preference?: 'original' | 'compressed') => void; onDeleteAsset: (assetId: string) => void; onLoadMoreAssets: () => void; renderAssetPreview: (asset: VideoAsset) => ReactNode; } export const AssetListSection = memo(function AssetListSection({ assets, isLoadingAssets, focusedAssetId, bunnyProcessingByAssetId, bunnyReadyByAssetId, activeDownloadAssetId, activeDeleteAssetId, canDownloadAssets, hasMoreAssets, isLoadingMoreAssets, onViewAsset, onDownloadAsset, onDeleteAsset, onLoadMoreAssets, renderAssetPreview, }: AssetListSectionProps) { if (isLoadingAssets) { return (
Loading assets...
); } if (assets.length === 0) { return (
No assets uploaded yet.
); } return (
{assets.map((asset) => { const isBunnyProcessing = asset.provider === 'BUNNY' && !!bunnyProcessingByAssetId[asset.id] && !bunnyReadyByAssetId[asset.id]; return (

{asset.displayName}

{isBunnyProcessing ? ( Processing ) : null}

{asset.uploadedByUser?.name || asset.uploadedByGuestName || 'Unknown'} • {new Date(asset.createdAt).toLocaleDateString()}

{canDownloadAssets && asset.provider !== 'YOUTUBE' && ( asset.provider === 'BUNNY' && asset.kind !== 'AUDIO' ? ( onDownloadAsset(asset, 'original')}> Original onDownloadAsset(asset, 'compressed')}> Compressed ) : ( ) )} {asset.canDelete && ( )}
); })} {hasMoreAssets ? ( ) : null}
); });